mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 19:40:10 +01:00
Add SpecificInst to represent a specific version of a template-dependent instruction (#7726)
Replace `refine_type_action` with `refine_inst_action`, and generate a `specific_inst` instead of an `as_compatible` to represent the specific version of an instruction that's used as an input to a template action. This gives us a place to handle other properties of the instruction that might vary from generic to specific beyond its type, such as its constant value and its expression category. For now, we provide a non-template-dependent constant value to the `specific_inst` in addition to the non-template-dependent type we have traditionally provided. This doesn't seem to matter for any current actions, but sets us up to better handle future actions. The `specific_inst` representation also allows downstream consumers of the instruction to track which specific they should be requesting information from. Providing a correct expression category for `specific_inst` will be handled in a future PR.
This commit is contained in:
+31
-20
@@ -11,19 +11,22 @@
|
||||
#include "toolchain/check/type.h"
|
||||
#include "toolchain/sem_ir/constant.h"
|
||||
#include "toolchain/sem_ir/copy_on_write_block.h"
|
||||
#include "toolchain/sem_ir/generic.h"
|
||||
#include "toolchain/sem_ir/id_kind.h"
|
||||
#include "toolchain/sem_ir/inst.h"
|
||||
#include "toolchain/sem_ir/typed_insts.h"
|
||||
|
||||
namespace Carbon::Check {
|
||||
|
||||
auto PerformAction(Context& context, SemIR::LocId loc_id,
|
||||
SemIR::RefineTypeAction action) -> SemIR::InstId {
|
||||
return AddInst<SemIR::AsCompatible>(
|
||||
auto PerformAction(Context& context, SemIR::SpecificId specific_id,
|
||||
SemIR::LocId loc_id, SemIR::RefineInstAction action)
|
||||
-> SemIR::InstId {
|
||||
return AddInst<SemIR::SpecificInst>(
|
||||
context, loc_id,
|
||||
{.type_id =
|
||||
context.types().GetTypeIdForTypeInstId(action.inst_type_inst_id),
|
||||
.source_id = action.inst_id});
|
||||
{.type_id = GetTypeOfInstInSpecific(context.sem_ir(), specific_id,
|
||||
action.inst_id),
|
||||
.inst_id = action.inst_id,
|
||||
.specific_id = specific_id});
|
||||
}
|
||||
|
||||
static auto OperandDependence(Context& context, SemIR::ConstantId const_id)
|
||||
@@ -125,12 +128,19 @@ static auto OperandDependence(Context& context, SemIR::IdAndKind arg)
|
||||
[&](auto id) { return OperandDependence(context, id); });
|
||||
}
|
||||
|
||||
auto ActionIsPerformable(Context& context, SemIR::Inst action_inst) -> bool {
|
||||
if (auto refine_action = action_inst.TryAs<SemIR::RefineTypeAction>()) {
|
||||
// `RefineTypeAction` can be performed whenever the type is not template-
|
||||
// dependent, even if we don't know the instruction yet.
|
||||
return OperandDependence(context, refine_action->inst_type_inst_id) <
|
||||
SemIR::ConstantDependence::Template;
|
||||
auto ActionIsPerformable(Context& context, SemIR::Inst action_inst,
|
||||
SemIR::SpecificId specific_id) -> bool {
|
||||
if (auto refine_action = action_inst.TryAs<SemIR::RefineInstAction>()) {
|
||||
// `RefineInstAction` is performable once the instruction's type and
|
||||
// constant value are not template-dependent.
|
||||
return OperandDependence(
|
||||
context, GetTypeOfInstInSpecific(context.sem_ir(), specific_id,
|
||||
refine_action->inst_id)) <
|
||||
SemIR::ConstantDependence::Template &&
|
||||
OperandDependence(context, SemIR::GetConstantValueInSpecific(
|
||||
context.sem_ir(), specific_id,
|
||||
refine_action->inst_id)) <
|
||||
SemIR::ConstantDependence::Template;
|
||||
}
|
||||
|
||||
// A form-parameterized action is performable if we can see at least the top
|
||||
@@ -207,25 +217,26 @@ static auto RefineTypedOperand(Context& context, SemIR::LocId loc_id,
|
||||
|
||||
// If the constant value of the instruction is template-dependent and
|
||||
// unattached, replace it with a corresponding attached constant value.
|
||||
if (auto const_id = context.constant_values().GetAttached(inst_id);
|
||||
const_id.is_symbolic() &&
|
||||
auto const_id = context.constant_values().GetAttached(inst_id);
|
||||
if (const_id.is_symbolic() &&
|
||||
!context.constant_values().IsAttached(const_id)) {
|
||||
return GetOrAddInstWithSpecificConstantValue(context, inst_id);
|
||||
}
|
||||
|
||||
// If the type of the action argument is dependent, refine to an instruction
|
||||
// with a concrete type.
|
||||
// If the type or constant value of the action argument is dependent, refine
|
||||
// to an instruction with the type and value from the specific.
|
||||
if (OperandDependence(context, inst.type_id()) ==
|
||||
SemIR::ConstantDependence::Template) {
|
||||
SemIR::ConstantDependence::Template ||
|
||||
OperandDependence(context, const_id) ==
|
||||
SemIR::ConstantDependence::Template) {
|
||||
auto type_inst_id = context.types().GetTypeInstId(inst.type_id());
|
||||
inst_id = AddDependentActionSpliceImpl(
|
||||
context,
|
||||
SemIR::LocIdAndInst(
|
||||
loc_id,
|
||||
SemIR::RefineTypeAction{.type_id = GetSingletonType(
|
||||
SemIR::RefineInstAction{.type_id = GetSingletonType(
|
||||
context, SemIR::InstType::TypeInstId),
|
||||
.inst_id = inst_id,
|
||||
.inst_type_inst_id = type_inst_id}),
|
||||
.inst_id = inst_id}),
|
||||
type_inst_id);
|
||||
}
|
||||
|
||||
|
||||
+41
-11
@@ -15,12 +15,28 @@
|
||||
namespace Carbon::Check {
|
||||
|
||||
namespace Internal {
|
||||
// Computes the function type to use for PerformAction for InstT.
|
||||
// Computes the `SpecificId` parameters to use for PerformAction for InstT.
|
||||
template <typename InstT>
|
||||
using FunctionTypeForPerformAction = std::conditional_t<
|
||||
InstT::Kind.constant_kind() == SemIR::InstConstantKind::InstAction,
|
||||
auto(Context& context, SemIR::LocId loc_id, InstT inst)->SemIR::InstId,
|
||||
auto()->void>;
|
||||
using SpecificParamsForPerformAction =
|
||||
std::conditional_t<InstT::Kind.action_needs_specific_id(),
|
||||
auto(SemIR::SpecificId specific_id)->void, auto()->void>;
|
||||
|
||||
// Computes the function type to use for PerformAction for InstT.
|
||||
template <typename InstT,
|
||||
typename SpecificParams = SpecificParamsForPerformAction<InstT>>
|
||||
struct FunctionTypeForPerformActionImpl {
|
||||
// By default, no PerformAction function.
|
||||
using Type = auto() -> void;
|
||||
};
|
||||
template <typename InstT, typename... SpecificParams>
|
||||
requires(InstT::Kind.constant_kind() == SemIR::InstConstantKind::InstAction)
|
||||
struct FunctionTypeForPerformActionImpl<InstT, auto(SpecificParams...)->void> {
|
||||
using Type = auto(Context& context, SpecificParams..., SemIR::LocId loc_id,
|
||||
InstT inst) -> SemIR::InstId;
|
||||
};
|
||||
template <typename InstT>
|
||||
using FunctionTypeForPerformAction =
|
||||
FunctionTypeForPerformActionImpl<InstT>::Type;
|
||||
} // namespace Internal
|
||||
|
||||
// Explicitly delete the overload generated for non-action instructions. These
|
||||
@@ -34,6 +50,13 @@ auto PerformAction() -> void = delete;
|
||||
// auto PerformAction(Context& context, SemIR::LocId loc_id, InstT inst)
|
||||
// -> SemIR::InstId;
|
||||
//
|
||||
// or if action_needs_specific_id = true is specified when defining the
|
||||
// instruction kind, the signature:
|
||||
//
|
||||
// auto PerformAction(Context& context, SemIR::SpecificId specific_id,
|
||||
// SemIR::LocId loc_id, InstT inst)
|
||||
// -> SemIR::InstId;
|
||||
//
|
||||
// that returns the value that should be used as the result of evaluating the
|
||||
// instructions produced by the action. Any instructions generated during
|
||||
// `PerformAction` will be spliced into the code at the point where the action
|
||||
@@ -44,7 +67,8 @@ auto PerformAction() -> void = delete;
|
||||
|
||||
// Determines whether the given action can be performed immediately (i.e.
|
||||
// whether it is non-template-dependent).
|
||||
auto ActionIsPerformable(Context& context, SemIR::Inst action_inst) -> bool;
|
||||
auto ActionIsPerformable(Context& context, SemIR::Inst action_inst,
|
||||
SemIR::SpecificId specific_id) -> bool;
|
||||
|
||||
// Returns the constant-dependence of `inst_id` (i.e. the maximum of the
|
||||
// constant-dependences of its type and its value).
|
||||
@@ -84,7 +108,7 @@ auto AddActionSpliceIfDependent(Context& context, LocIdT loc_id,
|
||||
SemIR::TypeInstId expected_result_type_inst_id,
|
||||
ActionT action_inst) -> SemIR::InstId {
|
||||
CARBON_CHECK(action_inst.type_id == SemIR::InstType::TypeId);
|
||||
if (ActionIsPerformable(context, action_inst)) {
|
||||
if (ActionIsPerformable(context, action_inst, SemIR::SpecificId::None)) {
|
||||
return SemIR::InstId::None;
|
||||
}
|
||||
return AddDependentActionSplice(context,
|
||||
@@ -136,13 +160,19 @@ auto EndPerformDelayedAction(Context& context, SemIR::InstId result_id)
|
||||
|
||||
// Performs an action as a result of evaluation of a template's eval block.
|
||||
template <typename ActionT>
|
||||
auto PerformDelayedAction(Context& context, SemIR::LocId loc_id,
|
||||
ActionT action_inst) -> SemIR::InstId {
|
||||
if (!ActionIsPerformable(context, action_inst)) {
|
||||
auto PerformDelayedAction(Context& context, SemIR::SpecificId specific_id,
|
||||
SemIR::LocId loc_id, ActionT action_inst)
|
||||
-> SemIR::InstId {
|
||||
if (!ActionIsPerformable(context, action_inst, specific_id)) {
|
||||
return SemIR::InstId::None;
|
||||
}
|
||||
Internal::BeginPerformDelayedAction(context);
|
||||
auto inst_id = PerformAction(context, loc_id, action_inst);
|
||||
auto inst_id = SemIR::InstId::None;
|
||||
if constexpr (ActionT::Kind.action_needs_specific_id()) {
|
||||
inst_id = PerformAction(context, specific_id, loc_id, action_inst);
|
||||
} else {
|
||||
inst_id = PerformAction(context, loc_id, action_inst);
|
||||
}
|
||||
return Internal::EndPerformDelayedAction(context, inst_id);
|
||||
}
|
||||
|
||||
|
||||
@@ -219,6 +219,8 @@ class EvalContext {
|
||||
|
||||
auto sem_ir() -> SemIR::File& { return context().sem_ir(); }
|
||||
|
||||
auto specific_id() -> SemIR::SpecificId { return specific_id_; }
|
||||
|
||||
auto emitter() -> DiagnosticEmitterBase& { return context().emitter(); }
|
||||
|
||||
protected:
|
||||
@@ -3116,7 +3118,8 @@ static auto TryEvalTypedInst(EvalContext& eval_context, SemIR::InstId inst_id,
|
||||
return MakeConstantResult(eval_context.context(), inst, phase);
|
||||
} else if constexpr (ConstantKind == SemIR::InstConstantKind::InstAction) {
|
||||
auto result_inst_id = PerformDelayedAction(
|
||||
eval_context.context(), SemIR::LocId(inst_id), inst.As<InstT>());
|
||||
eval_context.context(), eval_context.specific_id(),
|
||||
SemIR::LocId(inst_id), inst.As<InstT>());
|
||||
if (result_inst_id.has_value()) {
|
||||
// The result is an instruction.
|
||||
return MakeConstantResult(
|
||||
|
||||
@@ -736,6 +736,13 @@ auto EvalConstantInst(Context& context, SemIR::InstId inst_id,
|
||||
.specific_id = specific_id});
|
||||
}
|
||||
|
||||
auto EvalConstantInst(Context& context, SemIR::SpecificInst inst)
|
||||
-> ConstantEvalResult {
|
||||
// Pull the constant value out of the specific.
|
||||
return ConstantEvalResult::Existing(SemIR::GetConstantValueInSpecific(
|
||||
context.sem_ir(), inst.specific_id, inst.inst_id));
|
||||
}
|
||||
|
||||
auto EvalConstantInst(Context& context, SemIR::InstId inst_id,
|
||||
SemIR::SpecificFunction inst) -> ConstantEvalResult {
|
||||
auto callee_function =
|
||||
|
||||
+49
-40
@@ -176,12 +176,13 @@ fn H() { G(3); }
|
||||
// CHECK:STDOUT: %N.patt.38a: %pattern_type.6b6 = symbolic_binding_pattern N, 0, template [template]
|
||||
// CHECK:STDOUT: %N.37f: %i32 = symbolic_binding N, 0, template [template]
|
||||
// CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete]
|
||||
// CHECK:STDOUT: %.233: Core.IntLiteral = splice_inst @G.%.loc11_30.2 [template]
|
||||
// CHECK:STDOUT: %array_type.3cc: type = array_type %.233, %i32 [template]
|
||||
// CHECK:STDOUT: %require_complete.2bf: <witness> = require_complete_type %array_type.3cc [template]
|
||||
// CHECK:STDOUT: %pattern_type.ed3: type = pattern_type %array_type.3cc [template]
|
||||
// CHECK:STDOUT: %arr.patt.515: %pattern_type.ed3 = ref_binding_pattern arr [template]
|
||||
// CHECK:STDOUT: %arr.var_patt.821: %pattern_type.ed3 = var_pattern %arr.patt.515 [template]
|
||||
// CHECK:STDOUT: %.159: %i32 = splice_inst @G.%.loc11_30.3 [template]
|
||||
// CHECK:STDOUT: %.a08: Core.IntLiteral = splice_inst @G.%.loc11_30.5 [template]
|
||||
// CHECK:STDOUT: %array_type.cbf: type = array_type %.a08, %i32 [template]
|
||||
// CHECK:STDOUT: %require_complete.f6a: <witness> = require_complete_type %array_type.cbf [template]
|
||||
// CHECK:STDOUT: %pattern_type.fca: type = pattern_type %array_type.cbf [template]
|
||||
// CHECK:STDOUT: %arr.patt.184: %pattern_type.fca = ref_binding_pattern arr [template]
|
||||
// CHECK:STDOUT: %arr.var_patt.f2d: %pattern_type.fca = var_pattern %arr.patt.184 [template]
|
||||
// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete]
|
||||
// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete]
|
||||
// CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete]
|
||||
@@ -193,14 +194,17 @@ fn H() { G(3); }
|
||||
// CHECK:STDOUT: %Destroy.WithSelf.Op.42b: %Destroy.WithSelf.Op.type.d3e = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Destroy.assoc_type: type = assoc_entity_type @Destroy [concrete]
|
||||
// CHECK:STDOUT: %assoc0.ae8: %Destroy.assoc_type = assoc_entity element0, imports.%Core.import_ref.918 [concrete]
|
||||
// CHECK:STDOUT: %.a09: %array_type.3cc = splice_inst @G.%.loc11_3.4 [template]
|
||||
// CHECK:STDOUT: %.b71: @G.%.loc11_3.7 (@G.%.loc11_3.7) = splice_inst @G.%.loc11_3.6 [template]
|
||||
// CHECK:STDOUT: %.098: @G.%.loc11_3.10 (@G.%.loc11_3.10) = splice_inst @G.%.loc11_3.9 [template]
|
||||
// CHECK:STDOUT: %.61d: %array_type.cbf = splice_inst @G.%.loc11_3.4 [template]
|
||||
// CHECK:STDOUT: %.dde: @G.%.loc11_3.7 (@G.%.loc11_3.7) = splice_inst @G.%.loc11_3.6 [template]
|
||||
// CHECK:STDOUT: %.cfd: @G.%.loc11_3.10 (@G.%.loc11_3.10) = splice_inst @G.%.loc11_3.9 [template]
|
||||
// CHECK:STDOUT: %From: Core.IntLiteral = symbolic_binding From, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.7cb: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete]
|
||||
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.type.48d: type = fn_type @Int.as.ImplicitAs.impl.Convert, @Int.as.ImplicitAs.impl(%From) [symbolic]
|
||||
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.0f9: %Int.as.ImplicitAs.impl.Convert.type.48d = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %int_3.410: %i32 = int_value 3 [concrete]
|
||||
// CHECK:STDOUT: %inst.specific_inst.923: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.dad: %i32 = specific_inst %int_3.410, @G(%int_3.410) [concrete = %int_3.410]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %ImplicitAs.impl_witness.590: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.204, @Int.as.ImplicitAs.impl(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.type.683: type = fn_type @Int.as.ImplicitAs.impl.Convert, @Int.as.ImplicitAs.impl(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %Int.as.ImplicitAs.impl.Convert.69e: %Int.as.ImplicitAs.impl.Convert.type.683 = struct_value () [concrete]
|
||||
@@ -225,8 +229,8 @@ fn H() { G(3); }
|
||||
// CHECK:STDOUT: %pattern_type.771: type = pattern_type %array_type.dc7 [concrete]
|
||||
// CHECK:STDOUT: %arr.patt.316: %pattern_type.771 = ref_binding_pattern arr [concrete]
|
||||
// CHECK:STDOUT: %arr.var_patt.c63: %pattern_type.771 = var_pattern %arr.patt.316 [concrete]
|
||||
// CHECK:STDOUT: %inst.as_compatible: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.723: ref %array_type.dc7 = as_compatible @G.%arr.var
|
||||
// CHECK:STDOUT: %inst.specific_inst.d8f: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.ef0: ref %array_type.dc7 = specific_inst @G.%arr.var, @G(%int_3.410)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Destroy.Op.type.1d8f74.3: type = fn_type @Destroy.Op.loc11_3.3 [concrete]
|
||||
// CHECK:STDOUT: %Destroy.Op.1a2547.3: %Destroy.Op.type.1d8f74.3 = struct_value () [concrete]
|
||||
@@ -234,14 +238,14 @@ fn H() { G(3); }
|
||||
// CHECK:STDOUT: %Destroy.facet.9a9: %Destroy.type = facet_value %array_type.dc7, (%custom_witness.df9cc1.3) [concrete]
|
||||
// CHECK:STDOUT: %Destroy.WithSelf.Op.type.642: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.9a9) [concrete]
|
||||
// CHECK:STDOUT: %.6cd: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.642, %Destroy.facet.9a9 [concrete]
|
||||
// CHECK:STDOUT: %inst.splice_block.adf: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.6fe: <bound method> = splice_block %bound_method.69b {
|
||||
// CHECK:STDOUT: %inst.splice_block.de7: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.d24: <bound method> = splice_block %bound_method.6cc {
|
||||
// CHECK:STDOUT: %impl.elem0.ef2: %.6cd = impl_witness_access %custom_witness.df9cc1.3, element0 [concrete = %Destroy.Op.1a2547.3]
|
||||
// CHECK:STDOUT: %bound_method.69b: <bound method> = bound_method %.723, %impl.elem0.ef2
|
||||
// CHECK:STDOUT: %bound_method.6cc: <bound method> = bound_method %.ef0, %impl.elem0.ef2
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.call: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %.6fe(%.723)
|
||||
// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %.d24(%.ef0)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -255,44 +259,47 @@ fn H() { G(3); }
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.loc11_30.2: <instruction> = convert_to_value_action %N.ref, Core.IntLiteral [template]
|
||||
// CHECK:STDOUT: %.loc11_30.3: Core.IntLiteral = splice_inst %.loc11_30.2 [template = %.loc11_30.3 (constants.%.233)]
|
||||
// CHECK:STDOUT: %array_type.loc11_31.2: type = array_type %.loc11_30.3, constants.%i32 [template = %array_type.loc11_31.2 (constants.%array_type.3cc)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %array_type.loc11_31.2 [template = %require_complete (constants.%require_complete.2bf)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc11_31.2 [template = %pattern_type (constants.%pattern_type.ed3)]
|
||||
// CHECK:STDOUT: %arr.patt.loc11_17.2: @G.%pattern_type (%pattern_type.ed3) = ref_binding_pattern arr [template = %arr.patt.loc11_17.2 (constants.%arr.patt.515)]
|
||||
// CHECK:STDOUT: %arr.var_patt.loc11_3.2: @G.%pattern_type (%pattern_type.ed3) = var_pattern %arr.patt.loc11_17.2 [template = %arr.var_patt.loc11_3.2 (constants.%arr.var_patt.821)]
|
||||
// CHECK:STDOUT: %.loc11_3.4: <instruction> = refine_type_action %arr.var, %array_type.loc11_31.2 [template]
|
||||
// CHECK:STDOUT: %.loc11_3.5: @G.%array_type.loc11_31.2 (%array_type.3cc) = splice_inst %.loc11_3.4 [template = %.loc11_3.5 (constants.%.a09)]
|
||||
// CHECK:STDOUT: %.loc11_30.3: <instruction> = refine_inst_action %N.ref [template]
|
||||
// CHECK:STDOUT: %.loc11_30.4: %i32 = splice_inst %.loc11_30.3 [template = %.loc11_30.4 (constants.%.159)]
|
||||
// CHECK:STDOUT: %.loc11_30.5: <instruction> = convert_to_value_action %.loc11_30.1, Core.IntLiteral [template]
|
||||
// CHECK:STDOUT: %.loc11_30.6: Core.IntLiteral = splice_inst %.loc11_30.5 [template = %.loc11_30.6 (constants.%.a08)]
|
||||
// CHECK:STDOUT: %array_type.loc11_31.2: type = array_type %.loc11_30.6, constants.%i32 [template = %array_type.loc11_31.2 (constants.%array_type.cbf)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %array_type.loc11_31.2 [template = %require_complete (constants.%require_complete.f6a)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %array_type.loc11_31.2 [template = %pattern_type (constants.%pattern_type.fca)]
|
||||
// CHECK:STDOUT: %arr.patt.loc11_17.2: @G.%pattern_type (%pattern_type.fca) = ref_binding_pattern arr [template = %arr.patt.loc11_17.2 (constants.%arr.patt.184)]
|
||||
// CHECK:STDOUT: %arr.var_patt.loc11_3.2: @G.%pattern_type (%pattern_type.fca) = var_pattern %arr.patt.loc11_17.2 [template = %arr.var_patt.loc11_3.2 (constants.%arr.var_patt.f2d)]
|
||||
// CHECK:STDOUT: %.loc11_3.4: <instruction> = refine_inst_action %arr.var [template]
|
||||
// CHECK:STDOUT: %.loc11_3.5: @G.%array_type.loc11_31.2 (%array_type.cbf) = splice_inst %.loc11_3.4 [template = %.loc11_3.5 (constants.%.61d)]
|
||||
// CHECK:STDOUT: %.loc11_3.6: <instruction> = compound_member_access_action %.loc11_3.1, constants.%assoc0.ae8 [template]
|
||||
// CHECK:STDOUT: %.loc11_3.7: type = type_of_inst %.loc11_3.6 [template]
|
||||
// CHECK:STDOUT: %.loc11_3.8: @G.%.loc11_3.7 (@G.%.loc11_3.7) = splice_inst %.loc11_3.6 [template = %.loc11_3.8 (constants.%.b71)]
|
||||
// CHECK:STDOUT: %.loc11_3.8: @G.%.loc11_3.7 (@G.%.loc11_3.7) = splice_inst %.loc11_3.6 [template = %.loc11_3.8 (constants.%.dde)]
|
||||
// CHECK:STDOUT: %.loc11_3.9: <instruction> = call_action (%.loc11_3.2), true [template]
|
||||
// CHECK:STDOUT: %.loc11_3.10: type = type_of_inst %.loc11_3.9 [template]
|
||||
// CHECK:STDOUT: %.loc11_3.11: @G.%.loc11_3.10 (@G.%.loc11_3.10) = splice_inst %.loc11_3.9 [template = %.loc11_3.11 (constants.%.098)]
|
||||
// CHECK:STDOUT: %.loc11_3.11: @G.%.loc11_3.10 (@G.%.loc11_3.10) = splice_inst %.loc11_3.9 [template = %.loc11_3.11 (constants.%.cfd)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %arr.var: ref @G.%array_type.loc11_31.2 (%array_type.3cc) = var_storage %arr.var_patt.loc11_3.1
|
||||
// CHECK:STDOUT: %arr.var: ref @G.%array_type.loc11_31.2 (%array_type.cbf) = var_storage %arr.var_patt.loc11_3.1
|
||||
// CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1]
|
||||
// CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2]
|
||||
// CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba]
|
||||
// CHECK:STDOUT: %.loc11_43: %tuple.type = tuple_literal (%int_1, %int_2, %int_3) [concrete = constants.%tuple]
|
||||
// CHECK:STDOUT: assign %arr.var, <error>
|
||||
// CHECK:STDOUT: %.loc11_31: type = splice_block %array_type.loc11_31.1 [template = %array_type.loc11_31.2 (constants.%array_type.3cc)] {
|
||||
// CHECK:STDOUT: %.loc11_31: type = splice_block %array_type.loc11_31.1 [template = %array_type.loc11_31.2 (constants.%array_type.cbf)] {
|
||||
// CHECK:STDOUT: %i32.loc11: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %N.ref: %i32 = name_ref N, %N.loc5_16.2 [template = %N.loc5_16.1 (constants.%N.37f)]
|
||||
// CHECK:STDOUT: %.loc11_30.1: Core.IntLiteral = splice_inst %.loc11_30.2 [template = %.loc11_30.3 (constants.%.233)]
|
||||
// CHECK:STDOUT: %array_type.loc11_31.1: type = array_type %.loc11_30.1, %i32.loc11 [template = %array_type.loc11_31.2 (constants.%array_type.3cc)]
|
||||
// CHECK:STDOUT: %.loc11_30.1: %i32 = splice_inst %.loc11_30.3 [template = %.loc11_30.4 (constants.%.159)]
|
||||
// CHECK:STDOUT: %.loc11_30.2: Core.IntLiteral = splice_inst %.loc11_30.5 [template = %.loc11_30.6 (constants.%.a08)]
|
||||
// CHECK:STDOUT: %array_type.loc11_31.1: type = array_type %.loc11_30.2, %i32.loc11 [template = %array_type.loc11_31.2 (constants.%array_type.cbf)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %arr: ref @G.%array_type.loc11_31.2 (%array_type.3cc) = wrapper_binding arr, %arr.var
|
||||
// CHECK:STDOUT: %arr: ref @G.%array_type.loc11_31.2 (%array_type.cbf) = wrapper_binding arr, %arr.var
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %arr.patt.loc11_17.1: @G.%pattern_type (%pattern_type.ed3) = ref_binding_pattern arr [template = %arr.patt.loc11_17.2 (constants.%arr.patt.515)]
|
||||
// CHECK:STDOUT: %arr.var_patt.loc11_3.1: @G.%pattern_type (%pattern_type.ed3) = var_pattern %arr.patt.loc11_17.1 [template = %arr.var_patt.loc11_3.2 (constants.%arr.var_patt.821)]
|
||||
// CHECK:STDOUT: %arr.patt.loc11_17.1: @G.%pattern_type (%pattern_type.fca) = ref_binding_pattern arr [template = %arr.patt.loc11_17.2 (constants.%arr.patt.184)]
|
||||
// CHECK:STDOUT: %arr.var_patt.loc11_3.1: @G.%pattern_type (%pattern_type.fca) = var_pattern %arr.patt.loc11_17.1 [template = %arr.var_patt.loc11_3.2 (constants.%arr.var_patt.f2d)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc11_3.1: @G.%array_type.loc11_31.2 (%array_type.3cc) = splice_inst %.loc11_3.4 [template = %.loc11_3.5 (constants.%.a09)]
|
||||
// CHECK:STDOUT: %.loc11_3.2: @G.%.loc11_3.7 (@G.%.loc11_3.7) = splice_inst %.loc11_3.6 [template = %.loc11_3.8 (constants.%.b71)]
|
||||
// CHECK:STDOUT: %.loc11_3.3: @G.%.loc11_3.10 (@G.%.loc11_3.10) = splice_inst %.loc11_3.9 [template = %.loc11_3.11 (constants.%.098)]
|
||||
// CHECK:STDOUT: %.loc11_3.1: @G.%array_type.loc11_31.2 (%array_type.cbf) = splice_inst %.loc11_3.4 [template = %.loc11_3.5 (constants.%.61d)]
|
||||
// CHECK:STDOUT: %.loc11_3.2: @G.%.loc11_3.7 (@G.%.loc11_3.7) = splice_inst %.loc11_3.6 [template = %.loc11_3.8 (constants.%.dde)]
|
||||
// CHECK:STDOUT: %.loc11_3.3: @G.%.loc11_3.10 (@G.%.loc11_3.10) = splice_inst %.loc11_3.9 [template = %.loc11_3.11 (constants.%.cfd)]
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
@@ -319,16 +326,18 @@ fn H() { G(3); }
|
||||
// CHECK:STDOUT: %N.loc5_16.1 => constants.%int_3.410
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.loc11_30.2 => constants.%inst.splice_block.ca0
|
||||
// CHECK:STDOUT: %.loc11_30.3 => constants.%int_3.1ba
|
||||
// CHECK:STDOUT: %.loc11_30.3 => constants.%inst.specific_inst.923
|
||||
// CHECK:STDOUT: %.loc11_30.4 => constants.%int_3.410
|
||||
// CHECK:STDOUT: %.loc11_30.5 => constants.%inst.splice_block.ca0
|
||||
// CHECK:STDOUT: %.loc11_30.6 => constants.%int_3.1ba
|
||||
// CHECK:STDOUT: %array_type.loc11_31.2 => constants.%array_type.dc7
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.b77
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.771
|
||||
// CHECK:STDOUT: %arr.patt.loc11_17.2 => constants.%arr.patt.316
|
||||
// CHECK:STDOUT: %arr.var_patt.loc11_3.2 => constants.%arr.var_patt.c63
|
||||
// CHECK:STDOUT: %.loc11_3.4 => constants.%inst.as_compatible
|
||||
// CHECK:STDOUT: %.loc11_3.4 => constants.%inst.specific_inst.d8f
|
||||
// CHECK:STDOUT: %.loc11_3.5 => invalid
|
||||
// CHECK:STDOUT: %.loc11_3.6 => constants.%inst.splice_block.adf
|
||||
// CHECK:STDOUT: %.loc11_3.6 => constants.%inst.splice_block.de7
|
||||
// CHECK:STDOUT: %.loc11_3.7 => <bound method>
|
||||
// CHECK:STDOUT: %.loc11_3.8 => invalid
|
||||
// CHECK:STDOUT: %.loc11_3.9 => constants.%inst.call
|
||||
|
||||
+107
-100
@@ -571,30 +571,34 @@ fn G() { F({}); }
|
||||
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
|
||||
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %.d24: @F.%.loc7_20.5 (@F.%.loc7_20.5) = splice_inst @F.%.loc7_20.4 [template]
|
||||
// CHECK:STDOUT: %.44c: type = splice_inst @F.%.loc7_20.7 [template]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.44c [template]
|
||||
// CHECK:STDOUT: %pattern_type.c25: type = pattern_type %.44c [template]
|
||||
// CHECK:STDOUT: %v.patt.0c8: %pattern_type.c25 = ref_binding_pattern v [template]
|
||||
// CHECK:STDOUT: %v.var_patt.7d8: %pattern_type.c25 = var_pattern %v.patt.0c8 [template]
|
||||
// CHECK:STDOUT: %.eec: type = splice_inst @F.%.loc7_20.5 [template]
|
||||
// CHECK:STDOUT: %.195: @F.%.loc7_20.8 (@F.%.loc7_20.8) = splice_inst @F.%.loc7_20.7 [template]
|
||||
// CHECK:STDOUT: %.53f: type = splice_inst @F.%.loc7_20.10 [template]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.53f [template]
|
||||
// CHECK:STDOUT: %pattern_type.7d1: type = pattern_type %.53f [template]
|
||||
// CHECK:STDOUT: %v.patt.7b6: %pattern_type.7d1 = ref_binding_pattern v [template]
|
||||
// CHECK:STDOUT: %v.var_patt.067: %pattern_type.7d1 = var_pattern %v.patt.7b6 [template]
|
||||
// CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete]
|
||||
// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %.d189f7.1: @F.%.loc7_3.12 (@F.%.loc7_3.12) = splice_inst @F.%.loc7_3.11 [template]
|
||||
// CHECK:STDOUT: %.269993.1: @F.%.loc7_3.15 (@F.%.loc7_3.15) = splice_inst @F.%.loc7_3.14 [template]
|
||||
// CHECK:STDOUT: %.0e8: @F.%.loc7_3.18 (@F.%.loc7_3.18) = splice_inst @F.%.loc7_3.17 [template]
|
||||
// CHECK:STDOUT: %.820: @F.%.loc7_3.21 (@F.%.loc7_3.21) = splice_inst @F.%.loc7_3.20 [template]
|
||||
// CHECK:STDOUT: %.a9b: %.44c = splice_inst @F.%.loc7_3.23 [template]
|
||||
// CHECK:STDOUT: %.65c: %.44c = splice_inst @F.%.loc7_3.25 [template]
|
||||
// CHECK:STDOUT: %.88d2c8.1: @F.%.loc7_3.12 (@F.%.loc7_3.12) = splice_inst @F.%.loc7_3.11 [template]
|
||||
// CHECK:STDOUT: %.45c659.1: @F.%.loc7_3.15 (@F.%.loc7_3.15) = splice_inst @F.%.loc7_3.14 [template]
|
||||
// CHECK:STDOUT: %.fa1: @F.%.loc7_3.18 (@F.%.loc7_3.18) = splice_inst @F.%.loc7_3.17 [template]
|
||||
// CHECK:STDOUT: %.e13: @F.%.loc7_3.21 (@F.%.loc7_3.21) = splice_inst @F.%.loc7_3.20 [template]
|
||||
// CHECK:STDOUT: %.6ec: %.53f = splice_inst @F.%.loc7_3.23 [template]
|
||||
// CHECK:STDOUT: %.817: %.53f = splice_inst @F.%.loc7_3.25 [template]
|
||||
// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete]
|
||||
// CHECK:STDOUT: %Self.0e7: %Destroy.type = symbolic_binding Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Destroy.WithSelf.Op.type.d3e: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Self.0e7) [symbolic]
|
||||
// CHECK:STDOUT: %Destroy.WithSelf.Op.42b: %Destroy.WithSelf.Op.type.d3e = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Destroy.assoc_type: type = assoc_entity_type @Destroy [concrete]
|
||||
// CHECK:STDOUT: %assoc0.ae8: %Destroy.assoc_type = assoc_entity element0, imports.%Core.import_ref.918 [concrete]
|
||||
// CHECK:STDOUT: %.0d4: %.44c = splice_inst @F.%.loc7_3.27 [template]
|
||||
// CHECK:STDOUT: %.e5e: @F.%.loc7_3.30 (@F.%.loc7_3.30) = splice_inst @F.%.loc7_3.29 [template]
|
||||
// CHECK:STDOUT: %.d90: @F.%.loc7_3.33 (@F.%.loc7_3.33) = splice_inst @F.%.loc7_3.32 [template]
|
||||
// CHECK:STDOUT: %.14f: %.53f = splice_inst @F.%.loc7_3.27 [template]
|
||||
// CHECK:STDOUT: %.869: @F.%.loc7_3.30 (@F.%.loc7_3.30) = splice_inst @F.%.loc7_3.29 [template]
|
||||
// CHECK:STDOUT: %.3d1: @F.%.loc7_3.33 (@F.%.loc7_3.33) = splice_inst @F.%.loc7_3.32 [template]
|
||||
// CHECK:STDOUT: %inst.specific_inst.c72: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.62d: type = specific_inst %empty_struct_type, @F(%empty_struct_type) [concrete = %empty_struct_type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %C.d8efcc.1: type = class_type @C, @C(%empty_struct_type) [concrete]
|
||||
// CHECK:STDOUT: %inst.class_type: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %C.d8efcc.2: type = class_type @C, @C(%empty_struct_type) [concrete = %C.d8efcc.1]
|
||||
@@ -605,26 +609,24 @@ fn G() { F({}); }
|
||||
// CHECK:STDOUT: %pattern_type.2fd: type = pattern_type %C.d8efcc.1 [concrete]
|
||||
// CHECK:STDOUT: %v.patt.0e7: %pattern_type.2fd = ref_binding_pattern v [concrete]
|
||||
// CHECK:STDOUT: %v.var_patt.259: %pattern_type.2fd = var_pattern %v.patt.0e7 [concrete]
|
||||
// CHECK:STDOUT: %.690: <instruction> = call_action (%ImplicitAs.generic, %.44c), false [template]
|
||||
// CHECK:STDOUT: %.816: type = type_of_inst %.690 [template]
|
||||
// CHECK:STDOUT: %.d189f7.2: %.816 = splice_inst %.690 [template]
|
||||
// CHECK:STDOUT: %.7f1: <instruction> = access_member_action %.d189f7.2, Convert [template]
|
||||
// CHECK:STDOUT: %.d9e: type = type_of_inst %.7f1 [template]
|
||||
// CHECK:STDOUT: %.269993.2: %.d9e = splice_inst %.7f1 [template]
|
||||
// CHECK:STDOUT: %.190: <instruction> = compound_member_access_action %empty_struct, %.269993.2 [template]
|
||||
// CHECK:STDOUT: %.46e: type = type_of_inst %.190 [template]
|
||||
// CHECK:STDOUT: %.27f: %.46e = splice_inst %.190 [template]
|
||||
// CHECK:STDOUT: %.f03: <instruction> = call_action (%.27f), true [template]
|
||||
// CHECK:STDOUT: %.c52: type = type_of_inst %.f03 [template]
|
||||
// CHECK:STDOUT: %.94d: %.c52 = splice_inst %.f03 [template]
|
||||
// CHECK:STDOUT: %.2ea: %C.d8efcc.1 = splice_inst %.f03 [template]
|
||||
// CHECK:STDOUT: %inst.as_compatible.be6: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.cda: %C.d8efcc.1 = as_compatible %.94d [template = %.2ea]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.610: <instruction> = convert_to_category_action %.2ea, element10 [template]
|
||||
// CHECK:STDOUT: %.47a: %C.d8efcc.1 = splice_inst %.610 [template]
|
||||
// CHECK:STDOUT: %inst.as_compatible.6fd: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.36e: ref %C.d8efcc.1 = as_compatible @F.%v.var
|
||||
// CHECK:STDOUT: %.0a6: <instruction> = call_action (%ImplicitAs.generic, %.53f), false [template]
|
||||
// CHECK:STDOUT: %.48a: type = type_of_inst %.0a6 [template]
|
||||
// CHECK:STDOUT: %.88d2c8.2: %.48a = splice_inst %.0a6 [template]
|
||||
// CHECK:STDOUT: %.53c: <instruction> = access_member_action %.88d2c8.2, Convert [template]
|
||||
// CHECK:STDOUT: %.ceb: type = type_of_inst %.53c [template]
|
||||
// CHECK:STDOUT: %.45c659.2: %.ceb = splice_inst %.53c [template]
|
||||
// CHECK:STDOUT: %.1e2: <instruction> = compound_member_access_action %empty_struct, %.45c659.2 [template]
|
||||
// CHECK:STDOUT: %.4f9: type = type_of_inst %.1e2 [template]
|
||||
// CHECK:STDOUT: %.bc1: %.4f9 = splice_inst %.1e2 [template]
|
||||
// CHECK:STDOUT: %.1ec: <instruction> = call_action (%.bc1), true [template]
|
||||
// CHECK:STDOUT: %.65e: type = type_of_inst %.1ec [template]
|
||||
// CHECK:STDOUT: %.fc2: %.65e = splice_inst %.1ec [template]
|
||||
// CHECK:STDOUT: %.e48: <instruction> = refine_inst_action %.fc2 [template]
|
||||
// CHECK:STDOUT: %.118: %C.d8efcc.1 = splice_inst %.e48 [template]
|
||||
// CHECK:STDOUT: %.663: <instruction> = convert_to_category_action %.118, element10 [template]
|
||||
// CHECK:STDOUT: %.e51: %C.d8efcc.1 = splice_inst %.663 [template]
|
||||
// CHECK:STDOUT: %inst.specific_inst.2e8: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.d94: ref %C.d8efcc.1 = specific_inst @F.%v.var, @F(%empty_struct_type)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc7_3.2 [concrete]
|
||||
// CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete]
|
||||
@@ -632,14 +634,14 @@ fn G() { F({}); }
|
||||
// CHECK:STDOUT: %Destroy.facet.da3: %Destroy.type = facet_value %C.d8efcc.1, (%custom_witness.df9cc1.2) [concrete]
|
||||
// CHECK:STDOUT: %Destroy.WithSelf.Op.type.294: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.da3) [concrete]
|
||||
// CHECK:STDOUT: %.98c: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.294, %Destroy.facet.da3 [concrete]
|
||||
// CHECK:STDOUT: %inst.splice_block.b81: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.99b: <bound method> = splice_block %bound_method {
|
||||
// CHECK:STDOUT: %inst.splice_block.5e8: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.b36: <bound method> = splice_block %bound_method {
|
||||
// CHECK:STDOUT: %impl.elem0: %.98c = impl_witness_access %custom_witness.df9cc1.2, element0 [concrete = %Destroy.Op.1a2547.2]
|
||||
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %.36e, %impl.elem0
|
||||
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %.d94, %impl.elem0
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.call: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %.99b(%.36e)
|
||||
// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %.b36(%.d94)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -664,66 +666,69 @@ fn G() { F({}); }
|
||||
// CHECK:STDOUT: %T.loc6_16.1: type = symbolic_binding T, 0, template [template = %T.loc6_16.1 (constants.%T)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.loc7_20.4: <instruction> = call_action (%C.ref, %T.ref), false [template]
|
||||
// CHECK:STDOUT: %.loc7_20.5: type = type_of_inst %.loc7_20.4 [template]
|
||||
// CHECK:STDOUT: %.loc7_20.6: @F.%.loc7_20.5 (@F.%.loc7_20.5) = splice_inst %.loc7_20.4 [template = %.loc7_20.6 (constants.%.d24)]
|
||||
// CHECK:STDOUT: %.loc7_20.7: <instruction> = convert_to_value_action %.loc7_20.2, type [template]
|
||||
// CHECK:STDOUT: %.loc7_20.8: type = splice_inst %.loc7_20.7 [template = %.loc7_20.8 (constants.%.44c)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.loc7_20.8 [template = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %.loc7_20.8 [template = %pattern_type (constants.%pattern_type.c25)]
|
||||
// CHECK:STDOUT: %v.patt.loc7_15.2: @F.%pattern_type (%pattern_type.c25) = ref_binding_pattern v [template = %v.patt.loc7_15.2 (constants.%v.patt.0c8)]
|
||||
// CHECK:STDOUT: %v.var_patt.loc7_3.2: @F.%pattern_type (%pattern_type.c25) = var_pattern %v.patt.loc7_15.2 [template = %v.var_patt.loc7_3.2 (constants.%v.var_patt.7d8)]
|
||||
// CHECK:STDOUT: %.loc7_3.11: <instruction> = call_action (constants.%ImplicitAs.generic, constants.%.44c), false [template]
|
||||
// CHECK:STDOUT: %.loc7_20.5: <instruction> = refine_inst_action %T.ref [template]
|
||||
// CHECK:STDOUT: %.loc7_20.6: type = splice_inst %.loc7_20.5 [template = %.loc7_20.6 (constants.%.eec)]
|
||||
// CHECK:STDOUT: %.loc7_20.7: <instruction> = call_action (%C.ref, %.loc7_20.2), false [template]
|
||||
// CHECK:STDOUT: %.loc7_20.8: type = type_of_inst %.loc7_20.7 [template]
|
||||
// CHECK:STDOUT: %.loc7_20.9: @F.%.loc7_20.8 (@F.%.loc7_20.8) = splice_inst %.loc7_20.7 [template = %.loc7_20.9 (constants.%.195)]
|
||||
// CHECK:STDOUT: %.loc7_20.10: <instruction> = convert_to_value_action %.loc7_20.3, type [template]
|
||||
// CHECK:STDOUT: %.loc7_20.11: type = splice_inst %.loc7_20.10 [template = %.loc7_20.11 (constants.%.53f)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.loc7_20.11 [template = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %.loc7_20.11 [template = %pattern_type (constants.%pattern_type.7d1)]
|
||||
// CHECK:STDOUT: %v.patt.loc7_15.2: @F.%pattern_type (%pattern_type.7d1) = ref_binding_pattern v [template = %v.patt.loc7_15.2 (constants.%v.patt.7b6)]
|
||||
// CHECK:STDOUT: %v.var_patt.loc7_3.2: @F.%pattern_type (%pattern_type.7d1) = var_pattern %v.patt.loc7_15.2 [template = %v.var_patt.loc7_3.2 (constants.%v.var_patt.067)]
|
||||
// CHECK:STDOUT: %.loc7_3.11: <instruction> = call_action (constants.%ImplicitAs.generic, constants.%.53f), false [template]
|
||||
// CHECK:STDOUT: %.loc7_3.12: type = type_of_inst %.loc7_3.11 [template]
|
||||
// CHECK:STDOUT: %.loc7_3.13: @F.%.loc7_3.12 (@F.%.loc7_3.12) = splice_inst %.loc7_3.11 [template = %.loc7_3.13 (constants.%.d189f7.1)]
|
||||
// CHECK:STDOUT: %.loc7_3.13: @F.%.loc7_3.12 (@F.%.loc7_3.12) = splice_inst %.loc7_3.11 [template = %.loc7_3.13 (constants.%.88d2c8.1)]
|
||||
// CHECK:STDOUT: %.loc7_3.14: <instruction> = access_member_action %.loc7_3.1, Convert [template]
|
||||
// CHECK:STDOUT: %.loc7_3.15: type = type_of_inst %.loc7_3.14 [template]
|
||||
// CHECK:STDOUT: %.loc7_3.16: @F.%.loc7_3.15 (@F.%.loc7_3.15) = splice_inst %.loc7_3.14 [template = %.loc7_3.16 (constants.%.269993.1)]
|
||||
// CHECK:STDOUT: %.loc7_3.16: @F.%.loc7_3.15 (@F.%.loc7_3.15) = splice_inst %.loc7_3.14 [template = %.loc7_3.16 (constants.%.45c659.1)]
|
||||
// CHECK:STDOUT: %.loc7_3.17: <instruction> = compound_member_access_action %.loc7_25, %.loc7_3.2 [template]
|
||||
// CHECK:STDOUT: %.loc7_3.18: type = type_of_inst %.loc7_3.17 [template]
|
||||
// CHECK:STDOUT: %.loc7_3.19: @F.%.loc7_3.18 (@F.%.loc7_3.18) = splice_inst %.loc7_3.17 [template = %.loc7_3.19 (constants.%.0e8)]
|
||||
// CHECK:STDOUT: %.loc7_3.19: @F.%.loc7_3.18 (@F.%.loc7_3.18) = splice_inst %.loc7_3.17 [template = %.loc7_3.19 (constants.%.fa1)]
|
||||
// CHECK:STDOUT: %.loc7_3.20: <instruction> = call_action (%.loc7_3.3), true [template]
|
||||
// CHECK:STDOUT: %.loc7_3.21: type = type_of_inst %.loc7_3.20 [template]
|
||||
// CHECK:STDOUT: %.loc7_3.22: @F.%.loc7_3.21 (@F.%.loc7_3.21) = splice_inst %.loc7_3.20 [template = %.loc7_3.22 (constants.%.820)]
|
||||
// CHECK:STDOUT: %.loc7_3.23: <instruction> = refine_type_action %.loc7_3.5, %.loc7_20.8 [template]
|
||||
// CHECK:STDOUT: %.loc7_3.24: @F.%.loc7_20.8 (%.44c) = splice_inst %.loc7_3.23 [template = %.loc7_3.24 (constants.%.a9b)]
|
||||
// CHECK:STDOUT: %.loc7_3.22: @F.%.loc7_3.21 (@F.%.loc7_3.21) = splice_inst %.loc7_3.20 [template = %.loc7_3.22 (constants.%.e13)]
|
||||
// CHECK:STDOUT: %.loc7_3.23: <instruction> = refine_inst_action %.loc7_3.5 [template]
|
||||
// CHECK:STDOUT: %.loc7_3.24: @F.%.loc7_20.11 (%.53f) = splice_inst %.loc7_3.23 [template = %.loc7_3.24 (constants.%.6ec)]
|
||||
// CHECK:STDOUT: %.loc7_3.25: <instruction> = convert_to_category_action %.loc7_3.6, element10 [template]
|
||||
// CHECK:STDOUT: %.loc7_3.26: @F.%.loc7_20.8 (%.44c) = splice_inst %.loc7_3.25 [template = %.loc7_3.26 (constants.%.65c)]
|
||||
// CHECK:STDOUT: %.loc7_3.27: <instruction> = refine_type_action %v.var, %.loc7_20.8 [template]
|
||||
// CHECK:STDOUT: %.loc7_3.28: @F.%.loc7_20.8 (%.44c) = splice_inst %.loc7_3.27 [template = %.loc7_3.28 (constants.%.0d4)]
|
||||
// CHECK:STDOUT: %.loc7_3.26: @F.%.loc7_20.11 (%.53f) = splice_inst %.loc7_3.25 [template = %.loc7_3.26 (constants.%.817)]
|
||||
// CHECK:STDOUT: %.loc7_3.27: <instruction> = refine_inst_action %v.var [template]
|
||||
// CHECK:STDOUT: %.loc7_3.28: @F.%.loc7_20.11 (%.53f) = splice_inst %.loc7_3.27 [template = %.loc7_3.28 (constants.%.14f)]
|
||||
// CHECK:STDOUT: %.loc7_3.29: <instruction> = compound_member_access_action %.loc7_3.8, constants.%assoc0.ae8 [template]
|
||||
// CHECK:STDOUT: %.loc7_3.30: type = type_of_inst %.loc7_3.29 [template]
|
||||
// CHECK:STDOUT: %.loc7_3.31: @F.%.loc7_3.30 (@F.%.loc7_3.30) = splice_inst %.loc7_3.29 [template = %.loc7_3.31 (constants.%.e5e)]
|
||||
// CHECK:STDOUT: %.loc7_3.31: @F.%.loc7_3.30 (@F.%.loc7_3.30) = splice_inst %.loc7_3.29 [template = %.loc7_3.31 (constants.%.869)]
|
||||
// CHECK:STDOUT: %.loc7_3.32: <instruction> = call_action (%.loc7_3.9), true [template]
|
||||
// CHECK:STDOUT: %.loc7_3.33: type = type_of_inst %.loc7_3.32 [template]
|
||||
// CHECK:STDOUT: %.loc7_3.34: @F.%.loc7_3.33 (@F.%.loc7_3.33) = splice_inst %.loc7_3.32 [template = %.loc7_3.34 (constants.%.d90)]
|
||||
// CHECK:STDOUT: %.loc7_3.34: @F.%.loc7_3.33 (@F.%.loc7_3.33) = splice_inst %.loc7_3.32 [template = %.loc7_3.34 (constants.%.3d1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %v.var: ref @F.%.loc7_20.8 (%.44c) = var_storage %v.var_patt.loc7_3.1
|
||||
// CHECK:STDOUT: %v.var: ref @F.%.loc7_20.11 (%.53f) = var_storage %v.var_patt.loc7_3.1
|
||||
// CHECK:STDOUT: %.loc7_25: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct]
|
||||
// CHECK:STDOUT: %.loc7_3.1: @F.%.loc7_3.12 (@F.%.loc7_3.12) = splice_inst %.loc7_3.11 [template = %.loc7_3.13 (constants.%.d189f7.1)]
|
||||
// CHECK:STDOUT: %.loc7_3.2: @F.%.loc7_3.15 (@F.%.loc7_3.15) = splice_inst %.loc7_3.14 [template = %.loc7_3.16 (constants.%.269993.1)]
|
||||
// CHECK:STDOUT: %.loc7_3.3: @F.%.loc7_3.18 (@F.%.loc7_3.18) = splice_inst %.loc7_3.17 [template = %.loc7_3.19 (constants.%.0e8)]
|
||||
// CHECK:STDOUT: %.loc7_3.4: @F.%.loc7_3.21 (@F.%.loc7_3.21) = splice_inst %.loc7_3.20 [template = %.loc7_3.22 (constants.%.820)]
|
||||
// CHECK:STDOUT: %.loc7_3.5: @F.%.loc7_20.8 (%.44c) = converted %.loc7_25, %.loc7_3.4 [template = %.loc7_3.22 (constants.%.820)]
|
||||
// CHECK:STDOUT: %.loc7_3.6: @F.%.loc7_20.8 (%.44c) = splice_inst %.loc7_3.23 [template = %.loc7_3.24 (constants.%.a9b)]
|
||||
// CHECK:STDOUT: %.loc7_3.7: @F.%.loc7_20.8 (%.44c) = splice_inst %.loc7_3.25 [template = %.loc7_3.26 (constants.%.65c)]
|
||||
// CHECK:STDOUT: %.loc7_3.1: @F.%.loc7_3.12 (@F.%.loc7_3.12) = splice_inst %.loc7_3.11 [template = %.loc7_3.13 (constants.%.88d2c8.1)]
|
||||
// CHECK:STDOUT: %.loc7_3.2: @F.%.loc7_3.15 (@F.%.loc7_3.15) = splice_inst %.loc7_3.14 [template = %.loc7_3.16 (constants.%.45c659.1)]
|
||||
// CHECK:STDOUT: %.loc7_3.3: @F.%.loc7_3.18 (@F.%.loc7_3.18) = splice_inst %.loc7_3.17 [template = %.loc7_3.19 (constants.%.fa1)]
|
||||
// CHECK:STDOUT: %.loc7_3.4: @F.%.loc7_3.21 (@F.%.loc7_3.21) = splice_inst %.loc7_3.20 [template = %.loc7_3.22 (constants.%.e13)]
|
||||
// CHECK:STDOUT: %.loc7_3.5: @F.%.loc7_20.11 (%.53f) = converted %.loc7_25, %.loc7_3.4 [template = %.loc7_3.22 (constants.%.e13)]
|
||||
// CHECK:STDOUT: %.loc7_3.6: @F.%.loc7_20.11 (%.53f) = splice_inst %.loc7_3.23 [template = %.loc7_3.24 (constants.%.6ec)]
|
||||
// CHECK:STDOUT: %.loc7_3.7: @F.%.loc7_20.11 (%.53f) = splice_inst %.loc7_3.25 [template = %.loc7_3.26 (constants.%.817)]
|
||||
// CHECK:STDOUT: assign %v.var, %.loc7_3.7
|
||||
// CHECK:STDOUT: %.loc7_20.1: type = splice_block %.loc7_20.3 [template = %.loc7_20.8 (constants.%.44c)] {
|
||||
// CHECK:STDOUT: %.loc7_20.1: type = splice_block %.loc7_20.4 [template = %.loc7_20.11 (constants.%.53f)] {
|
||||
// CHECK:STDOUT: %C.ref: %C.type = name_ref C, file.%C.decl [concrete = constants.%C.generic]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc6_16.2 [template = %T.loc6_16.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc7_20.2: @F.%.loc7_20.5 (@F.%.loc7_20.5) = splice_inst %.loc7_20.4 [template = %.loc7_20.6 (constants.%.d24)]
|
||||
// CHECK:STDOUT: %.loc7_20.3: type = splice_inst %.loc7_20.7 [template = %.loc7_20.8 (constants.%.44c)]
|
||||
// CHECK:STDOUT: %.loc7_20.2: type = splice_inst %.loc7_20.5 [template = %.loc7_20.6 (constants.%.eec)]
|
||||
// CHECK:STDOUT: %.loc7_20.3: @F.%.loc7_20.8 (@F.%.loc7_20.8) = splice_inst %.loc7_20.7 [template = %.loc7_20.9 (constants.%.195)]
|
||||
// CHECK:STDOUT: %.loc7_20.4: type = splice_inst %.loc7_20.10 [template = %.loc7_20.11 (constants.%.53f)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %v: ref @F.%.loc7_20.8 (%.44c) = wrapper_binding v, %v.var
|
||||
// CHECK:STDOUT: %v: ref @F.%.loc7_20.11 (%.53f) = wrapper_binding v, %v.var
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %v.patt.loc7_15.1: @F.%pattern_type (%pattern_type.c25) = ref_binding_pattern v [template = %v.patt.loc7_15.2 (constants.%v.patt.0c8)]
|
||||
// CHECK:STDOUT: %v.var_patt.loc7_3.1: @F.%pattern_type (%pattern_type.c25) = var_pattern %v.patt.loc7_15.1 [template = %v.var_patt.loc7_3.2 (constants.%v.var_patt.7d8)]
|
||||
// CHECK:STDOUT: %v.patt.loc7_15.1: @F.%pattern_type (%pattern_type.7d1) = ref_binding_pattern v [template = %v.patt.loc7_15.2 (constants.%v.patt.7b6)]
|
||||
// CHECK:STDOUT: %v.var_patt.loc7_3.1: @F.%pattern_type (%pattern_type.7d1) = var_pattern %v.patt.loc7_15.1 [template = %v.var_patt.loc7_3.2 (constants.%v.var_patt.067)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc7_3.8: @F.%.loc7_20.8 (%.44c) = splice_inst %.loc7_3.27 [template = %.loc7_3.28 (constants.%.0d4)]
|
||||
// CHECK:STDOUT: %.loc7_3.9: @F.%.loc7_3.30 (@F.%.loc7_3.30) = splice_inst %.loc7_3.29 [template = %.loc7_3.31 (constants.%.e5e)]
|
||||
// CHECK:STDOUT: %.loc7_3.10: @F.%.loc7_3.33 (@F.%.loc7_3.33) = splice_inst %.loc7_3.32 [template = %.loc7_3.34 (constants.%.d90)]
|
||||
// CHECK:STDOUT: %.loc7_3.8: @F.%.loc7_20.11 (%.53f) = splice_inst %.loc7_3.27 [template = %.loc7_3.28 (constants.%.14f)]
|
||||
// CHECK:STDOUT: %.loc7_3.9: @F.%.loc7_3.30 (@F.%.loc7_3.30) = splice_inst %.loc7_3.29 [template = %.loc7_3.31 (constants.%.869)]
|
||||
// CHECK:STDOUT: %.loc7_3.10: @F.%.loc7_3.33 (@F.%.loc7_3.33) = splice_inst %.loc7_3.32 [template = %.loc7_3.34 (constants.%.3d1)]
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
@@ -745,34 +750,36 @@ fn G() { F({}); }
|
||||
// CHECK:STDOUT: %T.loc6_16.1 => constants.%empty_struct_type
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.loc7_20.4 => constants.%inst.class_type
|
||||
// CHECK:STDOUT: %.loc7_20.5 => type
|
||||
// CHECK:STDOUT: %.loc7_20.6 => constants.%C.d8efcc.1
|
||||
// CHECK:STDOUT: %.loc7_20.7 => constants.%inst.splice_block.1b2
|
||||
// CHECK:STDOUT: %.loc7_20.8 => constants.%C.d8efcc.1
|
||||
// CHECK:STDOUT: %.loc7_20.5 => constants.%inst.specific_inst.c72
|
||||
// CHECK:STDOUT: %.loc7_20.6 => constants.%empty_struct_type
|
||||
// CHECK:STDOUT: %.loc7_20.7 => constants.%inst.class_type
|
||||
// CHECK:STDOUT: %.loc7_20.8 => type
|
||||
// CHECK:STDOUT: %.loc7_20.9 => constants.%C.d8efcc.1
|
||||
// CHECK:STDOUT: %.loc7_20.10 => constants.%inst.splice_block.1b2
|
||||
// CHECK:STDOUT: %.loc7_20.11 => constants.%C.d8efcc.1
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.2fd
|
||||
// CHECK:STDOUT: %v.patt.loc7_15.2 => constants.%v.patt.0e7
|
||||
// CHECK:STDOUT: %v.var_patt.loc7_3.2 => constants.%v.var_patt.259
|
||||
// CHECK:STDOUT: %.loc7_3.11 => constants.%.690
|
||||
// CHECK:STDOUT: %.loc7_3.12 => constants.%.816
|
||||
// CHECK:STDOUT: %.loc7_3.13 => constants.%.d189f7.2
|
||||
// CHECK:STDOUT: %.loc7_3.14 => constants.%.7f1
|
||||
// CHECK:STDOUT: %.loc7_3.15 => constants.%.d9e
|
||||
// CHECK:STDOUT: %.loc7_3.16 => constants.%.269993.2
|
||||
// CHECK:STDOUT: %.loc7_3.17 => constants.%.190
|
||||
// CHECK:STDOUT: %.loc7_3.18 => constants.%.46e
|
||||
// CHECK:STDOUT: %.loc7_3.19 => constants.%.27f
|
||||
// CHECK:STDOUT: %.loc7_3.20 => constants.%.f03
|
||||
// CHECK:STDOUT: %.loc7_3.21 => constants.%.c52
|
||||
// CHECK:STDOUT: %.loc7_3.22 => constants.%.94d
|
||||
// CHECK:STDOUT: %.loc7_3.23 => constants.%inst.as_compatible.be6
|
||||
// CHECK:STDOUT: %.loc7_3.24 => constants.%.2ea
|
||||
// CHECK:STDOUT: %.loc7_3.25 => constants.%.610
|
||||
// CHECK:STDOUT: %.loc7_3.26 => constants.%.47a
|
||||
// CHECK:STDOUT: %.loc7_3.27 => constants.%inst.as_compatible.6fd
|
||||
// CHECK:STDOUT: %.loc7_3.11 => constants.%.0a6
|
||||
// CHECK:STDOUT: %.loc7_3.12 => constants.%.48a
|
||||
// CHECK:STDOUT: %.loc7_3.13 => constants.%.88d2c8.2
|
||||
// CHECK:STDOUT: %.loc7_3.14 => constants.%.53c
|
||||
// CHECK:STDOUT: %.loc7_3.15 => constants.%.ceb
|
||||
// CHECK:STDOUT: %.loc7_3.16 => constants.%.45c659.2
|
||||
// CHECK:STDOUT: %.loc7_3.17 => constants.%.1e2
|
||||
// CHECK:STDOUT: %.loc7_3.18 => constants.%.4f9
|
||||
// CHECK:STDOUT: %.loc7_3.19 => constants.%.bc1
|
||||
// CHECK:STDOUT: %.loc7_3.20 => constants.%.1ec
|
||||
// CHECK:STDOUT: %.loc7_3.21 => constants.%.65e
|
||||
// CHECK:STDOUT: %.loc7_3.22 => constants.%.fc2
|
||||
// CHECK:STDOUT: %.loc7_3.23 => constants.%.e48
|
||||
// CHECK:STDOUT: %.loc7_3.24 => constants.%.118
|
||||
// CHECK:STDOUT: %.loc7_3.25 => constants.%.663
|
||||
// CHECK:STDOUT: %.loc7_3.26 => constants.%.e51
|
||||
// CHECK:STDOUT: %.loc7_3.27 => constants.%inst.specific_inst.2e8
|
||||
// CHECK:STDOUT: %.loc7_3.28 => invalid
|
||||
// CHECK:STDOUT: %.loc7_3.29 => constants.%inst.splice_block.b81
|
||||
// CHECK:STDOUT: %.loc7_3.29 => constants.%inst.splice_block.5e8
|
||||
// CHECK:STDOUT: %.loc7_3.30 => <bound method>
|
||||
// CHECK:STDOUT: %.loc7_3.31 => invalid
|
||||
// CHECK:STDOUT: %.loc7_3.32 => constants.%inst.call
|
||||
|
||||
+25
-25
@@ -205,17 +205,17 @@ fn H() {
|
||||
// CHECK:STDOUT: %.6c2: @UseFGenerically.%.loc11_3.15 (@UseFGenerically.%.loc11_3.15) = splice_inst @UseFGenerically.%.loc11_3.14 [template]
|
||||
// CHECK:STDOUT: %.031: @UseFGenerically.%.loc11_3.18 (@UseFGenerically.%.loc11_3.18) = splice_inst @UseFGenerically.%.loc11_3.17 [template]
|
||||
// CHECK:STDOUT: %.88d: @UseFGenerically.%.loc11_3.21 (@UseFGenerically.%.loc11_3.21) = splice_inst @UseFGenerically.%.loc11_3.20 [template]
|
||||
// CHECK:STDOUT: %.1d7: %F.call = splice_inst @UseFGenerically.%.loc11_3.23 [template]
|
||||
// CHECK:STDOUT: %.55e: %F.call = splice_inst @UseFGenerically.%.loc11_3.25 [template]
|
||||
// CHECK:STDOUT: %.0ac: %F.call = splice_inst @UseFGenerically.%.loc11_3.23 [template]
|
||||
// CHECK:STDOUT: %.d54: %F.call = splice_inst @UseFGenerically.%.loc11_3.25 [template]
|
||||
// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete]
|
||||
// CHECK:STDOUT: %Self.0e7: %Destroy.type = symbolic_binding Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Destroy.WithSelf.Op.type.d3e: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Self.0e7) [symbolic]
|
||||
// CHECK:STDOUT: %Destroy.WithSelf.Op.42b: %Destroy.WithSelf.Op.type.d3e = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Destroy.assoc_type: type = assoc_entity_type @Destroy [concrete]
|
||||
// CHECK:STDOUT: %assoc0.ae8: %Destroy.assoc_type = assoc_entity element0, imports.%Core.import_ref.918 [concrete]
|
||||
// CHECK:STDOUT: %.885: %F.call = splice_inst @UseFGenerically.%.loc11_3.27 [template]
|
||||
// CHECK:STDOUT: %.0c8: @UseFGenerically.%.loc11_3.30 (@UseFGenerically.%.loc11_3.30) = splice_inst @UseFGenerically.%.loc11_3.29 [template]
|
||||
// CHECK:STDOUT: %.6cb: @UseFGenerically.%.loc11_3.33 (@UseFGenerically.%.loc11_3.33) = splice_inst @UseFGenerically.%.loc11_3.32 [template]
|
||||
// CHECK:STDOUT: %.b53: %F.call = splice_inst @UseFGenerically.%.loc11_3.27 [template]
|
||||
// CHECK:STDOUT: %.5eb: @UseFGenerically.%.loc11_3.30 (@UseFGenerically.%.loc11_3.30) = splice_inst @UseFGenerically.%.loc11_3.29 [template]
|
||||
// CHECK:STDOUT: %.ace: @UseFGenerically.%.loc11_3.33 (@UseFGenerically.%.loc11_3.33) = splice_inst @UseFGenerically.%.loc11_3.32 [template]
|
||||
// CHECK:STDOUT: %assoc0.0ac: %ImplicitAs.assoc_type.fcc = assoc_entity element0, imports.%Core.import_ref.f9d [symbolic]
|
||||
// CHECK:STDOUT: %int_3.410: %i32 = int_value 3 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.98b: type = pattern_type %C [concrete]
|
||||
@@ -236,8 +236,8 @@ fn H() {
|
||||
// CHECK:STDOUT: %inst.splice_block.edd: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.432: <error> = splice_block <error> [concrete = <error>] {}
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.as_compatible: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.9fb: ref %C = as_compatible @UseFGenerically.%v.var
|
||||
// CHECK:STDOUT: %inst.specific_inst: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.6ba: ref %C = specific_inst @UseFGenerically.%v.var, @UseFGenerically(%int_3.410)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc11_3.2 [concrete]
|
||||
// CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete]
|
||||
@@ -245,14 +245,14 @@ fn H() {
|
||||
// CHECK:STDOUT: %Destroy.facet.1a5: %Destroy.type = facet_value %C, (%custom_witness.df9cc1.2) [concrete]
|
||||
// CHECK:STDOUT: %Destroy.WithSelf.Op.type.7f2: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.1a5) [concrete]
|
||||
// CHECK:STDOUT: %.da8: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.7f2, %Destroy.facet.1a5 [concrete]
|
||||
// CHECK:STDOUT: %inst.splice_block.f67: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.7ba: <bound method> = splice_block %bound_method.767 {
|
||||
// CHECK:STDOUT: %inst.splice_block.8b0: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.0c7: <bound method> = splice_block %bound_method.396 {
|
||||
// CHECK:STDOUT: %impl.elem0.96c: %.da8 = impl_witness_access %custom_witness.df9cc1.2, element0 [concrete = %Destroy.Op.1a2547.2]
|
||||
// CHECK:STDOUT: %bound_method.767: <bound method> = bound_method %.9fb, %impl.elem0.96c
|
||||
// CHECK:STDOUT: %bound_method.396: <bound method> = bound_method %.6ba, %impl.elem0.96c
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.call: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %.7ba(%.9fb)
|
||||
// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %.0c7(%.6ba)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -297,18 +297,18 @@ fn H() {
|
||||
// CHECK:STDOUT: %.loc11_3.20: <instruction> = call_action (%.loc11_3.3), true [template]
|
||||
// CHECK:STDOUT: %.loc11_3.21: type = type_of_inst %.loc11_3.20 [template]
|
||||
// CHECK:STDOUT: %.loc11_3.22: @UseFGenerically.%.loc11_3.21 (@UseFGenerically.%.loc11_3.21) = splice_inst %.loc11_3.20 [template = %.loc11_3.22 (constants.%.88d)]
|
||||
// CHECK:STDOUT: %.loc11_3.23: <instruction> = refine_type_action %.loc11_3.5, %F.call.loc11_20.2 [template]
|
||||
// CHECK:STDOUT: %.loc11_3.24: @UseFGenerically.%F.call.loc11_20.2 (%F.call) = splice_inst %.loc11_3.23 [template = %.loc11_3.24 (constants.%.1d7)]
|
||||
// CHECK:STDOUT: %.loc11_3.23: <instruction> = refine_inst_action %.loc11_3.5 [template]
|
||||
// CHECK:STDOUT: %.loc11_3.24: @UseFGenerically.%F.call.loc11_20.2 (%F.call) = splice_inst %.loc11_3.23 [template = %.loc11_3.24 (constants.%.0ac)]
|
||||
// CHECK:STDOUT: %.loc11_3.25: <instruction> = convert_to_category_action %.loc11_3.6, element10 [template]
|
||||
// CHECK:STDOUT: %.loc11_3.26: @UseFGenerically.%F.call.loc11_20.2 (%F.call) = splice_inst %.loc11_3.25 [template = %.loc11_3.26 (constants.%.55e)]
|
||||
// CHECK:STDOUT: %.loc11_3.27: <instruction> = refine_type_action %v.var, %F.call.loc11_20.2 [template]
|
||||
// CHECK:STDOUT: %.loc11_3.28: @UseFGenerically.%F.call.loc11_20.2 (%F.call) = splice_inst %.loc11_3.27 [template = %.loc11_3.28 (constants.%.885)]
|
||||
// CHECK:STDOUT: %.loc11_3.26: @UseFGenerically.%F.call.loc11_20.2 (%F.call) = splice_inst %.loc11_3.25 [template = %.loc11_3.26 (constants.%.d54)]
|
||||
// CHECK:STDOUT: %.loc11_3.27: <instruction> = refine_inst_action %v.var [template]
|
||||
// CHECK:STDOUT: %.loc11_3.28: @UseFGenerically.%F.call.loc11_20.2 (%F.call) = splice_inst %.loc11_3.27 [template = %.loc11_3.28 (constants.%.b53)]
|
||||
// CHECK:STDOUT: %.loc11_3.29: <instruction> = compound_member_access_action %.loc11_3.8, constants.%assoc0.ae8 [template]
|
||||
// CHECK:STDOUT: %.loc11_3.30: type = type_of_inst %.loc11_3.29 [template]
|
||||
// CHECK:STDOUT: %.loc11_3.31: @UseFGenerically.%.loc11_3.30 (@UseFGenerically.%.loc11_3.30) = splice_inst %.loc11_3.29 [template = %.loc11_3.31 (constants.%.0c8)]
|
||||
// CHECK:STDOUT: %.loc11_3.31: @UseFGenerically.%.loc11_3.30 (@UseFGenerically.%.loc11_3.30) = splice_inst %.loc11_3.29 [template = %.loc11_3.31 (constants.%.5eb)]
|
||||
// CHECK:STDOUT: %.loc11_3.32: <instruction> = call_action (%.loc11_3.9), true [template]
|
||||
// CHECK:STDOUT: %.loc11_3.33: type = type_of_inst %.loc11_3.32 [template]
|
||||
// CHECK:STDOUT: %.loc11_3.34: @UseFGenerically.%.loc11_3.33 (@UseFGenerically.%.loc11_3.33) = splice_inst %.loc11_3.32 [template = %.loc11_3.34 (constants.%.6cb)]
|
||||
// CHECK:STDOUT: %.loc11_3.34: @UseFGenerically.%.loc11_3.33 (@UseFGenerically.%.loc11_3.33) = splice_inst %.loc11_3.32 [template = %.loc11_3.34 (constants.%.ace)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
@@ -319,8 +319,8 @@ fn H() {
|
||||
// CHECK:STDOUT: %.loc11_3.3: @UseFGenerically.%.loc11_3.18 (@UseFGenerically.%.loc11_3.18) = splice_inst %.loc11_3.17 [template = %.loc11_3.19 (constants.%.031)]
|
||||
// CHECK:STDOUT: %.loc11_3.4: @UseFGenerically.%.loc11_3.21 (@UseFGenerically.%.loc11_3.21) = splice_inst %.loc11_3.20 [template = %.loc11_3.22 (constants.%.88d)]
|
||||
// CHECK:STDOUT: %.loc11_3.5: @UseFGenerically.%F.call.loc11_20.2 (%F.call) = converted %.loc11_25, %.loc11_3.4 [template = %.loc11_3.22 (constants.%.88d)]
|
||||
// CHECK:STDOUT: %.loc11_3.6: @UseFGenerically.%F.call.loc11_20.2 (%F.call) = splice_inst %.loc11_3.23 [template = %.loc11_3.24 (constants.%.1d7)]
|
||||
// CHECK:STDOUT: %.loc11_3.7: @UseFGenerically.%F.call.loc11_20.2 (%F.call) = splice_inst %.loc11_3.25 [template = %.loc11_3.26 (constants.%.55e)]
|
||||
// CHECK:STDOUT: %.loc11_3.6: @UseFGenerically.%F.call.loc11_20.2 (%F.call) = splice_inst %.loc11_3.23 [template = %.loc11_3.24 (constants.%.0ac)]
|
||||
// CHECK:STDOUT: %.loc11_3.7: @UseFGenerically.%F.call.loc11_20.2 (%F.call) = splice_inst %.loc11_3.25 [template = %.loc11_3.26 (constants.%.d54)]
|
||||
// CHECK:STDOUT: assign %v.var, %.loc11_3.7
|
||||
// CHECK:STDOUT: %.loc11_20.1: type = splice_block %.loc11_20.3 [template = %F.call.loc11_20.2 (constants.%F.call)] {
|
||||
// CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F]
|
||||
@@ -334,9 +334,9 @@ fn H() {
|
||||
// CHECK:STDOUT: %v.patt.loc11_15.1: @UseFGenerically.%pattern_type (%pattern_type.231) = ref_binding_pattern v [template = %v.patt.loc11_15.2 (constants.%v.patt.bcc)]
|
||||
// CHECK:STDOUT: %v.var_patt.loc11_3.1: @UseFGenerically.%pattern_type (%pattern_type.231) = var_pattern %v.patt.loc11_15.1 [template = %v.var_patt.loc11_3.2 (constants.%v.var_patt.53d)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc11_3.8: @UseFGenerically.%F.call.loc11_20.2 (%F.call) = splice_inst %.loc11_3.27 [template = %.loc11_3.28 (constants.%.885)]
|
||||
// CHECK:STDOUT: %.loc11_3.9: @UseFGenerically.%.loc11_3.30 (@UseFGenerically.%.loc11_3.30) = splice_inst %.loc11_3.29 [template = %.loc11_3.31 (constants.%.0c8)]
|
||||
// CHECK:STDOUT: %.loc11_3.10: @UseFGenerically.%.loc11_3.33 (@UseFGenerically.%.loc11_3.33) = splice_inst %.loc11_3.32 [template = %.loc11_3.34 (constants.%.6cb)]
|
||||
// CHECK:STDOUT: %.loc11_3.8: @UseFGenerically.%F.call.loc11_20.2 (%F.call) = splice_inst %.loc11_3.27 [template = %.loc11_3.28 (constants.%.b53)]
|
||||
// CHECK:STDOUT: %.loc11_3.9: @UseFGenerically.%.loc11_3.30 (@UseFGenerically.%.loc11_3.30) = splice_inst %.loc11_3.29 [template = %.loc11_3.31 (constants.%.5eb)]
|
||||
// CHECK:STDOUT: %.loc11_3.10: @UseFGenerically.%.loc11_3.33 (@UseFGenerically.%.loc11_3.33) = splice_inst %.loc11_3.32 [template = %.loc11_3.34 (constants.%.ace)]
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
@@ -379,9 +379,9 @@ fn H() {
|
||||
// CHECK:STDOUT: %.loc11_3.24 => <error>
|
||||
// CHECK:STDOUT: %.loc11_3.25 => <error>
|
||||
// CHECK:STDOUT: %.loc11_3.26 => <error>
|
||||
// CHECK:STDOUT: %.loc11_3.27 => constants.%inst.as_compatible
|
||||
// CHECK:STDOUT: %.loc11_3.27 => constants.%inst.specific_inst
|
||||
// CHECK:STDOUT: %.loc11_3.28 => invalid
|
||||
// CHECK:STDOUT: %.loc11_3.29 => constants.%inst.splice_block.f67
|
||||
// CHECK:STDOUT: %.loc11_3.29 => constants.%inst.splice_block.8b0
|
||||
// CHECK:STDOUT: %.loc11_3.30 => <bound method>
|
||||
// CHECK:STDOUT: %.loc11_3.31 => invalid
|
||||
// CHECK:STDOUT: %.loc11_3.32 => constants.%inst.call
|
||||
|
||||
+90
-90
@@ -183,8 +183,8 @@ fn Test(d: D) {
|
||||
// CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete]
|
||||
// CHECK:STDOUT: %complete_type.f8a: <witness> = complete_type_witness %i32.builtin [concrete]
|
||||
// CHECK:STDOUT: %n.patt.c48: %pattern_type.6b6 = value_binding_pattern n [concrete]
|
||||
// CHECK:STDOUT: %.b3e: %T.67db0b.1 = splice_inst @F.%.loc6_16.3 [template]
|
||||
// CHECK:STDOUT: %.b21: %i32 = splice_inst @F.%.loc6_16.5 [template]
|
||||
// CHECK:STDOUT: %.098: %T.67db0b.1 = splice_inst @F.%.loc6_16.3 [template]
|
||||
// CHECK:STDOUT: %.c85: %i32 = splice_inst @F.%.loc6_16.5 [template]
|
||||
// CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete]
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic]
|
||||
@@ -209,22 +209,22 @@ fn Test(d: D) {
|
||||
// CHECK:STDOUT: %complete_type.cdf: <witness> = complete_type_witness %struct_type.n [concrete]
|
||||
// CHECK:STDOUT: %x.param_patt.0f9: %pattern_type.98b = value_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %x.patt.953: %pattern_type.98b = wrapper_binding_pattern x, %x.param_patt.0f9 [concrete]
|
||||
// CHECK:STDOUT: %inst.as_compatible.1ff: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.775: %i32 = as_compatible @F.%x.ref
|
||||
// CHECK:STDOUT: %inst.specific_inst.0d5: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.3e2: %i32 = specific_inst @F.%x.ref, @F(%i32)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.5e1: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.093: %i32 = splice_block %.775 {}
|
||||
// CHECK:STDOUT: %inst.splice_block.e52: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.31c: %i32 = splice_block %.3e2 {}
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.as_compatible.d98: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.f8c: %C = as_compatible @F.%x.ref
|
||||
// CHECK:STDOUT: %inst.specific_inst.669: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.bfd: %C = specific_inst @F.%x.ref, @F(%C)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.ddb: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.5bd, %ImplicitAs.facet [concrete]
|
||||
// CHECK:STDOUT: %inst.splice_block.a18: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.e81: %i32 = splice_block %.651 {
|
||||
// CHECK:STDOUT: %inst.splice_block.cae: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.dbd: %i32 = splice_block %.3ff {
|
||||
// CHECK:STDOUT: %impl.elem0.a96: %.ddb = impl_witness_access %ImplicitAs.impl_witness.edb, element0 [concrete = %C.as.ImplicitAs.impl.Convert]
|
||||
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %.f8c, %impl.elem0.a96
|
||||
// CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method(%.f8c)
|
||||
// CHECK:STDOUT: %.651: %i32 = value_of_initializer %C.as.ImplicitAs.impl.Convert.call
|
||||
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %.bfd, %impl.elem0.a96
|
||||
// CHECK:STDOUT: %C.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method(%.bfd)
|
||||
// CHECK:STDOUT: %.3ff: %i32 = value_of_initializer %C.as.ImplicitAs.impl.Convert.call
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
@@ -266,16 +266,16 @@ fn Test(d: D) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %T.loc5_16.1 [template = %require_complete (constants.%require_complete.944)]
|
||||
// CHECK:STDOUT: %.loc6_16.3: <instruction> = refine_type_action %x.ref, %T.loc5_16.1 [template]
|
||||
// CHECK:STDOUT: %.loc6_16.4: @F.%T.loc5_16.1 (%T.67db0b.1) = splice_inst %.loc6_16.3 [template = %.loc6_16.4 (constants.%.b3e)]
|
||||
// CHECK:STDOUT: %.loc6_16.3: <instruction> = refine_inst_action %x.ref [template]
|
||||
// CHECK:STDOUT: %.loc6_16.4: @F.%T.loc5_16.1 (%T.67db0b.1) = splice_inst %.loc6_16.3 [template = %.loc6_16.4 (constants.%.098)]
|
||||
// CHECK:STDOUT: %.loc6_16.5: <instruction> = convert_to_value_action %.loc6_16.1, constants.%i32 [template]
|
||||
// CHECK:STDOUT: %.loc6_16.6: %i32 = splice_inst %.loc6_16.5 [template = %.loc6_16.6 (constants.%.b21)]
|
||||
// CHECK:STDOUT: %.loc6_16.6: %i32 = splice_inst %.loc6_16.5 [template = %.loc6_16.6 (constants.%.c85)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @F.%T.loc5_16.1 (%T.67db0b.1)) -> out %return.param: %i32 {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.ref: @F.%T.loc5_16.1 (%T.67db0b.1) = name_ref x, %x
|
||||
// CHECK:STDOUT: %.loc6_16.1: @F.%T.loc5_16.1 (%T.67db0b.1) = splice_inst %.loc6_16.3 [template = %.loc6_16.4 (constants.%.b3e)]
|
||||
// CHECK:STDOUT: %.loc6_16.2: %i32 = splice_inst %.loc6_16.5 [template = %.loc6_16.6 (constants.%.b21)]
|
||||
// CHECK:STDOUT: %.loc6_16.1: @F.%T.loc5_16.1 (%T.67db0b.1) = splice_inst %.loc6_16.3 [template = %.loc6_16.4 (constants.%.098)]
|
||||
// CHECK:STDOUT: %.loc6_16.2: %i32 = splice_inst %.loc6_16.5 [template = %.loc6_16.6 (constants.%.c85)]
|
||||
// CHECK:STDOUT: %i32.loc6: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %n: %i32 = wrapper_binding n, %.loc6_16.2
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
@@ -308,9 +308,9 @@ fn Test(d: D) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.f8a
|
||||
// CHECK:STDOUT: %.loc6_16.3 => constants.%inst.as_compatible.1ff
|
||||
// CHECK:STDOUT: %.loc6_16.3 => constants.%inst.specific_inst.0d5
|
||||
// CHECK:STDOUT: %.loc6_16.4 => invalid
|
||||
// CHECK:STDOUT: %.loc6_16.5 => constants.%inst.splice_block.5e1
|
||||
// CHECK:STDOUT: %.loc6_16.5 => constants.%inst.splice_block.e52
|
||||
// CHECK:STDOUT: %.loc6_16.6 => invalid
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -323,9 +323,9 @@ fn Test(d: D) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.cdf
|
||||
// CHECK:STDOUT: %.loc6_16.3 => constants.%inst.as_compatible.d98
|
||||
// CHECK:STDOUT: %.loc6_16.3 => constants.%inst.specific_inst.669
|
||||
// CHECK:STDOUT: %.loc6_16.4 => invalid
|
||||
// CHECK:STDOUT: %.loc6_16.5 => constants.%inst.splice_block.a18
|
||||
// CHECK:STDOUT: %.loc6_16.5 => constants.%inst.splice_block.cae
|
||||
// CHECK:STDOUT: %.loc6_16.6 => invalid
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -352,9 +352,9 @@ fn Test(d: D) {
|
||||
// CHECK:STDOUT: %require_complete.944: <witness> = require_complete_type %T.67db0b.1 [template]
|
||||
// CHECK:STDOUT: %i32.builtin: type = int_type signed, %int_32 [concrete]
|
||||
// CHECK:STDOUT: %complete_type.f8a: <witness> = complete_type_witness %i32.builtin [concrete]
|
||||
// CHECK:STDOUT: %.b3e: %T.67db0b.1 = splice_inst @AsI32.%.loc6_12.3 [template]
|
||||
// CHECK:STDOUT: %.94a: %i32 = splice_inst @AsI32.%.loc6_12.5 [template]
|
||||
// CHECK:STDOUT: %.113: %i32 = splice_inst @AsI32.%.loc6_18.2 [template]
|
||||
// CHECK:STDOUT: %.098: %T.67db0b.1 = splice_inst @AsI32.%.loc6_12.3 [template]
|
||||
// CHECK:STDOUT: %.7f3: %i32 = splice_inst @AsI32.%.loc6_12.5 [template]
|
||||
// CHECK:STDOUT: %.4f1: %i32 = splice_inst @AsI32.%.loc6_18.2 [template]
|
||||
// CHECK:STDOUT: %x.param_patt.cee: %pattern_type.6b6 = value_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %x.patt.e3b: %pattern_type.6b6 = wrapper_binding_pattern x, %x.param_patt.cee [concrete]
|
||||
// CHECK:STDOUT: %C: type = class_type @C [concrete]
|
||||
@@ -379,40 +379,40 @@ fn Test(d: D) {
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: <specific function> = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %x.param_patt.0f9: %pattern_type.98b = value_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %x.patt.953: %pattern_type.98b = wrapper_binding_pattern x, %x.param_patt.0f9 [concrete]
|
||||
// CHECK:STDOUT: %inst.as_compatible.1ff: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.775: %i32 = as_compatible @AsI32.%x.ref
|
||||
// CHECK:STDOUT: %inst.specific_inst.615: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.2f4: %i32 = specific_inst @AsI32.%x.ref, @AsI32(%i32)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.5e1: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.093: %i32 = splice_block %.775 {}
|
||||
// CHECK:STDOUT: %inst.splice_block.1f8: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.727: %i32 = splice_block %.2f4 {}
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.c43: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.c52: init %i32 = splice_block %Int.as.Copy.impl.Op.call.7ab {
|
||||
// CHECK:STDOUT: %inst.splice_block.a55: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.f08: init %i32 = splice_block %Int.as.Copy.impl.Op.call.a7e {
|
||||
// CHECK:STDOUT: %impl.elem0.88228e.2: %.737 = impl_witness_access %Copy.impl_witness.b51, element0 [concrete = %Int.as.Copy.impl.Op.4f6]
|
||||
// CHECK:STDOUT: %bound_method.aca: <bound method> = bound_method %.093, %impl.elem0.88228e.2
|
||||
// CHECK:STDOUT: %bound_method.5d3: <bound method> = bound_method %.727, %impl.elem0.88228e.2
|
||||
// CHECK:STDOUT: %specific_fn.96a233.2: <specific function> = specific_function %impl.elem0.88228e.2, @Int.as.Copy.impl.Op(%int_32) [concrete = %Int.as.Copy.impl.Op.specific_fn]
|
||||
// CHECK:STDOUT: %bound_method.d7f: <bound method> = bound_method %.093, %specific_fn.96a233.2
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.call.7ab: init %i32 = call %bound_method.d7f(%.093)
|
||||
// CHECK:STDOUT: %bound_method.d8a: <bound method> = bound_method %.727, %specific_fn.96a233.2
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.call.a7e: init %i32 = call %bound_method.d8a(%.727)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.as_compatible.d98: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.f8c: %C = as_compatible @AsI32.%x.ref
|
||||
// CHECK:STDOUT: %inst.specific_inst.281: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.71c: %C = specific_inst @AsI32.%x.ref, @AsI32(%C)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.419: type = fn_type_with_self_type %As.WithSelf.Convert.type.087, %As.facet [concrete]
|
||||
// CHECK:STDOUT: %inst.splice_block.550: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.24f: %i32 = splice_block %.0bd {
|
||||
// CHECK:STDOUT: %inst.splice_block.734: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.fd9: %i32 = splice_block %.094 {
|
||||
// CHECK:STDOUT: %impl.elem0.47b: %.419 = impl_witness_access %As.impl_witness.80e, element0 [concrete = %C.as.As.impl.Convert]
|
||||
// CHECK:STDOUT: %bound_method.7a7: <bound method> = bound_method %.f8c, %impl.elem0.47b
|
||||
// CHECK:STDOUT: %C.as.As.impl.Convert.call: init %i32 = call %bound_method.7a7(%.f8c)
|
||||
// CHECK:STDOUT: %.0bd: %i32 = value_of_initializer %C.as.As.impl.Convert.call
|
||||
// CHECK:STDOUT: %bound_method.739: <bound method> = bound_method %.71c, %impl.elem0.47b
|
||||
// CHECK:STDOUT: %C.as.As.impl.Convert.call: init %i32 = call %bound_method.739(%.71c)
|
||||
// CHECK:STDOUT: %.094: %i32 = value_of_initializer %C.as.As.impl.Convert.call
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.132: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.f64: init %i32 = splice_block %Int.as.Copy.impl.Op.call.0f4 {
|
||||
// CHECK:STDOUT: %inst.splice_block.575: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.297: init %i32 = splice_block %Int.as.Copy.impl.Op.call.03b {
|
||||
// CHECK:STDOUT: %impl.elem0.88228e.1: %.737 = impl_witness_access %Copy.impl_witness.b51, element0 [concrete = %Int.as.Copy.impl.Op.4f6]
|
||||
// CHECK:STDOUT: %bound_method.de6: <bound method> = bound_method %.24f, %impl.elem0.88228e.1
|
||||
// CHECK:STDOUT: %bound_method.649: <bound method> = bound_method %.fd9, %impl.elem0.88228e.1
|
||||
// CHECK:STDOUT: %specific_fn.96a233.1: <specific function> = specific_function %impl.elem0.88228e.1, @Int.as.Copy.impl.Op(%int_32) [concrete = %Int.as.Copy.impl.Op.specific_fn]
|
||||
// CHECK:STDOUT: %bound_method.832: <bound method> = bound_method %.24f, %specific_fn.96a233.1
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.call.0f4: init %i32 = call %bound_method.832(%.24f)
|
||||
// CHECK:STDOUT: %bound_method.5e5: <bound method> = bound_method %.fd9, %specific_fn.96a233.1
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.call.03b: init %i32 = call %bound_method.5e5(%.fd9)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
@@ -454,20 +454,20 @@ fn Test(d: D) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %T.loc5_20.1 [template = %require_complete (constants.%require_complete.944)]
|
||||
// CHECK:STDOUT: %.loc6_12.3: <instruction> = refine_type_action %x.ref, %T.loc5_20.1 [template]
|
||||
// CHECK:STDOUT: %.loc6_12.4: @AsI32.%T.loc5_20.1 (%T.67db0b.1) = splice_inst %.loc6_12.3 [template = %.loc6_12.4 (constants.%.b3e)]
|
||||
// CHECK:STDOUT: %.loc6_12.3: <instruction> = refine_inst_action %x.ref [template]
|
||||
// CHECK:STDOUT: %.loc6_12.4: @AsI32.%T.loc5_20.1 (%T.67db0b.1) = splice_inst %.loc6_12.3 [template = %.loc6_12.4 (constants.%.098)]
|
||||
// CHECK:STDOUT: %.loc6_12.5: <instruction> = convert_action %.loc6_12.1, constants.%i32, element7 [template]
|
||||
// CHECK:STDOUT: %.loc6_12.6: %i32 = splice_inst %.loc6_12.5 [template = %.loc6_12.6 (constants.%.94a)]
|
||||
// CHECK:STDOUT: %.loc6_12.6: %i32 = splice_inst %.loc6_12.5 [template = %.loc6_12.6 (constants.%.7f3)]
|
||||
// CHECK:STDOUT: %.loc6_18.2: <instruction> = convert_to_category_action %.loc6_12.2, element10 [template]
|
||||
// CHECK:STDOUT: %.loc6_18.3: %i32 = splice_inst %.loc6_18.2 [template = %.loc6_18.3 (constants.%.113)]
|
||||
// CHECK:STDOUT: %.loc6_18.3: %i32 = splice_inst %.loc6_18.2 [template = %.loc6_18.3 (constants.%.4f1)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @AsI32.%T.loc5_20.1 (%T.67db0b.1)) -> out %return.param: %i32 {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.ref: @AsI32.%T.loc5_20.1 (%T.67db0b.1) = name_ref x, %x
|
||||
// CHECK:STDOUT: %i32.loc6: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %.loc6_12.1: @AsI32.%T.loc5_20.1 (%T.67db0b.1) = splice_inst %.loc6_12.3 [template = %.loc6_12.4 (constants.%.b3e)]
|
||||
// CHECK:STDOUT: %.loc6_12.2: %i32 = splice_inst %.loc6_12.5 [template = %.loc6_12.6 (constants.%.94a)]
|
||||
// CHECK:STDOUT: %.loc6_18.1: %i32 = splice_inst %.loc6_18.2 [template = %.loc6_18.3 (constants.%.113)]
|
||||
// CHECK:STDOUT: %.loc6_12.1: @AsI32.%T.loc5_20.1 (%T.67db0b.1) = splice_inst %.loc6_12.3 [template = %.loc6_12.4 (constants.%.098)]
|
||||
// CHECK:STDOUT: %.loc6_12.2: %i32 = splice_inst %.loc6_12.5 [template = %.loc6_12.6 (constants.%.7f3)]
|
||||
// CHECK:STDOUT: %.loc6_18.1: %i32 = splice_inst %.loc6_18.2 [template = %.loc6_18.3 (constants.%.4f1)]
|
||||
// CHECK:STDOUT: return %.loc6_18.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
@@ -489,11 +489,11 @@ fn Test(d: D) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.f8a
|
||||
// CHECK:STDOUT: %.loc6_12.3 => constants.%inst.as_compatible.1ff
|
||||
// CHECK:STDOUT: %.loc6_12.3 => constants.%inst.specific_inst.615
|
||||
// CHECK:STDOUT: %.loc6_12.4 => invalid
|
||||
// CHECK:STDOUT: %.loc6_12.5 => constants.%inst.splice_block.5e1
|
||||
// CHECK:STDOUT: %.loc6_12.5 => constants.%inst.splice_block.1f8
|
||||
// CHECK:STDOUT: %.loc6_12.6 => invalid
|
||||
// CHECK:STDOUT: %.loc6_18.2 => constants.%inst.splice_block.c43
|
||||
// CHECK:STDOUT: %.loc6_18.2 => constants.%inst.splice_block.a55
|
||||
// CHECK:STDOUT: %.loc6_18.3 => invalid
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -506,11 +506,11 @@ fn Test(d: D) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.cdf
|
||||
// CHECK:STDOUT: %.loc6_12.3 => constants.%inst.as_compatible.d98
|
||||
// CHECK:STDOUT: %.loc6_12.3 => constants.%inst.specific_inst.281
|
||||
// CHECK:STDOUT: %.loc6_12.4 => invalid
|
||||
// CHECK:STDOUT: %.loc6_12.5 => constants.%inst.splice_block.550
|
||||
// CHECK:STDOUT: %.loc6_12.5 => constants.%inst.splice_block.734
|
||||
// CHECK:STDOUT: %.loc6_12.6 => invalid
|
||||
// CHECK:STDOUT: %.loc6_18.2 => constants.%inst.splice_block.132
|
||||
// CHECK:STDOUT: %.loc6_18.2 => constants.%inst.splice_block.575
|
||||
// CHECK:STDOUT: %.loc6_18.3 => invalid
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -533,9 +533,9 @@ fn Test(d: D) {
|
||||
// CHECK:STDOUT: %require_complete.441: <witness> = require_complete_type %U.091 [template]
|
||||
// CHECK:STDOUT: %pattern_type.946: type = pattern_type %U.091 [template]
|
||||
// CHECK:STDOUT: %_.patt.972: %pattern_type.946 = value_binding_pattern _ [template]
|
||||
// CHECK:STDOUT: %.b3e: %T.67db0b.1 = splice_inst @AsType.%.loc6_16.4 [template]
|
||||
// CHECK:STDOUT: %.07c: %U.091 = splice_inst @AsType.%.loc6_16.6 [template]
|
||||
// CHECK:STDOUT: %.687: %U.091 = splice_inst @AsType.%.loc6_16.8 [template]
|
||||
// CHECK:STDOUT: %.098: %T.67db0b.1 = splice_inst @AsType.%.loc6_16.4 [template]
|
||||
// CHECK:STDOUT: %.51e: %U.091 = splice_inst @AsType.%.loc6_16.6 [template]
|
||||
// CHECK:STDOUT: %.f21: %U.091 = splice_inst @AsType.%.loc6_16.8 [template]
|
||||
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
|
||||
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete]
|
||||
@@ -556,29 +556,29 @@ fn Test(d: D) {
|
||||
// CHECK:STDOUT: %x.param_patt.0f9: %pattern_type.98b = value_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %x.patt.953: %pattern_type.98b = wrapper_binding_pattern x, %x.param_patt.0f9 [concrete]
|
||||
// CHECK:STDOUT: %_.patt.bed: %pattern_type.6b6 = value_binding_pattern _ [concrete]
|
||||
// CHECK:STDOUT: %inst.as_compatible.1ff: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.775: %i32 = as_compatible @AsType.%x.ref
|
||||
// CHECK:STDOUT: %inst.specific_inst.fbf: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.5a5: %i32 = specific_inst @AsType.%x.ref, @AsType(%i32, %i32)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.5e1: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.093: %i32 = splice_block %.775 {}
|
||||
// CHECK:STDOUT: %inst.splice_block.6e4: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.f67: %i32 = splice_block %.5a5 {}
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.520: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.b12: %i32 = splice_block %.093 {}
|
||||
// CHECK:STDOUT: %inst.splice_block.bce: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.5f4: %i32 = splice_block %.f67 {}
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.as_compatible.d98: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.f8c: %C = as_compatible @AsType.%x.ref
|
||||
// CHECK:STDOUT: %inst.specific_inst.842: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.c99: %C = specific_inst @AsType.%x.ref, @AsType(%C, %i32)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.419: type = fn_type_with_self_type %As.WithSelf.Convert.type.087, %As.facet [concrete]
|
||||
// CHECK:STDOUT: %inst.splice_block.550: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.24f: %i32 = splice_block %.0bd {
|
||||
// CHECK:STDOUT: %inst.splice_block.a88: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.781: %i32 = splice_block %.160 {
|
||||
// CHECK:STDOUT: %impl.elem0.47b: %.419 = impl_witness_access %As.impl_witness.80e, element0 [concrete = %C.as.As.impl.Convert]
|
||||
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %.f8c, %impl.elem0.47b
|
||||
// CHECK:STDOUT: %C.as.As.impl.Convert.call: init %i32 = call %bound_method(%.f8c)
|
||||
// CHECK:STDOUT: %.0bd: %i32 = value_of_initializer %C.as.As.impl.Convert.call
|
||||
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %.c99, %impl.elem0.47b
|
||||
// CHECK:STDOUT: %C.as.As.impl.Convert.call: init %i32 = call %bound_method(%.c99)
|
||||
// CHECK:STDOUT: %.160: %i32 = value_of_initializer %C.as.As.impl.Convert.call
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.022: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.77f: %i32 = splice_block %.24f {}
|
||||
// CHECK:STDOUT: %inst.splice_block.055: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.950: %i32 = splice_block %.781 {}
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -619,20 +619,20 @@ fn Test(d: D) {
|
||||
// CHECK:STDOUT: %require_complete.loc6: <witness> = require_complete_type %U.loc5_45.1 [template = %require_complete.loc6 (constants.%require_complete.441)]
|
||||
// CHECK:STDOUT: %pattern_type.loc6: type = pattern_type %U.loc5_45.1 [template = %pattern_type.loc6 (constants.%pattern_type.946)]
|
||||
// CHECK:STDOUT: %_.patt.loc6_8.2: @AsType.%pattern_type.loc6 (%pattern_type.946) = value_binding_pattern _ [template = %_.patt.loc6_8.2 (constants.%_.patt.972)]
|
||||
// CHECK:STDOUT: %.loc6_16.4: <instruction> = refine_type_action %x.ref, %T.loc5_21.1 [template]
|
||||
// CHECK:STDOUT: %.loc6_16.5: @AsType.%T.loc5_21.1 (%T.67db0b.1) = splice_inst %.loc6_16.4 [template = %.loc6_16.5 (constants.%.b3e)]
|
||||
// CHECK:STDOUT: %.loc6_16.4: <instruction> = refine_inst_action %x.ref [template]
|
||||
// CHECK:STDOUT: %.loc6_16.5: @AsType.%T.loc5_21.1 (%T.67db0b.1) = splice_inst %.loc6_16.4 [template = %.loc6_16.5 (constants.%.098)]
|
||||
// CHECK:STDOUT: %.loc6_16.6: <instruction> = convert_action %.loc6_16.1, %U.loc5_45.1, element7 [template]
|
||||
// CHECK:STDOUT: %.loc6_16.7: @AsType.%U.loc5_45.1 (%U.091) = splice_inst %.loc6_16.6 [template = %.loc6_16.7 (constants.%.07c)]
|
||||
// CHECK:STDOUT: %.loc6_16.7: @AsType.%U.loc5_45.1 (%U.091) = splice_inst %.loc6_16.6 [template = %.loc6_16.7 (constants.%.51e)]
|
||||
// CHECK:STDOUT: %.loc6_16.8: <instruction> = convert_to_category_action %.loc6_16.2, element1 [template]
|
||||
// CHECK:STDOUT: %.loc6_16.9: @AsType.%U.loc5_45.1 (%U.091) = splice_inst %.loc6_16.8 [template = %.loc6_16.9 (constants.%.687)]
|
||||
// CHECK:STDOUT: %.loc6_16.9: @AsType.%U.loc5_45.1 (%U.091) = splice_inst %.loc6_16.8 [template = %.loc6_16.9 (constants.%.f21)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @AsType.%T.loc5_21.1 (%T.67db0b.1)) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.ref: @AsType.%T.loc5_21.1 (%T.67db0b.1) = name_ref x, %x
|
||||
// CHECK:STDOUT: %U.ref.loc6_19: type = name_ref U, %U.loc5_45.2 [template = %U.loc5_45.1 (constants.%U.091)]
|
||||
// CHECK:STDOUT: %.loc6_16.1: @AsType.%T.loc5_21.1 (%T.67db0b.1) = splice_inst %.loc6_16.4 [template = %.loc6_16.5 (constants.%.b3e)]
|
||||
// CHECK:STDOUT: %.loc6_16.2: @AsType.%U.loc5_45.1 (%U.091) = splice_inst %.loc6_16.6 [template = %.loc6_16.7 (constants.%.07c)]
|
||||
// CHECK:STDOUT: %.loc6_16.3: @AsType.%U.loc5_45.1 (%U.091) = splice_inst %.loc6_16.8 [template = %.loc6_16.9 (constants.%.687)]
|
||||
// CHECK:STDOUT: %.loc6_16.1: @AsType.%T.loc5_21.1 (%T.67db0b.1) = splice_inst %.loc6_16.4 [template = %.loc6_16.5 (constants.%.098)]
|
||||
// CHECK:STDOUT: %.loc6_16.2: @AsType.%U.loc5_45.1 (%U.091) = splice_inst %.loc6_16.6 [template = %.loc6_16.7 (constants.%.51e)]
|
||||
// CHECK:STDOUT: %.loc6_16.3: @AsType.%U.loc5_45.1 (%U.091) = splice_inst %.loc6_16.8 [template = %.loc6_16.9 (constants.%.f21)]
|
||||
// CHECK:STDOUT: %U.ref.loc6_10: type = name_ref U, %U.loc5_45.2 [template = %U.loc5_45.1 (constants.%U.091)]
|
||||
// CHECK:STDOUT: %_: @AsType.%U.loc5_45.1 (%U.091) = wrapper_binding _, %.loc6_16.3
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
@@ -666,11 +666,11 @@ fn Test(d: D) {
|
||||
// CHECK:STDOUT: %require_complete.loc6 => constants.%complete_type.f8a
|
||||
// CHECK:STDOUT: %pattern_type.loc6 => constants.%pattern_type.6b6
|
||||
// CHECK:STDOUT: %_.patt.loc6_8.2 => constants.%_.patt.bed
|
||||
// CHECK:STDOUT: %.loc6_16.4 => constants.%inst.as_compatible.1ff
|
||||
// CHECK:STDOUT: %.loc6_16.4 => constants.%inst.specific_inst.fbf
|
||||
// CHECK:STDOUT: %.loc6_16.5 => invalid
|
||||
// CHECK:STDOUT: %.loc6_16.6 => constants.%inst.splice_block.5e1
|
||||
// CHECK:STDOUT: %.loc6_16.6 => constants.%inst.splice_block.6e4
|
||||
// CHECK:STDOUT: %.loc6_16.7 => invalid
|
||||
// CHECK:STDOUT: %.loc6_16.8 => constants.%inst.splice_block.520
|
||||
// CHECK:STDOUT: %.loc6_16.8 => constants.%inst.splice_block.bce
|
||||
// CHECK:STDOUT: %.loc6_16.9 => invalid
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -688,11 +688,11 @@ fn Test(d: D) {
|
||||
// CHECK:STDOUT: %require_complete.loc6 => constants.%complete_type.f8a
|
||||
// CHECK:STDOUT: %pattern_type.loc6 => constants.%pattern_type.6b6
|
||||
// CHECK:STDOUT: %_.patt.loc6_8.2 => constants.%_.patt.bed
|
||||
// CHECK:STDOUT: %.loc6_16.4 => constants.%inst.as_compatible.d98
|
||||
// CHECK:STDOUT: %.loc6_16.4 => constants.%inst.specific_inst.842
|
||||
// CHECK:STDOUT: %.loc6_16.5 => invalid
|
||||
// CHECK:STDOUT: %.loc6_16.6 => constants.%inst.splice_block.550
|
||||
// CHECK:STDOUT: %.loc6_16.6 => constants.%inst.splice_block.a88
|
||||
// CHECK:STDOUT: %.loc6_16.7 => invalid
|
||||
// CHECK:STDOUT: %.loc6_16.8 => constants.%inst.splice_block.022
|
||||
// CHECK:STDOUT: %.loc6_16.8 => constants.%inst.splice_block.055
|
||||
// CHECK:STDOUT: %.loc6_16.9 => invalid
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+69
-63
@@ -136,9 +136,9 @@ fn G(d: D) -> i32 {
|
||||
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %require_complete.944: <witness> = require_complete_type %T.67db0b.1 [template]
|
||||
// CHECK:STDOUT: %n.patt: %pattern_type.6b6 = value_binding_pattern n [concrete]
|
||||
// CHECK:STDOUT: %.b3e: %T.67db0b.1 = splice_inst @F.%.loc6_17.4 [template]
|
||||
// CHECK:STDOUT: %.432: @F.%.loc6_17.7 (@F.%.loc6_17.7) = splice_inst @F.%.loc6_17.6 [template]
|
||||
// CHECK:STDOUT: %.43a: %i32 = splice_inst @F.%.loc6_17.9 [template]
|
||||
// CHECK:STDOUT: %.098: %T.67db0b.1 = splice_inst @F.%.loc6_17.4 [template]
|
||||
// CHECK:STDOUT: %.7a1: @F.%.loc6_17.7 (@F.%.loc6_17.7) = splice_inst @F.%.loc6_17.6 [template]
|
||||
// CHECK:STDOUT: %.ae0: %i32 = splice_inst @F.%.loc6_17.9 [template]
|
||||
// CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete]
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic]
|
||||
// CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic]
|
||||
@@ -160,28 +160,28 @@ fn G(d: D) -> i32 {
|
||||
// CHECK:STDOUT: %pattern_type.860: type = pattern_type %struct_type.m.n [concrete]
|
||||
// CHECK:STDOUT: %x.param_patt.c8a: %pattern_type.860 = value_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %x.patt.3a7: %pattern_type.860 = wrapper_binding_pattern x, %x.param_patt.c8a [concrete]
|
||||
// CHECK:STDOUT: %inst.as_compatible.d98: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.f8c: %C = as_compatible @F.%x.ref
|
||||
// CHECK:STDOUT: %inst.specific_inst.669: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.bfd: %C = specific_inst @F.%x.ref, @F(%C)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.1c3: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.ba1: %i32 = splice_block %.1e9 {
|
||||
// CHECK:STDOUT: %inst.splice_block.62c: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.b57: %i32 = splice_block %.232 {
|
||||
// CHECK:STDOUT: %n.ref: %C.elem = name_ref n, @C.%field_decl [concrete = @C.%field_decl]
|
||||
// CHECK:STDOUT: %.a48: ref %i32 = class_element_access %.f8c, element0
|
||||
// CHECK:STDOUT: %.1e9: %i32 = acquire_value %.a48
|
||||
// CHECK:STDOUT: %.d33: ref %i32 = class_element_access %.bfd, element0
|
||||
// CHECK:STDOUT: %.232: %i32 = acquire_value %.d33
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.4ec: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.0b7: %i32 = splice_block %.ba1 {}
|
||||
// CHECK:STDOUT: %inst.splice_block.575: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.51a: %i32 = splice_block %.b57 {}
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %complete_type.08f: <witness> = complete_type_witness %struct_type.m.n [concrete]
|
||||
// CHECK:STDOUT: %inst.as_compatible.bba: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.a89: %struct_type.m.n = as_compatible @F.%x.ref
|
||||
// CHECK:STDOUT: %inst.specific_inst.7c9: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.d1d: %struct_type.m.n = specific_inst @F.%x.ref, @F(%struct_type.m.n)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.struct_access: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.ebd: %i32 = struct_access %.a89, element1
|
||||
// CHECK:STDOUT: %.465: %i32 = struct_access %.d1d, element1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.1b4: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.214: %i32 = splice_block %.ebd {}
|
||||
// CHECK:STDOUT: %inst.splice_block.177: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.605: %i32 = splice_block %.465 {}
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -222,20 +222,20 @@ fn G(d: D) -> i32 {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %T.loc5_16.1 [template = %require_complete (constants.%require_complete.944)]
|
||||
// CHECK:STDOUT: %.loc6_17.4: <instruction> = refine_type_action %x.ref, %T.loc5_16.1 [template]
|
||||
// CHECK:STDOUT: %.loc6_17.5: @F.%T.loc5_16.1 (%T.67db0b.1) = splice_inst %.loc6_17.4 [template = %.loc6_17.5 (constants.%.b3e)]
|
||||
// CHECK:STDOUT: %.loc6_17.4: <instruction> = refine_inst_action %x.ref [template]
|
||||
// CHECK:STDOUT: %.loc6_17.5: @F.%T.loc5_16.1 (%T.67db0b.1) = splice_inst %.loc6_17.4 [template = %.loc6_17.5 (constants.%.098)]
|
||||
// CHECK:STDOUT: %.loc6_17.6: <instruction> = access_member_action %.loc6_17.1, n [template]
|
||||
// CHECK:STDOUT: %.loc6_17.7: type = type_of_inst %.loc6_17.6 [template]
|
||||
// CHECK:STDOUT: %.loc6_17.8: @F.%.loc6_17.7 (@F.%.loc6_17.7) = splice_inst %.loc6_17.6 [template = %.loc6_17.8 (constants.%.432)]
|
||||
// CHECK:STDOUT: %.loc6_17.8: @F.%.loc6_17.7 (@F.%.loc6_17.7) = splice_inst %.loc6_17.6 [template = %.loc6_17.8 (constants.%.7a1)]
|
||||
// CHECK:STDOUT: %.loc6_17.9: <instruction> = convert_to_value_action %.loc6_17.2, constants.%i32 [template]
|
||||
// CHECK:STDOUT: %.loc6_17.10: %i32 = splice_inst %.loc6_17.9 [template = %.loc6_17.10 (constants.%.43a)]
|
||||
// CHECK:STDOUT: %.loc6_17.10: %i32 = splice_inst %.loc6_17.9 [template = %.loc6_17.10 (constants.%.ae0)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @F.%T.loc5_16.1 (%T.67db0b.1)) -> out %return.param: %i32 {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.ref: @F.%T.loc5_16.1 (%T.67db0b.1) = name_ref x, %x
|
||||
// CHECK:STDOUT: %.loc6_17.1: @F.%T.loc5_16.1 (%T.67db0b.1) = splice_inst %.loc6_17.4 [template = %.loc6_17.5 (constants.%.b3e)]
|
||||
// CHECK:STDOUT: %.loc6_17.2: @F.%.loc6_17.7 (@F.%.loc6_17.7) = splice_inst %.loc6_17.6 [template = %.loc6_17.8 (constants.%.432)]
|
||||
// CHECK:STDOUT: %.loc6_17.3: %i32 = splice_inst %.loc6_17.9 [template = %.loc6_17.10 (constants.%.43a)]
|
||||
// CHECK:STDOUT: %.loc6_17.1: @F.%T.loc5_16.1 (%T.67db0b.1) = splice_inst %.loc6_17.4 [template = %.loc6_17.5 (constants.%.098)]
|
||||
// CHECK:STDOUT: %.loc6_17.2: @F.%.loc6_17.7 (@F.%.loc6_17.7) = splice_inst %.loc6_17.6 [template = %.loc6_17.8 (constants.%.7a1)]
|
||||
// CHECK:STDOUT: %.loc6_17.3: %i32 = splice_inst %.loc6_17.9 [template = %.loc6_17.10 (constants.%.ae0)]
|
||||
// CHECK:STDOUT: %i32.loc6: type = type_literal constants.%i32 [concrete = constants.%i32]
|
||||
// CHECK:STDOUT: %n: %i32 = wrapper_binding n, %.loc6_17.3
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
@@ -268,12 +268,12 @@ fn G(d: D) -> i32 {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.cdf
|
||||
// CHECK:STDOUT: %.loc6_17.4 => constants.%inst.as_compatible.d98
|
||||
// CHECK:STDOUT: %.loc6_17.4 => constants.%inst.specific_inst.669
|
||||
// CHECK:STDOUT: %.loc6_17.5 => invalid
|
||||
// CHECK:STDOUT: %.loc6_17.6 => constants.%inst.splice_block.1c3
|
||||
// CHECK:STDOUT: %.loc6_17.6 => constants.%inst.splice_block.62c
|
||||
// CHECK:STDOUT: %.loc6_17.7 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc6_17.8 => invalid
|
||||
// CHECK:STDOUT: %.loc6_17.9 => constants.%inst.splice_block.4ec
|
||||
// CHECK:STDOUT: %.loc6_17.9 => constants.%inst.splice_block.575
|
||||
// CHECK:STDOUT: %.loc6_17.10 => invalid
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -286,12 +286,12 @@ fn G(d: D) -> i32 {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.08f
|
||||
// CHECK:STDOUT: %.loc6_17.4 => constants.%inst.as_compatible.bba
|
||||
// CHECK:STDOUT: %.loc6_17.4 => constants.%inst.specific_inst.7c9
|
||||
// CHECK:STDOUT: %.loc6_17.5 => invalid
|
||||
// CHECK:STDOUT: %.loc6_17.6 => constants.%inst.struct_access
|
||||
// CHECK:STDOUT: %.loc6_17.7 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc6_17.8 => invalid
|
||||
// CHECK:STDOUT: %.loc6_17.9 => constants.%inst.splice_block.1b4
|
||||
// CHECK:STDOUT: %.loc6_17.9 => constants.%inst.splice_block.177
|
||||
// CHECK:STDOUT: %.loc6_17.10 => invalid
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -317,8 +317,8 @@ fn G(d: D) -> i32 {
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
|
||||
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %require_complete.944: <witness> = require_complete_type %T [template]
|
||||
// CHECK:STDOUT: %.b3e: %T = splice_inst @F.%.loc10_11.3 [template]
|
||||
// CHECK:STDOUT: %.244: @F.%.loc10_11.6 (@F.%.loc10_11.6) = splice_inst @F.%.loc10_11.5 [template]
|
||||
// CHECK:STDOUT: %.098: %T = splice_inst @F.%.loc10_11.3 [template]
|
||||
// CHECK:STDOUT: %.942: @F.%.loc10_11.6 (@F.%.loc10_11.6) = splice_inst @F.%.loc10_11.5 [template]
|
||||
// CHECK:STDOUT: %Dest: type = symbolic_binding Dest, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.3aa: type = facet_type <@ImplicitAs, @ImplicitAs(%Dest)> [symbolic]
|
||||
// CHECK:STDOUT: %Self.294: %ImplicitAs.type.3aa = symbolic_binding Self, 1 [symbolic]
|
||||
@@ -326,24 +326,25 @@ fn G(d: D) -> i32 {
|
||||
// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.945: %ImplicitAs.WithSelf.Convert.type.97e = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %ImplicitAs.assoc_type.e23: type = assoc_entity_type @ImplicitAs, @ImplicitAs(%i32) [concrete]
|
||||
// CHECK:STDOUT: %assoc0.368: %ImplicitAs.assoc_type.e23 = assoc_entity element0, imports.%Core.import_ref.cb2 [concrete]
|
||||
// CHECK:STDOUT: %.841: @F.%.loc10_17.6 (@F.%.loc10_17.6) = splice_inst @F.%.loc10_17.5 [template]
|
||||
// CHECK:STDOUT: %.cbd: @F.%.loc10_17.9 (@F.%.loc10_17.9) = splice_inst @F.%.loc10_17.8 [template]
|
||||
// CHECK:STDOUT: %.c63: %i32 = splice_inst @F.%.loc10_17.11 [template]
|
||||
// CHECK:STDOUT: %.823: @F.%.loc10_17.7 (@F.%.loc10_17.7) = splice_inst @F.%.loc10_17.6 [template]
|
||||
// CHECK:STDOUT: %.497: @F.%.loc10_17.10 (@F.%.loc10_17.10) = splice_inst @F.%.loc10_17.9 [template]
|
||||
// CHECK:STDOUT: %.572: %i32 = splice_inst @F.%.loc10_17.12 [template]
|
||||
// CHECK:STDOUT: %.829: %i32 = splice_inst @F.%.loc10_17.14 [template]
|
||||
// CHECK:STDOUT: %D: type = class_type @D [concrete]
|
||||
// CHECK:STDOUT: %struct_type.base.085: type = struct_type {.base: %C} [concrete]
|
||||
// CHECK:STDOUT: %complete_type.756: <witness> = complete_type_witness %struct_type.base.085 [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.d8d: type = pattern_type %D [concrete]
|
||||
// CHECK:STDOUT: %x.param_patt.23b: %pattern_type.d8d = value_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %x.patt.c51: %pattern_type.d8d = wrapper_binding_pattern x, %x.param_patt.23b [concrete]
|
||||
// CHECK:STDOUT: %inst.as_compatible: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.602: %D = as_compatible @F.%x.ref
|
||||
// CHECK:STDOUT: %inst.specific_inst: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.24c: %D = specific_inst @F.%x.ref, @F(%D)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.08b: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.1843e: ref %i32 = splice_block %.a6d {
|
||||
// CHECK:STDOUT: %.68a: %C = as_compatible %.602
|
||||
// CHECK:STDOUT: %.c3b: ref %C = class_element_access %.68a, element0
|
||||
// CHECK:STDOUT: %.59a: ref %C = converted %.602, %.c3b
|
||||
// CHECK:STDOUT: %.a6d: ref %i32 = class_element_access %.59a, element0
|
||||
// CHECK:STDOUT: %inst.splice_block.edc: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.859: ref %i32 = splice_block %.b2f {
|
||||
// CHECK:STDOUT: %.179: %C = as_compatible %.24c
|
||||
// CHECK:STDOUT: %.8a5: ref %C = class_element_access %.179, element0
|
||||
// CHECK:STDOUT: %.313: ref %C = converted %.24c, %.8a5
|
||||
// CHECK:STDOUT: %.b2f: ref %i32 = class_element_access %.313, element0
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.edd: <instruction> = inst_value [concrete] {
|
||||
@@ -387,32 +388,35 @@ fn G(d: D) -> i32 {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %T.loc9_16.1 [template = %require_complete (constants.%require_complete.944)]
|
||||
// CHECK:STDOUT: %.loc10_11.3: <instruction> = refine_type_action %x.ref, %T.loc9_16.1 [template]
|
||||
// CHECK:STDOUT: %.loc10_11.4: @F.%T.loc9_16.1 (%T) = splice_inst %.loc10_11.3 [template = %.loc10_11.4 (constants.%.b3e)]
|
||||
// CHECK:STDOUT: %.loc10_11.3: <instruction> = refine_inst_action %x.ref [template]
|
||||
// CHECK:STDOUT: %.loc10_11.4: @F.%T.loc9_16.1 (%T) = splice_inst %.loc10_11.3 [template = %.loc10_11.4 (constants.%.098)]
|
||||
// CHECK:STDOUT: %.loc10_11.5: <instruction> = compound_member_access_action %.loc10_11.1, %n.ref [template]
|
||||
// CHECK:STDOUT: %.loc10_11.6: type = type_of_inst %.loc10_11.5 [template]
|
||||
// CHECK:STDOUT: %.loc10_11.7: @F.%.loc10_11.6 (@F.%.loc10_11.6) = splice_inst %.loc10_11.5 [template = %.loc10_11.7 (constants.%.244)]
|
||||
// CHECK:STDOUT: %.loc10_17.5: <instruction> = compound_member_access_action %.loc10_11.2, constants.%assoc0.368 [template]
|
||||
// CHECK:STDOUT: %.loc10_17.6: type = type_of_inst %.loc10_17.5 [template]
|
||||
// CHECK:STDOUT: %.loc10_17.7: @F.%.loc10_17.6 (@F.%.loc10_17.6) = splice_inst %.loc10_17.5 [template = %.loc10_17.7 (constants.%.841)]
|
||||
// CHECK:STDOUT: %.loc10_17.8: <instruction> = call_action (%.loc10_17.1), true [template]
|
||||
// CHECK:STDOUT: %.loc10_17.9: type = type_of_inst %.loc10_17.8 [template]
|
||||
// CHECK:STDOUT: %.loc10_17.10: @F.%.loc10_17.9 (@F.%.loc10_17.9) = splice_inst %.loc10_17.8 [template = %.loc10_17.10 (constants.%.cbd)]
|
||||
// CHECK:STDOUT: %.loc10_17.11: <instruction> = convert_to_category_action %.loc10_17.3, element10 [template]
|
||||
// CHECK:STDOUT: %.loc10_17.12: %i32 = splice_inst %.loc10_17.11 [template = %.loc10_17.12 (constants.%.c63)]
|
||||
// CHECK:STDOUT: %.loc10_11.7: @F.%.loc10_11.6 (@F.%.loc10_11.6) = splice_inst %.loc10_11.5 [template = %.loc10_11.7 (constants.%.942)]
|
||||
// CHECK:STDOUT: %.loc10_17.6: <instruction> = compound_member_access_action %.loc10_11.2, constants.%assoc0.368 [template]
|
||||
// CHECK:STDOUT: %.loc10_17.7: type = type_of_inst %.loc10_17.6 [template]
|
||||
// CHECK:STDOUT: %.loc10_17.8: @F.%.loc10_17.7 (@F.%.loc10_17.7) = splice_inst %.loc10_17.6 [template = %.loc10_17.8 (constants.%.823)]
|
||||
// CHECK:STDOUT: %.loc10_17.9: <instruction> = call_action (%.loc10_17.1), true [template]
|
||||
// CHECK:STDOUT: %.loc10_17.10: type = type_of_inst %.loc10_17.9 [template]
|
||||
// CHECK:STDOUT: %.loc10_17.11: @F.%.loc10_17.10 (@F.%.loc10_17.10) = splice_inst %.loc10_17.9 [template = %.loc10_17.11 (constants.%.497)]
|
||||
// CHECK:STDOUT: %.loc10_17.12: <instruction> = refine_inst_action %.loc10_17.3 [template]
|
||||
// CHECK:STDOUT: %.loc10_17.13: %i32 = splice_inst %.loc10_17.12 [template = %.loc10_17.13 (constants.%.572)]
|
||||
// CHECK:STDOUT: %.loc10_17.14: <instruction> = convert_to_category_action %.loc10_17.4, element10 [template]
|
||||
// CHECK:STDOUT: %.loc10_17.15: %i32 = splice_inst %.loc10_17.14 [template = %.loc10_17.15 (constants.%.829)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @F.%T.loc9_16.1 (%T)) -> out %return.param: %i32 {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.ref: @F.%T.loc9_16.1 (%T) = name_ref x, %x
|
||||
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
|
||||
// CHECK:STDOUT: %n.ref: %C.elem = name_ref n, @C.%field_decl [concrete = @C.%field_decl]
|
||||
// CHECK:STDOUT: %.loc10_11.1: @F.%T.loc9_16.1 (%T) = splice_inst %.loc10_11.3 [template = %.loc10_11.4 (constants.%.b3e)]
|
||||
// CHECK:STDOUT: %.loc10_11.2: @F.%.loc10_11.6 (@F.%.loc10_11.6) = splice_inst %.loc10_11.5 [template = %.loc10_11.7 (constants.%.244)]
|
||||
// CHECK:STDOUT: %.loc10_17.1: @F.%.loc10_17.6 (@F.%.loc10_17.6) = splice_inst %.loc10_17.5 [template = %.loc10_17.7 (constants.%.841)]
|
||||
// CHECK:STDOUT: %.loc10_17.2: @F.%.loc10_17.9 (@F.%.loc10_17.9) = splice_inst %.loc10_17.8 [template = %.loc10_17.10 (constants.%.cbd)]
|
||||
// CHECK:STDOUT: %.loc10_17.3: %i32 = converted %.loc10_11.2, %.loc10_17.2 [template = %.loc10_17.10 (constants.%.cbd)]
|
||||
// CHECK:STDOUT: %.loc10_17.4: %i32 = splice_inst %.loc10_17.11 [template = %.loc10_17.12 (constants.%.c63)]
|
||||
// CHECK:STDOUT: return %.loc10_17.4
|
||||
// CHECK:STDOUT: %.loc10_11.1: @F.%T.loc9_16.1 (%T) = splice_inst %.loc10_11.3 [template = %.loc10_11.4 (constants.%.098)]
|
||||
// CHECK:STDOUT: %.loc10_11.2: @F.%.loc10_11.6 (@F.%.loc10_11.6) = splice_inst %.loc10_11.5 [template = %.loc10_11.7 (constants.%.942)]
|
||||
// CHECK:STDOUT: %.loc10_17.1: @F.%.loc10_17.7 (@F.%.loc10_17.7) = splice_inst %.loc10_17.6 [template = %.loc10_17.8 (constants.%.823)]
|
||||
// CHECK:STDOUT: %.loc10_17.2: @F.%.loc10_17.10 (@F.%.loc10_17.10) = splice_inst %.loc10_17.9 [template = %.loc10_17.11 (constants.%.497)]
|
||||
// CHECK:STDOUT: %.loc10_17.3: %i32 = converted %.loc10_11.2, %.loc10_17.2 [template = %.loc10_17.11 (constants.%.497)]
|
||||
// CHECK:STDOUT: %.loc10_17.4: %i32 = splice_inst %.loc10_17.12 [template = %.loc10_17.13 (constants.%.572)]
|
||||
// CHECK:STDOUT: %.loc10_17.5: %i32 = splice_inst %.loc10_17.14 [template = %.loc10_17.15 (constants.%.829)]
|
||||
// CHECK:STDOUT: return %.loc10_17.5
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -433,18 +437,20 @@ fn G(d: D) -> i32 {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.756
|
||||
// CHECK:STDOUT: %.loc10_11.3 => constants.%inst.as_compatible
|
||||
// CHECK:STDOUT: %.loc10_11.3 => constants.%inst.specific_inst
|
||||
// CHECK:STDOUT: %.loc10_11.4 => invalid
|
||||
// CHECK:STDOUT: %.loc10_11.5 => constants.%inst.splice_block.08b
|
||||
// CHECK:STDOUT: %.loc10_11.5 => constants.%inst.splice_block.edc
|
||||
// CHECK:STDOUT: %.loc10_11.6 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc10_11.7 => invalid
|
||||
// CHECK:STDOUT: %.loc10_17.5 => constants.%inst.splice_block.edd
|
||||
// CHECK:STDOUT: %.loc10_17.6 => <error>
|
||||
// CHECK:STDOUT: %.loc10_17.6 => constants.%inst.splice_block.edd
|
||||
// CHECK:STDOUT: %.loc10_17.7 => <error>
|
||||
// CHECK:STDOUT: %.loc10_17.8 => <error>
|
||||
// CHECK:STDOUT: %.loc10_17.9 => <error>
|
||||
// CHECK:STDOUT: %.loc10_17.10 => <error>
|
||||
// CHECK:STDOUT: %.loc10_17.11 => <error>
|
||||
// CHECK:STDOUT: %.loc10_17.12 => <error>
|
||||
// CHECK:STDOUT: %.loc10_17.13 => <error>
|
||||
// CHECK:STDOUT: %.loc10_17.14 => <error>
|
||||
// CHECK:STDOUT: %.loc10_17.15 => <error>
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+46
-38
@@ -34,22 +34,25 @@ interface I(template T: type, N: T.I1) {
|
||||
// CHECK:STDOUT: %pattern_type.98f: type = pattern_type type [concrete]
|
||||
// CHECK:STDOUT: %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template]
|
||||
// CHECK:STDOUT: %T: type = symbolic_binding T, 0, template [template]
|
||||
// CHECK:STDOUT: %.e63: @I.%.loc16_35.2 (@I.%.loc16_35.2) = splice_inst @I.%.loc16_35.1 [template]
|
||||
// CHECK:STDOUT: %.c68: type = splice_inst @I.%.loc16_35.4 [template]
|
||||
// CHECK:STDOUT: %pattern_type.6d1: type = pattern_type %.c68 [template]
|
||||
// CHECK:STDOUT: %N.patt.718: %pattern_type.6d1 = symbolic_binding_pattern N, 1 [template]
|
||||
// CHECK:STDOUT: %N: %.c68 = symbolic_binding N, 1 [template]
|
||||
// CHECK:STDOUT: %.299: <instruction> = access_member_action %T, I1 [template]
|
||||
// CHECK:STDOUT: %.912: type = type_of_inst %.299 [template]
|
||||
// CHECK:STDOUT: %.a7e: %.912 = splice_inst %.299 [template]
|
||||
// CHECK:STDOUT: %.32e: <instruction> = convert_to_value_action %.a7e, type [template]
|
||||
// CHECK:STDOUT: %.408: type = splice_inst %.32e [template]
|
||||
// CHECK:STDOUT: %pattern_type.d1e: type = pattern_type %.408 [template]
|
||||
// CHECK:STDOUT: %N.patt.47e: %pattern_type.d1e = symbolic_binding_pattern N, 1 [template]
|
||||
// CHECK:STDOUT: %.eec: type = splice_inst @I.%.loc16_35.1 [template]
|
||||
// CHECK:STDOUT: %.e35: @I.%.loc16_35.4 (@I.%.loc16_35.4) = splice_inst @I.%.loc16_35.3 [template]
|
||||
// CHECK:STDOUT: %.476: type = splice_inst @I.%.loc16_35.6 [template]
|
||||
// CHECK:STDOUT: %pattern_type.8f9: type = pattern_type %.476 [template]
|
||||
// CHECK:STDOUT: %N.patt.9e2: %pattern_type.8f9 = symbolic_binding_pattern N, 1 [template]
|
||||
// CHECK:STDOUT: %N: %.476 = symbolic_binding N, 1 [template]
|
||||
// CHECK:STDOUT: %.dc4: <instruction> = refine_inst_action %T [template]
|
||||
// CHECK:STDOUT: %.40e: type = splice_inst %.dc4 [template]
|
||||
// CHECK:STDOUT: %.2e4: <instruction> = access_member_action %.40e, I1 [template]
|
||||
// CHECK:STDOUT: %.ffd: type = type_of_inst %.2e4 [template]
|
||||
// CHECK:STDOUT: %.242: %.ffd = splice_inst %.2e4 [template]
|
||||
// CHECK:STDOUT: %.626: <instruction> = convert_to_value_action %.242, type [template]
|
||||
// CHECK:STDOUT: %.e0e: type = splice_inst %.626 [template]
|
||||
// CHECK:STDOUT: %pattern_type.55f: type = pattern_type %.e0e [template]
|
||||
// CHECK:STDOUT: %N.patt.f4e: %pattern_type.55f = symbolic_binding_pattern N, 1 [template]
|
||||
// CHECK:STDOUT: %I.type.335: type = generic_interface_type @I [concrete]
|
||||
// CHECK:STDOUT: %I.generic: %I.type.335 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %I.type.223: type = facet_type <@I, @I(%T, %N)> [template]
|
||||
// CHECK:STDOUT: %Self: %I.type.223 = symbolic_binding Self, 2 [template]
|
||||
// CHECK:STDOUT: %I.type.f82: type = facet_type <@I, @I(%T, %N)> [template]
|
||||
// CHECK:STDOUT: %Self: %I.type.f82 = symbolic_binding Self, 2 [template]
|
||||
// CHECK:STDOUT: %I.assoc_type: type = assoc_entity_type @I, @I(%T, %N) [template]
|
||||
// CHECK:STDOUT: %assoc0: %I.assoc_type = assoc_entity element0, @I.WithSelf.%I1 [template]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -57,41 +60,44 @@ interface I(template T: type, N: T.I1) {
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: %I.decl: %I.type.335 = interface_decl @I [concrete = constants.%I.generic] {
|
||||
// CHECK:STDOUT: %T.patt.loc16_23.1: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc16_23.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %N.patt.loc16_32.1: @I.%pattern_type (%pattern_type.6d1) = symbolic_binding_pattern N, 1 [template = %N.patt.loc16_32.2 (constants.%N.patt.718)]
|
||||
// CHECK:STDOUT: %N.patt.loc16_32.1: @I.%pattern_type (%pattern_type.8f9) = symbolic_binding_pattern N, 1 [template = %N.patt.loc16_32.2 (constants.%N.patt.9e2)]
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc16_25.1: type = splice_block %.loc16_25.2 [concrete = type] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc16_23: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %.loc16_25.2: type = type_literal type [concrete = type]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.loc16_23.2: type = symbolic_binding T, 0, template [template = %T.loc16_23.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc16_35.6: type = splice_block %.loc16_35.8 [template = %.loc16_35.5 (constants.%.c68)] {
|
||||
// CHECK:STDOUT: %.loc16_35.8: type = splice_block %.loc16_35.11 [template = %.loc16_35.7 (constants.%.476)] {
|
||||
// CHECK:STDOUT: %.Self.frozen.loc16_32: %type = symbolic_binding .Self [symbolic_self = constants.%.Self.frozen]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc16_23.2 [template = %T.loc16_23.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc16_35.7: @I.%.loc16_35.2 (@I.%.loc16_35.2) = splice_inst %.loc16_35.1 [template = %.loc16_35.3 (constants.%.e63)]
|
||||
// CHECK:STDOUT: %.loc16_35.8: type = splice_inst %.loc16_35.4 [template = %.loc16_35.5 (constants.%.c68)]
|
||||
// CHECK:STDOUT: %.loc16_35.9: type = splice_inst %.loc16_35.1 [template = %.loc16_35.2 (constants.%.eec)]
|
||||
// CHECK:STDOUT: %.loc16_35.10: @I.%.loc16_35.4 (@I.%.loc16_35.4) = splice_inst %.loc16_35.3 [template = %.loc16_35.5 (constants.%.e35)]
|
||||
// CHECK:STDOUT: %.loc16_35.11: type = splice_inst %.loc16_35.6 [template = %.loc16_35.7 (constants.%.476)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %N.loc16_32.2: @I.%.loc16_35.5 (%.c68) = symbolic_binding N, 1 [template = %N.loc16_32.1 (constants.%N)]
|
||||
// CHECK:STDOUT: %N.loc16_32.2: @I.%.loc16_35.7 (%.476) = symbolic_binding N, 1 [template = %N.loc16_32.1 (constants.%N)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: generic interface @I(%T.loc16_23.2: type, %N.loc16_32.2: @I.%.loc16_35.5 (%.c68)) {
|
||||
// CHECK:STDOUT: generic interface @I(%T.loc16_23.2: type, %N.loc16_32.2: @I.%.loc16_35.7 (%.476)) {
|
||||
// CHECK:STDOUT: %T.patt.loc16_23.2: %pattern_type.98f = symbolic_binding_pattern T, 0, template [template = %T.patt.loc16_23.2 (constants.%T.patt)]
|
||||
// CHECK:STDOUT: %T.loc16_23.1: type = symbolic_binding T, 0, template [template = %T.loc16_23.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc16_35.1: <instruction> = access_member_action %T.ref, I1 [template]
|
||||
// CHECK:STDOUT: %.loc16_35.2: type = type_of_inst %.loc16_35.1 [template]
|
||||
// CHECK:STDOUT: %.loc16_35.3: @I.%.loc16_35.2 (@I.%.loc16_35.2) = splice_inst %.loc16_35.1 [template = %.loc16_35.3 (constants.%.e63)]
|
||||
// CHECK:STDOUT: %.loc16_35.4: <instruction> = convert_to_value_action %.loc16_35.7, type [template]
|
||||
// CHECK:STDOUT: %.loc16_35.5: type = splice_inst %.loc16_35.4 [template = %.loc16_35.5 (constants.%.c68)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %.loc16_35.5 [template = %pattern_type (constants.%pattern_type.6d1)]
|
||||
// CHECK:STDOUT: %N.patt.loc16_32.2: @I.%pattern_type (%pattern_type.6d1) = symbolic_binding_pattern N, 1 [template = %N.patt.loc16_32.2 (constants.%N.patt.718)]
|
||||
// CHECK:STDOUT: %N.loc16_32.1: @I.%.loc16_35.5 (%.c68) = symbolic_binding N, 1 [template = %N.loc16_32.1 (constants.%N)]
|
||||
// CHECK:STDOUT: %.loc16_35.1: <instruction> = refine_inst_action %T.ref [template]
|
||||
// CHECK:STDOUT: %.loc16_35.2: type = splice_inst %.loc16_35.1 [template = %.loc16_35.2 (constants.%.eec)]
|
||||
// CHECK:STDOUT: %.loc16_35.3: <instruction> = access_member_action %.loc16_35.9, I1 [template]
|
||||
// CHECK:STDOUT: %.loc16_35.4: type = type_of_inst %.loc16_35.3 [template]
|
||||
// CHECK:STDOUT: %.loc16_35.5: @I.%.loc16_35.4 (@I.%.loc16_35.4) = splice_inst %.loc16_35.3 [template = %.loc16_35.5 (constants.%.e35)]
|
||||
// CHECK:STDOUT: %.loc16_35.6: <instruction> = convert_to_value_action %.loc16_35.10, type [template]
|
||||
// CHECK:STDOUT: %.loc16_35.7: type = splice_inst %.loc16_35.6 [template = %.loc16_35.7 (constants.%.476)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %.loc16_35.7 [template = %pattern_type (constants.%pattern_type.8f9)]
|
||||
// CHECK:STDOUT: %N.patt.loc16_32.2: @I.%pattern_type (%pattern_type.8f9) = symbolic_binding_pattern N, 1 [template = %N.patt.loc16_32.2 (constants.%N.patt.9e2)]
|
||||
// CHECK:STDOUT: %N.loc16_32.1: @I.%.loc16_35.7 (%.476) = symbolic_binding N, 1 [template = %N.loc16_32.1 (constants.%N)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T.loc16_23.1, %N.loc16_32.1)> [template = %I.type (constants.%I.type.223)]
|
||||
// CHECK:STDOUT: %Self.loc16_40.2: @I.%I.type (%I.type.223) = symbolic_binding Self, 2 [template = %Self.loc16_40.2 (constants.%Self)]
|
||||
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T.loc16_23.1, %N.loc16_32.1)> [template = %I.type (constants.%I.type.f82)]
|
||||
// CHECK:STDOUT: %Self.loc16_40.2: @I.%I.type (%I.type.f82) = symbolic_binding Self, 2 [template = %Self.loc16_40.2 (constants.%Self)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: interface {
|
||||
// CHECK:STDOUT: %Self.loc16_40.1: @I.%I.type (%I.type.223) = symbolic_binding Self, 2 [template = %Self.loc16_40.2 (constants.%Self)]
|
||||
// CHECK:STDOUT: %Self.loc16_40.1: @I.%I.type (%I.type.f82) = symbolic_binding Self, 2 [template = %Self.loc16_40.2 (constants.%Self)]
|
||||
// CHECK:STDOUT: %I.WithSelf.decl = interface_with_self_decl @I [concrete]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !with Self:
|
||||
@@ -111,13 +117,15 @@ interface I(template T: type, N: T.I1) {
|
||||
// CHECK:STDOUT: specific @I(constants.%T, constants.%N) {
|
||||
// CHECK:STDOUT: %T.patt.loc16_23.2 => constants.%T.patt
|
||||
// CHECK:STDOUT: %T.loc16_23.1 => constants.%T
|
||||
// CHECK:STDOUT: %.loc16_35.1 => constants.%.299
|
||||
// CHECK:STDOUT: %.loc16_35.2 => constants.%.912
|
||||
// CHECK:STDOUT: %.loc16_35.3 => constants.%.a7e
|
||||
// CHECK:STDOUT: %.loc16_35.4 => constants.%.32e
|
||||
// CHECK:STDOUT: %.loc16_35.5 => constants.%.408
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d1e
|
||||
// CHECK:STDOUT: %N.patt.loc16_32.2 => constants.%N.patt.47e
|
||||
// CHECK:STDOUT: %.loc16_35.1 => constants.%.dc4
|
||||
// CHECK:STDOUT: %.loc16_35.2 => constants.%.40e
|
||||
// CHECK:STDOUT: %.loc16_35.3 => constants.%.2e4
|
||||
// CHECK:STDOUT: %.loc16_35.4 => constants.%.ffd
|
||||
// CHECK:STDOUT: %.loc16_35.5 => constants.%.242
|
||||
// CHECK:STDOUT: %.loc16_35.6 => constants.%.626
|
||||
// CHECK:STDOUT: %.loc16_35.7 => constants.%.e0e
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.55f
|
||||
// CHECK:STDOUT: %N.patt.loc16_32.2 => constants.%N.patt.f4e
|
||||
// CHECK:STDOUT: %N.loc16_32.1 => constants.%N
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
|
||||
+28
-24
@@ -59,10 +59,10 @@ fn F(template c: C) {
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
|
||||
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %require_complete.944: <witness> = require_complete_type %T [template]
|
||||
// CHECK:STDOUT: %.b3e: %T = splice_inst @F.%.loc11_5.4 [template]
|
||||
// CHECK:STDOUT: %.432: @F.%.loc11_5.7 (@F.%.loc11_5.7) = splice_inst @F.%.loc11_5.6 [template]
|
||||
// CHECK:STDOUT: %require_complete.681: <witness> = require_complete_type @F.%.loc11_5.7 [template]
|
||||
// CHECK:STDOUT: %.263: @F.%.loc11_5.7 (@F.%.loc11_5.7) = splice_inst @F.%.loc11_5.9 [template]
|
||||
// CHECK:STDOUT: %.098: %T = splice_inst @F.%.loc11_5.4 [template]
|
||||
// CHECK:STDOUT: %.7a1: @F.%.loc11_5.7 (@F.%.loc11_5.7) = splice_inst @F.%.loc11_5.6 [template]
|
||||
// CHECK:STDOUT: %require_complete.052: <witness> = require_complete_type @F.%.loc11_5.7 [template]
|
||||
// CHECK:STDOUT: %.899: @F.%.loc11_5.7 (@F.%.loc11_5.7) = splice_inst @F.%.loc11_5.9 [template]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -103,21 +103,21 @@ fn F(template c: C) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete.loc6: <witness> = require_complete_type %T.loc6_16.1 [template = %require_complete.loc6 (constants.%require_complete.944)]
|
||||
// CHECK:STDOUT: %.loc11_5.4: <instruction> = refine_type_action %x.ref, %T.loc6_16.1 [template]
|
||||
// CHECK:STDOUT: %.loc11_5.5: @F.%T.loc6_16.1 (%T) = splice_inst %.loc11_5.4 [template = %.loc11_5.5 (constants.%.b3e)]
|
||||
// CHECK:STDOUT: %.loc11_5.4: <instruction> = refine_inst_action %x.ref [template]
|
||||
// CHECK:STDOUT: %.loc11_5.5: @F.%T.loc6_16.1 (%T) = splice_inst %.loc11_5.4 [template = %.loc11_5.5 (constants.%.098)]
|
||||
// CHECK:STDOUT: %.loc11_5.6: <instruction> = access_member_action %.loc11_5.1, n [template]
|
||||
// CHECK:STDOUT: %.loc11_5.7: type = type_of_inst %.loc11_5.6 [template]
|
||||
// CHECK:STDOUT: %.loc11_5.8: @F.%.loc11_5.7 (@F.%.loc11_5.7) = splice_inst %.loc11_5.6 [template = %.loc11_5.8 (constants.%.432)]
|
||||
// CHECK:STDOUT: %require_complete.loc11: <witness> = require_complete_type %.loc11_5.7 [template = %require_complete.loc11 (constants.%require_complete.681)]
|
||||
// CHECK:STDOUT: %.loc11_5.8: @F.%.loc11_5.7 (@F.%.loc11_5.7) = splice_inst %.loc11_5.6 [template = %.loc11_5.8 (constants.%.7a1)]
|
||||
// CHECK:STDOUT: %require_complete.loc11: <witness> = require_complete_type %.loc11_5.7 [template = %require_complete.loc11 (constants.%require_complete.052)]
|
||||
// CHECK:STDOUT: %.loc11_5.9: <instruction> = convert_to_category_action %.loc11_5.2, element1 [template]
|
||||
// CHECK:STDOUT: %.loc11_5.10: @F.%.loc11_5.7 (@F.%.loc11_5.7) = splice_inst %.loc11_5.9 [template = %.loc11_5.10 (constants.%.263)]
|
||||
// CHECK:STDOUT: %.loc11_5.10: @F.%.loc11_5.7 (@F.%.loc11_5.7) = splice_inst %.loc11_5.9 [template = %.loc11_5.10 (constants.%.899)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @F.%T.loc6_16.1 (%T)) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.ref: @F.%T.loc6_16.1 (%T) = name_ref x, %x
|
||||
// CHECK:STDOUT: %.loc11_5.1: @F.%T.loc6_16.1 (%T) = splice_inst %.loc11_5.4 [template = %.loc11_5.5 (constants.%.b3e)]
|
||||
// CHECK:STDOUT: %.loc11_5.2: @F.%.loc11_5.7 (@F.%.loc11_5.7) = splice_inst %.loc11_5.6 [template = %.loc11_5.8 (constants.%.432)]
|
||||
// CHECK:STDOUT: %.loc11_5.3: @F.%.loc11_5.7 (@F.%.loc11_5.7) = splice_inst %.loc11_5.9 [template = %.loc11_5.10 (constants.%.263)]
|
||||
// CHECK:STDOUT: %.loc11_5.1: @F.%T.loc6_16.1 (%T) = splice_inst %.loc11_5.4 [template = %.loc11_5.5 (constants.%.098)]
|
||||
// CHECK:STDOUT: %.loc11_5.2: @F.%.loc11_5.7 (@F.%.loc11_5.7) = splice_inst %.loc11_5.6 [template = %.loc11_5.8 (constants.%.7a1)]
|
||||
// CHECK:STDOUT: %.loc11_5.3: @F.%.loc11_5.7 (@F.%.loc11_5.7) = splice_inst %.loc11_5.9 [template = %.loc11_5.10 (constants.%.899)]
|
||||
// CHECK:STDOUT: %.loc11_3: ref <error> = deref %.loc11_5.3 [concrete = <error>]
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
@@ -149,9 +149,10 @@ fn F(template c: C) {
|
||||
// CHECK:STDOUT: %c: %C = symbolic_binding c, 0, template [template]
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
|
||||
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %.26f: @F.%.loc16_5.4 (@F.%.loc16_5.4) = splice_inst @F.%.loc16_5.3 [template]
|
||||
// CHECK:STDOUT: %require_complete.519: <witness> = require_complete_type @F.%.loc16_5.4 [template]
|
||||
// CHECK:STDOUT: %.2d8: @F.%.loc16_5.4 (@F.%.loc16_5.4) = splice_inst @F.%.loc16_5.6 [template]
|
||||
// CHECK:STDOUT: %.1dc: %C = splice_inst @F.%.loc16_5.4 [template]
|
||||
// CHECK:STDOUT: %.fb4: @F.%.loc16_5.7 (@F.%.loc16_5.7) = splice_inst @F.%.loc16_5.6 [template]
|
||||
// CHECK:STDOUT: %require_complete.d99: <witness> = require_complete_type @F.%.loc16_5.7 [template]
|
||||
// CHECK:STDOUT: %.458: @F.%.loc16_5.7 (@F.%.loc16_5.7) = splice_inst @F.%.loc16_5.9 [template]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
@@ -199,19 +200,22 @@ fn F(template c: C) {
|
||||
// CHECK:STDOUT: %c.loc11_16.1: %C = symbolic_binding c, 0, template [template = %c.loc11_16.1 (constants.%c)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.loc16_5.3: <instruction> = access_member_action %c.ref, n [template]
|
||||
// CHECK:STDOUT: %.loc16_5.4: type = type_of_inst %.loc16_5.3 [template]
|
||||
// CHECK:STDOUT: %.loc16_5.5: @F.%.loc16_5.4 (@F.%.loc16_5.4) = splice_inst %.loc16_5.3 [template = %.loc16_5.5 (constants.%.26f)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.loc16_5.4 [template = %require_complete (constants.%require_complete.519)]
|
||||
// CHECK:STDOUT: %.loc16_5.6: <instruction> = convert_to_category_action %.loc16_5.1, element1 [template]
|
||||
// CHECK:STDOUT: %.loc16_5.7: @F.%.loc16_5.4 (@F.%.loc16_5.4) = splice_inst %.loc16_5.6 [template = %.loc16_5.7 (constants.%.2d8)]
|
||||
// CHECK:STDOUT: %.loc16_5.4: <instruction> = refine_inst_action %c.ref [template]
|
||||
// CHECK:STDOUT: %.loc16_5.5: %C = splice_inst %.loc16_5.4 [template = %.loc16_5.5 (constants.%.1dc)]
|
||||
// CHECK:STDOUT: %.loc16_5.6: <instruction> = access_member_action %.loc16_5.1, n [template]
|
||||
// CHECK:STDOUT: %.loc16_5.7: type = type_of_inst %.loc16_5.6 [template]
|
||||
// CHECK:STDOUT: %.loc16_5.8: @F.%.loc16_5.7 (@F.%.loc16_5.7) = splice_inst %.loc16_5.6 [template = %.loc16_5.8 (constants.%.fb4)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.loc16_5.7 [template = %require_complete (constants.%require_complete.d99)]
|
||||
// CHECK:STDOUT: %.loc16_5.9: <instruction> = convert_to_category_action %.loc16_5.2, element1 [template]
|
||||
// CHECK:STDOUT: %.loc16_5.10: @F.%.loc16_5.7 (@F.%.loc16_5.7) = splice_inst %.loc16_5.9 [template = %.loc16_5.10 (constants.%.458)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %c.ref: %C = name_ref c, %c.loc11_16.2 [template = %c.loc11_16.1 (constants.%c)]
|
||||
// CHECK:STDOUT: %.loc16_5.1: @F.%.loc16_5.4 (@F.%.loc16_5.4) = splice_inst %.loc16_5.3 [template = %.loc16_5.5 (constants.%.26f)]
|
||||
// CHECK:STDOUT: %.loc16_5.2: @F.%.loc16_5.4 (@F.%.loc16_5.4) = splice_inst %.loc16_5.6 [template = %.loc16_5.7 (constants.%.2d8)]
|
||||
// CHECK:STDOUT: %.loc16_3: ref <error> = deref %.loc16_5.2 [concrete = <error>]
|
||||
// CHECK:STDOUT: %.loc16_5.1: %C = splice_inst %.loc16_5.4 [template = %.loc16_5.5 (constants.%.1dc)]
|
||||
// CHECK:STDOUT: %.loc16_5.2: @F.%.loc16_5.7 (@F.%.loc16_5.7) = splice_inst %.loc16_5.6 [template = %.loc16_5.8 (constants.%.fb4)]
|
||||
// CHECK:STDOUT: %.loc16_5.3: @F.%.loc16_5.7 (@F.%.loc16_5.7) = splice_inst %.loc16_5.9 [template = %.loc16_5.10 (constants.%.458)]
|
||||
// CHECK:STDOUT: %.loc16_3: ref <error> = deref %.loc16_5.3 [concrete = <error>]
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
+52
-48
@@ -63,10 +63,10 @@ fn F(template T: type, generic U: type) -> (T, U) {
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.b85212.1: %Copy.WithSelf.Op.type.c85f21.1 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Copy.assoc_type: type = assoc_entity_type @Copy [concrete]
|
||||
// CHECK:STDOUT: %assoc0: %Copy.assoc_type = assoc_entity element0, imports.%Core.import_ref.b5f [concrete]
|
||||
// CHECK:STDOUT: %.f57: %ptr.e8f8f9.1 = splice_inst @F.%.loc6_10.6 [template]
|
||||
// CHECK:STDOUT: %.5d1: @F.%.loc6_10.9 (@F.%.loc6_10.9) = splice_inst @F.%.loc6_10.8 [template]
|
||||
// CHECK:STDOUT: %.c4d: @F.%.loc6_10.12 (@F.%.loc6_10.12) = splice_inst @F.%.loc6_10.11 [template]
|
||||
// CHECK:STDOUT: %.993: @F.%.loc6_10.12 (@F.%.loc6_10.12) = splice_inst @F.%.loc6_12.2 [template]
|
||||
// CHECK:STDOUT: %.e87: %ptr.e8f8f9.1 = splice_inst @F.%.loc6_10.6 [template]
|
||||
// CHECK:STDOUT: %.655: @F.%.loc6_10.9 (@F.%.loc6_10.9) = splice_inst @F.%.loc6_10.8 [template]
|
||||
// CHECK:STDOUT: %.d36: @F.%.loc6_10.12 (@F.%.loc6_10.12) = splice_inst @F.%.loc6_10.11 [template]
|
||||
// CHECK:STDOUT: %.e48: @F.%.loc6_10.12 (@F.%.loc6_10.12) = splice_inst @F.%.loc6_12.2 [template]
|
||||
// CHECK:STDOUT: %empty_tuple: %empty_tuple.type = tuple_value () [concrete]
|
||||
// CHECK:STDOUT: %ptr.843: type = ptr_type %empty_tuple.type [concrete]
|
||||
// CHECK:STDOUT: %ptr.74f: type = ptr_type %ptr.843 [concrete]
|
||||
@@ -82,8 +82,8 @@ fn F(template T: type, generic U: type) -> (T, U) {
|
||||
// CHECK:STDOUT: %F.specific_fn: <specific function> = specific_function %F, @F(%empty_tuple.type) [concrete]
|
||||
// CHECK:STDOUT: %complete_type.2f1: <witness> = complete_type_witness %ptr.74f [concrete]
|
||||
// CHECK:STDOUT: %complete_type.2ab: <witness> = complete_type_witness %ptr.843 [concrete]
|
||||
// CHECK:STDOUT: %inst.as_compatible: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.34a: %ptr.843 = as_compatible @F.%.loc6_10.2
|
||||
// CHECK:STDOUT: %inst.specific_inst: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.091: %ptr.843 = specific_inst @F.%.loc6_10.2, @F(%empty_tuple.type)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %T.67db0b.2: type = symbolic_binding T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.ff5: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67db0b.2) [symbolic]
|
||||
@@ -94,22 +94,22 @@ fn F(template T: type, generic U: type) -> (T, U) {
|
||||
// CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %ptr.843, (%Copy.impl_witness.5e7) [concrete]
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.type.9ea: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete]
|
||||
// CHECK:STDOUT: %.b77: type = fn_type_with_self_type %Copy.WithSelf.Op.type.9ea, %Copy.facet [concrete]
|
||||
// CHECK:STDOUT: %inst.splice_block.64f: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.aaa: <bound method> = splice_block %bound_method.661 {
|
||||
// CHECK:STDOUT: %inst.splice_block.85c: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.8fa: <bound method> = splice_block %bound_method.d03 {
|
||||
// CHECK:STDOUT: %impl.elem0.227: %.b77 = impl_witness_access %Copy.impl_witness.5e7, element0 [concrete = %ptr.as.Copy.impl.Op.ee1]
|
||||
// CHECK:STDOUT: %bound_method.661: <bound method> = bound_method %.34a, %impl.elem0.227
|
||||
// CHECK:STDOUT: %bound_method.d03: <bound method> = bound_method %.091, %impl.elem0.227
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn: <specific function> = specific_function %ptr.as.Copy.impl.Op.ee1, @ptr.as.Copy.impl.Op(%empty_tuple.type) [concrete]
|
||||
// CHECK:STDOUT: %inst.splice_block.a80: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.e72: init %ptr.843 = splice_block %ptr.as.Copy.impl.Op.call {
|
||||
// CHECK:STDOUT: %inst.splice_block.61d: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.d08: init %ptr.843 = splice_block %ptr.as.Copy.impl.Op.call {
|
||||
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0.227, @ptr.as.Copy.impl.Op(%empty_tuple.type) [concrete = %ptr.as.Copy.impl.Op.specific_fn]
|
||||
// CHECK:STDOUT: %bound_method.b01: <bound method> = bound_method %.34a, %specific_fn
|
||||
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.call: init %ptr.843 = call %bound_method.b01(%.34a)
|
||||
// CHECK:STDOUT: %bound_method.733: <bound method> = bound_method %.091, %specific_fn
|
||||
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.call: init %ptr.843 = call %bound_method.733(%.091)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.333: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.932: init %ptr.843 = splice_block %.e72 {}
|
||||
// CHECK:STDOUT: %inst.splice_block.97e: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.db1: init %ptr.843 = splice_block %.d08 {}
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -184,26 +184,26 @@ fn F(template T: type, generic U: type) -> (T, U) {
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete.loc5_25: <witness> = require_complete_type %ptr.loc5_29.1 [template = %require_complete.loc5_25 (constants.%require_complete.fbe)]
|
||||
// CHECK:STDOUT: %require_complete.loc5_32: <witness> = require_complete_type %ptr.loc5_28.1 [template = %require_complete.loc5_32 (constants.%require_complete.ef162c.1)]
|
||||
// CHECK:STDOUT: %.loc6_10.6: <instruction> = refine_type_action %.loc6_10.2, %ptr.loc5_28.1 [template]
|
||||
// CHECK:STDOUT: %.loc6_10.7: @F.%ptr.loc5_28.1 (%ptr.e8f8f9.1) = splice_inst %.loc6_10.6 [template = %.loc6_10.7 (constants.%.f57)]
|
||||
// CHECK:STDOUT: %.loc6_10.6: <instruction> = refine_inst_action %.loc6_10.2 [template]
|
||||
// CHECK:STDOUT: %.loc6_10.7: @F.%ptr.loc5_28.1 (%ptr.e8f8f9.1) = splice_inst %.loc6_10.6 [template = %.loc6_10.7 (constants.%.e87)]
|
||||
// CHECK:STDOUT: %.loc6_10.8: <instruction> = compound_member_access_action %.loc6_10.3, constants.%assoc0 [template]
|
||||
// CHECK:STDOUT: %.loc6_10.9: type = type_of_inst %.loc6_10.8 [template]
|
||||
// CHECK:STDOUT: %.loc6_10.10: @F.%.loc6_10.9 (@F.%.loc6_10.9) = splice_inst %.loc6_10.8 [template = %.loc6_10.10 (constants.%.5d1)]
|
||||
// CHECK:STDOUT: %.loc6_10.10: @F.%.loc6_10.9 (@F.%.loc6_10.9) = splice_inst %.loc6_10.8 [template = %.loc6_10.10 (constants.%.655)]
|
||||
// CHECK:STDOUT: %.loc6_10.11: <instruction> = call_action (%.loc6_10.4), true [template]
|
||||
// CHECK:STDOUT: %.loc6_10.12: type = type_of_inst %.loc6_10.11 [template]
|
||||
// CHECK:STDOUT: %.loc6_10.13: @F.%.loc6_10.12 (@F.%.loc6_10.12) = splice_inst %.loc6_10.11 [template = %.loc6_10.13 (constants.%.c4d)]
|
||||
// CHECK:STDOUT: %.loc6_10.13: @F.%.loc6_10.12 (@F.%.loc6_10.12) = splice_inst %.loc6_10.11 [template = %.loc6_10.13 (constants.%.d36)]
|
||||
// CHECK:STDOUT: %.loc6_12.2: <instruction> = convert_to_category_action %.loc6_10.5, element10 [template]
|
||||
// CHECK:STDOUT: %.loc6_12.3: @F.%.loc6_10.12 (@F.%.loc6_10.12) = splice_inst %.loc6_12.2 [template = %.loc6_12.3 (constants.%.993)]
|
||||
// CHECK:STDOUT: %.loc6_12.3: @F.%.loc6_10.12 (@F.%.loc6_10.12) = splice_inst %.loc6_12.2 [template = %.loc6_12.3 (constants.%.e48)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @F.%ptr.loc5_29.1 (%ptr.125)) -> out %return.param: @F.%ptr.loc5_28.1 (%ptr.e8f8f9.1) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %x.ref: @F.%ptr.loc5_29.1 (%ptr.125) = name_ref x, %x
|
||||
// CHECK:STDOUT: %.loc6_10.1: ref @F.%ptr.loc5_28.1 (%ptr.e8f8f9.1) = deref %x.ref
|
||||
// CHECK:STDOUT: %.loc6_10.2: @F.%ptr.loc5_28.1 (%ptr.e8f8f9.1) = acquire_value %.loc6_10.1
|
||||
// CHECK:STDOUT: %.loc6_10.3: @F.%ptr.loc5_28.1 (%ptr.e8f8f9.1) = splice_inst %.loc6_10.6 [template = %.loc6_10.7 (constants.%.f57)]
|
||||
// CHECK:STDOUT: %.loc6_10.4: @F.%.loc6_10.9 (@F.%.loc6_10.9) = splice_inst %.loc6_10.8 [template = %.loc6_10.10 (constants.%.5d1)]
|
||||
// CHECK:STDOUT: %.loc6_10.5: @F.%.loc6_10.12 (@F.%.loc6_10.12) = splice_inst %.loc6_10.11 [template = %.loc6_10.13 (constants.%.c4d)]
|
||||
// CHECK:STDOUT: %.loc6_12.1: @F.%.loc6_10.12 (@F.%.loc6_10.12) = splice_inst %.loc6_12.2 [template = %.loc6_12.3 (constants.%.993)]
|
||||
// CHECK:STDOUT: %.loc6_10.3: @F.%ptr.loc5_28.1 (%ptr.e8f8f9.1) = splice_inst %.loc6_10.6 [template = %.loc6_10.7 (constants.%.e87)]
|
||||
// CHECK:STDOUT: %.loc6_10.4: @F.%.loc6_10.9 (@F.%.loc6_10.9) = splice_inst %.loc6_10.8 [template = %.loc6_10.10 (constants.%.655)]
|
||||
// CHECK:STDOUT: %.loc6_10.5: @F.%.loc6_10.12 (@F.%.loc6_10.12) = splice_inst %.loc6_10.11 [template = %.loc6_10.13 (constants.%.d36)]
|
||||
// CHECK:STDOUT: %.loc6_12.1: @F.%.loc6_10.12 (@F.%.loc6_10.12) = splice_inst %.loc6_12.2 [template = %.loc6_12.3 (constants.%.e48)]
|
||||
// CHECK:STDOUT: return %.loc6_12.1
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
@@ -247,15 +247,15 @@ fn F(template T: type, generic U: type) -> (T, U) {
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete.loc5_25 => constants.%complete_type.2f1
|
||||
// CHECK:STDOUT: %require_complete.loc5_32 => constants.%complete_type.2ab
|
||||
// CHECK:STDOUT: %.loc6_10.6 => constants.%inst.as_compatible
|
||||
// CHECK:STDOUT: %.loc6_10.6 => constants.%inst.specific_inst
|
||||
// CHECK:STDOUT: %.loc6_10.7 => invalid
|
||||
// CHECK:STDOUT: %.loc6_10.8 => constants.%inst.splice_block.64f
|
||||
// CHECK:STDOUT: %.loc6_10.8 => constants.%inst.splice_block.85c
|
||||
// CHECK:STDOUT: %.loc6_10.9 => <bound method>
|
||||
// CHECK:STDOUT: %.loc6_10.10 => invalid
|
||||
// CHECK:STDOUT: %.loc6_10.11 => constants.%inst.splice_block.a80
|
||||
// CHECK:STDOUT: %.loc6_10.11 => constants.%inst.splice_block.61d
|
||||
// CHECK:STDOUT: %.loc6_10.12 => constants.%ptr.843
|
||||
// CHECK:STDOUT: %.loc6_10.13 => invalid
|
||||
// CHECK:STDOUT: %.loc6_12.2 => constants.%inst.splice_block.333
|
||||
// CHECK:STDOUT: %.loc6_12.2 => constants.%inst.splice_block.97e
|
||||
// CHECK:STDOUT: %.loc6_12.3 => invalid
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -279,15 +279,16 @@ fn F(template T: type, generic U: type) -> (T, U) {
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
|
||||
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %tuple.type.a5e [template]
|
||||
// CHECK:STDOUT: %.dca: @F.%.loc6_16.3 (@F.%.loc6_16.3) = splice_inst @F.%.loc6_16.2 [template]
|
||||
// CHECK:STDOUT: %.eec: type = splice_inst @F.%.loc6_16.3 [template]
|
||||
// CHECK:STDOUT: %.733: @F.%.loc6_16.6 (@F.%.loc6_16.6) = splice_inst @F.%.loc6_16.5 [template]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete]
|
||||
// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %.6c2: @F.%.loc6_17.9 (@F.%.loc6_17.9) = splice_inst @F.%.loc6_17.8 [template]
|
||||
// CHECK:STDOUT: %.201: @F.%.loc6_17.12 (@F.%.loc6_17.12) = splice_inst @F.%.loc6_17.11 [template]
|
||||
// CHECK:STDOUT: %.7f3: @F.%.loc6_17.15 (@F.%.loc6_17.15) = splice_inst @F.%.loc6_17.14 [template]
|
||||
// CHECK:STDOUT: %.e78: @F.%.loc6_17.18 (@F.%.loc6_17.18) = splice_inst @F.%.loc6_17.17 [template]
|
||||
// CHECK:STDOUT: %.a48: %tuple.type.a5e = splice_inst @F.%.loc6_17.20 [template]
|
||||
// CHECK:STDOUT: %.c7e: %tuple.type.a5e = splice_inst @F.%.loc6_17.22 [template]
|
||||
// CHECK:STDOUT: %.a93: @F.%.loc6_17.15 (@F.%.loc6_17.15) = splice_inst @F.%.loc6_17.14 [template]
|
||||
// CHECK:STDOUT: %.d9a: @F.%.loc6_17.18 (@F.%.loc6_17.18) = splice_inst @F.%.loc6_17.17 [template]
|
||||
// CHECK:STDOUT: %.13d: %tuple.type.a5e = splice_inst @F.%.loc6_17.20 [template]
|
||||
// CHECK:STDOUT: %.8c9: %tuple.type.a5e = splice_inst @F.%.loc6_17.22 [template]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
@@ -331,39 +332,42 @@ fn F(template T: type, generic U: type) -> (T, U) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %tuple.type [template = %require_complete (constants.%require_complete)]
|
||||
// CHECK:STDOUT: %.loc6_16.2: <instruction> = call_action (%F.ref, %T.ref.loc6, %U.ref.loc6), false [template]
|
||||
// CHECK:STDOUT: %.loc6_16.3: type = type_of_inst %.loc6_16.2 [template]
|
||||
// CHECK:STDOUT: %.loc6_16.4: @F.%.loc6_16.3 (@F.%.loc6_16.3) = splice_inst %.loc6_16.2 [template = %.loc6_16.4 (constants.%.dca)]
|
||||
// CHECK:STDOUT: %.loc6_16.3: <instruction> = refine_inst_action %T.ref.loc6 [template]
|
||||
// CHECK:STDOUT: %.loc6_16.4: type = splice_inst %.loc6_16.3 [template = %.loc6_16.4 (constants.%.eec)]
|
||||
// CHECK:STDOUT: %.loc6_16.5: <instruction> = call_action (%F.ref, %.loc6_16.1, %U.ref.loc6), false [template]
|
||||
// CHECK:STDOUT: %.loc6_16.6: type = type_of_inst %.loc6_16.5 [template]
|
||||
// CHECK:STDOUT: %.loc6_16.7: @F.%.loc6_16.6 (@F.%.loc6_16.6) = splice_inst %.loc6_16.5 [template = %.loc6_16.7 (constants.%.733)]
|
||||
// CHECK:STDOUT: %.loc6_17.8: <instruction> = call_action (constants.%ImplicitAs.generic, %tuple.type), false [template]
|
||||
// CHECK:STDOUT: %.loc6_17.9: type = type_of_inst %.loc6_17.8 [template]
|
||||
// CHECK:STDOUT: %.loc6_17.10: @F.%.loc6_17.9 (@F.%.loc6_17.9) = splice_inst %.loc6_17.8 [template = %.loc6_17.10 (constants.%.6c2)]
|
||||
// CHECK:STDOUT: %.loc6_17.11: <instruction> = access_member_action %.loc6_17.1, Convert [template]
|
||||
// CHECK:STDOUT: %.loc6_17.12: type = type_of_inst %.loc6_17.11 [template]
|
||||
// CHECK:STDOUT: %.loc6_17.13: @F.%.loc6_17.12 (@F.%.loc6_17.12) = splice_inst %.loc6_17.11 [template = %.loc6_17.13 (constants.%.201)]
|
||||
// CHECK:STDOUT: %.loc6_17.14: <instruction> = compound_member_access_action %.loc6_16.1, %.loc6_17.2 [template]
|
||||
// CHECK:STDOUT: %.loc6_17.14: <instruction> = compound_member_access_action %.loc6_16.2, %.loc6_17.2 [template]
|
||||
// CHECK:STDOUT: %.loc6_17.15: type = type_of_inst %.loc6_17.14 [template]
|
||||
// CHECK:STDOUT: %.loc6_17.16: @F.%.loc6_17.15 (@F.%.loc6_17.15) = splice_inst %.loc6_17.14 [template = %.loc6_17.16 (constants.%.7f3)]
|
||||
// CHECK:STDOUT: %.loc6_17.16: @F.%.loc6_17.15 (@F.%.loc6_17.15) = splice_inst %.loc6_17.14 [template = %.loc6_17.16 (constants.%.a93)]
|
||||
// CHECK:STDOUT: %.loc6_17.17: <instruction> = call_action (%.loc6_17.3), true [template]
|
||||
// CHECK:STDOUT: %.loc6_17.18: type = type_of_inst %.loc6_17.17 [template]
|
||||
// CHECK:STDOUT: %.loc6_17.19: @F.%.loc6_17.18 (@F.%.loc6_17.18) = splice_inst %.loc6_17.17 [template = %.loc6_17.19 (constants.%.e78)]
|
||||
// CHECK:STDOUT: %.loc6_17.20: <instruction> = refine_type_action %.loc6_17.5, %tuple.type [template]
|
||||
// CHECK:STDOUT: %.loc6_17.21: @F.%tuple.type (%tuple.type.a5e) = splice_inst %.loc6_17.20 [template = %.loc6_17.21 (constants.%.a48)]
|
||||
// CHECK:STDOUT: %.loc6_17.19: @F.%.loc6_17.18 (@F.%.loc6_17.18) = splice_inst %.loc6_17.17 [template = %.loc6_17.19 (constants.%.d9a)]
|
||||
// CHECK:STDOUT: %.loc6_17.20: <instruction> = refine_inst_action %.loc6_17.5 [template]
|
||||
// CHECK:STDOUT: %.loc6_17.21: @F.%tuple.type (%tuple.type.a5e) = splice_inst %.loc6_17.20 [template = %.loc6_17.21 (constants.%.13d)]
|
||||
// CHECK:STDOUT: %.loc6_17.22: <instruction> = convert_to_category_action %.loc6_17.6, element10 [template]
|
||||
// CHECK:STDOUT: %.loc6_17.23: @F.%tuple.type (%tuple.type.a5e) = splice_inst %.loc6_17.22 [template = %.loc6_17.23 (constants.%.c7e)]
|
||||
// CHECK:STDOUT: %.loc6_17.23: @F.%tuple.type (%tuple.type.a5e) = splice_inst %.loc6_17.22 [template = %.loc6_17.23 (constants.%.8c9)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() -> out %return.param: @F.%tuple.type (%tuple.type.a5e) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F]
|
||||
// CHECK:STDOUT: %T.ref.loc6: type = name_ref T, %T.loc5_16.2 [template = %T.loc5_16.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %U.ref.loc6: type = name_ref U, %U.loc5_33.2 [symbolic = %U.loc5_33.1 (constants.%U)]
|
||||
// CHECK:STDOUT: %.loc6_16.1: @F.%.loc6_16.3 (@F.%.loc6_16.3) = splice_inst %.loc6_16.2 [template = %.loc6_16.4 (constants.%.dca)]
|
||||
// CHECK:STDOUT: %.loc6_16.1: type = splice_inst %.loc6_16.3 [template = %.loc6_16.4 (constants.%.eec)]
|
||||
// CHECK:STDOUT: %.loc6_16.2: @F.%.loc6_16.6 (@F.%.loc6_16.6) = splice_inst %.loc6_16.5 [template = %.loc6_16.7 (constants.%.733)]
|
||||
// CHECK:STDOUT: %.loc6_17.1: @F.%.loc6_17.9 (@F.%.loc6_17.9) = splice_inst %.loc6_17.8 [template = %.loc6_17.10 (constants.%.6c2)]
|
||||
// CHECK:STDOUT: %.loc6_17.2: @F.%.loc6_17.12 (@F.%.loc6_17.12) = splice_inst %.loc6_17.11 [template = %.loc6_17.13 (constants.%.201)]
|
||||
// CHECK:STDOUT: %.loc6_17.3: @F.%.loc6_17.15 (@F.%.loc6_17.15) = splice_inst %.loc6_17.14 [template = %.loc6_17.16 (constants.%.7f3)]
|
||||
// CHECK:STDOUT: %.loc6_17.4: @F.%.loc6_17.18 (@F.%.loc6_17.18) = splice_inst %.loc6_17.17 [template = %.loc6_17.19 (constants.%.e78)]
|
||||
// CHECK:STDOUT: %.loc6_17.5: @F.%tuple.type (%tuple.type.a5e) = converted %.loc6_16.1, %.loc6_17.4 [template = %.loc6_17.19 (constants.%.e78)]
|
||||
// CHECK:STDOUT: %.loc6_17.6: @F.%tuple.type (%tuple.type.a5e) = splice_inst %.loc6_17.20 [template = %.loc6_17.21 (constants.%.a48)]
|
||||
// CHECK:STDOUT: %.loc6_17.7: @F.%tuple.type (%tuple.type.a5e) = splice_inst %.loc6_17.22 [template = %.loc6_17.23 (constants.%.c7e)]
|
||||
// CHECK:STDOUT: %.loc6_17.3: @F.%.loc6_17.15 (@F.%.loc6_17.15) = splice_inst %.loc6_17.14 [template = %.loc6_17.16 (constants.%.a93)]
|
||||
// CHECK:STDOUT: %.loc6_17.4: @F.%.loc6_17.18 (@F.%.loc6_17.18) = splice_inst %.loc6_17.17 [template = %.loc6_17.19 (constants.%.d9a)]
|
||||
// CHECK:STDOUT: %.loc6_17.5: @F.%tuple.type (%tuple.type.a5e) = converted %.loc6_16.2, %.loc6_17.4 [template = %.loc6_17.19 (constants.%.d9a)]
|
||||
// CHECK:STDOUT: %.loc6_17.6: @F.%tuple.type (%tuple.type.a5e) = splice_inst %.loc6_17.20 [template = %.loc6_17.21 (constants.%.13d)]
|
||||
// CHECK:STDOUT: %.loc6_17.7: @F.%tuple.type (%tuple.type.a5e) = splice_inst %.loc6_17.22 [template = %.loc6_17.23 (constants.%.8c9)]
|
||||
// CHECK:STDOUT: return %.loc6_17.7 to %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
+224
-181
@@ -342,12 +342,13 @@ fn G() {
|
||||
// CHECK:STDOUT: %A.type: type = cpp_type_template_type A [concrete]
|
||||
// CHECK:STDOUT: %A.template: %A.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %.a92: type = template_inst %T [template]
|
||||
// CHECK:STDOUT: %.8af: @B.%.loc12_17.4 (@B.%.loc12_17.4) = splice_inst @B.%.loc12_17.3 [template]
|
||||
// CHECK:STDOUT: %.897: type = splice_inst @B.%.loc12_17.6 [template]
|
||||
// CHECK:STDOUT: %require_complete.5f2: <witness> = require_complete_type %.897 [template]
|
||||
// CHECK:STDOUT: %B.elem.a93: type = unbound_element_type %B.60e, %.897 [template]
|
||||
// CHECK:STDOUT: %struct_type.a.33e: type = struct_type {.a: %.897} [template]
|
||||
// CHECK:STDOUT: %complete_type.6a6: <witness> = complete_type_witness %struct_type.a.33e [template]
|
||||
// CHECK:STDOUT: %.4a6: type = splice_inst @B.%.loc12_17.4 [template]
|
||||
// CHECK:STDOUT: %.dcc: @B.%.loc12_17.7 (@B.%.loc12_17.7) = splice_inst @B.%.loc12_17.6 [template]
|
||||
// CHECK:STDOUT: %.d48: type = splice_inst @B.%.loc12_17.9 [template]
|
||||
// CHECK:STDOUT: %require_complete.979: <witness> = require_complete_type %.d48 [template]
|
||||
// CHECK:STDOUT: %B.elem.ebc: type = unbound_element_type %B.60e, %.d48 [template]
|
||||
// CHECK:STDOUT: %struct_type.a.767: type = struct_type {.a: %.d48} [template]
|
||||
// CHECK:STDOUT: %complete_type.1ad: <witness> = complete_type_witness %struct_type.a.767 [template]
|
||||
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
|
||||
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %B.bd8: type = class_type @B, @B(%i32) [concrete]
|
||||
@@ -356,6 +357,9 @@ fn G() {
|
||||
// CHECK:STDOUT: %b.patt: %pattern_type.fdc = wrapper_binding_pattern b, %b.param_patt [concrete]
|
||||
// CHECK:STDOUT: %F.type: type = fn_type @F [concrete]
|
||||
// CHECK:STDOUT: %F: %F.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %inst.specific_inst: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.d84: type = specific_inst %i32, @B(%i32) [concrete = %i32]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %A: type = class_type @A [concrete]
|
||||
// CHECK:STDOUT: %inst.splice_block.72d: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.22e: type = splice_block imports.%A.decl [concrete = %A] {}
|
||||
@@ -427,27 +431,30 @@ fn G() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.loc12_16.2: type = template_inst %T.loc11_10.1 [template = %.loc12_16.2 (constants.%.a92)]
|
||||
// CHECK:STDOUT: %.loc12_17.3: <instruction> = call_action (%A.ref, %.loc12_16.1), false [template]
|
||||
// CHECK:STDOUT: %.loc12_17.4: type = type_of_inst %.loc12_17.3 [template]
|
||||
// CHECK:STDOUT: %.loc12_17.5: @B.%.loc12_17.4 (@B.%.loc12_17.4) = splice_inst %.loc12_17.3 [template = %.loc12_17.5 (constants.%.8af)]
|
||||
// CHECK:STDOUT: %.loc12_17.6: <instruction> = convert_to_value_action %.loc12_17.1, type [template]
|
||||
// CHECK:STDOUT: %.loc12_17.7: type = splice_inst %.loc12_17.6 [template = %.loc12_17.7 (constants.%.897)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.loc12_17.7 [template = %require_complete (constants.%require_complete.5f2)]
|
||||
// CHECK:STDOUT: %.loc12_17.4: <instruction> = refine_inst_action %.loc12_16.1 [template]
|
||||
// CHECK:STDOUT: %.loc12_17.5: type = splice_inst %.loc12_17.4 [template = %.loc12_17.5 (constants.%.4a6)]
|
||||
// CHECK:STDOUT: %.loc12_17.6: <instruction> = call_action (%A.ref, %.loc12_17.1), false [template]
|
||||
// CHECK:STDOUT: %.loc12_17.7: type = type_of_inst %.loc12_17.6 [template]
|
||||
// CHECK:STDOUT: %.loc12_17.8: @B.%.loc12_17.7 (@B.%.loc12_17.7) = splice_inst %.loc12_17.6 [template = %.loc12_17.8 (constants.%.dcc)]
|
||||
// CHECK:STDOUT: %.loc12_17.9: <instruction> = convert_to_value_action %.loc12_17.2, type [template]
|
||||
// CHECK:STDOUT: %.loc12_17.10: type = splice_inst %.loc12_17.9 [template = %.loc12_17.10 (constants.%.d48)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.loc12_17.10 [template = %require_complete (constants.%require_complete.979)]
|
||||
// CHECK:STDOUT: %B: type = class_type @B, @B(%T.loc11_10.1) [symbolic = %B (constants.%B.60e)]
|
||||
// CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %.loc12_17.7 [template = %B.elem (constants.%B.elem.a93)]
|
||||
// CHECK:STDOUT: %struct_type.a: type = struct_type {.a: @B.%.loc12_17.7 (%.897)} [template = %struct_type.a (constants.%struct_type.a.33e)]
|
||||
// CHECK:STDOUT: %complete_type.loc13_1.2: <witness> = complete_type_witness %struct_type.a [template = %complete_type.loc13_1.2 (constants.%complete_type.6a6)]
|
||||
// CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %.loc12_17.10 [template = %B.elem (constants.%B.elem.ebc)]
|
||||
// CHECK:STDOUT: %struct_type.a: type = struct_type {.a: @B.%.loc12_17.10 (%.d48)} [template = %struct_type.a (constants.%struct_type.a.767)]
|
||||
// CHECK:STDOUT: %complete_type.loc13_1.2: <witness> = complete_type_witness %struct_type.a [template = %complete_type.loc13_1.2 (constants.%complete_type.1ad)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: class {
|
||||
// CHECK:STDOUT: %field_decl: @B.%B.elem (%B.elem.a93) = field_decl a, element0, %.loc12_17.2 in [concrete] {
|
||||
// CHECK:STDOUT: %field_decl: @B.%B.elem (%B.elem.ebc) = field_decl a, element0, %.loc12_17.3 in [concrete] {
|
||||
// CHECK:STDOUT: %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %A.ref: %A.type = name_ref A, imports.%A.template [concrete = constants.%A.template]
|
||||
// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc11_10.2 [symbolic = %T.loc11_10.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc12_16.1: type = template_inst %T.ref [template = %.loc12_16.2 (constants.%.a92)]
|
||||
// CHECK:STDOUT: %.loc12_17.1: @B.%.loc12_17.4 (@B.%.loc12_17.4) = splice_inst %.loc12_17.3 [template = %.loc12_17.5 (constants.%.8af)]
|
||||
// CHECK:STDOUT: %.loc12_17.2: type = splice_inst %.loc12_17.6 [template = %.loc12_17.7 (constants.%.897)]
|
||||
// CHECK:STDOUT: %.loc12_17.1: type = splice_inst %.loc12_17.4 [template = %.loc12_17.5 (constants.%.4a6)]
|
||||
// CHECK:STDOUT: %.loc12_17.2: @B.%.loc12_17.7 (@B.%.loc12_17.7) = splice_inst %.loc12_17.6 [template = %.loc12_17.8 (constants.%.dcc)]
|
||||
// CHECK:STDOUT: %.loc12_17.3: type = splice_inst %.loc12_17.9 [template = %.loc12_17.10 (constants.%.d48)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %complete_type.loc13_1.1: <witness> = complete_type_witness constants.%struct_type.a.33e [template = %complete_type.loc13_1.2 (constants.%complete_type.6a6)]
|
||||
// CHECK:STDOUT: %complete_type.loc13_1.1: <witness> = complete_type_witness constants.%struct_type.a.767 [template = %complete_type.loc13_1.2 (constants.%complete_type.1ad)]
|
||||
// CHECK:STDOUT: complete_type_witness = %complete_type.loc13_1.1
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !members:
|
||||
@@ -486,11 +493,13 @@ fn G() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.loc12_16.2 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc12_17.3 => constants.%inst.splice_block.72d
|
||||
// CHECK:STDOUT: %.loc12_17.4 => type
|
||||
// CHECK:STDOUT: %.loc12_17.5 => constants.%A
|
||||
// CHECK:STDOUT: %.loc12_17.6 => constants.%inst.splice_block.c26
|
||||
// CHECK:STDOUT: %.loc12_17.7 => constants.%A
|
||||
// CHECK:STDOUT: %.loc12_17.4 => constants.%inst.specific_inst
|
||||
// CHECK:STDOUT: %.loc12_17.5 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc12_17.6 => constants.%inst.splice_block.72d
|
||||
// CHECK:STDOUT: %.loc12_17.7 => type
|
||||
// CHECK:STDOUT: %.loc12_17.8 => constants.%A
|
||||
// CHECK:STDOUT: %.loc12_17.9 => constants.%inst.splice_block.c26
|
||||
// CHECK:STDOUT: %.loc12_17.10 => constants.%A
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.ece
|
||||
// CHECK:STDOUT: %B => constants.%B.bd8
|
||||
// CHECK:STDOUT: %B.elem => constants.%B.elem.1e0
|
||||
@@ -512,20 +521,25 @@ fn G() {
|
||||
// CHECK:STDOUT: %A.type: type = cpp_type_template_type A [concrete]
|
||||
// CHECK:STDOUT: %A.template: %A.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %.a92: type = template_inst %T [template]
|
||||
// CHECK:STDOUT: %.8af9c5.1: @F.%.loc10_24.5 (@F.%.loc10_24.5) = splice_inst @F.%.loc10_24.4 [template]
|
||||
// CHECK:STDOUT: %.897: type = splice_inst @F.%.loc10_24.7 [template]
|
||||
// CHECK:STDOUT: %require_complete.5f2: <witness> = require_complete_type %.897 [template]
|
||||
// CHECK:STDOUT: %pattern_type.463: type = pattern_type %.897 [template]
|
||||
// CHECK:STDOUT: %a.patt.d00: %pattern_type.463 = value_binding_pattern a [template]
|
||||
// CHECK:STDOUT: %.8af9c5.2: @F.%.loc10_35.3 (@F.%.loc10_35.3) = splice_inst @F.%.loc10_35.2 [template]
|
||||
// CHECK:STDOUT: %.c84: @F.%.loc10_36.3 (@F.%.loc10_36.3) = splice_inst @F.%.loc10_36.2 [template]
|
||||
// CHECK:STDOUT: %.47d: @F.%.loc10_39.4 (@F.%.loc10_39.4) = splice_inst @F.%.loc10_39.3 [template]
|
||||
// CHECK:STDOUT: %.bdb: %.897 = splice_inst @F.%.loc10_39.6 [template]
|
||||
// CHECK:STDOUT: %.4a6fd8.1: type = splice_inst @F.%.loc10_24.5 [template]
|
||||
// CHECK:STDOUT: %.dcc61d.1: @F.%.loc10_24.8 (@F.%.loc10_24.8) = splice_inst @F.%.loc10_24.7 [template]
|
||||
// CHECK:STDOUT: %.d48: type = splice_inst @F.%.loc10_24.10 [template]
|
||||
// CHECK:STDOUT: %require_complete.979: <witness> = require_complete_type %.d48 [template]
|
||||
// CHECK:STDOUT: %pattern_type.d94: type = pattern_type %.d48 [template]
|
||||
// CHECK:STDOUT: %a.patt.662: %pattern_type.d94 = value_binding_pattern a [template]
|
||||
// CHECK:STDOUT: %.4a6fd8.2: type = splice_inst @F.%.loc10_35.3 [template]
|
||||
// CHECK:STDOUT: %.dcc61d.2: @F.%.loc10_35.6 (@F.%.loc10_35.6) = splice_inst @F.%.loc10_35.5 [template]
|
||||
// CHECK:STDOUT: %.883: @F.%.loc10_36.3 (@F.%.loc10_36.3) = splice_inst @F.%.loc10_36.2 [template]
|
||||
// CHECK:STDOUT: %.ef0: @F.%.loc10_39.4 (@F.%.loc10_39.4) = splice_inst @F.%.loc10_39.3 [template]
|
||||
// CHECK:STDOUT: %.4ad: %.d48 = splice_inst @F.%.loc10_39.6 [template]
|
||||
// CHECK:STDOUT: %G.type: type = fn_type @G [concrete]
|
||||
// CHECK:STDOUT: %G: %G.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
|
||||
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %F.specific_fn: <specific function> = specific_function %F, @F(%i32) [concrete]
|
||||
// CHECK:STDOUT: %inst.specific_inst.9dc364.1: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.ab8b6e.1: type = specific_inst %i32, @F(%i32) [concrete = %i32]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %A: type = class_type @A [concrete]
|
||||
// CHECK:STDOUT: %inst.splice_block.72dff3.1: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.22ed96.1: type = splice_block imports.%A.decl [concrete = %A] {}
|
||||
@@ -537,6 +551,9 @@ fn G() {
|
||||
// CHECK:STDOUT: %complete_type.357: <witness> = complete_type_witness %empty_struct_type [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.b78: type = pattern_type %A [concrete]
|
||||
// CHECK:STDOUT: %a.patt.117: %pattern_type.b78 = value_binding_pattern a [concrete]
|
||||
// CHECK:STDOUT: %inst.specific_inst.9dc364.2: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.ab8b6e.2: type = specific_inst %i32, @F(%i32) [concrete = %i32]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.72dff3.2: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.22ed96.2: type = splice_block imports.%A.decl [concrete = %A] {}
|
||||
// CHECK:STDOUT: }
|
||||
@@ -598,25 +615,29 @@ fn G() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.loc10_23.2: type = template_inst %T.loc9_15.1 [template = %.loc10_23.2 (constants.%.a92)]
|
||||
// CHECK:STDOUT: %.loc10_24.4: <instruction> = call_action (%A.ref.loc10_20, %.loc10_23.1), false [template]
|
||||
// CHECK:STDOUT: %.loc10_24.5: type = type_of_inst %.loc10_24.4 [template]
|
||||
// CHECK:STDOUT: %.loc10_24.6: @F.%.loc10_24.5 (@F.%.loc10_24.5) = splice_inst %.loc10_24.4 [template = %.loc10_24.6 (constants.%.8af9c5.1)]
|
||||
// CHECK:STDOUT: %.loc10_24.7: <instruction> = convert_to_value_action %.loc10_24.2, type [template]
|
||||
// CHECK:STDOUT: %.loc10_24.8: type = splice_inst %.loc10_24.7 [template = %.loc10_24.8 (constants.%.897)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.loc10_24.8 [template = %require_complete (constants.%require_complete.5f2)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %.loc10_24.8 [template = %pattern_type (constants.%pattern_type.463)]
|
||||
// CHECK:STDOUT: %a.patt.loc10_15.2: @F.%pattern_type (%pattern_type.463) = value_binding_pattern a [template = %a.patt.loc10_15.2 (constants.%a.patt.d00)]
|
||||
// CHECK:STDOUT: %.loc10_35.2: <instruction> = call_action (%A.ref.loc10_31, %.loc10_34), false [template]
|
||||
// CHECK:STDOUT: %.loc10_35.3: type = type_of_inst %.loc10_35.2 [template]
|
||||
// CHECK:STDOUT: %.loc10_35.4: @F.%.loc10_35.3 (@F.%.loc10_35.3) = splice_inst %.loc10_35.2 [template = %.loc10_35.4 (constants.%.8af9c5.2)]
|
||||
// CHECK:STDOUT: %.loc10_36.2: <instruction> = access_member_action %.loc10_35.1, A [template]
|
||||
// CHECK:STDOUT: %.loc10_24.5: <instruction> = refine_inst_action %.loc10_23.1 [template]
|
||||
// CHECK:STDOUT: %.loc10_24.6: type = splice_inst %.loc10_24.5 [template = %.loc10_24.6 (constants.%.4a6fd8.1)]
|
||||
// CHECK:STDOUT: %.loc10_24.7: <instruction> = call_action (%A.ref.loc10_20, %.loc10_24.2), false [template]
|
||||
// CHECK:STDOUT: %.loc10_24.8: type = type_of_inst %.loc10_24.7 [template]
|
||||
// CHECK:STDOUT: %.loc10_24.9: @F.%.loc10_24.8 (@F.%.loc10_24.8) = splice_inst %.loc10_24.7 [template = %.loc10_24.9 (constants.%.dcc61d.1)]
|
||||
// CHECK:STDOUT: %.loc10_24.10: <instruction> = convert_to_value_action %.loc10_24.3, type [template]
|
||||
// CHECK:STDOUT: %.loc10_24.11: type = splice_inst %.loc10_24.10 [template = %.loc10_24.11 (constants.%.d48)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.loc10_24.11 [template = %require_complete (constants.%require_complete.979)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %.loc10_24.11 [template = %pattern_type (constants.%pattern_type.d94)]
|
||||
// CHECK:STDOUT: %a.patt.loc10_15.2: @F.%pattern_type (%pattern_type.d94) = value_binding_pattern a [template = %a.patt.loc10_15.2 (constants.%a.patt.662)]
|
||||
// CHECK:STDOUT: %.loc10_35.3: <instruction> = refine_inst_action %.loc10_34 [template]
|
||||
// CHECK:STDOUT: %.loc10_35.4: type = splice_inst %.loc10_35.3 [template = %.loc10_35.4 (constants.%.4a6fd8.2)]
|
||||
// CHECK:STDOUT: %.loc10_35.5: <instruction> = call_action (%A.ref.loc10_31, %.loc10_35.1), false [template]
|
||||
// CHECK:STDOUT: %.loc10_35.6: type = type_of_inst %.loc10_35.5 [template]
|
||||
// CHECK:STDOUT: %.loc10_35.7: @F.%.loc10_35.6 (@F.%.loc10_35.6) = splice_inst %.loc10_35.5 [template = %.loc10_35.7 (constants.%.dcc61d.2)]
|
||||
// CHECK:STDOUT: %.loc10_36.2: <instruction> = access_member_action %.loc10_35.2, A [template]
|
||||
// CHECK:STDOUT: %.loc10_36.3: type = type_of_inst %.loc10_36.2 [template]
|
||||
// CHECK:STDOUT: %.loc10_36.4: @F.%.loc10_36.3 (@F.%.loc10_36.3) = splice_inst %.loc10_36.2 [template = %.loc10_36.4 (constants.%.c84)]
|
||||
// CHECK:STDOUT: %.loc10_36.4: @F.%.loc10_36.3 (@F.%.loc10_36.3) = splice_inst %.loc10_36.2 [template = %.loc10_36.4 (constants.%.883)]
|
||||
// CHECK:STDOUT: %.loc10_39.3: <instruction> = call_action (%.loc10_36.1), false [template]
|
||||
// CHECK:STDOUT: %.loc10_39.4: type = type_of_inst %.loc10_39.3 [template]
|
||||
// CHECK:STDOUT: %.loc10_39.5: @F.%.loc10_39.4 (@F.%.loc10_39.4) = splice_inst %.loc10_39.3 [template = %.loc10_39.5 (constants.%.47d)]
|
||||
// CHECK:STDOUT: %.loc10_39.6: <instruction> = convert_to_value_action %.loc10_39.1, %.loc10_24.8 [template]
|
||||
// CHECK:STDOUT: %.loc10_39.7: @F.%.loc10_24.8 (%.897) = splice_inst %.loc10_39.6 [template = %.loc10_39.7 (constants.%.bdb)]
|
||||
// CHECK:STDOUT: %.loc10_39.5: @F.%.loc10_39.4 (@F.%.loc10_39.4) = splice_inst %.loc10_39.3 [template = %.loc10_39.5 (constants.%.ef0)]
|
||||
// CHECK:STDOUT: %.loc10_39.6: <instruction> = convert_to_value_action %.loc10_39.1, %.loc10_24.11 [template]
|
||||
// CHECK:STDOUT: %.loc10_39.7: @F.%.loc10_24.11 (%.d48) = splice_inst %.loc10_39.6 [template = %.loc10_39.7 (constants.%.4ad)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
@@ -624,21 +645,23 @@ fn G() {
|
||||
// CHECK:STDOUT: %A.ref.loc10_31: %A.type = name_ref A, imports.%A.template [concrete = constants.%A.template]
|
||||
// CHECK:STDOUT: %T.ref.loc10_34: type = name_ref T, %T.loc9_15.2 [symbolic = %T.loc9_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc10_34: type = template_inst %T.ref.loc10_34 [template = %.loc10_23.2 (constants.%.a92)]
|
||||
// CHECK:STDOUT: %.loc10_35.1: @F.%.loc10_35.3 (@F.%.loc10_35.3) = splice_inst %.loc10_35.2 [template = %.loc10_35.4 (constants.%.8af9c5.2)]
|
||||
// CHECK:STDOUT: %.loc10_36.1: @F.%.loc10_36.3 (@F.%.loc10_36.3) = splice_inst %.loc10_36.2 [template = %.loc10_36.4 (constants.%.c84)]
|
||||
// CHECK:STDOUT: %.loc10_39.1: @F.%.loc10_39.4 (@F.%.loc10_39.4) = splice_inst %.loc10_39.3 [template = %.loc10_39.5 (constants.%.47d)]
|
||||
// CHECK:STDOUT: %.loc10_39.2: @F.%.loc10_24.8 (%.897) = splice_inst %.loc10_39.6 [template = %.loc10_39.7 (constants.%.bdb)]
|
||||
// CHECK:STDOUT: %.loc10_24.1: type = splice_block %.loc10_24.3 [template = %.loc10_24.8 (constants.%.897)] {
|
||||
// CHECK:STDOUT: %.loc10_35.1: type = splice_inst %.loc10_35.3 [template = %.loc10_35.4 (constants.%.4a6fd8.2)]
|
||||
// CHECK:STDOUT: %.loc10_35.2: @F.%.loc10_35.6 (@F.%.loc10_35.6) = splice_inst %.loc10_35.5 [template = %.loc10_35.7 (constants.%.dcc61d.2)]
|
||||
// CHECK:STDOUT: %.loc10_36.1: @F.%.loc10_36.3 (@F.%.loc10_36.3) = splice_inst %.loc10_36.2 [template = %.loc10_36.4 (constants.%.883)]
|
||||
// CHECK:STDOUT: %.loc10_39.1: @F.%.loc10_39.4 (@F.%.loc10_39.4) = splice_inst %.loc10_39.3 [template = %.loc10_39.5 (constants.%.ef0)]
|
||||
// CHECK:STDOUT: %.loc10_39.2: @F.%.loc10_24.11 (%.d48) = splice_inst %.loc10_39.6 [template = %.loc10_39.7 (constants.%.4ad)]
|
||||
// CHECK:STDOUT: %.loc10_24.1: type = splice_block %.loc10_24.4 [template = %.loc10_24.11 (constants.%.d48)] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc10_17: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %A.ref.loc10_20: %A.type = name_ref A, imports.%A.template [concrete = constants.%A.template]
|
||||
// CHECK:STDOUT: %T.ref.loc10_23: type = name_ref T, %T.loc9_15.2 [symbolic = %T.loc9_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc10_23.1: type = template_inst %T.ref.loc10_23 [template = %.loc10_23.2 (constants.%.a92)]
|
||||
// CHECK:STDOUT: %.loc10_24.2: @F.%.loc10_24.5 (@F.%.loc10_24.5) = splice_inst %.loc10_24.4 [template = %.loc10_24.6 (constants.%.8af9c5.1)]
|
||||
// CHECK:STDOUT: %.loc10_24.3: type = splice_inst %.loc10_24.7 [template = %.loc10_24.8 (constants.%.897)]
|
||||
// CHECK:STDOUT: %.loc10_24.2: type = splice_inst %.loc10_24.5 [template = %.loc10_24.6 (constants.%.4a6fd8.1)]
|
||||
// CHECK:STDOUT: %.loc10_24.3: @F.%.loc10_24.8 (@F.%.loc10_24.8) = splice_inst %.loc10_24.7 [template = %.loc10_24.9 (constants.%.dcc61d.1)]
|
||||
// CHECK:STDOUT: %.loc10_24.4: type = splice_inst %.loc10_24.10 [template = %.loc10_24.11 (constants.%.d48)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %a: @F.%.loc10_24.8 (%.897) = wrapper_binding a, %.loc10_39.2
|
||||
// CHECK:STDOUT: %a: @F.%.loc10_24.11 (%.d48) = wrapper_binding a, %.loc10_39.2
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %a.patt.loc10_15.1: @F.%pattern_type (%pattern_type.463) = value_binding_pattern a [template = %a.patt.loc10_15.2 (constants.%a.patt.d00)]
|
||||
// CHECK:STDOUT: %a.patt.loc10_15.1: @F.%pattern_type (%pattern_type.d94) = value_binding_pattern a [template = %a.patt.loc10_15.2 (constants.%a.patt.662)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
@@ -664,17 +687,21 @@ fn G() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.loc10_23.2 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc10_24.4 => constants.%inst.splice_block.72dff3.1
|
||||
// CHECK:STDOUT: %.loc10_24.5 => type
|
||||
// CHECK:STDOUT: %.loc10_24.6 => constants.%A
|
||||
// CHECK:STDOUT: %.loc10_24.7 => constants.%inst.splice_block.c26
|
||||
// CHECK:STDOUT: %.loc10_24.8 => constants.%A
|
||||
// CHECK:STDOUT: %.loc10_24.5 => constants.%inst.specific_inst.9dc364.1
|
||||
// CHECK:STDOUT: %.loc10_24.6 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc10_24.7 => constants.%inst.splice_block.72dff3.1
|
||||
// CHECK:STDOUT: %.loc10_24.8 => type
|
||||
// CHECK:STDOUT: %.loc10_24.9 => constants.%A
|
||||
// CHECK:STDOUT: %.loc10_24.10 => constants.%inst.splice_block.c26
|
||||
// CHECK:STDOUT: %.loc10_24.11 => constants.%A
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.357
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b78
|
||||
// CHECK:STDOUT: %a.patt.loc10_15.2 => constants.%a.patt.117
|
||||
// CHECK:STDOUT: %.loc10_35.2 => constants.%inst.splice_block.72dff3.2
|
||||
// CHECK:STDOUT: %.loc10_35.3 => type
|
||||
// CHECK:STDOUT: %.loc10_35.4 => constants.%A
|
||||
// CHECK:STDOUT: %.loc10_35.3 => constants.%inst.specific_inst.9dc364.2
|
||||
// CHECK:STDOUT: %.loc10_35.4 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc10_35.5 => constants.%inst.splice_block.72dff3.2
|
||||
// CHECK:STDOUT: %.loc10_35.6 => type
|
||||
// CHECK:STDOUT: %.loc10_35.7 => constants.%A
|
||||
// CHECK:STDOUT: %.loc10_36.2 => constants.%inst.name_ref
|
||||
// CHECK:STDOUT: %.loc10_36.3 => constants.%A.A.cpp_overload_set.type
|
||||
// CHECK:STDOUT: %.loc10_36.4 => constants.%A.A.cpp_overload_set.value
|
||||
@@ -699,34 +726,39 @@ fn G() {
|
||||
// CHECK:STDOUT: %A.type: type = cpp_type_template_type A [concrete]
|
||||
// CHECK:STDOUT: %A.template: %A.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %.a92: type = template_inst %T [template]
|
||||
// CHECK:STDOUT: %.8af9c5.1: @F.%.loc10_24.5 (@F.%.loc10_24.5) = splice_inst @F.%.loc10_24.4 [template]
|
||||
// CHECK:STDOUT: %.897: type = splice_inst @F.%.loc10_24.7 [template]
|
||||
// CHECK:STDOUT: %require_complete.5f2: <witness> = require_complete_type %.897 [template]
|
||||
// CHECK:STDOUT: %pattern_type.463: type = pattern_type %.897 [template]
|
||||
// CHECK:STDOUT: %a.patt.577: %pattern_type.463 = ref_binding_pattern a [template]
|
||||
// CHECK:STDOUT: %a.var_patt.c6d: %pattern_type.463 = var_pattern %a.patt.577 [template]
|
||||
// CHECK:STDOUT: %.8af9c5.2: @F.%.loc10_35.3 (@F.%.loc10_35.3) = splice_inst @F.%.loc10_35.2 [template]
|
||||
// CHECK:STDOUT: %.c84: @F.%.loc10_36.3 (@F.%.loc10_36.3) = splice_inst @F.%.loc10_36.2 [template]
|
||||
// CHECK:STDOUT: %.47d: @F.%.loc10_39.3 (@F.%.loc10_39.3) = splice_inst @F.%.loc10_39.2 [template]
|
||||
// CHECK:STDOUT: %.4a6fd8.1: type = splice_inst @F.%.loc10_24.5 [template]
|
||||
// CHECK:STDOUT: %.dcc61d.1: @F.%.loc10_24.8 (@F.%.loc10_24.8) = splice_inst @F.%.loc10_24.7 [template]
|
||||
// CHECK:STDOUT: %.d48: type = splice_inst @F.%.loc10_24.10 [template]
|
||||
// CHECK:STDOUT: %require_complete.979: <witness> = require_complete_type %.d48 [template]
|
||||
// CHECK:STDOUT: %pattern_type.d94: type = pattern_type %.d48 [template]
|
||||
// CHECK:STDOUT: %a.patt.59d: %pattern_type.d94 = ref_binding_pattern a [template]
|
||||
// CHECK:STDOUT: %a.var_patt.717: %pattern_type.d94 = var_pattern %a.patt.59d [template]
|
||||
// CHECK:STDOUT: %.4a6fd8.2: type = splice_inst @F.%.loc10_35.3 [template]
|
||||
// CHECK:STDOUT: %.dcc61d.2: @F.%.loc10_35.6 (@F.%.loc10_35.6) = splice_inst @F.%.loc10_35.5 [template]
|
||||
// CHECK:STDOUT: %.883: @F.%.loc10_36.3 (@F.%.loc10_36.3) = splice_inst @F.%.loc10_36.2 [template]
|
||||
// CHECK:STDOUT: %.ef0: @F.%.loc10_39.3 (@F.%.loc10_39.3) = splice_inst @F.%.loc10_39.2 [template]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete]
|
||||
// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %.20c9c2.1: @F.%.loc10_3.12 (@F.%.loc10_3.12) = splice_inst @F.%.loc10_3.11 [template]
|
||||
// CHECK:STDOUT: %.c16b39.1: @F.%.loc10_3.15 (@F.%.loc10_3.15) = splice_inst @F.%.loc10_3.14 [template]
|
||||
// CHECK:STDOUT: %.5f8: @F.%.loc10_3.18 (@F.%.loc10_3.18) = splice_inst @F.%.loc10_3.17 [template]
|
||||
// CHECK:STDOUT: %.fde: @F.%.loc10_3.21 (@F.%.loc10_3.21) = splice_inst @F.%.loc10_3.20 [template]
|
||||
// CHECK:STDOUT: %.0cf: %.897 = splice_inst @F.%.loc10_3.23 [template]
|
||||
// CHECK:STDOUT: %.74f: %.897 = splice_inst @F.%.loc10_3.25 [template]
|
||||
// CHECK:STDOUT: %.cd85d6.1: @F.%.loc10_3.12 (@F.%.loc10_3.12) = splice_inst @F.%.loc10_3.11 [template]
|
||||
// CHECK:STDOUT: %.a7b35a.1: @F.%.loc10_3.15 (@F.%.loc10_3.15) = splice_inst @F.%.loc10_3.14 [template]
|
||||
// CHECK:STDOUT: %.b64: @F.%.loc10_3.18 (@F.%.loc10_3.18) = splice_inst @F.%.loc10_3.17 [template]
|
||||
// CHECK:STDOUT: %.de5: @F.%.loc10_3.21 (@F.%.loc10_3.21) = splice_inst @F.%.loc10_3.20 [template]
|
||||
// CHECK:STDOUT: %.7c8: %.d48 = splice_inst @F.%.loc10_3.23 [template]
|
||||
// CHECK:STDOUT: %.8f8: %.d48 = splice_inst @F.%.loc10_3.25 [template]
|
||||
// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete]
|
||||
// CHECK:STDOUT: %Self.0e7: %Destroy.type = symbolic_binding Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Destroy.WithSelf.Op.type.d3e: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Self.0e7) [symbolic]
|
||||
// CHECK:STDOUT: %Destroy.WithSelf.Op.42b: %Destroy.WithSelf.Op.type.d3e = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Destroy.assoc_type: type = assoc_entity_type @Destroy [concrete]
|
||||
// CHECK:STDOUT: %assoc0.ae8: %Destroy.assoc_type = assoc_entity element0, imports.%Core.import_ref.918 [concrete]
|
||||
// CHECK:STDOUT: %.de4: %.897 = splice_inst @F.%.loc10_3.27 [template]
|
||||
// CHECK:STDOUT: %.040: @F.%.loc10_3.30 (@F.%.loc10_3.30) = splice_inst @F.%.loc10_3.29 [template]
|
||||
// CHECK:STDOUT: %.b87: @F.%.loc10_3.33 (@F.%.loc10_3.33) = splice_inst @F.%.loc10_3.32 [template]
|
||||
// CHECK:STDOUT: %.821: %.d48 = splice_inst @F.%.loc10_3.27 [template]
|
||||
// CHECK:STDOUT: %.9a3a: @F.%.loc10_3.30 (@F.%.loc10_3.30) = splice_inst @F.%.loc10_3.29 [template]
|
||||
// CHECK:STDOUT: %.595: @F.%.loc10_3.33 (@F.%.loc10_3.33) = splice_inst @F.%.loc10_3.32 [template]
|
||||
// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete]
|
||||
// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete]
|
||||
// CHECK:STDOUT: %inst.specific_inst.9dc364.1: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.ab8b6e.1: type = specific_inst %i32, @F(%i32) [concrete = %i32]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %A: type = class_type @A [concrete]
|
||||
// CHECK:STDOUT: %inst.splice_block.72dff3.1: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.22ed96.1: type = splice_block imports.%A.decl [concrete = %A] {}
|
||||
@@ -739,6 +771,9 @@ fn G() {
|
||||
// CHECK:STDOUT: %pattern_type.b78: type = pattern_type %A [concrete]
|
||||
// CHECK:STDOUT: %a.patt.198: %pattern_type.b78 = ref_binding_pattern a [concrete]
|
||||
// CHECK:STDOUT: %a.var_patt.47b: %pattern_type.b78 = var_pattern %a.patt.198 [concrete]
|
||||
// CHECK:STDOUT: %inst.specific_inst.9dc364.2: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.ab8b6e.2: type = specific_inst %i32, @F(%i32) [concrete = %i32]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.72dff3.2: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.22ed96.2: type = splice_block imports.%A.decl [concrete = %A] {}
|
||||
// CHECK:STDOUT: }
|
||||
@@ -758,26 +793,24 @@ fn G() {
|
||||
// CHECK:STDOUT: %.38d: init %A to %.3a8 = mark_in_place_init %A__carbon_thunk.call
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.ca0: <instruction> = call_action (%ImplicitAs.generic, %.897), false [template]
|
||||
// CHECK:STDOUT: %.d2c: type = type_of_inst %.ca0 [template]
|
||||
// CHECK:STDOUT: %.20c9c2.2: %.d2c = splice_inst %.ca0 [template]
|
||||
// CHECK:STDOUT: %.da6: <instruction> = access_member_action %.20c9c2.2, Convert [template]
|
||||
// CHECK:STDOUT: %.aaf: type = type_of_inst %.da6 [template]
|
||||
// CHECK:STDOUT: %.c16b39.2: %.aaf = splice_inst %.da6 [template]
|
||||
// CHECK:STDOUT: %.ba2: <instruction> = compound_member_access_action %.78f, %.c16b39.2 [template]
|
||||
// CHECK:STDOUT: %.d40: type = type_of_inst %.ba2 [template]
|
||||
// CHECK:STDOUT: %.5da: %.d40 = splice_inst %.ba2 [template]
|
||||
// CHECK:STDOUT: %.117: <instruction> = call_action (%.5da), true [template]
|
||||
// CHECK:STDOUT: %.f91: type = type_of_inst %.117 [template]
|
||||
// CHECK:STDOUT: %.519: %.f91 = splice_inst %.117 [template]
|
||||
// CHECK:STDOUT: %.f0f: %A = splice_inst %.117 [template]
|
||||
// CHECK:STDOUT: %inst.as_compatible.79b: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.c2b: %A = as_compatible %.519 [template = %.f0f]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.7b9: <instruction> = convert_to_category_action %.f0f, element10 [template]
|
||||
// CHECK:STDOUT: %.a12: %A = splice_inst %.7b9 [template]
|
||||
// CHECK:STDOUT: %inst.as_compatible.e4d: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.568: ref %A = as_compatible @F.%a.var
|
||||
// CHECK:STDOUT: %.514: <instruction> = call_action (%ImplicitAs.generic, %.d48), false [template]
|
||||
// CHECK:STDOUT: %.bf5: type = type_of_inst %.514 [template]
|
||||
// CHECK:STDOUT: %.cd85d6.2: %.bf5 = splice_inst %.514 [template]
|
||||
// CHECK:STDOUT: %.a4e: <instruction> = access_member_action %.cd85d6.2, Convert [template]
|
||||
// CHECK:STDOUT: %.087: type = type_of_inst %.a4e [template]
|
||||
// CHECK:STDOUT: %.a7b35a.2: %.087 = splice_inst %.a4e [template]
|
||||
// CHECK:STDOUT: %.0c2: <instruction> = compound_member_access_action %.78f, %.a7b35a.2 [template]
|
||||
// CHECK:STDOUT: %.4bb: type = type_of_inst %.0c2 [template]
|
||||
// CHECK:STDOUT: %.9a31: %.4bb = splice_inst %.0c2 [template]
|
||||
// CHECK:STDOUT: %.97a: <instruction> = call_action (%.9a31), true [template]
|
||||
// CHECK:STDOUT: %.f1e: type = type_of_inst %.97a [template]
|
||||
// CHECK:STDOUT: %.b1f: %.f1e = splice_inst %.97a [template]
|
||||
// CHECK:STDOUT: %.215: <instruction> = refine_inst_action %.b1f [template]
|
||||
// CHECK:STDOUT: %.6cb: %A = splice_inst %.215 [template]
|
||||
// CHECK:STDOUT: %.297: <instruction> = convert_to_category_action %.6cb, element10 [template]
|
||||
// CHECK:STDOUT: %.3d9: %A = splice_inst %.297 [template]
|
||||
// CHECK:STDOUT: %inst.specific_inst.cb7: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.e5e: ref %A = specific_inst @F.%a.var, @F(%i32)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %A.cpp_destructor.type: type = fn_type @A.cpp_destructor [concrete]
|
||||
// CHECK:STDOUT: %A.cpp_destructor: %A.cpp_destructor.type = struct_value () [concrete]
|
||||
@@ -785,14 +818,14 @@ fn G() {
|
||||
// CHECK:STDOUT: %Destroy.facet.bf5: %Destroy.type = facet_value %A, (%custom_witness.294) [concrete]
|
||||
// CHECK:STDOUT: %Destroy.WithSelf.Op.type.d24: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.bf5) [concrete]
|
||||
// CHECK:STDOUT: %.429: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.d24, %Destroy.facet.bf5 [concrete]
|
||||
// CHECK:STDOUT: %inst.splice_block.b0b: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.4fc: <bound method> = splice_block %bound_method {
|
||||
// CHECK:STDOUT: %inst.splice_block.863: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.fef: <bound method> = splice_block %bound_method {
|
||||
// CHECK:STDOUT: %impl.elem0: %.429 = impl_witness_access %custom_witness.294, element0 [concrete = %A.cpp_destructor]
|
||||
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %.568, %impl.elem0
|
||||
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %.e5e, %impl.elem0
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.call: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %A.cpp_destructor.call: init %empty_tuple.type = call %.4fc(%.568)
|
||||
// CHECK:STDOUT: %A.cpp_destructor.call: init %empty_tuple.type = call %.fef(%.e5e)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
@@ -830,83 +863,89 @@ fn G() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.loc10_23.2: type = template_inst %T.loc9_15.1 [template = %.loc10_23.2 (constants.%.a92)]
|
||||
// CHECK:STDOUT: %.loc10_24.4: <instruction> = call_action (%A.ref.loc10_20, %.loc10_23.1), false [template]
|
||||
// CHECK:STDOUT: %.loc10_24.5: type = type_of_inst %.loc10_24.4 [template]
|
||||
// CHECK:STDOUT: %.loc10_24.6: @F.%.loc10_24.5 (@F.%.loc10_24.5) = splice_inst %.loc10_24.4 [template = %.loc10_24.6 (constants.%.8af9c5.1)]
|
||||
// CHECK:STDOUT: %.loc10_24.7: <instruction> = convert_to_value_action %.loc10_24.2, type [template]
|
||||
// CHECK:STDOUT: %.loc10_24.8: type = splice_inst %.loc10_24.7 [template = %.loc10_24.8 (constants.%.897)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.loc10_24.8 [template = %require_complete (constants.%require_complete.5f2)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %.loc10_24.8 [template = %pattern_type (constants.%pattern_type.463)]
|
||||
// CHECK:STDOUT: %a.patt.loc10_15.2: @F.%pattern_type (%pattern_type.463) = ref_binding_pattern a [template = %a.patt.loc10_15.2 (constants.%a.patt.577)]
|
||||
// CHECK:STDOUT: %a.var_patt.loc10_3.2: @F.%pattern_type (%pattern_type.463) = var_pattern %a.patt.loc10_15.2 [template = %a.var_patt.loc10_3.2 (constants.%a.var_patt.c6d)]
|
||||
// CHECK:STDOUT: %.loc10_35.2: <instruction> = call_action (%A.ref.loc10_31, %.loc10_34), false [template]
|
||||
// CHECK:STDOUT: %.loc10_35.3: type = type_of_inst %.loc10_35.2 [template]
|
||||
// CHECK:STDOUT: %.loc10_35.4: @F.%.loc10_35.3 (@F.%.loc10_35.3) = splice_inst %.loc10_35.2 [template = %.loc10_35.4 (constants.%.8af9c5.2)]
|
||||
// CHECK:STDOUT: %.loc10_36.2: <instruction> = access_member_action %.loc10_35.1, A [template]
|
||||
// CHECK:STDOUT: %.loc10_24.5: <instruction> = refine_inst_action %.loc10_23.1 [template]
|
||||
// CHECK:STDOUT: %.loc10_24.6: type = splice_inst %.loc10_24.5 [template = %.loc10_24.6 (constants.%.4a6fd8.1)]
|
||||
// CHECK:STDOUT: %.loc10_24.7: <instruction> = call_action (%A.ref.loc10_20, %.loc10_24.2), false [template]
|
||||
// CHECK:STDOUT: %.loc10_24.8: type = type_of_inst %.loc10_24.7 [template]
|
||||
// CHECK:STDOUT: %.loc10_24.9: @F.%.loc10_24.8 (@F.%.loc10_24.8) = splice_inst %.loc10_24.7 [template = %.loc10_24.9 (constants.%.dcc61d.1)]
|
||||
// CHECK:STDOUT: %.loc10_24.10: <instruction> = convert_to_value_action %.loc10_24.3, type [template]
|
||||
// CHECK:STDOUT: %.loc10_24.11: type = splice_inst %.loc10_24.10 [template = %.loc10_24.11 (constants.%.d48)]
|
||||
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %.loc10_24.11 [template = %require_complete (constants.%require_complete.979)]
|
||||
// CHECK:STDOUT: %pattern_type: type = pattern_type %.loc10_24.11 [template = %pattern_type (constants.%pattern_type.d94)]
|
||||
// CHECK:STDOUT: %a.patt.loc10_15.2: @F.%pattern_type (%pattern_type.d94) = ref_binding_pattern a [template = %a.patt.loc10_15.2 (constants.%a.patt.59d)]
|
||||
// CHECK:STDOUT: %a.var_patt.loc10_3.2: @F.%pattern_type (%pattern_type.d94) = var_pattern %a.patt.loc10_15.2 [template = %a.var_patt.loc10_3.2 (constants.%a.var_patt.717)]
|
||||
// CHECK:STDOUT: %.loc10_35.3: <instruction> = refine_inst_action %.loc10_34 [template]
|
||||
// CHECK:STDOUT: %.loc10_35.4: type = splice_inst %.loc10_35.3 [template = %.loc10_35.4 (constants.%.4a6fd8.2)]
|
||||
// CHECK:STDOUT: %.loc10_35.5: <instruction> = call_action (%A.ref.loc10_31, %.loc10_35.1), false [template]
|
||||
// CHECK:STDOUT: %.loc10_35.6: type = type_of_inst %.loc10_35.5 [template]
|
||||
// CHECK:STDOUT: %.loc10_35.7: @F.%.loc10_35.6 (@F.%.loc10_35.6) = splice_inst %.loc10_35.5 [template = %.loc10_35.7 (constants.%.dcc61d.2)]
|
||||
// CHECK:STDOUT: %.loc10_36.2: <instruction> = access_member_action %.loc10_35.2, A [template]
|
||||
// CHECK:STDOUT: %.loc10_36.3: type = type_of_inst %.loc10_36.2 [template]
|
||||
// CHECK:STDOUT: %.loc10_36.4: @F.%.loc10_36.3 (@F.%.loc10_36.3) = splice_inst %.loc10_36.2 [template = %.loc10_36.4 (constants.%.c84)]
|
||||
// CHECK:STDOUT: %.loc10_36.4: @F.%.loc10_36.3 (@F.%.loc10_36.3) = splice_inst %.loc10_36.2 [template = %.loc10_36.4 (constants.%.883)]
|
||||
// CHECK:STDOUT: %.loc10_39.2: <instruction> = call_action (%.loc10_36.1), false [template]
|
||||
// CHECK:STDOUT: %.loc10_39.3: type = type_of_inst %.loc10_39.2 [template]
|
||||
// CHECK:STDOUT: %.loc10_39.4: @F.%.loc10_39.3 (@F.%.loc10_39.3) = splice_inst %.loc10_39.2 [template = %.loc10_39.4 (constants.%.47d)]
|
||||
// CHECK:STDOUT: %.loc10_3.11: <instruction> = call_action (constants.%ImplicitAs.generic, constants.%.897), false [template]
|
||||
// CHECK:STDOUT: %.loc10_39.4: @F.%.loc10_39.3 (@F.%.loc10_39.3) = splice_inst %.loc10_39.2 [template = %.loc10_39.4 (constants.%.ef0)]
|
||||
// CHECK:STDOUT: %.loc10_3.11: <instruction> = call_action (constants.%ImplicitAs.generic, constants.%.d48), false [template]
|
||||
// CHECK:STDOUT: %.loc10_3.12: type = type_of_inst %.loc10_3.11 [template]
|
||||
// CHECK:STDOUT: %.loc10_3.13: @F.%.loc10_3.12 (@F.%.loc10_3.12) = splice_inst %.loc10_3.11 [template = %.loc10_3.13 (constants.%.20c9c2.1)]
|
||||
// CHECK:STDOUT: %.loc10_3.13: @F.%.loc10_3.12 (@F.%.loc10_3.12) = splice_inst %.loc10_3.11 [template = %.loc10_3.13 (constants.%.cd85d6.1)]
|
||||
// CHECK:STDOUT: %.loc10_3.14: <instruction> = access_member_action %.loc10_3.1, Convert [template]
|
||||
// CHECK:STDOUT: %.loc10_3.15: type = type_of_inst %.loc10_3.14 [template]
|
||||
// CHECK:STDOUT: %.loc10_3.16: @F.%.loc10_3.15 (@F.%.loc10_3.15) = splice_inst %.loc10_3.14 [template = %.loc10_3.16 (constants.%.c16b39.1)]
|
||||
// CHECK:STDOUT: %.loc10_3.16: @F.%.loc10_3.15 (@F.%.loc10_3.15) = splice_inst %.loc10_3.14 [template = %.loc10_3.16 (constants.%.a7b35a.1)]
|
||||
// CHECK:STDOUT: %.loc10_3.17: <instruction> = compound_member_access_action %.loc10_39.1, %.loc10_3.2 [template]
|
||||
// CHECK:STDOUT: %.loc10_3.18: type = type_of_inst %.loc10_3.17 [template]
|
||||
// CHECK:STDOUT: %.loc10_3.19: @F.%.loc10_3.18 (@F.%.loc10_3.18) = splice_inst %.loc10_3.17 [template = %.loc10_3.19 (constants.%.5f8)]
|
||||
// CHECK:STDOUT: %.loc10_3.19: @F.%.loc10_3.18 (@F.%.loc10_3.18) = splice_inst %.loc10_3.17 [template = %.loc10_3.19 (constants.%.b64)]
|
||||
// CHECK:STDOUT: %.loc10_3.20: <instruction> = call_action (%.loc10_3.3), true [template]
|
||||
// CHECK:STDOUT: %.loc10_3.21: type = type_of_inst %.loc10_3.20 [template]
|
||||
// CHECK:STDOUT: %.loc10_3.22: @F.%.loc10_3.21 (@F.%.loc10_3.21) = splice_inst %.loc10_3.20 [template = %.loc10_3.22 (constants.%.fde)]
|
||||
// CHECK:STDOUT: %.loc10_3.23: <instruction> = refine_type_action %.loc10_3.5, %.loc10_24.8 [template]
|
||||
// CHECK:STDOUT: %.loc10_3.24: @F.%.loc10_24.8 (%.897) = splice_inst %.loc10_3.23 [template = %.loc10_3.24 (constants.%.0cf)]
|
||||
// CHECK:STDOUT: %.loc10_3.22: @F.%.loc10_3.21 (@F.%.loc10_3.21) = splice_inst %.loc10_3.20 [template = %.loc10_3.22 (constants.%.de5)]
|
||||
// CHECK:STDOUT: %.loc10_3.23: <instruction> = refine_inst_action %.loc10_3.5 [template]
|
||||
// CHECK:STDOUT: %.loc10_3.24: @F.%.loc10_24.11 (%.d48) = splice_inst %.loc10_3.23 [template = %.loc10_3.24 (constants.%.7c8)]
|
||||
// CHECK:STDOUT: %.loc10_3.25: <instruction> = convert_to_category_action %.loc10_3.6, element10 [template]
|
||||
// CHECK:STDOUT: %.loc10_3.26: @F.%.loc10_24.8 (%.897) = splice_inst %.loc10_3.25 [template = %.loc10_3.26 (constants.%.74f)]
|
||||
// CHECK:STDOUT: %.loc10_3.27: <instruction> = refine_type_action %a.var, %.loc10_24.8 [template]
|
||||
// CHECK:STDOUT: %.loc10_3.28: @F.%.loc10_24.8 (%.897) = splice_inst %.loc10_3.27 [template = %.loc10_3.28 (constants.%.de4)]
|
||||
// CHECK:STDOUT: %.loc10_3.26: @F.%.loc10_24.11 (%.d48) = splice_inst %.loc10_3.25 [template = %.loc10_3.26 (constants.%.8f8)]
|
||||
// CHECK:STDOUT: %.loc10_3.27: <instruction> = refine_inst_action %a.var [template]
|
||||
// CHECK:STDOUT: %.loc10_3.28: @F.%.loc10_24.11 (%.d48) = splice_inst %.loc10_3.27 [template = %.loc10_3.28 (constants.%.821)]
|
||||
// CHECK:STDOUT: %.loc10_3.29: <instruction> = compound_member_access_action %.loc10_3.8, constants.%assoc0.ae8 [template]
|
||||
// CHECK:STDOUT: %.loc10_3.30: type = type_of_inst %.loc10_3.29 [template]
|
||||
// CHECK:STDOUT: %.loc10_3.31: @F.%.loc10_3.30 (@F.%.loc10_3.30) = splice_inst %.loc10_3.29 [template = %.loc10_3.31 (constants.%.040)]
|
||||
// CHECK:STDOUT: %.loc10_3.31: @F.%.loc10_3.30 (@F.%.loc10_3.30) = splice_inst %.loc10_3.29 [template = %.loc10_3.31 (constants.%.9a3a)]
|
||||
// CHECK:STDOUT: %.loc10_3.32: <instruction> = call_action (%.loc10_3.9), true [template]
|
||||
// CHECK:STDOUT: %.loc10_3.33: type = type_of_inst %.loc10_3.32 [template]
|
||||
// CHECK:STDOUT: %.loc10_3.34: @F.%.loc10_3.33 (@F.%.loc10_3.33) = splice_inst %.loc10_3.32 [template = %.loc10_3.34 (constants.%.b87)]
|
||||
// CHECK:STDOUT: %.loc10_3.34: @F.%.loc10_3.33 (@F.%.loc10_3.33) = splice_inst %.loc10_3.32 [template = %.loc10_3.34 (constants.%.595)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %a.var: ref @F.%.loc10_24.8 (%.897) = var_storage %a.var_patt.loc10_3.1
|
||||
// CHECK:STDOUT: %a.var: ref @F.%.loc10_24.11 (%.d48) = var_storage %a.var_patt.loc10_3.1
|
||||
// CHECK:STDOUT: %Cpp.ref.loc10_28: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %A.ref.loc10_31: %A.type = name_ref A, imports.%A.template [concrete = constants.%A.template]
|
||||
// CHECK:STDOUT: %T.ref.loc10_34: type = name_ref T, %T.loc9_15.2 [symbolic = %T.loc9_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc10_34: type = template_inst %T.ref.loc10_34 [template = %.loc10_23.2 (constants.%.a92)]
|
||||
// CHECK:STDOUT: %.loc10_35.1: @F.%.loc10_35.3 (@F.%.loc10_35.3) = splice_inst %.loc10_35.2 [template = %.loc10_35.4 (constants.%.8af9c5.2)]
|
||||
// CHECK:STDOUT: %.loc10_36.1: @F.%.loc10_36.3 (@F.%.loc10_36.3) = splice_inst %.loc10_36.2 [template = %.loc10_36.4 (constants.%.c84)]
|
||||
// CHECK:STDOUT: %.loc10_39.1: @F.%.loc10_39.3 (@F.%.loc10_39.3) = splice_inst %.loc10_39.2 [template = %.loc10_39.4 (constants.%.47d)]
|
||||
// CHECK:STDOUT: %.loc10_3.1: @F.%.loc10_3.12 (@F.%.loc10_3.12) = splice_inst %.loc10_3.11 [template = %.loc10_3.13 (constants.%.20c9c2.1)]
|
||||
// CHECK:STDOUT: %.loc10_3.2: @F.%.loc10_3.15 (@F.%.loc10_3.15) = splice_inst %.loc10_3.14 [template = %.loc10_3.16 (constants.%.c16b39.1)]
|
||||
// CHECK:STDOUT: %.loc10_3.3: @F.%.loc10_3.18 (@F.%.loc10_3.18) = splice_inst %.loc10_3.17 [template = %.loc10_3.19 (constants.%.5f8)]
|
||||
// CHECK:STDOUT: %.loc10_3.4: @F.%.loc10_3.21 (@F.%.loc10_3.21) = splice_inst %.loc10_3.20 [template = %.loc10_3.22 (constants.%.fde)]
|
||||
// CHECK:STDOUT: %.loc10_3.5: @F.%.loc10_24.8 (%.897) = converted %.loc10_39.1, %.loc10_3.4 [template = %.loc10_3.22 (constants.%.fde)]
|
||||
// CHECK:STDOUT: %.loc10_3.6: @F.%.loc10_24.8 (%.897) = splice_inst %.loc10_3.23 [template = %.loc10_3.24 (constants.%.0cf)]
|
||||
// CHECK:STDOUT: %.loc10_3.7: @F.%.loc10_24.8 (%.897) = splice_inst %.loc10_3.25 [template = %.loc10_3.26 (constants.%.74f)]
|
||||
// CHECK:STDOUT: %.loc10_35.1: type = splice_inst %.loc10_35.3 [template = %.loc10_35.4 (constants.%.4a6fd8.2)]
|
||||
// CHECK:STDOUT: %.loc10_35.2: @F.%.loc10_35.6 (@F.%.loc10_35.6) = splice_inst %.loc10_35.5 [template = %.loc10_35.7 (constants.%.dcc61d.2)]
|
||||
// CHECK:STDOUT: %.loc10_36.1: @F.%.loc10_36.3 (@F.%.loc10_36.3) = splice_inst %.loc10_36.2 [template = %.loc10_36.4 (constants.%.883)]
|
||||
// CHECK:STDOUT: %.loc10_39.1: @F.%.loc10_39.3 (@F.%.loc10_39.3) = splice_inst %.loc10_39.2 [template = %.loc10_39.4 (constants.%.ef0)]
|
||||
// CHECK:STDOUT: %.loc10_3.1: @F.%.loc10_3.12 (@F.%.loc10_3.12) = splice_inst %.loc10_3.11 [template = %.loc10_3.13 (constants.%.cd85d6.1)]
|
||||
// CHECK:STDOUT: %.loc10_3.2: @F.%.loc10_3.15 (@F.%.loc10_3.15) = splice_inst %.loc10_3.14 [template = %.loc10_3.16 (constants.%.a7b35a.1)]
|
||||
// CHECK:STDOUT: %.loc10_3.3: @F.%.loc10_3.18 (@F.%.loc10_3.18) = splice_inst %.loc10_3.17 [template = %.loc10_3.19 (constants.%.b64)]
|
||||
// CHECK:STDOUT: %.loc10_3.4: @F.%.loc10_3.21 (@F.%.loc10_3.21) = splice_inst %.loc10_3.20 [template = %.loc10_3.22 (constants.%.de5)]
|
||||
// CHECK:STDOUT: %.loc10_3.5: @F.%.loc10_24.11 (%.d48) = converted %.loc10_39.1, %.loc10_3.4 [template = %.loc10_3.22 (constants.%.de5)]
|
||||
// CHECK:STDOUT: %.loc10_3.6: @F.%.loc10_24.11 (%.d48) = splice_inst %.loc10_3.23 [template = %.loc10_3.24 (constants.%.7c8)]
|
||||
// CHECK:STDOUT: %.loc10_3.7: @F.%.loc10_24.11 (%.d48) = splice_inst %.loc10_3.25 [template = %.loc10_3.26 (constants.%.8f8)]
|
||||
// CHECK:STDOUT: assign %a.var, %.loc10_3.7
|
||||
// CHECK:STDOUT: %.loc10_24.1: type = splice_block %.loc10_24.3 [template = %.loc10_24.8 (constants.%.897)] {
|
||||
// CHECK:STDOUT: %.loc10_24.1: type = splice_block %.loc10_24.4 [template = %.loc10_24.11 (constants.%.d48)] {
|
||||
// CHECK:STDOUT: %Cpp.ref.loc10_17: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %A.ref.loc10_20: %A.type = name_ref A, imports.%A.template [concrete = constants.%A.template]
|
||||
// CHECK:STDOUT: %T.ref.loc10_23: type = name_ref T, %T.loc9_15.2 [symbolic = %T.loc9_15.1 (constants.%T)]
|
||||
// CHECK:STDOUT: %.loc10_23.1: type = template_inst %T.ref.loc10_23 [template = %.loc10_23.2 (constants.%.a92)]
|
||||
// CHECK:STDOUT: %.loc10_24.2: @F.%.loc10_24.5 (@F.%.loc10_24.5) = splice_inst %.loc10_24.4 [template = %.loc10_24.6 (constants.%.8af9c5.1)]
|
||||
// CHECK:STDOUT: %.loc10_24.3: type = splice_inst %.loc10_24.7 [template = %.loc10_24.8 (constants.%.897)]
|
||||
// CHECK:STDOUT: %.loc10_24.2: type = splice_inst %.loc10_24.5 [template = %.loc10_24.6 (constants.%.4a6fd8.1)]
|
||||
// CHECK:STDOUT: %.loc10_24.3: @F.%.loc10_24.8 (@F.%.loc10_24.8) = splice_inst %.loc10_24.7 [template = %.loc10_24.9 (constants.%.dcc61d.1)]
|
||||
// CHECK:STDOUT: %.loc10_24.4: type = splice_inst %.loc10_24.10 [template = %.loc10_24.11 (constants.%.d48)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %a: ref @F.%.loc10_24.8 (%.897) = wrapper_binding a, %a.var
|
||||
// CHECK:STDOUT: %a: ref @F.%.loc10_24.11 (%.d48) = wrapper_binding a, %a.var
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %a.patt.loc10_15.1: @F.%pattern_type (%pattern_type.463) = ref_binding_pattern a [template = %a.patt.loc10_15.2 (constants.%a.patt.577)]
|
||||
// CHECK:STDOUT: %a.var_patt.loc10_3.1: @F.%pattern_type (%pattern_type.463) = var_pattern %a.patt.loc10_15.1 [template = %a.var_patt.loc10_3.2 (constants.%a.var_patt.c6d)]
|
||||
// CHECK:STDOUT: %a.patt.loc10_15.1: @F.%pattern_type (%pattern_type.d94) = ref_binding_pattern a [template = %a.patt.loc10_15.2 (constants.%a.patt.59d)]
|
||||
// CHECK:STDOUT: %a.var_patt.loc10_3.1: @F.%pattern_type (%pattern_type.d94) = var_pattern %a.patt.loc10_15.1 [template = %a.var_patt.loc10_3.2 (constants.%a.var_patt.717)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc10_3.8: @F.%.loc10_24.8 (%.897) = splice_inst %.loc10_3.27 [template = %.loc10_3.28 (constants.%.de4)]
|
||||
// CHECK:STDOUT: %.loc10_3.9: @F.%.loc10_3.30 (@F.%.loc10_3.30) = splice_inst %.loc10_3.29 [template = %.loc10_3.31 (constants.%.040)]
|
||||
// CHECK:STDOUT: %.loc10_3.10: @F.%.loc10_3.33 (@F.%.loc10_3.33) = splice_inst %.loc10_3.32 [template = %.loc10_3.34 (constants.%.b87)]
|
||||
// CHECK:STDOUT: %.loc10_3.8: @F.%.loc10_24.11 (%.d48) = splice_inst %.loc10_3.27 [template = %.loc10_3.28 (constants.%.821)]
|
||||
// CHECK:STDOUT: %.loc10_3.9: @F.%.loc10_3.30 (@F.%.loc10_3.30) = splice_inst %.loc10_3.29 [template = %.loc10_3.31 (constants.%.9a3a)]
|
||||
// CHECK:STDOUT: %.loc10_3.10: @F.%.loc10_3.33 (@F.%.loc10_3.33) = splice_inst %.loc10_3.32 [template = %.loc10_3.34 (constants.%.595)]
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
@@ -922,43 +961,47 @@ fn G() {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %.loc10_23.2 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc10_24.4 => constants.%inst.splice_block.72dff3.1
|
||||
// CHECK:STDOUT: %.loc10_24.5 => type
|
||||
// CHECK:STDOUT: %.loc10_24.6 => constants.%A
|
||||
// CHECK:STDOUT: %.loc10_24.7 => constants.%inst.splice_block.c26
|
||||
// CHECK:STDOUT: %.loc10_24.8 => constants.%A
|
||||
// CHECK:STDOUT: %.loc10_24.5 => constants.%inst.specific_inst.9dc364.1
|
||||
// CHECK:STDOUT: %.loc10_24.6 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc10_24.7 => constants.%inst.splice_block.72dff3.1
|
||||
// CHECK:STDOUT: %.loc10_24.8 => type
|
||||
// CHECK:STDOUT: %.loc10_24.9 => constants.%A
|
||||
// CHECK:STDOUT: %.loc10_24.10 => constants.%inst.splice_block.c26
|
||||
// CHECK:STDOUT: %.loc10_24.11 => constants.%A
|
||||
// CHECK:STDOUT: %require_complete => constants.%complete_type.357
|
||||
// CHECK:STDOUT: %pattern_type => constants.%pattern_type.b78
|
||||
// CHECK:STDOUT: %a.patt.loc10_15.2 => constants.%a.patt.198
|
||||
// CHECK:STDOUT: %a.var_patt.loc10_3.2 => constants.%a.var_patt.47b
|
||||
// CHECK:STDOUT: %.loc10_35.2 => constants.%inst.splice_block.72dff3.2
|
||||
// CHECK:STDOUT: %.loc10_35.3 => type
|
||||
// CHECK:STDOUT: %.loc10_35.4 => constants.%A
|
||||
// CHECK:STDOUT: %.loc10_35.3 => constants.%inst.specific_inst.9dc364.2
|
||||
// CHECK:STDOUT: %.loc10_35.4 => constants.%i32
|
||||
// CHECK:STDOUT: %.loc10_35.5 => constants.%inst.splice_block.72dff3.2
|
||||
// CHECK:STDOUT: %.loc10_35.6 => type
|
||||
// CHECK:STDOUT: %.loc10_35.7 => constants.%A
|
||||
// CHECK:STDOUT: %.loc10_36.2 => constants.%inst.name_ref
|
||||
// CHECK:STDOUT: %.loc10_36.3 => constants.%A.A.cpp_overload_set.type
|
||||
// CHECK:STDOUT: %.loc10_36.4 => constants.%A.A.cpp_overload_set.value
|
||||
// CHECK:STDOUT: %.loc10_39.2 => constants.%inst.splice_block.76c
|
||||
// CHECK:STDOUT: %.loc10_39.3 => constants.%A
|
||||
// CHECK:STDOUT: %.loc10_39.4 => invalid
|
||||
// CHECK:STDOUT: %.loc10_3.11 => constants.%.ca0
|
||||
// CHECK:STDOUT: %.loc10_3.12 => constants.%.d2c
|
||||
// CHECK:STDOUT: %.loc10_3.13 => constants.%.20c9c2.2
|
||||
// CHECK:STDOUT: %.loc10_3.14 => constants.%.da6
|
||||
// CHECK:STDOUT: %.loc10_3.15 => constants.%.aaf
|
||||
// CHECK:STDOUT: %.loc10_3.16 => constants.%.c16b39.2
|
||||
// CHECK:STDOUT: %.loc10_3.17 => constants.%.ba2
|
||||
// CHECK:STDOUT: %.loc10_3.18 => constants.%.d40
|
||||
// CHECK:STDOUT: %.loc10_3.19 => constants.%.5da
|
||||
// CHECK:STDOUT: %.loc10_3.20 => constants.%.117
|
||||
// CHECK:STDOUT: %.loc10_3.21 => constants.%.f91
|
||||
// CHECK:STDOUT: %.loc10_3.22 => constants.%.519
|
||||
// CHECK:STDOUT: %.loc10_3.23 => constants.%inst.as_compatible.79b
|
||||
// CHECK:STDOUT: %.loc10_3.24 => constants.%.f0f
|
||||
// CHECK:STDOUT: %.loc10_3.25 => constants.%.7b9
|
||||
// CHECK:STDOUT: %.loc10_3.26 => constants.%.a12
|
||||
// CHECK:STDOUT: %.loc10_3.27 => constants.%inst.as_compatible.e4d
|
||||
// CHECK:STDOUT: %.loc10_3.11 => constants.%.514
|
||||
// CHECK:STDOUT: %.loc10_3.12 => constants.%.bf5
|
||||
// CHECK:STDOUT: %.loc10_3.13 => constants.%.cd85d6.2
|
||||
// CHECK:STDOUT: %.loc10_3.14 => constants.%.a4e
|
||||
// CHECK:STDOUT: %.loc10_3.15 => constants.%.087
|
||||
// CHECK:STDOUT: %.loc10_3.16 => constants.%.a7b35a.2
|
||||
// CHECK:STDOUT: %.loc10_3.17 => constants.%.0c2
|
||||
// CHECK:STDOUT: %.loc10_3.18 => constants.%.4bb
|
||||
// CHECK:STDOUT: %.loc10_3.19 => constants.%.9a31
|
||||
// CHECK:STDOUT: %.loc10_3.20 => constants.%.97a
|
||||
// CHECK:STDOUT: %.loc10_3.21 => constants.%.f1e
|
||||
// CHECK:STDOUT: %.loc10_3.22 => constants.%.b1f
|
||||
// CHECK:STDOUT: %.loc10_3.23 => constants.%.215
|
||||
// CHECK:STDOUT: %.loc10_3.24 => constants.%.6cb
|
||||
// CHECK:STDOUT: %.loc10_3.25 => constants.%.297
|
||||
// CHECK:STDOUT: %.loc10_3.26 => constants.%.3d9
|
||||
// CHECK:STDOUT: %.loc10_3.27 => constants.%inst.specific_inst.cb7
|
||||
// CHECK:STDOUT: %.loc10_3.28 => invalid
|
||||
// CHECK:STDOUT: %.loc10_3.29 => constants.%inst.splice_block.b0b
|
||||
// CHECK:STDOUT: %.loc10_3.29 => constants.%inst.splice_block.863
|
||||
// CHECK:STDOUT: %.loc10_3.30 => <bound method>
|
||||
// CHECK:STDOUT: %.loc10_3.31 => invalid
|
||||
// CHECK:STDOUT: %.loc10_3.32 => constants.%inst.call
|
||||
|
||||
+145
-129
@@ -51,12 +51,13 @@ fn G() {
|
||||
// CHECK:STDOUT: %S.type: type = cpp_type_template_type S [concrete]
|
||||
// CHECK:STDOUT: %S.template: %S.type = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %.a92: type = template_inst %T.67d [template]
|
||||
// CHECK:STDOUT: %.de1: @F.%.loc8_24.5 (@F.%.loc8_24.5) = splice_inst @F.%.loc8_24.4 [template]
|
||||
// CHECK:STDOUT: %.bc2: type = splice_inst @F.%.loc8_24.7 [template]
|
||||
// CHECK:STDOUT: %require_complete.e38: <witness> = require_complete_type %.bc2 [template]
|
||||
// CHECK:STDOUT: %pattern_type.aa8: type = pattern_type %.bc2 [template]
|
||||
// CHECK:STDOUT: %v.patt.295: %pattern_type.aa8 = ref_binding_pattern v [template]
|
||||
// CHECK:STDOUT: %v.var_patt.ab7: %pattern_type.aa8 = var_pattern %v.patt.295 [template]
|
||||
// CHECK:STDOUT: %.4a6: type = splice_inst @F.%.loc8_24.5 [template]
|
||||
// CHECK:STDOUT: %.2a3: @F.%.loc8_24.8 (@F.%.loc8_24.8) = splice_inst @F.%.loc8_24.7 [template]
|
||||
// CHECK:STDOUT: %.8bd: type = splice_inst @F.%.loc8_24.10 [template]
|
||||
// CHECK:STDOUT: %require_complete.cfd: <witness> = require_complete_type %.8bd [template]
|
||||
// CHECK:STDOUT: %pattern_type.0fb: type = pattern_type %.8bd [template]
|
||||
// CHECK:STDOUT: %v.patt.5bf: %pattern_type.0fb = ref_binding_pattern v [template]
|
||||
// CHECK:STDOUT: %v.var_patt.2d3: %pattern_type.0fb = var_pattern %v.patt.5bf [template]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete]
|
||||
// CHECK:STDOUT: %Self.935: %DefaultOrUnformed.type = symbolic_binding Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type.8f1: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%Self.935) [symbolic]
|
||||
@@ -65,34 +66,38 @@ fn G() {
|
||||
// CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic]
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.b09) [symbolic]
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.cfe: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9 = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: <witness> = lookup_impl_witness %.bc2, @DefaultOrUnformed [template]
|
||||
// CHECK:STDOUT: %.c1c: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%.bc2) [template]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.680: %DefaultOrUnformed.type = facet_value %.bc2, (%DefaultOrUnformed.lookup_impl_witness) [template]
|
||||
// CHECK:STDOUT: %.b48: @F.%.loc8_25.6 (@F.%.loc8_25.6) = splice_inst @F.%.loc8_25.5 [template]
|
||||
// CHECK:STDOUT: %.9fe: @F.%.loc8_25.9 (@F.%.loc8_25.9) = splice_inst @F.%.loc8_25.8 [template]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: <witness> = lookup_impl_witness %.8bd, @DefaultOrUnformed [template]
|
||||
// CHECK:STDOUT: %.892: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%.8bd) [template]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.77c: %DefaultOrUnformed.type = facet_value %.8bd, (%DefaultOrUnformed.lookup_impl_witness) [template]
|
||||
// CHECK:STDOUT: %.92d: %DefaultOrUnformed.type = splice_inst @F.%.loc8_25.6 [template]
|
||||
// CHECK:STDOUT: %.f6b: @F.%.loc8_25.9 (@F.%.loc8_25.9) = splice_inst @F.%.loc8_25.8 [template]
|
||||
// CHECK:STDOUT: %.82c5: @F.%.loc8_25.12 (@F.%.loc8_25.12) = splice_inst @F.%.loc8_25.11 [template]
|
||||
// CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete]
|
||||
// CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %.735308.1: @F.%.loc8_3.12 (@F.%.loc8_3.12) = splice_inst @F.%.loc8_3.11 [template]
|
||||
// CHECK:STDOUT: %.cc0a4d.1: @F.%.loc8_3.15 (@F.%.loc8_3.15) = splice_inst @F.%.loc8_3.14 [template]
|
||||
// CHECK:STDOUT: %.825: @F.%.loc8_3.18 (@F.%.loc8_3.18) = splice_inst @F.%.loc8_3.17 [template]
|
||||
// CHECK:STDOUT: %.cd6: @F.%.loc8_3.21 (@F.%.loc8_3.21) = splice_inst @F.%.loc8_3.20 [template]
|
||||
// CHECK:STDOUT: %.b28: %.bc2 = splice_inst @F.%.loc8_3.23 [template]
|
||||
// CHECK:STDOUT: %.346: %.bc2 = splice_inst @F.%.loc8_3.25 [template]
|
||||
// CHECK:STDOUT: %.42a05f.1: @F.%.loc8_3.12 (@F.%.loc8_3.12) = splice_inst @F.%.loc8_3.11 [template]
|
||||
// CHECK:STDOUT: %.f8b3eb.1: @F.%.loc8_3.15 (@F.%.loc8_3.15) = splice_inst @F.%.loc8_3.14 [template]
|
||||
// CHECK:STDOUT: %.ebe: @F.%.loc8_3.18 (@F.%.loc8_3.18) = splice_inst @F.%.loc8_3.17 [template]
|
||||
// CHECK:STDOUT: %.9de: @F.%.loc8_3.21 (@F.%.loc8_3.21) = splice_inst @F.%.loc8_3.20 [template]
|
||||
// CHECK:STDOUT: %.aee: %.8bd = splice_inst @F.%.loc8_3.23 [template]
|
||||
// CHECK:STDOUT: %.d37: %.8bd = splice_inst @F.%.loc8_3.25 [template]
|
||||
// CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete]
|
||||
// CHECK:STDOUT: %Self.0e7: %Destroy.type = symbolic_binding Self, 0 [symbolic]
|
||||
// CHECK:STDOUT: %Destroy.WithSelf.Op.type.d3e: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Self.0e7) [symbolic]
|
||||
// CHECK:STDOUT: %Destroy.WithSelf.Op.42b: %Destroy.WithSelf.Op.type.d3e = struct_value () [symbolic]
|
||||
// CHECK:STDOUT: %Destroy.assoc_type: type = assoc_entity_type @Destroy [concrete]
|
||||
// CHECK:STDOUT: %assoc0.ae8: %Destroy.assoc_type = assoc_entity element0, imports.%Core.import_ref.918 [concrete]
|
||||
// CHECK:STDOUT: %.c8e: %.bc2 = splice_inst @F.%.loc8_3.27 [template]
|
||||
// CHECK:STDOUT: %.589: @F.%.loc8_3.30 (@F.%.loc8_3.30) = splice_inst @F.%.loc8_3.29 [template]
|
||||
// CHECK:STDOUT: %.08f: @F.%.loc8_3.33 (@F.%.loc8_3.33) = splice_inst @F.%.loc8_3.32 [template]
|
||||
// CHECK:STDOUT: %.200: %.8bd = splice_inst @F.%.loc8_3.27 [template]
|
||||
// CHECK:STDOUT: %.cdc: @F.%.loc8_3.30 (@F.%.loc8_3.30) = splice_inst @F.%.loc8_3.29 [template]
|
||||
// CHECK:STDOUT: %.993: @F.%.loc8_3.33 (@F.%.loc8_3.33) = splice_inst @F.%.loc8_3.32 [template]
|
||||
// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete]
|
||||
// CHECK:STDOUT: %X: type = class_type @X [concrete]
|
||||
// CHECK:STDOUT: %complete_type: <witness> = complete_type_witness %empty_struct_type [concrete]
|
||||
// CHECK:STDOUT: %pattern_type.fa7: type = pattern_type %X [concrete]
|
||||
// CHECK:STDOUT: %x.param_patt.468: %pattern_type.fa7 = value_param_pattern [concrete]
|
||||
// CHECK:STDOUT: %x.patt.af8: %pattern_type.fa7 = wrapper_binding_pattern x, %x.param_patt.468 [concrete]
|
||||
// CHECK:STDOUT: %inst.specific_inst.94c: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.fe6: type = specific_inst %X, @F(%X) [concrete = %X]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %S: type = class_type @S [concrete]
|
||||
// CHECK:STDOUT: %inst.splice_block.5af: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.788: type = splice_block imports.%S.decl [concrete = %S] {}
|
||||
@@ -112,6 +117,9 @@ fn G() {
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.c7b: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.602) [concrete]
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.83d: %T.as_type.as.DefaultOrUnformed.impl.Op.type.c7b = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.ba3: %DefaultOrUnformed.type = facet_value %S, (%DefaultOrUnformed.impl_witness.1ff) [concrete]
|
||||
// CHECK:STDOUT: %inst.specific_inst.15d: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.3a2: %DefaultOrUnformed.type = specific_inst %DefaultOrUnformed.facet.ba3, @F(%X) [concrete = %DefaultOrUnformed.facet.ba3]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.WithSelf.Op.type.483: type = fn_type @DefaultOrUnformed.WithSelf.Op, @DefaultOrUnformed.WithSelf(%DefaultOrUnformed.facet.ba3) [concrete]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.assoc_type: type = assoc_entity_type @DefaultOrUnformed [concrete]
|
||||
// CHECK:STDOUT: %assoc0.b81: %DefaultOrUnformed.assoc_type = assoc_entity element0, imports.%Core.import_ref.d14 [concrete]
|
||||
@@ -131,26 +139,24 @@ fn G() {
|
||||
// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %S to %.746 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn.e6b3f4.2()
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.d2b: <instruction> = call_action (%ImplicitAs.generic, %.bc2), false [template]
|
||||
// CHECK:STDOUT: %.770: type = type_of_inst %.d2b [template]
|
||||
// CHECK:STDOUT: %.735308.2: %.770 = splice_inst %.d2b [template]
|
||||
// CHECK:STDOUT: %.e6e: <instruction> = access_member_action %.735308.2, Convert [template]
|
||||
// CHECK:STDOUT: %.247: type = type_of_inst %.e6e [template]
|
||||
// CHECK:STDOUT: %.cc0a4d.2: %.247 = splice_inst %.e6e [template]
|
||||
// CHECK:STDOUT: %.f9f: <instruction> = compound_member_access_action %.cc7, %.cc0a4d.2 [template]
|
||||
// CHECK:STDOUT: %.828: type = type_of_inst %.f9f [template]
|
||||
// CHECK:STDOUT: %.9e3: %.828 = splice_inst %.f9f [template]
|
||||
// CHECK:STDOUT: %.497: <instruction> = call_action (%.9e3), true [template]
|
||||
// CHECK:STDOUT: %.30d: type = type_of_inst %.497 [template]
|
||||
// CHECK:STDOUT: %.1ea: %.30d = splice_inst %.497 [template]
|
||||
// CHECK:STDOUT: %.cd7: %S = splice_inst %.497 [template]
|
||||
// CHECK:STDOUT: %inst.as_compatible.e16: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.f55: %S = as_compatible %.1ea [template = %.cd7]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.d55: <instruction> = convert_to_category_action %.cd7, element10 [template]
|
||||
// CHECK:STDOUT: %.61f: %S = splice_inst %.d55 [template]
|
||||
// CHECK:STDOUT: %inst.as_compatible.313: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.419: ref %S = as_compatible @F.%v.var
|
||||
// CHECK:STDOUT: %.d80: <instruction> = call_action (%ImplicitAs.generic, %.8bd), false [template]
|
||||
// CHECK:STDOUT: %.fb0: type = type_of_inst %.d80 [template]
|
||||
// CHECK:STDOUT: %.42a05f.2: %.fb0 = splice_inst %.d80 [template]
|
||||
// CHECK:STDOUT: %.126: <instruction> = access_member_action %.42a05f.2, Convert [template]
|
||||
// CHECK:STDOUT: %.dcf: type = type_of_inst %.126 [template]
|
||||
// CHECK:STDOUT: %.f8b3eb.2: %.dcf = splice_inst %.126 [template]
|
||||
// CHECK:STDOUT: %.609: <instruction> = compound_member_access_action %.cc7, %.f8b3eb.2 [template]
|
||||
// CHECK:STDOUT: %.b7f: type = type_of_inst %.609 [template]
|
||||
// CHECK:STDOUT: %.c5b: %.b7f = splice_inst %.609 [template]
|
||||
// CHECK:STDOUT: %.ee1: <instruction> = call_action (%.c5b), true [template]
|
||||
// CHECK:STDOUT: %.fb6: type = type_of_inst %.ee1 [template]
|
||||
// CHECK:STDOUT: %.904: %.fb6 = splice_inst %.ee1 [template]
|
||||
// CHECK:STDOUT: %.3aa: <instruction> = refine_inst_action %.904 [template]
|
||||
// CHECK:STDOUT: %.443: %S = splice_inst %.3aa [template]
|
||||
// CHECK:STDOUT: %.00d: <instruction> = convert_to_category_action %.443, element10 [template]
|
||||
// CHECK:STDOUT: %.9c0: %S = splice_inst %.00d [template]
|
||||
// CHECK:STDOUT: %inst.specific_inst.54a: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.b44: ref %S = specific_inst @F.%v.var, @F(%X)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete]
|
||||
// CHECK:STDOUT: %S.cpp_destructor: %S.cpp_destructor.type = struct_value () [concrete]
|
||||
@@ -160,18 +166,18 @@ fn G() {
|
||||
// CHECK:STDOUT: %Destroy.facet.2e5: %Destroy.type = facet_value %S, (%custom_witness.e7a31c.2) [concrete]
|
||||
// CHECK:STDOUT: %Destroy.WithSelf.Op.type.5df: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.2e5) [concrete]
|
||||
// CHECK:STDOUT: %.670: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.5df, %Destroy.facet.2e5 [concrete]
|
||||
// CHECK:STDOUT: %inst.splice_block.478: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.90d: <bound method> = splice_block %bound_method {
|
||||
// CHECK:STDOUT: %inst.splice_block.57b: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.39a: <bound method> = splice_block %bound_method {
|
||||
// CHECK:STDOUT: <elided>
|
||||
// CHECK:STDOUT: %impl.elem0.c3e: %.670 = impl_witness_access %custom_witness.e7a31c.2, element0 [concrete = %S.Op.4dca31.2]
|
||||
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %.419, %impl.elem0.c3e
|
||||
// CHECK:STDOUT: %bound_method: <bound method> = bound_method %.b44, %impl.elem0.c3e
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %inst.splice_block.37a: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.084: init %empty_tuple.type = splice_block %S.cpp_destructor.call {
|
||||
// CHECK:STDOUT: %inst.splice_block.8eb: <instruction> = inst_value [concrete] {
|
||||
// CHECK:STDOUT: %.a23: init %empty_tuple.type = splice_block %S.cpp_destructor.call {
|
||||
// CHECK:STDOUT: %Op.ref.6a0: %S.cpp_destructor.type = name_ref Op, imports.%S.cpp_destructor.decl [concrete = %S.cpp_destructor]
|
||||
// CHECK:STDOUT: %S.cpp_destructor.bound: <bound method> = bound_method %.419, %Op.ref.6a0
|
||||
// CHECK:STDOUT: %S.cpp_destructor.call: init %empty_tuple.type = call %S.cpp_destructor.bound(%.419)
|
||||
// CHECK:STDOUT: %S.cpp_destructor.bound: <bound method> = bound_method %.b44, %Op.ref.6a0
|
||||
// CHECK:STDOUT: %S.cpp_destructor.call: init %empty_tuple.type = call %S.cpp_destructor.bound(%.b44)
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
@@ -224,80 +230,86 @@ fn G() {
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete.loc7: <witness> = require_complete_type %T.loc7_7.1 [symbolic = %require_complete.loc7 (constants.%require_complete.944)]
|
||||
// CHECK:STDOUT: %.loc8_23.2: type = template_inst %T.loc7_7.1 [template = %.loc8_23.2 (constants.%.a92)]
|
||||
// CHECK:STDOUT: %.loc8_24.4: <instruction> = call_action (%S.ref, %.loc8_23.1), false [template]
|
||||
// CHECK:STDOUT: %.loc8_24.5: type = type_of_inst %.loc8_24.4 [template]
|
||||
// CHECK:STDOUT: %.loc8_24.6: @F.%.loc8_24.5 (@F.%.loc8_24.5) = splice_inst %.loc8_24.4 [template = %.loc8_24.6 (constants.%.de1)]
|
||||
// CHECK:STDOUT: %.loc8_24.7: <instruction> = convert_to_value_action %.loc8_24.2, type [template]
|
||||
// CHECK:STDOUT: %.loc8_24.8: type = splice_inst %.loc8_24.7 [template = %.loc8_24.8 (constants.%.bc2)]
|
||||
// CHECK:STDOUT: %require_complete.loc8: <witness> = require_complete_type %.loc8_24.8 [template = %require_complete.loc8 (constants.%require_complete.e38)]
|
||||
// CHECK:STDOUT: %pattern_type.loc8: type = pattern_type %.loc8_24.8 [template = %pattern_type.loc8 (constants.%pattern_type.aa8)]
|
||||
// CHECK:STDOUT: %v.patt.loc8_15.2: @F.%pattern_type.loc8 (%pattern_type.aa8) = ref_binding_pattern v [template = %v.patt.loc8_15.2 (constants.%v.patt.295)]
|
||||
// CHECK:STDOUT: %v.var_patt.loc8_3.2: @F.%pattern_type.loc8 (%pattern_type.aa8) = var_pattern %v.patt.loc8_15.2 [template = %v.var_patt.loc8_3.2 (constants.%v.var_patt.ab7)]
|
||||
// CHECK:STDOUT: %.loc8_25.4: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%.loc8_24.8) [template = %.loc8_25.4 (constants.%.c1c)]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: <witness> = lookup_impl_witness %.loc8_24.8, @DefaultOrUnformed [template = %DefaultOrUnformed.lookup_impl_witness (constants.%DefaultOrUnformed.lookup_impl_witness)]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8_25.2: %DefaultOrUnformed.type = facet_value %.loc8_24.8, (%DefaultOrUnformed.lookup_impl_witness) [template = %DefaultOrUnformed.facet.loc8_25.2 (constants.%DefaultOrUnformed.facet.680)]
|
||||
// CHECK:STDOUT: %.loc8_25.5: <instruction> = access_member_action %.loc8_25.1, Op [template]
|
||||
// CHECK:STDOUT: %.loc8_25.6: type = type_of_inst %.loc8_25.5 [template]
|
||||
// CHECK:STDOUT: %.loc8_25.7: @F.%.loc8_25.6 (@F.%.loc8_25.6) = splice_inst %.loc8_25.5 [template = %.loc8_25.7 (constants.%.b48)]
|
||||
// CHECK:STDOUT: %.loc8_25.8: <instruction> = call_action (%.loc8_25.2), false [template]
|
||||
// CHECK:STDOUT: %.loc8_24.5: <instruction> = refine_inst_action %.loc8_23.1 [template]
|
||||
// CHECK:STDOUT: %.loc8_24.6: type = splice_inst %.loc8_24.5 [template = %.loc8_24.6 (constants.%.4a6)]
|
||||
// CHECK:STDOUT: %.loc8_24.7: <instruction> = call_action (%S.ref, %.loc8_24.2), false [template]
|
||||
// CHECK:STDOUT: %.loc8_24.8: type = type_of_inst %.loc8_24.7 [template]
|
||||
// CHECK:STDOUT: %.loc8_24.9: @F.%.loc8_24.8 (@F.%.loc8_24.8) = splice_inst %.loc8_24.7 [template = %.loc8_24.9 (constants.%.2a3)]
|
||||
// CHECK:STDOUT: %.loc8_24.10: <instruction> = convert_to_value_action %.loc8_24.3, type [template]
|
||||
// CHECK:STDOUT: %.loc8_24.11: type = splice_inst %.loc8_24.10 [template = %.loc8_24.11 (constants.%.8bd)]
|
||||
// CHECK:STDOUT: %require_complete.loc8: <witness> = require_complete_type %.loc8_24.11 [template = %require_complete.loc8 (constants.%require_complete.cfd)]
|
||||
// CHECK:STDOUT: %pattern_type.loc8: type = pattern_type %.loc8_24.11 [template = %pattern_type.loc8 (constants.%pattern_type.0fb)]
|
||||
// CHECK:STDOUT: %v.patt.loc8_15.2: @F.%pattern_type.loc8 (%pattern_type.0fb) = ref_binding_pattern v [template = %v.patt.loc8_15.2 (constants.%v.patt.5bf)]
|
||||
// CHECK:STDOUT: %v.var_patt.loc8_3.2: @F.%pattern_type.loc8 (%pattern_type.0fb) = var_pattern %v.patt.loc8_15.2 [template = %v.var_patt.loc8_3.2 (constants.%v.var_patt.2d3)]
|
||||
// CHECK:STDOUT: %.loc8_25.5: require_specific_def_type = require_specific_def @T.as.DefaultOrUnformed.impl(%.loc8_24.11) [template = %.loc8_25.5 (constants.%.892)]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness: <witness> = lookup_impl_witness %.loc8_24.11, @DefaultOrUnformed [template = %DefaultOrUnformed.lookup_impl_witness (constants.%DefaultOrUnformed.lookup_impl_witness)]
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8_25.2: %DefaultOrUnformed.type = facet_value %.loc8_24.11, (%DefaultOrUnformed.lookup_impl_witness) [template = %DefaultOrUnformed.facet.loc8_25.2 (constants.%DefaultOrUnformed.facet.77c)]
|
||||
// CHECK:STDOUT: %.loc8_25.6: <instruction> = refine_inst_action %.loc8_25.1 [template]
|
||||
// CHECK:STDOUT: %.loc8_25.7: %DefaultOrUnformed.type = splice_inst %.loc8_25.6 [template = %.loc8_25.7 (constants.%.92d)]
|
||||
// CHECK:STDOUT: %.loc8_25.8: <instruction> = access_member_action %.loc8_25.2, Op [template]
|
||||
// CHECK:STDOUT: %.loc8_25.9: type = type_of_inst %.loc8_25.8 [template]
|
||||
// CHECK:STDOUT: %.loc8_25.10: @F.%.loc8_25.9 (@F.%.loc8_25.9) = splice_inst %.loc8_25.8 [template = %.loc8_25.10 (constants.%.9fe)]
|
||||
// CHECK:STDOUT: %.loc8_3.11: <instruction> = call_action (constants.%ImplicitAs.generic, constants.%.bc2), false [template]
|
||||
// CHECK:STDOUT: %.loc8_25.10: @F.%.loc8_25.9 (@F.%.loc8_25.9) = splice_inst %.loc8_25.8 [template = %.loc8_25.10 (constants.%.f6b)]
|
||||
// CHECK:STDOUT: %.loc8_25.11: <instruction> = call_action (%.loc8_25.3), false [template]
|
||||
// CHECK:STDOUT: %.loc8_25.12: type = type_of_inst %.loc8_25.11 [template]
|
||||
// CHECK:STDOUT: %.loc8_25.13: @F.%.loc8_25.12 (@F.%.loc8_25.12) = splice_inst %.loc8_25.11 [template = %.loc8_25.13 (constants.%.82c5)]
|
||||
// CHECK:STDOUT: %.loc8_3.11: <instruction> = call_action (constants.%ImplicitAs.generic, constants.%.8bd), false [template]
|
||||
// CHECK:STDOUT: %.loc8_3.12: type = type_of_inst %.loc8_3.11 [template]
|
||||
// CHECK:STDOUT: %.loc8_3.13: @F.%.loc8_3.12 (@F.%.loc8_3.12) = splice_inst %.loc8_3.11 [template = %.loc8_3.13 (constants.%.735308.1)]
|
||||
// CHECK:STDOUT: %.loc8_3.13: @F.%.loc8_3.12 (@F.%.loc8_3.12) = splice_inst %.loc8_3.11 [template = %.loc8_3.13 (constants.%.42a05f.1)]
|
||||
// CHECK:STDOUT: %.loc8_3.14: <instruction> = access_member_action %.loc8_3.1, Convert [template]
|
||||
// CHECK:STDOUT: %.loc8_3.15: type = type_of_inst %.loc8_3.14 [template]
|
||||
// CHECK:STDOUT: %.loc8_3.16: @F.%.loc8_3.15 (@F.%.loc8_3.15) = splice_inst %.loc8_3.14 [template = %.loc8_3.16 (constants.%.cc0a4d.1)]
|
||||
// CHECK:STDOUT: %.loc8_3.17: <instruction> = compound_member_access_action %.loc8_25.3, %.loc8_3.2 [template]
|
||||
// CHECK:STDOUT: %.loc8_3.16: @F.%.loc8_3.15 (@F.%.loc8_3.15) = splice_inst %.loc8_3.14 [template = %.loc8_3.16 (constants.%.f8b3eb.1)]
|
||||
// CHECK:STDOUT: %.loc8_3.17: <instruction> = compound_member_access_action %.loc8_25.4, %.loc8_3.2 [template]
|
||||
// CHECK:STDOUT: %.loc8_3.18: type = type_of_inst %.loc8_3.17 [template]
|
||||
// CHECK:STDOUT: %.loc8_3.19: @F.%.loc8_3.18 (@F.%.loc8_3.18) = splice_inst %.loc8_3.17 [template = %.loc8_3.19 (constants.%.825)]
|
||||
// CHECK:STDOUT: %.loc8_3.19: @F.%.loc8_3.18 (@F.%.loc8_3.18) = splice_inst %.loc8_3.17 [template = %.loc8_3.19 (constants.%.ebe)]
|
||||
// CHECK:STDOUT: %.loc8_3.20: <instruction> = call_action (%.loc8_3.3), true [template]
|
||||
// CHECK:STDOUT: %.loc8_3.21: type = type_of_inst %.loc8_3.20 [template]
|
||||
// CHECK:STDOUT: %.loc8_3.22: @F.%.loc8_3.21 (@F.%.loc8_3.21) = splice_inst %.loc8_3.20 [template = %.loc8_3.22 (constants.%.cd6)]
|
||||
// CHECK:STDOUT: %.loc8_3.23: <instruction> = refine_type_action %.loc8_3.5, %.loc8_24.8 [template]
|
||||
// CHECK:STDOUT: %.loc8_3.24: @F.%.loc8_24.8 (%.bc2) = splice_inst %.loc8_3.23 [template = %.loc8_3.24 (constants.%.b28)]
|
||||
// CHECK:STDOUT: %.loc8_3.22: @F.%.loc8_3.21 (@F.%.loc8_3.21) = splice_inst %.loc8_3.20 [template = %.loc8_3.22 (constants.%.9de)]
|
||||
// CHECK:STDOUT: %.loc8_3.23: <instruction> = refine_inst_action %.loc8_3.5 [template]
|
||||
// CHECK:STDOUT: %.loc8_3.24: @F.%.loc8_24.11 (%.8bd) = splice_inst %.loc8_3.23 [template = %.loc8_3.24 (constants.%.aee)]
|
||||
// CHECK:STDOUT: %.loc8_3.25: <instruction> = convert_to_category_action %.loc8_3.6, element10 [template]
|
||||
// CHECK:STDOUT: %.loc8_3.26: @F.%.loc8_24.8 (%.bc2) = splice_inst %.loc8_3.25 [template = %.loc8_3.26 (constants.%.346)]
|
||||
// CHECK:STDOUT: %.loc8_3.27: <instruction> = refine_type_action %v.var, %.loc8_24.8 [template]
|
||||
// CHECK:STDOUT: %.loc8_3.28: @F.%.loc8_24.8 (%.bc2) = splice_inst %.loc8_3.27 [template = %.loc8_3.28 (constants.%.c8e)]
|
||||
// CHECK:STDOUT: %.loc8_3.26: @F.%.loc8_24.11 (%.8bd) = splice_inst %.loc8_3.25 [template = %.loc8_3.26 (constants.%.d37)]
|
||||
// CHECK:STDOUT: %.loc8_3.27: <instruction> = refine_inst_action %v.var [template]
|
||||
// CHECK:STDOUT: %.loc8_3.28: @F.%.loc8_24.11 (%.8bd) = splice_inst %.loc8_3.27 [template = %.loc8_3.28 (constants.%.200)]
|
||||
// CHECK:STDOUT: %.loc8_3.29: <instruction> = compound_member_access_action %.loc8_3.8, constants.%assoc0.ae8 [template]
|
||||
// CHECK:STDOUT: %.loc8_3.30: type = type_of_inst %.loc8_3.29 [template]
|
||||
// CHECK:STDOUT: %.loc8_3.31: @F.%.loc8_3.30 (@F.%.loc8_3.30) = splice_inst %.loc8_3.29 [template = %.loc8_3.31 (constants.%.589)]
|
||||
// CHECK:STDOUT: %.loc8_3.31: @F.%.loc8_3.30 (@F.%.loc8_3.30) = splice_inst %.loc8_3.29 [template = %.loc8_3.31 (constants.%.cdc)]
|
||||
// CHECK:STDOUT: %.loc8_3.32: <instruction> = call_action (%.loc8_3.9), true [template]
|
||||
// CHECK:STDOUT: %.loc8_3.33: type = type_of_inst %.loc8_3.32 [template]
|
||||
// CHECK:STDOUT: %.loc8_3.34: @F.%.loc8_3.33 (@F.%.loc8_3.33) = splice_inst %.loc8_3.32 [template = %.loc8_3.34 (constants.%.08f)]
|
||||
// CHECK:STDOUT: %.loc8_3.34: @F.%.loc8_3.33 (@F.%.loc8_3.33) = splice_inst %.loc8_3.32 [template = %.loc8_3.34 (constants.%.993)]
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn(%x.param: @F.%T.loc7_7.1 (%T.67d)) {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %v.var: ref @F.%.loc8_24.8 (%.bc2) = var_storage %v.var_patt.loc8_3.1
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8_25.1: %DefaultOrUnformed.type = facet_value constants.%.bc2, (constants.%DefaultOrUnformed.lookup_impl_witness) [template = %DefaultOrUnformed.facet.loc8_25.2 (constants.%DefaultOrUnformed.facet.680)]
|
||||
// CHECK:STDOUT: %.loc8_25.1: %DefaultOrUnformed.type = converted constants.%.bc2, %DefaultOrUnformed.facet.loc8_25.1 [template = %DefaultOrUnformed.facet.loc8_25.2 (constants.%DefaultOrUnformed.facet.680)]
|
||||
// CHECK:STDOUT: %.loc8_25.2: @F.%.loc8_25.6 (@F.%.loc8_25.6) = splice_inst %.loc8_25.5 [template = %.loc8_25.7 (constants.%.b48)]
|
||||
// CHECK:STDOUT: %.loc8_25.3: @F.%.loc8_25.9 (@F.%.loc8_25.9) = splice_inst %.loc8_25.8 [template = %.loc8_25.10 (constants.%.9fe)]
|
||||
// CHECK:STDOUT: %.loc8_3.1: @F.%.loc8_3.12 (@F.%.loc8_3.12) = splice_inst %.loc8_3.11 [template = %.loc8_3.13 (constants.%.735308.1)]
|
||||
// CHECK:STDOUT: %.loc8_3.2: @F.%.loc8_3.15 (@F.%.loc8_3.15) = splice_inst %.loc8_3.14 [template = %.loc8_3.16 (constants.%.cc0a4d.1)]
|
||||
// CHECK:STDOUT: %.loc8_3.3: @F.%.loc8_3.18 (@F.%.loc8_3.18) = splice_inst %.loc8_3.17 [template = %.loc8_3.19 (constants.%.825)]
|
||||
// CHECK:STDOUT: %.loc8_3.4: @F.%.loc8_3.21 (@F.%.loc8_3.21) = splice_inst %.loc8_3.20 [template = %.loc8_3.22 (constants.%.cd6)]
|
||||
// CHECK:STDOUT: %.loc8_3.5: @F.%.loc8_24.8 (%.bc2) = converted %.loc8_25.3, %.loc8_3.4 [template = %.loc8_3.22 (constants.%.cd6)]
|
||||
// CHECK:STDOUT: %.loc8_3.6: @F.%.loc8_24.8 (%.bc2) = splice_inst %.loc8_3.23 [template = %.loc8_3.24 (constants.%.b28)]
|
||||
// CHECK:STDOUT: %.loc8_3.7: @F.%.loc8_24.8 (%.bc2) = splice_inst %.loc8_3.25 [template = %.loc8_3.26 (constants.%.346)]
|
||||
// CHECK:STDOUT: %v.var: ref @F.%.loc8_24.11 (%.8bd) = var_storage %v.var_patt.loc8_3.1
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8_25.1: %DefaultOrUnformed.type = facet_value constants.%.8bd, (constants.%DefaultOrUnformed.lookup_impl_witness) [template = %DefaultOrUnformed.facet.loc8_25.2 (constants.%DefaultOrUnformed.facet.77c)]
|
||||
// CHECK:STDOUT: %.loc8_25.1: %DefaultOrUnformed.type = converted constants.%.8bd, %DefaultOrUnformed.facet.loc8_25.1 [template = %DefaultOrUnformed.facet.loc8_25.2 (constants.%DefaultOrUnformed.facet.77c)]
|
||||
// CHECK:STDOUT: %.loc8_25.2: %DefaultOrUnformed.type = splice_inst %.loc8_25.6 [template = %.loc8_25.7 (constants.%.92d)]
|
||||
// CHECK:STDOUT: %.loc8_25.3: @F.%.loc8_25.9 (@F.%.loc8_25.9) = splice_inst %.loc8_25.8 [template = %.loc8_25.10 (constants.%.f6b)]
|
||||
// CHECK:STDOUT: %.loc8_25.4: @F.%.loc8_25.12 (@F.%.loc8_25.12) = splice_inst %.loc8_25.11 [template = %.loc8_25.13 (constants.%.82c5)]
|
||||
// CHECK:STDOUT: %.loc8_3.1: @F.%.loc8_3.12 (@F.%.loc8_3.12) = splice_inst %.loc8_3.11 [template = %.loc8_3.13 (constants.%.42a05f.1)]
|
||||
// CHECK:STDOUT: %.loc8_3.2: @F.%.loc8_3.15 (@F.%.loc8_3.15) = splice_inst %.loc8_3.14 [template = %.loc8_3.16 (constants.%.f8b3eb.1)]
|
||||
// CHECK:STDOUT: %.loc8_3.3: @F.%.loc8_3.18 (@F.%.loc8_3.18) = splice_inst %.loc8_3.17 [template = %.loc8_3.19 (constants.%.ebe)]
|
||||
// CHECK:STDOUT: %.loc8_3.4: @F.%.loc8_3.21 (@F.%.loc8_3.21) = splice_inst %.loc8_3.20 [template = %.loc8_3.22 (constants.%.9de)]
|
||||
// CHECK:STDOUT: %.loc8_3.5: @F.%.loc8_24.11 (%.8bd) = converted %.loc8_25.4, %.loc8_3.4 [template = %.loc8_3.22 (constants.%.9de)]
|
||||
// CHECK:STDOUT: %.loc8_3.6: @F.%.loc8_24.11 (%.8bd) = splice_inst %.loc8_3.23 [template = %.loc8_3.24 (constants.%.aee)]
|
||||
// CHECK:STDOUT: %.loc8_3.7: @F.%.loc8_24.11 (%.8bd) = splice_inst %.loc8_3.25 [template = %.loc8_3.26 (constants.%.d37)]
|
||||
// CHECK:STDOUT: assign %v.var, %.loc8_3.7
|
||||
// CHECK:STDOUT: %.loc8_24.1: type = splice_block %.loc8_24.3 [template = %.loc8_24.8 (constants.%.bc2)] {
|
||||
// CHECK:STDOUT: %.loc8_24.1: type = splice_block %.loc8_24.4 [template = %.loc8_24.11 (constants.%.8bd)] {
|
||||
// CHECK:STDOUT: %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
|
||||
// CHECK:STDOUT: %S.ref: %S.type = name_ref S, imports.%S.template [concrete = constants.%S.template]
|
||||
// CHECK:STDOUT: %T.ref.loc8: type = name_ref T, %T.loc7_7.2 [symbolic = %T.loc7_7.1 (constants.%T.67d)]
|
||||
// CHECK:STDOUT: %.loc8_23.1: type = template_inst %T.ref.loc8 [template = %.loc8_23.2 (constants.%.a92)]
|
||||
// CHECK:STDOUT: %.loc8_24.2: @F.%.loc8_24.5 (@F.%.loc8_24.5) = splice_inst %.loc8_24.4 [template = %.loc8_24.6 (constants.%.de1)]
|
||||
// CHECK:STDOUT: %.loc8_24.3: type = splice_inst %.loc8_24.7 [template = %.loc8_24.8 (constants.%.bc2)]
|
||||
// CHECK:STDOUT: %.loc8_24.2: type = splice_inst %.loc8_24.5 [template = %.loc8_24.6 (constants.%.4a6)]
|
||||
// CHECK:STDOUT: %.loc8_24.3: @F.%.loc8_24.8 (@F.%.loc8_24.8) = splice_inst %.loc8_24.7 [template = %.loc8_24.9 (constants.%.2a3)]
|
||||
// CHECK:STDOUT: %.loc8_24.4: type = splice_inst %.loc8_24.10 [template = %.loc8_24.11 (constants.%.8bd)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %v: ref @F.%.loc8_24.8 (%.bc2) = wrapper_binding v, %v.var
|
||||
// CHECK:STDOUT: %v: ref @F.%.loc8_24.11 (%.8bd) = wrapper_binding v, %v.var
|
||||
// CHECK:STDOUT: name_binding_decl {
|
||||
// CHECK:STDOUT: %v.patt.loc8_15.1: @F.%pattern_type.loc8 (%pattern_type.aa8) = ref_binding_pattern v [template = %v.patt.loc8_15.2 (constants.%v.patt.295)]
|
||||
// CHECK:STDOUT: %v.var_patt.loc8_3.1: @F.%pattern_type.loc8 (%pattern_type.aa8) = var_pattern %v.patt.loc8_15.1 [template = %v.var_patt.loc8_3.2 (constants.%v.var_patt.ab7)]
|
||||
// CHECK:STDOUT: %v.patt.loc8_15.1: @F.%pattern_type.loc8 (%pattern_type.0fb) = ref_binding_pattern v [template = %v.patt.loc8_15.2 (constants.%v.patt.5bf)]
|
||||
// CHECK:STDOUT: %v.var_patt.loc8_3.1: @F.%pattern_type.loc8 (%pattern_type.0fb) = var_pattern %v.patt.loc8_15.1 [template = %v.var_patt.loc8_3.2 (constants.%v.var_patt.2d3)]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %.loc8_3.8: @F.%.loc8_24.8 (%.bc2) = splice_inst %.loc8_3.27 [template = %.loc8_3.28 (constants.%.c8e)]
|
||||
// CHECK:STDOUT: %.loc8_3.9: @F.%.loc8_3.30 (@F.%.loc8_3.30) = splice_inst %.loc8_3.29 [template = %.loc8_3.31 (constants.%.589)]
|
||||
// CHECK:STDOUT: %.loc8_3.10: @F.%.loc8_3.33 (@F.%.loc8_3.33) = splice_inst %.loc8_3.32 [template = %.loc8_3.34 (constants.%.08f)]
|
||||
// CHECK:STDOUT: %.loc8_3.8: @F.%.loc8_24.11 (%.8bd) = splice_inst %.loc8_3.27 [template = %.loc8_3.28 (constants.%.200)]
|
||||
// CHECK:STDOUT: %.loc8_3.9: @F.%.loc8_3.30 (@F.%.loc8_3.30) = splice_inst %.loc8_3.29 [template = %.loc8_3.31 (constants.%.cdc)]
|
||||
// CHECK:STDOUT: %.loc8_3.10: @F.%.loc8_3.33 (@F.%.loc8_3.33) = splice_inst %.loc8_3.32 [template = %.loc8_3.34 (constants.%.993)]
|
||||
// CHECK:STDOUT: return
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
@@ -320,46 +332,50 @@ fn G() {
|
||||
// CHECK:STDOUT: !definition:
|
||||
// CHECK:STDOUT: %require_complete.loc7 => constants.%complete_type
|
||||
// CHECK:STDOUT: %.loc8_23.2 => constants.%X
|
||||
// CHECK:STDOUT: %.loc8_24.4 => constants.%inst.splice_block.5af
|
||||
// CHECK:STDOUT: %.loc8_24.5 => type
|
||||
// CHECK:STDOUT: %.loc8_24.6 => constants.%S
|
||||
// CHECK:STDOUT: %.loc8_24.7 => constants.%inst.splice_block.c1e
|
||||
// CHECK:STDOUT: %.loc8_24.8 => constants.%S
|
||||
// CHECK:STDOUT: %.loc8_24.5 => constants.%inst.specific_inst.94c
|
||||
// CHECK:STDOUT: %.loc8_24.6 => constants.%X
|
||||
// CHECK:STDOUT: %.loc8_24.7 => constants.%inst.splice_block.5af
|
||||
// CHECK:STDOUT: %.loc8_24.8 => type
|
||||
// CHECK:STDOUT: %.loc8_24.9 => constants.%S
|
||||
// CHECK:STDOUT: %.loc8_24.10 => constants.%inst.splice_block.c1e
|
||||
// CHECK:STDOUT: %.loc8_24.11 => constants.%S
|
||||
// CHECK:STDOUT: %require_complete.loc8 => constants.%complete_type
|
||||
// CHECK:STDOUT: %pattern_type.loc8 => constants.%pattern_type.981
|
||||
// CHECK:STDOUT: %v.patt.loc8_15.2 => constants.%v.patt.5fa
|
||||
// CHECK:STDOUT: %v.var_patt.loc8_3.2 => constants.%v.var_patt.e69
|
||||
// CHECK:STDOUT: %.loc8_25.4 => constants.%.e53
|
||||
// CHECK:STDOUT: %.loc8_25.5 => constants.%.e53
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.lookup_impl_witness => constants.%DefaultOrUnformed.impl_witness.1ff
|
||||
// CHECK:STDOUT: %DefaultOrUnformed.facet.loc8_25.2 => constants.%DefaultOrUnformed.facet.ba3
|
||||
// CHECK:STDOUT: %.loc8_25.5 => constants.%inst.splice_block.9d9
|
||||
// CHECK:STDOUT: %.loc8_25.6 => constants.%.805
|
||||
// CHECK:STDOUT: %.loc8_25.7 => constants.%T.as_type.as.DefaultOrUnformed.impl.Op.83d
|
||||
// CHECK:STDOUT: %.loc8_25.8 => constants.%inst.splice_block.7e5
|
||||
// CHECK:STDOUT: %.loc8_25.9 => constants.%S
|
||||
// CHECK:STDOUT: %.loc8_25.10 => invalid
|
||||
// CHECK:STDOUT: %.loc8_3.11 => constants.%.d2b
|
||||
// CHECK:STDOUT: %.loc8_3.12 => constants.%.770
|
||||
// CHECK:STDOUT: %.loc8_3.13 => constants.%.735308.2
|
||||
// CHECK:STDOUT: %.loc8_3.14 => constants.%.e6e
|
||||
// CHECK:STDOUT: %.loc8_3.15 => constants.%.247
|
||||
// CHECK:STDOUT: %.loc8_3.16 => constants.%.cc0a4d.2
|
||||
// CHECK:STDOUT: %.loc8_3.17 => constants.%.f9f
|
||||
// CHECK:STDOUT: %.loc8_3.18 => constants.%.828
|
||||
// CHECK:STDOUT: %.loc8_3.19 => constants.%.9e3
|
||||
// CHECK:STDOUT: %.loc8_3.20 => constants.%.497
|
||||
// CHECK:STDOUT: %.loc8_3.21 => constants.%.30d
|
||||
// CHECK:STDOUT: %.loc8_3.22 => constants.%.1ea
|
||||
// CHECK:STDOUT: %.loc8_3.23 => constants.%inst.as_compatible.e16
|
||||
// CHECK:STDOUT: %.loc8_3.24 => constants.%.cd7
|
||||
// CHECK:STDOUT: %.loc8_3.25 => constants.%.d55
|
||||
// CHECK:STDOUT: %.loc8_3.26 => constants.%.61f
|
||||
// CHECK:STDOUT: %.loc8_3.27 => constants.%inst.as_compatible.313
|
||||
// CHECK:STDOUT: %.loc8_25.6 => constants.%inst.specific_inst.15d
|
||||
// CHECK:STDOUT: %.loc8_25.7 => constants.%DefaultOrUnformed.facet.ba3
|
||||
// CHECK:STDOUT: %.loc8_25.8 => constants.%inst.splice_block.9d9
|
||||
// CHECK:STDOUT: %.loc8_25.9 => constants.%.805
|
||||
// CHECK:STDOUT: %.loc8_25.10 => constants.%T.as_type.as.DefaultOrUnformed.impl.Op.83d
|
||||
// CHECK:STDOUT: %.loc8_25.11 => constants.%inst.splice_block.7e5
|
||||
// CHECK:STDOUT: %.loc8_25.12 => constants.%S
|
||||
// CHECK:STDOUT: %.loc8_25.13 => invalid
|
||||
// CHECK:STDOUT: %.loc8_3.11 => constants.%.d80
|
||||
// CHECK:STDOUT: %.loc8_3.12 => constants.%.fb0
|
||||
// CHECK:STDOUT: %.loc8_3.13 => constants.%.42a05f.2
|
||||
// CHECK:STDOUT: %.loc8_3.14 => constants.%.126
|
||||
// CHECK:STDOUT: %.loc8_3.15 => constants.%.dcf
|
||||
// CHECK:STDOUT: %.loc8_3.16 => constants.%.f8b3eb.2
|
||||
// CHECK:STDOUT: %.loc8_3.17 => constants.%.609
|
||||
// CHECK:STDOUT: %.loc8_3.18 => constants.%.b7f
|
||||
// CHECK:STDOUT: %.loc8_3.19 => constants.%.c5b
|
||||
// CHECK:STDOUT: %.loc8_3.20 => constants.%.ee1
|
||||
// CHECK:STDOUT: %.loc8_3.21 => constants.%.fb6
|
||||
// CHECK:STDOUT: %.loc8_3.22 => constants.%.904
|
||||
// CHECK:STDOUT: %.loc8_3.23 => constants.%.3aa
|
||||
// CHECK:STDOUT: %.loc8_3.24 => constants.%.443
|
||||
// CHECK:STDOUT: %.loc8_3.25 => constants.%.00d
|
||||
// CHECK:STDOUT: %.loc8_3.26 => constants.%.9c0
|
||||
// CHECK:STDOUT: %.loc8_3.27 => constants.%inst.specific_inst.54a
|
||||
// CHECK:STDOUT: %.loc8_3.28 => invalid
|
||||
// CHECK:STDOUT: %.loc8_3.29 => constants.%inst.splice_block.478
|
||||
// CHECK:STDOUT: %.loc8_3.29 => constants.%inst.splice_block.57b
|
||||
// CHECK:STDOUT: %.loc8_3.30 => <bound method>
|
||||
// CHECK:STDOUT: %.loc8_3.31 => invalid
|
||||
// CHECK:STDOUT: %.loc8_3.32 => constants.%inst.splice_block.37a
|
||||
// CHECK:STDOUT: %.loc8_3.32 => constants.%inst.splice_block.8eb
|
||||
// CHECK:STDOUT: %.loc8_3.33 => constants.%empty_tuple.type
|
||||
// CHECK:STDOUT: %.loc8_3.34 => invalid
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
@@ -345,6 +345,17 @@ auto HandleInst(FunctionContext& /*context*/, SemIR::InstId /*inst_id*/,
|
||||
// Nothing to do. This value should never be consumed.
|
||||
}
|
||||
|
||||
auto HandleInst(FunctionContext& context, SemIR::InstId inst_id,
|
||||
SemIR::SpecificInst inst) -> void {
|
||||
// If it's valid to refer to inst.inst_id at runtime and it's not constant, it
|
||||
// must be within this function, and hence in the same specific that we're
|
||||
// lowering.
|
||||
CARBON_CHECK(&context.sem_ir() == &context.specific_sem_ir() &&
|
||||
context.specific_id() == inst.specific_id,
|
||||
"Runtime specific_inst refers to a different specific");
|
||||
context.SetLocal(inst_id, context.GetValue(inst.inst_id));
|
||||
}
|
||||
|
||||
auto HandleInst(FunctionContext& context, SemIR::InstId inst_id,
|
||||
SemIR::SpliceBlock inst) -> void {
|
||||
context.LowerBlockContents(inst.block_id);
|
||||
|
||||
@@ -94,6 +94,11 @@ static auto GetExprCategoryImpl(const File* ir, InstId inst_id)
|
||||
return ExprCategory::ReprInitializing;
|
||||
}
|
||||
}
|
||||
} else if constexpr (std::same_as<TypedInstT, SpecificInst>) {
|
||||
inst_id = inst.inst_id;
|
||||
// TODO: Track `inst.specific_id` as our current specific, and use that
|
||||
// when determining the category of the inner instruction.
|
||||
return std::nullopt;
|
||||
} else if constexpr (std::same_as<TypedInstT, SpliceInst>) {
|
||||
auto action = ir->insts().Get(inst.inst_id);
|
||||
if (auto* action_category = std::get_if<ActionExprCategory>(
|
||||
|
||||
@@ -133,7 +133,7 @@ CARBON_SEM_IR_INST_KIND(RefParamPattern)
|
||||
CARBON_SEM_IR_INST_KIND(RefReturn)
|
||||
CARBON_SEM_IR_INST_KIND(RefReturnPattern)
|
||||
CARBON_SEM_IR_INST_KIND(RefTagExpr)
|
||||
CARBON_SEM_IR_INST_KIND(RefineTypeAction)
|
||||
CARBON_SEM_IR_INST_KIND(RefineInstAction)
|
||||
CARBON_SEM_IR_INST_KIND(RequireCompleteType)
|
||||
CARBON_SEM_IR_INST_KIND(RequireImplsDecl)
|
||||
CARBON_SEM_IR_INST_KIND(RequireSpecificDefinition)
|
||||
@@ -150,6 +150,7 @@ CARBON_SEM_IR_INST_KIND(SpecificConstant)
|
||||
CARBON_SEM_IR_INST_KIND(SpecificFunction)
|
||||
CARBON_SEM_IR_INST_KIND(SpecificFunctionType)
|
||||
CARBON_SEM_IR_INST_KIND(SpecificImplFunction)
|
||||
CARBON_SEM_IR_INST_KIND(SpecificInst)
|
||||
CARBON_SEM_IR_INST_KIND(SpliceBlock)
|
||||
CARBON_SEM_IR_INST_KIND(SpliceInst)
|
||||
CARBON_SEM_IR_INST_KIND(StringLiteral)
|
||||
|
||||
@@ -277,6 +277,7 @@ class InstKind : public CARBON_ENUM_BASE(InstKind) {
|
||||
constant_kind == InstConstantKind::AlwaysUnique
|
||||
? InstConstantNeedsInstIdKind::Permanent
|
||||
: InstConstantNeedsInstIdKind::No;
|
||||
bool action_needs_specific_id = false;
|
||||
TerminatorKind terminator_kind = TerminatorKind::NotTerminator;
|
||||
bool is_lowered = true;
|
||||
bool deduce_through = false;
|
||||
@@ -342,6 +343,12 @@ class InstKind : public CARBON_ENUM_BASE(InstKind) {
|
||||
return definition_info(*this).constant_needs_inst_id;
|
||||
}
|
||||
|
||||
// Returns whether this is an action whose `PerformAction` function needs the
|
||||
// `SpecificId` for the specific that is being generated.
|
||||
auto action_needs_specific_id() const -> bool {
|
||||
return definition_info(*this).action_needs_specific_id;
|
||||
}
|
||||
|
||||
// Returns whether this instruction kind is a code block terminator, such as
|
||||
// an unconditional branch instruction, or part of the termination sequence,
|
||||
// such as a conditional branch instruction. The termination sequence of a
|
||||
@@ -441,6 +448,11 @@ class InstKind::Definition : public InstKind {
|
||||
return info_.constant_needs_inst_id;
|
||||
}
|
||||
|
||||
// Returns whether this is an action whose `PerformAction` needs a SpecificId.
|
||||
constexpr auto action_needs_specific_id() const -> bool {
|
||||
return info_.action_needs_specific_id;
|
||||
}
|
||||
|
||||
// Returns whether this instruction kind is a code block terminator. See
|
||||
// InstKind::terminator_kind().
|
||||
constexpr auto terminator_kind() const -> TerminatorKind {
|
||||
|
||||
@@ -1574,18 +1574,19 @@ struct PointerType {
|
||||
TypeInstId pointee_id;
|
||||
};
|
||||
|
||||
// An action that performs type refinement for an instruction, by creating an
|
||||
// instruction that converts from a template symbolic type to a concrete type.
|
||||
struct RefineTypeAction {
|
||||
static constexpr auto Kind = InstKind::RefineTypeAction.Define<Parse::NodeId>(
|
||||
{.ir_name = "refine_type_action",
|
||||
// An action that performs refinement for an instruction, by creating an
|
||||
// instruction that has the same semantics but the specific type and constant
|
||||
// value.
|
||||
struct RefineInstAction {
|
||||
static constexpr auto Kind = InstKind::RefineInstAction.Define<Parse::NodeId>(
|
||||
{.ir_name = "refine_inst_action",
|
||||
.expr_category = ActionExprCategory(ExprCategory::Dependent),
|
||||
.constant_kind = InstConstantKind::InstAction,
|
||||
.action_needs_specific_id = true,
|
||||
.is_lowered = false});
|
||||
|
||||
TypeId type_id;
|
||||
MetaInstId inst_id;
|
||||
TypeInstId inst_type_inst_id;
|
||||
};
|
||||
|
||||
// Represents a reference binding pattern that is not a parameter. See
|
||||
@@ -1994,6 +1995,29 @@ struct SpecificImplFunction {
|
||||
SpecificId specific_id;
|
||||
};
|
||||
|
||||
// Given an instruction within a generic, represents a corresponding instruction
|
||||
// within a specific. Like `SpecificConstant`, this will have the type and
|
||||
// constant value of the instruction from the specific, but unlike
|
||||
// `SpecificConstant`, there is no implication that the instruction is constant.
|
||||
//
|
||||
// This does not permit references to instructions from other scopes if they
|
||||
// would not otherwise be permitted. Typically, this means that it can only be
|
||||
// used to refer to constants and to instructions from the same scope (and hence
|
||||
// the same specific) that this instruction occupies.
|
||||
//
|
||||
// This is used as a convenience during action evaluation to allow an action to
|
||||
// refer to its `MetaInstId` operands from the generic with their specific types
|
||||
// and constant values.
|
||||
struct SpecificInst {
|
||||
static constexpr auto Kind = InstKind::SpecificInst.Define<Parse::NodeId>(
|
||||
{.ir_name = "specific_inst",
|
||||
.expr_category = ComputedExprCategory::DependsOnOperands});
|
||||
|
||||
TypeId type_id;
|
||||
AbsoluteInstId inst_id;
|
||||
SpecificId specific_id;
|
||||
};
|
||||
|
||||
// Splices a block into the location where this appears. This may be an
|
||||
// expression, producing a result with a given type. For example, when
|
||||
// constructing from aggregates we may figure out which conversions are required
|
||||
|
||||
Reference in New Issue
Block a user