Pārlūkot izejas kodu

Add heterogeneous bitwise operators for CppCompat.Long32 (#6661)

Context: https://github.com/carbon-language/carbon-lang/issues/6275.

Part of https://github.com/carbon-language/carbon-lang/issues/5263.
Ivana Ivanovska 3 mēneši atpakaļ
vecāks
revīzija
9f69ebf6de

+ 64 - 0
core/prelude/types/cpp/int.carbon

@@ -491,6 +491,38 @@ final impl CppCompat.LongLong64 as RightShiftWith(Self) where .Result = Self {
 
 // - Heterogeneous.
 
+// - CppCompat.Long32 on left-hand side.
+
+impl forall [T:! ImplicitAs(CppCompat.Long32)]
+    CppCompat.Long32 as BitAndWith(T) where .Result = CppCompat.Long32 {
+  fn Op[self: CppCompat.Long32](
+    other:CppCompat.Long32) -> CppCompat.Long32 = "int.and";
+}
+
+impl forall [T:! ImplicitAs(CppCompat.Long32)]
+    CppCompat.Long32 as BitOrWith(T) where .Result = CppCompat.Long32 {
+  fn Op[self: CppCompat.Long32](
+    other: CppCompat.Long32) -> CppCompat.Long32 = "int.or";
+}
+
+impl forall [T:! ImplicitAs(CppCompat.Long32)]
+    CppCompat.Long32 as BitXorWith(T) where .Result = CppCompat.Long32 {
+  fn Op[self: CppCompat.Long32](
+    other: CppCompat.Long32) -> CppCompat.Long32 = "int.xor";
+}
+
+impl forall [T:! ImplicitAs(CppCompat.Long32)]
+    CppCompat.Long32 as LeftShiftWith(T) where .Result = CppCompat.Long32 {
+  fn Op[self: CppCompat.Long32](
+    other: CppCompat.Long32) -> CppCompat.Long32 = "int.left_shift";
+}
+
+impl forall [T:! ImplicitAs(CppCompat.Long32)]
+    CppCompat.Long32 as RightShiftWith(T) where .Result = CppCompat.Long32 {
+  fn Op[self: CppCompat.Long32](
+    other: CppCompat.Long32) -> CppCompat.Long32 = "int.right_shift";
+}
+
 // - CppCompat.LongLong64 on left-hand side.
 
 impl forall [T:! ImplicitAs(CppCompat.LongLong64)]
@@ -523,6 +555,38 @@ impl forall [T:! ImplicitAs(CppCompat.LongLong64)]
     other: CppCompat.LongLong64) -> CppCompat.LongLong64 = "int.right_shift";
 }
 
+// - CppCompat.Long32 on right-hand side.
+
+impl forall [T:! ImplicitAs(CppCompat.Long32)]
+    T as BitAndWith(CppCompat.Long32) where .Result = CppCompat.Long32 {
+  fn Op[self: CppCompat.Long32](
+    other: CppCompat.Long32) -> CppCompat.Long32 = "int.and";
+}
+
+impl forall [T:! ImplicitAs(CppCompat.Long32)]
+    T as BitOrWith(CppCompat.Long32) where .Result = CppCompat.Long32 {
+  fn Op[self: CppCompat.Long32](
+    other: CppCompat.Long32) -> CppCompat.Long32 = "int.or";
+}
+
+impl forall [T:! ImplicitAs(CppCompat.Long32)]
+    T as BitXorWith(CppCompat.Long32) where .Result = CppCompat.Long32 {
+  fn Op[self: CppCompat.Long32](
+    other: CppCompat.Long32) -> CppCompat.Long32 = "int.xor";
+}
+
+impl forall [T:! ImplicitAs(CppCompat.Long32)]
+    T as LeftShiftWith(CppCompat.Long32) where .Result = CppCompat.Long32 {
+  fn Op[self: CppCompat.Long32](
+    other: CppCompat.Long32) -> CppCompat.Long32 = "int.left_shift";
+}
+
+impl forall [T:! ImplicitAs(CppCompat.Long32)]
+    T as RightShiftWith(CppCompat.Long32) where .Result = CppCompat.Long32 {
+  fn Op[self: CppCompat.Long32](
+    other: CppCompat.Long32) -> CppCompat.Long32 = "int.right_shift";
+}
+
 // - CppCompat.LongLong64 on right-hand side.
 
 impl forall [T:! ImplicitAs(CppCompat.LongLong64)]

+ 1704 - 188
toolchain/check/testdata/interop/cpp/builtins.llp64.carbon

@@ -417,7 +417,7 @@ fn BitWiseHomogeneousLong() {
   //@dump-sem-ir-end
 }
 
-// --- fail_todo_bitwise_heterogeneous_long.carbon
+// --- bitwise_heterogeneous_long_left_side.carbon
 
 library "[[@TEST_NAME]]";
 
@@ -425,30 +425,130 @@ import Cpp;
 
 fn AssertSameType[T:! type](a: T, b: T) {}
 
-fn BitWiseHeterogeneousLong() {
+fn BitWiseHeterogeneousLongLeftSide() {
   //@dump-sem-ir-begin
   let a: Cpp.long = 1;
 
-  // CHECK:STDERR: fail_todo_bitwise_heterogeneous_long.carbon:[[@LINE+4]]:18: error: cannot access member of interface `Core.BitAndWith(i32)` in type `Cpp.long` that does not implement that interface [MissingImplInMemberAccess]
-  // CHECK:STDERR:   AssertSameType(a & (1 as i32), a);
-  // CHECK:STDERR:                  ^~~~~~~~~~~~~~
-  // CHECK:STDERR:
   AssertSameType(a & (1 as i32), a);
+  AssertSameType(a | (1 as i32), a);
+  AssertSameType(a ^ (1 as i32), a);
+  AssertSameType(a << (1 as i32), a);
+  AssertSameType(a >> (1 as i32), a);
+
+  AssertSameType(a & 1, a);
+  AssertSameType(a | 1, a);
+  AssertSameType(a ^ 1, a);
+  AssertSameType(a << 1, a);
+  AssertSameType(a >> 1, a);
+
+  let b: i32 = 1;
+  AssertSameType(a & b, a);
+  AssertSameType(a | b, a);
+  AssertSameType(a ^ b, a);
+  AssertSameType(a << b, a);
+  AssertSameType(a >> b, a);
+  //@dump-sem-ir-end
+}
+
+// --- bitwise_heterogeneous_long_right_side.carbon
+
+library "[[@TEST_NAME]]";
+
+import Cpp;
+
+fn AssertSameType[T:! type](a: T, b: T) {}
+
+fn BitWiseHeterogeneousLongRightSide() {
+  //@dump-sem-ir-begin
+  let a: Cpp.long = 1;
 
-  // CHECK:STDERR: fail_todo_bitwise_heterogeneous_long.carbon:[[@LINE+4]]:18: error: cannot access member of interface `Core.BitAndWith(Cpp.long)` in type `i32` that does not implement that interface [MissingImplInMemberAccess]
-  // CHECK:STDERR:   AssertSameType((1 as i32) & a, a);
-  // CHECK:STDERR:                  ^~~~~~~~~~~~~~
-  // CHECK:STDERR:
   AssertSameType((1 as i32) & a, a);
+  AssertSameType((1 as i32) | a, a);
+  AssertSameType((1 as i32) ^ a, a);
+  AssertSameType((1 as i32) << a, a);
+  AssertSameType((1 as i32) >> a, a);
+
+  AssertSameType(1 & a, a);
+  AssertSameType(1 | a, a);
+  AssertSameType(1 ^ a, a);
+  AssertSameType(1 << a, a);
+  AssertSameType(1 >> a, a);
+
+  let b: i32 = 1;
+  AssertSameType(b & a, a);
+  AssertSameType(b | a, a);
+  AssertSameType(b ^ a, a);
+  AssertSameType(b << a, a);
+  AssertSameType(b >> a, a);
+  //@dump-sem-ir-end
+}
+
+// --- bitwise_heterogeneous_long_and_i64.carbon
+
+library "[[@TEST_NAME]]";
+
+import Cpp;
+
+fn AssertSameType[T:! type](a: T, b: T) {}
 
+fn BitWiseHeterogeneousLongAndI64() {
+  //@dump-sem-ir-begin
+  let a: Cpp.long = 1;
   let b: i64 = 1;
-  AssertSameType(a & b, b);
 
+  AssertSameType(a & b, b);
   AssertSameType(b & a, b);
-
   //@dump-sem-ir-end
 }
 
+// --- fail_todo_bitwise_heterogeneous_long_and_i16.carbon
+
+library "[[@TEST_NAME]]";
+
+import Cpp;
+
+fn AssertSameType[T:! type](a: T, b: T) {}
+
+fn BitWiseHeterogeneousLongAndI16() {
+  let a: Cpp.long = 1;
+  let b: i16 = 1;
+
+  // CHECK:STDERR: fail_todo_bitwise_heterogeneous_long_and_i16.carbon:[[@LINE+4]]:18: error: cannot access member of interface `Core.BitAndWith(i16)` in type `Cpp.long` that does not implement that interface [MissingImplInMemberAccess]
+  // CHECK:STDERR:   AssertSameType(a & b, a);
+  // CHECK:STDERR:                  ^~~~~
+  // CHECK:STDERR:
+  AssertSameType(a & b, a);
+  // CHECK:STDERR: fail_todo_bitwise_heterogeneous_long_and_i16.carbon:[[@LINE+4]]:18: error: cannot access member of interface `Core.BitAndWith(Cpp.long)` in type `i16` that does not implement that interface [MissingImplInMemberAccess]
+  // CHECK:STDERR:   AssertSameType(b & a, a);
+  // CHECK:STDERR:                  ^~~~~
+  // CHECK:STDERR:
+  AssertSameType(b & a, a);
+}
+
+// --- fail_todo_bitwise_heterogeneous_long_and_i128.carbon
+
+library "[[@TEST_NAME]]";
+
+import Cpp;
+
+fn AssertSameType[T:! type](a: T, b: T) {}
+
+fn BitWiseHeterogeneousLongAndI128() {
+  let a: Cpp.long = 1;
+  let b: i128 = 1;
+
+  // CHECK:STDERR: fail_todo_bitwise_heterogeneous_long_and_i128.carbon:[[@LINE+4]]:18: error: cannot access member of interface `Core.BitAndWith(i128)` in type `Cpp.long` that does not implement that interface [MissingImplInMemberAccess]
+  // CHECK:STDERR:   AssertSameType(a & b, b);
+  // CHECK:STDERR:                  ^~~~~
+  // CHECK:STDERR:
+  AssertSameType(a & b, b);
+  // CHECK:STDERR: fail_todo_bitwise_heterogeneous_long_and_i128.carbon:[[@LINE+4]]:18: error: cannot access member of interface `Core.BitAndWith(Cpp.long)` in type `i128` that does not implement that interface [MissingImplInMemberAccess]
+  // CHECK:STDERR:   AssertSameType(b & a, b);
+  // CHECK:STDERR:                  ^~~~~
+  // CHECK:STDERR:
+  AssertSameType(b & a, b);
+}
+
 // --- compound_assignment_homogeneous_long.carbon
 
 library "[[@TEST_NAME]]";
@@ -4757,36 +4857,36 @@ fn CopyUnsignedLong() {
 // CHECK:STDOUT:   %BitAndWith.impl_witness.6f1: <witness> = impl_witness imports.%BitAndWith.impl_witness_table.e8c [concrete]
 // CHECK:STDOUT:   %BitAndWith.facet: %BitAndWith.type.0b5 = facet_value %Cpp.long, (%BitAndWith.impl_witness.6f1) [concrete]
 // CHECK:STDOUT:   %.78c: type = fn_type_with_self_type %BitAndWith.Op.type.e13, %BitAndWith.facet [concrete]
-// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.type: type = fn_type @Cpp.long.as.BitAndWith.impl.Op [concrete]
-// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op: %Cpp.long.as.BitAndWith.impl.Op.type = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.type.a55: type = fn_type @Cpp.long.as.BitAndWith.impl.Op.3 [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.340: %Cpp.long.as.BitAndWith.impl.Op.type.a55 = struct_value () [concrete]
 // CHECK:STDOUT:   %BitOrWith.type.b22: type = facet_type <@BitOrWith, @BitOrWith(%Cpp.long)> [concrete]
 // CHECK:STDOUT:   %BitOrWith.Op.type.a1b: type = fn_type @BitOrWith.Op, @BitOrWith(%Cpp.long) [concrete]
 // CHECK:STDOUT:   %BitOrWith.impl_witness.003: <witness> = impl_witness imports.%BitOrWith.impl_witness_table.513 [concrete]
 // CHECK:STDOUT:   %BitOrWith.facet: %BitOrWith.type.b22 = facet_value %Cpp.long, (%BitOrWith.impl_witness.003) [concrete]
 // CHECK:STDOUT:   %.ee7: type = fn_type_with_self_type %BitOrWith.Op.type.a1b, %BitOrWith.facet [concrete]
-// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.type: type = fn_type @Cpp.long.as.BitOrWith.impl.Op [concrete]
-// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op: %Cpp.long.as.BitOrWith.impl.Op.type = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.type.178: type = fn_type @Cpp.long.as.BitOrWith.impl.Op.3 [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.b33: %Cpp.long.as.BitOrWith.impl.Op.type.178 = struct_value () [concrete]
 // CHECK:STDOUT:   %BitXorWith.type.87f: type = facet_type <@BitXorWith, @BitXorWith(%Cpp.long)> [concrete]
 // CHECK:STDOUT:   %BitXorWith.Op.type.5cf: type = fn_type @BitXorWith.Op, @BitXorWith(%Cpp.long) [concrete]
 // CHECK:STDOUT:   %BitXorWith.impl_witness.e60: <witness> = impl_witness imports.%BitXorWith.impl_witness_table.708 [concrete]
 // CHECK:STDOUT:   %BitXorWith.facet: %BitXorWith.type.87f = facet_value %Cpp.long, (%BitXorWith.impl_witness.e60) [concrete]
 // CHECK:STDOUT:   %.e9a: type = fn_type_with_self_type %BitXorWith.Op.type.5cf, %BitXorWith.facet [concrete]
-// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.type: type = fn_type @Cpp.long.as.BitXorWith.impl.Op [concrete]
-// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op: %Cpp.long.as.BitXorWith.impl.Op.type = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.type.198: type = fn_type @Cpp.long.as.BitXorWith.impl.Op.3 [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.655: %Cpp.long.as.BitXorWith.impl.Op.type.198 = struct_value () [concrete]
 // CHECK:STDOUT:   %LeftShiftWith.type.3f9: type = facet_type <@LeftShiftWith, @LeftShiftWith(%Cpp.long)> [concrete]
 // CHECK:STDOUT:   %LeftShiftWith.Op.type.224: type = fn_type @LeftShiftWith.Op, @LeftShiftWith(%Cpp.long) [concrete]
 // CHECK:STDOUT:   %LeftShiftWith.impl_witness.cd6: <witness> = impl_witness imports.%LeftShiftWith.impl_witness_table.01c [concrete]
 // CHECK:STDOUT:   %LeftShiftWith.facet: %LeftShiftWith.type.3f9 = facet_value %Cpp.long, (%LeftShiftWith.impl_witness.cd6) [concrete]
 // CHECK:STDOUT:   %.864: type = fn_type_with_self_type %LeftShiftWith.Op.type.224, %LeftShiftWith.facet [concrete]
-// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.type: type = fn_type @Cpp.long.as.LeftShiftWith.impl.Op [concrete]
-// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op: %Cpp.long.as.LeftShiftWith.impl.Op.type = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.type.235: type = fn_type @Cpp.long.as.LeftShiftWith.impl.Op.3 [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.dd3: %Cpp.long.as.LeftShiftWith.impl.Op.type.235 = struct_value () [concrete]
 // CHECK:STDOUT:   %RightShiftWith.type.995: type = facet_type <@RightShiftWith, @RightShiftWith(%Cpp.long)> [concrete]
 // CHECK:STDOUT:   %RightShiftWith.Op.type.fd9: type = fn_type @RightShiftWith.Op, @RightShiftWith(%Cpp.long) [concrete]
 // CHECK:STDOUT:   %RightShiftWith.impl_witness.b46: <witness> = impl_witness imports.%RightShiftWith.impl_witness_table.636 [concrete]
 // CHECK:STDOUT:   %RightShiftWith.facet: %RightShiftWith.type.995 = facet_value %Cpp.long, (%RightShiftWith.impl_witness.b46) [concrete]
 // CHECK:STDOUT:   %.398: type = fn_type_with_self_type %RightShiftWith.Op.type.fd9, %RightShiftWith.facet [concrete]
-// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.type: type = fn_type @Cpp.long.as.RightShiftWith.impl.Op [concrete]
-// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op: %Cpp.long.as.RightShiftWith.impl.Op.type = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.type.233: type = fn_type @Cpp.long.as.RightShiftWith.impl.Op.3 [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.f79: %Cpp.long.as.RightShiftWith.impl.Op.type.233 = struct_value () [concrete]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: imports {
@@ -4799,21 +4899,21 @@ fn CopyUnsignedLong() {
 // CHECK:STDOUT:   %Core.import_ref.cb912f.1 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
 // CHECK:STDOUT:   %Core.import_ref.454: %Cpp.long.as.BitComplement.impl.Op.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.BitComplement.impl.Op]
 // CHECK:STDOUT:   %BitComplement.impl_witness_table = impl_witness_table (%Core.import_ref.cb912f.1, %Core.import_ref.454), @Cpp.long.as.BitComplement.impl [concrete]
-// CHECK:STDOUT:   %Core.import_ref.cb912f.2 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
-// CHECK:STDOUT:   %Core.import_ref.f38: %Cpp.long.as.BitAndWith.impl.Op.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op]
-// CHECK:STDOUT:   %BitAndWith.impl_witness_table.e8c = impl_witness_table (%Core.import_ref.cb912f.2, %Core.import_ref.f38), @Cpp.long.as.BitAndWith.impl [concrete]
-// CHECK:STDOUT:   %Core.import_ref.cb912f.3 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
-// CHECK:STDOUT:   %Core.import_ref.a17: %Cpp.long.as.BitOrWith.impl.Op.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op]
-// CHECK:STDOUT:   %BitOrWith.impl_witness_table.513 = impl_witness_table (%Core.import_ref.cb912f.3, %Core.import_ref.a17), @Cpp.long.as.BitOrWith.impl [concrete]
 // CHECK:STDOUT:   %Core.import_ref.cb912f.4 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
-// CHECK:STDOUT:   %Core.import_ref.4fd: %Cpp.long.as.BitXorWith.impl.Op.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op]
-// CHECK:STDOUT:   %BitXorWith.impl_witness_table.708 = impl_witness_table (%Core.import_ref.cb912f.4, %Core.import_ref.4fd), @Cpp.long.as.BitXorWith.impl [concrete]
-// CHECK:STDOUT:   %Core.import_ref.cb912f.5 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
-// CHECK:STDOUT:   %Core.import_ref.c09: %Cpp.long.as.LeftShiftWith.impl.Op.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op]
-// CHECK:STDOUT:   %LeftShiftWith.impl_witness_table.01c = impl_witness_table (%Core.import_ref.cb912f.5, %Core.import_ref.c09), @Cpp.long.as.LeftShiftWith.impl [concrete]
-// CHECK:STDOUT:   %Core.import_ref.cb912f.6 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
-// CHECK:STDOUT:   %Core.import_ref.6c0: %Cpp.long.as.RightShiftWith.impl.Op.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op]
-// CHECK:STDOUT:   %RightShiftWith.impl_witness_table.636 = impl_witness_table (%Core.import_ref.cb912f.6, %Core.import_ref.6c0), @Cpp.long.as.RightShiftWith.impl [concrete]
+// CHECK:STDOUT:   %Core.import_ref.f38: %Cpp.long.as.BitAndWith.impl.Op.type.a55 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.340]
+// CHECK:STDOUT:   %BitAndWith.impl_witness_table.e8c = impl_witness_table (%Core.import_ref.cb912f.4, %Core.import_ref.f38), @Cpp.long.as.BitAndWith.impl.7cf [concrete]
+// CHECK:STDOUT:   %Core.import_ref.cb912f.7 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.a17: %Cpp.long.as.BitOrWith.impl.Op.type.178 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.b33]
+// CHECK:STDOUT:   %BitOrWith.impl_witness_table.513 = impl_witness_table (%Core.import_ref.cb912f.7, %Core.import_ref.a17), @Cpp.long.as.BitOrWith.impl.fd5 [concrete]
+// CHECK:STDOUT:   %Core.import_ref.cb912f.10 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.4fd: %Cpp.long.as.BitXorWith.impl.Op.type.198 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.655]
+// CHECK:STDOUT:   %BitXorWith.impl_witness_table.708 = impl_witness_table (%Core.import_ref.cb912f.10, %Core.import_ref.4fd), @Cpp.long.as.BitXorWith.impl.ef4 [concrete]
+// CHECK:STDOUT:   %Core.import_ref.cb912f.13 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.c09: %Cpp.long.as.LeftShiftWith.impl.Op.type.235 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.dd3]
+// CHECK:STDOUT:   %LeftShiftWith.impl_witness_table.01c = impl_witness_table (%Core.import_ref.cb912f.13, %Core.import_ref.c09), @Cpp.long.as.LeftShiftWith.impl.979 [concrete]
+// CHECK:STDOUT:   %Core.import_ref.cb912f.16 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.6c0: %Cpp.long.as.RightShiftWith.impl.Op.type.233 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.f79]
+// CHECK:STDOUT:   %RightShiftWith.impl_witness_table.636 = impl_witness_table (%Core.import_ref.cb912f.16, %Core.import_ref.6c0), @Cpp.long.as.RightShiftWith.impl.711 [concrete]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @BitWiseHomogeneousLong() {
@@ -4873,7 +4973,7 @@ fn CopyUnsignedLong() {
 // CHECK:STDOUT:   %AssertSameType.ref.loc15: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
 // CHECK:STDOUT:   %a.ref.loc15: %Cpp.long = name_ref a, %a
 // CHECK:STDOUT:   %b.ref.loc15: %Cpp.long = name_ref b, %b
-// CHECK:STDOUT:   %impl.elem1.loc15: %.78c = impl_witness_access constants.%BitAndWith.impl_witness.6f1, element1 [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op]
+// CHECK:STDOUT:   %impl.elem1.loc15: %.78c = impl_witness_access constants.%BitAndWith.impl_witness.6f1, element1 [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.340]
 // CHECK:STDOUT:   %bound_method.loc15: <bound method> = bound_method %a.ref.loc15, %impl.elem1.loc15
 // CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.call: init %Cpp.long = call %bound_method.loc15(%a.ref.loc15, %b.ref.loc15)
 // CHECK:STDOUT:   %c.ref.loc15: %Cpp.long = name_ref c, %c
@@ -4884,7 +4984,7 @@ fn CopyUnsignedLong() {
 // CHECK:STDOUT:   %AssertSameType.ref.loc16: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
 // CHECK:STDOUT:   %a.ref.loc16: %Cpp.long = name_ref a, %a
 // CHECK:STDOUT:   %b.ref.loc16: %Cpp.long = name_ref b, %b
-// CHECK:STDOUT:   %impl.elem1.loc16: %.ee7 = impl_witness_access constants.%BitOrWith.impl_witness.003, element1 [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op]
+// CHECK:STDOUT:   %impl.elem1.loc16: %.ee7 = impl_witness_access constants.%BitOrWith.impl_witness.003, element1 [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.b33]
 // CHECK:STDOUT:   %bound_method.loc16: <bound method> = bound_method %a.ref.loc16, %impl.elem1.loc16
 // CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.call: init %Cpp.long = call %bound_method.loc16(%a.ref.loc16, %b.ref.loc16)
 // CHECK:STDOUT:   %c.ref.loc16: %Cpp.long = name_ref c, %c
@@ -4895,7 +4995,7 @@ fn CopyUnsignedLong() {
 // CHECK:STDOUT:   %AssertSameType.ref.loc17: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
 // CHECK:STDOUT:   %a.ref.loc17: %Cpp.long = name_ref a, %a
 // CHECK:STDOUT:   %b.ref.loc17: %Cpp.long = name_ref b, %b
-// CHECK:STDOUT:   %impl.elem1.loc17: %.e9a = impl_witness_access constants.%BitXorWith.impl_witness.e60, element1 [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op]
+// CHECK:STDOUT:   %impl.elem1.loc17: %.e9a = impl_witness_access constants.%BitXorWith.impl_witness.e60, element1 [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.655]
 // CHECK:STDOUT:   %bound_method.loc17: <bound method> = bound_method %a.ref.loc17, %impl.elem1.loc17
 // CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.call: init %Cpp.long = call %bound_method.loc17(%a.ref.loc17, %b.ref.loc17)
 // CHECK:STDOUT:   %c.ref.loc17: %Cpp.long = name_ref c, %c
@@ -4906,7 +5006,7 @@ fn CopyUnsignedLong() {
 // CHECK:STDOUT:   %AssertSameType.ref.loc18: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
 // CHECK:STDOUT:   %a.ref.loc18: %Cpp.long = name_ref a, %a
 // CHECK:STDOUT:   %b.ref.loc18: %Cpp.long = name_ref b, %b
-// CHECK:STDOUT:   %impl.elem1.loc18: %.864 = impl_witness_access constants.%LeftShiftWith.impl_witness.cd6, element1 [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op]
+// CHECK:STDOUT:   %impl.elem1.loc18: %.864 = impl_witness_access constants.%LeftShiftWith.impl_witness.cd6, element1 [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.dd3]
 // CHECK:STDOUT:   %bound_method.loc18: <bound method> = bound_method %a.ref.loc18, %impl.elem1.loc18
 // CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.call: init %Cpp.long = call %bound_method.loc18(%a.ref.loc18, %b.ref.loc18)
 // CHECK:STDOUT:   %c.ref.loc18: %Cpp.long = name_ref c, %c
@@ -4917,7 +5017,7 @@ fn CopyUnsignedLong() {
 // CHECK:STDOUT:   %AssertSameType.ref.loc19: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
 // CHECK:STDOUT:   %a.ref.loc19: %Cpp.long = name_ref a, %a
 // CHECK:STDOUT:   %b.ref.loc19: %Cpp.long = name_ref b, %b
-// CHECK:STDOUT:   %impl.elem1.loc19: %.398 = impl_witness_access constants.%RightShiftWith.impl_witness.b46, element1 [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op]
+// CHECK:STDOUT:   %impl.elem1.loc19: %.398 = impl_witness_access constants.%RightShiftWith.impl_witness.b46, element1 [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.f79]
 // CHECK:STDOUT:   %bound_method.loc19: <bound method> = bound_method %a.ref.loc19, %impl.elem1.loc19
 // CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.call: init %Cpp.long = call %bound_method.loc19(%a.ref.loc19, %b.ref.loc19)
 // CHECK:STDOUT:   %c.ref.loc19: %Cpp.long = name_ref c, %c
@@ -4928,7 +5028,7 @@ fn CopyUnsignedLong() {
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: --- fail_todo_bitwise_heterogeneous_long.carbon
+// CHECK:STDOUT: --- bitwise_heterogeneous_long_left_side.carbon
 // CHECK:STDOUT:
 // CHECK:STDOUT: constants {
 // CHECK:STDOUT:   %AssertSameType.type: type = fn_type @AssertSameType [concrete]
@@ -4936,17 +5036,11 @@ fn CopyUnsignedLong() {
 // CHECK:STDOUT:   %AssertSameType: %AssertSameType.type = struct_value () [concrete]
 // CHECK:STDOUT:   %Cpp.long: type = class_type @Long32 [concrete]
 // CHECK:STDOUT:   %int_32: Core.IntLiteral = int_value 32 [concrete]
-// CHECK:STDOUT:   %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic]
-// CHECK:STDOUT:   %Int.fc6021.1: type = class_type @Int, @Int(%N) [symbolic]
 // CHECK:STDOUT:   %i32: type = class_type @Int, @Int(%int_32) [concrete]
 // CHECK:STDOUT:   %pattern_type.68c: type = pattern_type %Cpp.long [concrete]
 // CHECK:STDOUT:   %int_1.5b8: Core.IntLiteral = int_value 1 [concrete]
 // CHECK:STDOUT:   %ImplicitAs.type.819: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long)> [concrete]
 // CHECK:STDOUT:   %ImplicitAs.Convert.type.4c2: type = fn_type @ImplicitAs.Convert, @ImplicitAs(%Cpp.long) [concrete]
-// CHECK:STDOUT:   %int_64: Core.IntLiteral = int_value 64 [concrete]
-// CHECK:STDOUT:   %i64: type = class_type @Int, @Int(%int_64) [concrete]
-// CHECK:STDOUT:   %ImplicitAs.type.2ad: type = facet_type <@ImplicitAs, @ImplicitAs(%i64)> [concrete]
-// CHECK:STDOUT:   %ImplicitAs.Convert.type.94e: type = fn_type @ImplicitAs.Convert, @ImplicitAs(%i64) [concrete]
 // CHECK:STDOUT:   %ImplicitAs.impl_witness.2ce: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.903 [concrete]
 // CHECK:STDOUT:   %ImplicitAs.facet.eed: %ImplicitAs.type.819 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.2ce) [concrete]
 // CHECK:STDOUT:   %.dad: type = fn_type_with_self_type %ImplicitAs.Convert.type.4c2, %ImplicitAs.facet.eed [concrete]
@@ -4965,60 +5059,160 @@ fn CopyUnsignedLong() {
 // CHECK:STDOUT:   %As.facet: %As.type.047 = facet_value Core.IntLiteral, (%As.impl_witness.ab6) [concrete]
 // CHECK:STDOUT:   %.97a: type = fn_type_with_self_type %As.Convert.type.99b, %As.facet [concrete]
 // CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.bound: <bound method> = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.29b [concrete]
+// CHECK:STDOUT:   %pattern_type.7ce: type = pattern_type %i32 [concrete]
 // CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.As.impl.Convert.29b, @Core.IntLiteral.as.As.impl.Convert(%int_32) [concrete]
 // CHECK:STDOUT:   %bound_method.290: <bound method> = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.specific_fn [concrete]
 // CHECK:STDOUT:   %int_1.5d2: %i32 = int_value 1 [concrete]
-// CHECK:STDOUT:   %BitAndWith.type.0b5: type = facet_type <@BitAndWith, @BitAndWith(%Cpp.long)> [concrete]
-// CHECK:STDOUT:   %BitAndWith.Op.type.e13: type = fn_type @BitAndWith.Op, @BitAndWith(%Cpp.long) [concrete]
-// CHECK:STDOUT:   %ImplicitAs.type.39a54f.1: type = facet_type <@ImplicitAs, @ImplicitAs(%Int.fc6021.1)> [symbolic]
-// CHECK:STDOUT:   %U.354: %ImplicitAs.type.39a54f.1 = symbolic_binding U, 1 [symbolic]
-// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.type.1b6537.1: type = fn_type @Int.as.BitAndWith.impl.Op.2, @Int.as.BitAndWith.impl.4ac(%N, %U.354) [symbolic]
-// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.b9569a.1: %Int.as.BitAndWith.impl.Op.type.1b6537.1 = struct_value () [symbolic]
-// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.type.1b6537.2: type = fn_type @Int.as.BitAndWith.impl.Op.3, @Int.as.BitAndWith.impl.4ac(%N, %U.354) [symbolic]
-// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.b9569a.2: %Int.as.BitAndWith.impl.Op.type.1b6537.2 = struct_value () [symbolic]
-// CHECK:STDOUT:   %T.354: %ImplicitAs.type.39a54f.1 = symbolic_binding T, 1 [symbolic]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.3, @T.binding.as_type.as.BitAndWith.impl.96d(%N, %T.354) [symbolic]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.892c6d.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.1 = struct_value () [symbolic]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.4, @T.binding.as_type.as.BitAndWith.impl.96d(%N, %T.354) [symbolic]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.892c6d.2: %T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.2 = struct_value () [symbolic]
+// CHECK:STDOUT:   %BitAndWith.type.0fb: type = facet_type <@BitAndWith, @BitAndWith(%i32)> [concrete]
+// CHECK:STDOUT:   %BitAndWith.Op.type.e35: type = fn_type @BitAndWith.Op, @BitAndWith(%i32) [concrete]
+// CHECK:STDOUT:   %T.57d: %ImplicitAs.type.819 = symbolic_binding T, 0 [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.type.8319b2.1: type = fn_type @Cpp.long.as.BitAndWith.impl.Op.1, @Cpp.long.as.BitAndWith.impl.334(%T.57d) [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.3828c1.1: %Cpp.long.as.BitAndWith.impl.Op.type.8319b2.1 = struct_value () [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.type.8319b2.2: type = fn_type @Cpp.long.as.BitAndWith.impl.Op.2, @Cpp.long.as.BitAndWith.impl.334(%T.57d) [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.3828c1.2: %Cpp.long.as.BitAndWith.impl.Op.type.8319b2.2 = struct_value () [symbolic]
+// CHECK:STDOUT:   %BitAndWith.type.011: type = facet_type <@BitAndWith, @BitAndWith(Core.IntLiteral)> [concrete]
+// CHECK:STDOUT:   %BitAndWith.Op.type.4bf: type = fn_type @BitAndWith.Op, @BitAndWith(Core.IntLiteral) [concrete]
 // CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.2, @Core.IntLiteral.as.ImplicitAs.impl.b2d(%To.fe9) [symbolic]
 // CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6 = struct_value () [symbolic]
-// CHECK:STDOUT:   %pattern_type.95b: type = pattern_type %i64 [concrete]
-// CHECK:STDOUT:   %ImplicitAs.impl_witness.556: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.74f, @Core.IntLiteral.as.ImplicitAs.impl.b2d(%int_64) [concrete]
-// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.b78: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.2, @Core.IntLiteral.as.ImplicitAs.impl.b2d(%int_64) [concrete]
-// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.57d: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.b78 = struct_value () [concrete]
-// CHECK:STDOUT:   %ImplicitAs.facet.d48: %ImplicitAs.type.2ad = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.556) [concrete]
-// CHECK:STDOUT:   %.567: type = fn_type_with_self_type %ImplicitAs.Convert.type.94e, %ImplicitAs.facet.d48 [concrete]
-// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.102: <bound method> = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.57d [concrete]
-// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.57d, @Core.IntLiteral.as.ImplicitAs.impl.Convert.2(%int_64) [concrete]
-// CHECK:STDOUT:   %bound_method.288: <bound method> = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete]
-// CHECK:STDOUT:   %int_1.41a: %i64 = int_value 1 [concrete]
-// CHECK:STDOUT:   %BitAndWith.type.46b: type = facet_type <@BitAndWith, @BitAndWith(%i64)> [concrete]
-// CHECK:STDOUT:   %BitAndWith.Op.type.2e7: type = fn_type @BitAndWith.Op, @BitAndWith(%i64) [concrete]
-// CHECK:STDOUT:   %ImplicitAs.impl_witness.bbc: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.cb1 [concrete]
-// CHECK:STDOUT:   %ImplicitAs.facet.ba4: %ImplicitAs.type.2ad = facet_value %Cpp.long, (%ImplicitAs.impl_witness.bbc) [concrete]
-// CHECK:STDOUT:   %BitAndWith.impl_witness.c6a: <witness> = impl_witness imports.%BitAndWith.impl_witness_table.5e7, @T.binding.as_type.as.BitAndWith.impl.96d(%int_64, %ImplicitAs.facet.ba4) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.7732f0.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.4, @T.binding.as_type.as.BitAndWith.impl.96d(%int_64, %ImplicitAs.facet.ba4) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.12fb91.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.7732f0.1 = struct_value () [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.7732f0.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.3, @T.binding.as_type.as.BitAndWith.impl.96d(%int_64, %ImplicitAs.facet.ba4) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.12fb91.2: %T.binding.as_type.as.BitAndWith.impl.Op.type.7732f0.2 = struct_value () [concrete]
-// CHECK:STDOUT:   %BitAndWith.facet.bc4: %BitAndWith.type.46b = facet_value %Cpp.long, (%BitAndWith.impl_witness.c6a) [concrete]
-// CHECK:STDOUT:   %.656: type = fn_type_with_self_type %BitAndWith.Op.type.2e7, %BitAndWith.facet.bc4 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.d9a57f.1: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.12fb91.2, @T.binding.as_type.as.BitAndWith.impl.Op.3(%int_64, %ImplicitAs.facet.ba4) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.d9a57f.2: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.12fb91.1, @T.binding.as_type.as.BitAndWith.impl.Op.4(%int_64, %ImplicitAs.facet.ba4) [concrete]
-// CHECK:STDOUT:   %.8a2: type = fn_type_with_self_type %ImplicitAs.Convert.type.94e, %ImplicitAs.facet.ba4 [concrete]
-// CHECK:STDOUT:   %Cpp.long.as.ImplicitAs.impl.Convert.type: type = fn_type @Cpp.long.as.ImplicitAs.impl.Convert [concrete]
-// CHECK:STDOUT:   %Cpp.long.as.ImplicitAs.impl.Convert: %Cpp.long.as.ImplicitAs.impl.Convert.type = struct_value () [concrete]
-// CHECK:STDOUT:   %AssertSameType.specific_fn: <specific function> = specific_function %AssertSameType, @AssertSameType(%i64) [concrete]
-// CHECK:STDOUT:   %BitAndWith.impl_witness.c34: <witness> = impl_witness imports.%BitAndWith.impl_witness_table.ebf, @Int.as.BitAndWith.impl.4ac(%int_64, %ImplicitAs.facet.ba4) [concrete]
-// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.type.871ddc.1: type = fn_type @Int.as.BitAndWith.impl.Op.3, @Int.as.BitAndWith.impl.4ac(%int_64, %ImplicitAs.facet.ba4) [concrete]
-// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.740875.1: %Int.as.BitAndWith.impl.Op.type.871ddc.1 = struct_value () [concrete]
-// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.type.871ddc.2: type = fn_type @Int.as.BitAndWith.impl.Op.2, @Int.as.BitAndWith.impl.4ac(%int_64, %ImplicitAs.facet.ba4) [concrete]
-// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.740875.2: %Int.as.BitAndWith.impl.Op.type.871ddc.2 = struct_value () [concrete]
-// CHECK:STDOUT:   %BitAndWith.facet.a93: %BitAndWith.type.0b5 = facet_value %i64, (%BitAndWith.impl_witness.c34) [concrete]
-// CHECK:STDOUT:   %.29c: type = fn_type_with_self_type %BitAndWith.Op.type.e13, %BitAndWith.facet.a93 [concrete]
-// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.specific_fn.7b1efb.1: <specific function> = specific_function %Int.as.BitAndWith.impl.Op.740875.2, @Int.as.BitAndWith.impl.Op.2(%int_64, %ImplicitAs.facet.ba4) [concrete]
-// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.specific_fn.7b1efb.2: <specific function> = specific_function %Int.as.BitAndWith.impl.Op.740875.1, @Int.as.BitAndWith.impl.Op.3(%int_64, %ImplicitAs.facet.ba4) [concrete]
+// CHECK:STDOUT:   %ImplicitAs.impl_witness.0fc: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.5ad [concrete]
+// CHECK:STDOUT:   %ImplicitAs.facet.174: %ImplicitAs.type.819 = facet_value %i32, (%ImplicitAs.impl_witness.0fc) [concrete]
+// CHECK:STDOUT:   %BitAndWith.impl_witness.fe3: <witness> = impl_witness imports.%BitAndWith.impl_witness_table.072, @Cpp.long.as.BitAndWith.impl.334(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.type.202298.1: type = fn_type @Cpp.long.as.BitAndWith.impl.Op.2, @Cpp.long.as.BitAndWith.impl.334(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.a9ac84.1: %Cpp.long.as.BitAndWith.impl.Op.type.202298.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.type.202298.2: type = fn_type @Cpp.long.as.BitAndWith.impl.Op.1, @Cpp.long.as.BitAndWith.impl.334(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.a9ac84.2: %Cpp.long.as.BitAndWith.impl.Op.type.202298.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %BitAndWith.facet.9d5: %BitAndWith.type.0fb = facet_value %Cpp.long, (%BitAndWith.impl_witness.fe3) [concrete]
+// CHECK:STDOUT:   %.bdd: type = fn_type_with_self_type %BitAndWith.Op.type.e35, %BitAndWith.facet.9d5 [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.specific_fn.dcd797.1: <specific function> = specific_function %Cpp.long.as.BitAndWith.impl.Op.a9ac84.2, @Cpp.long.as.BitAndWith.impl.Op.1(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %.c45: type = fn_type_with_self_type %ImplicitAs.Convert.type.4c2, %ImplicitAs.facet.174 [concrete]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.type: type = fn_type @i32.as.ImplicitAs.impl.Convert [concrete]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert: %i32.as.ImplicitAs.impl.Convert.type = struct_value () [concrete]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.bound: <bound method> = bound_method %int_1.5d2, %i32.as.ImplicitAs.impl.Convert [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.specific_fn.dcd797.2: <specific function> = specific_function %Cpp.long.as.BitAndWith.impl.Op.a9ac84.1, @Cpp.long.as.BitAndWith.impl.Op.2(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %AssertSameType.specific_fn: <specific function> = specific_function %AssertSameType, @AssertSameType(%Cpp.long) [concrete]
+// CHECK:STDOUT:   %BitOrWith.type.428: type = facet_type <@BitOrWith, @BitOrWith(%i32)> [concrete]
+// CHECK:STDOUT:   %BitOrWith.Op.type.99b: type = fn_type @BitOrWith.Op, @BitOrWith(%i32) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.type.9f5440.1: type = fn_type @Cpp.long.as.BitOrWith.impl.Op.1, @Cpp.long.as.BitOrWith.impl.fc3(%T.57d) [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.81f55a.1: %Cpp.long.as.BitOrWith.impl.Op.type.9f5440.1 = struct_value () [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.type.9f5440.2: type = fn_type @Cpp.long.as.BitOrWith.impl.Op.2, @Cpp.long.as.BitOrWith.impl.fc3(%T.57d) [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.81f55a.2: %Cpp.long.as.BitOrWith.impl.Op.type.9f5440.2 = struct_value () [symbolic]
+// CHECK:STDOUT:   %BitOrWith.type.cba: type = facet_type <@BitOrWith, @BitOrWith(Core.IntLiteral)> [concrete]
+// CHECK:STDOUT:   %BitOrWith.Op.type.0e5: type = fn_type @BitOrWith.Op, @BitOrWith(Core.IntLiteral) [concrete]
+// CHECK:STDOUT:   %BitOrWith.impl_witness.b0c: <witness> = impl_witness imports.%BitOrWith.impl_witness_table.9a6, @Cpp.long.as.BitOrWith.impl.fc3(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.type.dccbc7.1: type = fn_type @Cpp.long.as.BitOrWith.impl.Op.2, @Cpp.long.as.BitOrWith.impl.fc3(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.d9c870.1: %Cpp.long.as.BitOrWith.impl.Op.type.dccbc7.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.type.dccbc7.2: type = fn_type @Cpp.long.as.BitOrWith.impl.Op.1, @Cpp.long.as.BitOrWith.impl.fc3(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.d9c870.2: %Cpp.long.as.BitOrWith.impl.Op.type.dccbc7.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %BitOrWith.facet.acb: %BitOrWith.type.428 = facet_value %Cpp.long, (%BitOrWith.impl_witness.b0c) [concrete]
+// CHECK:STDOUT:   %.faa: type = fn_type_with_self_type %BitOrWith.Op.type.99b, %BitOrWith.facet.acb [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.specific_fn.03ab4b.1: <specific function> = specific_function %Cpp.long.as.BitOrWith.impl.Op.d9c870.2, @Cpp.long.as.BitOrWith.impl.Op.1(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.specific_fn.03ab4b.2: <specific function> = specific_function %Cpp.long.as.BitOrWith.impl.Op.d9c870.1, @Cpp.long.as.BitOrWith.impl.Op.2(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %BitXorWith.type.1fc: type = facet_type <@BitXorWith, @BitXorWith(%i32)> [concrete]
+// CHECK:STDOUT:   %BitXorWith.Op.type.a4b: type = fn_type @BitXorWith.Op, @BitXorWith(%i32) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.type.876fc1.1: type = fn_type @Cpp.long.as.BitXorWith.impl.Op.1, @Cpp.long.as.BitXorWith.impl.732(%T.57d) [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.c0eaae.1: %Cpp.long.as.BitXorWith.impl.Op.type.876fc1.1 = struct_value () [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.type.876fc1.2: type = fn_type @Cpp.long.as.BitXorWith.impl.Op.2, @Cpp.long.as.BitXorWith.impl.732(%T.57d) [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.c0eaae.2: %Cpp.long.as.BitXorWith.impl.Op.type.876fc1.2 = struct_value () [symbolic]
+// CHECK:STDOUT:   %BitXorWith.type.fd0: type = facet_type <@BitXorWith, @BitXorWith(Core.IntLiteral)> [concrete]
+// CHECK:STDOUT:   %BitXorWith.Op.type.1f1: type = fn_type @BitXorWith.Op, @BitXorWith(Core.IntLiteral) [concrete]
+// CHECK:STDOUT:   %BitXorWith.impl_witness.8a0: <witness> = impl_witness imports.%BitXorWith.impl_witness_table.9f4, @Cpp.long.as.BitXorWith.impl.732(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.type.7fe348.1: type = fn_type @Cpp.long.as.BitXorWith.impl.Op.2, @Cpp.long.as.BitXorWith.impl.732(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.48a9f4.1: %Cpp.long.as.BitXorWith.impl.Op.type.7fe348.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.type.7fe348.2: type = fn_type @Cpp.long.as.BitXorWith.impl.Op.1, @Cpp.long.as.BitXorWith.impl.732(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.48a9f4.2: %Cpp.long.as.BitXorWith.impl.Op.type.7fe348.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %BitXorWith.facet.91f: %BitXorWith.type.1fc = facet_value %Cpp.long, (%BitXorWith.impl_witness.8a0) [concrete]
+// CHECK:STDOUT:   %.f2f: type = fn_type_with_self_type %BitXorWith.Op.type.a4b, %BitXorWith.facet.91f [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.specific_fn.4ec2b6.1: <specific function> = specific_function %Cpp.long.as.BitXorWith.impl.Op.48a9f4.2, @Cpp.long.as.BitXorWith.impl.Op.1(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.specific_fn.4ec2b6.2: <specific function> = specific_function %Cpp.long.as.BitXorWith.impl.Op.48a9f4.1, @Cpp.long.as.BitXorWith.impl.Op.2(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %LeftShiftWith.type.048: type = facet_type <@LeftShiftWith, @LeftShiftWith(%i32)> [concrete]
+// CHECK:STDOUT:   %LeftShiftWith.Op.type.dfc: type = fn_type @LeftShiftWith.Op, @LeftShiftWith(%i32) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.type.97b57f.1: type = fn_type @Cpp.long.as.LeftShiftWith.impl.Op.1, @Cpp.long.as.LeftShiftWith.impl.272(%T.57d) [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.69ad3e.1: %Cpp.long.as.LeftShiftWith.impl.Op.type.97b57f.1 = struct_value () [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.type.97b57f.2: type = fn_type @Cpp.long.as.LeftShiftWith.impl.Op.2, @Cpp.long.as.LeftShiftWith.impl.272(%T.57d) [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.69ad3e.2: %Cpp.long.as.LeftShiftWith.impl.Op.type.97b57f.2 = struct_value () [symbolic]
+// CHECK:STDOUT:   %LeftShiftWith.type.a1f: type = facet_type <@LeftShiftWith, @LeftShiftWith(Core.IntLiteral)> [concrete]
+// CHECK:STDOUT:   %LeftShiftWith.Op.type.55b: type = fn_type @LeftShiftWith.Op, @LeftShiftWith(Core.IntLiteral) [concrete]
+// CHECK:STDOUT:   %LeftShiftWith.impl_witness.982: <witness> = impl_witness imports.%LeftShiftWith.impl_witness_table.a97, @Cpp.long.as.LeftShiftWith.impl.272(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.type.1d34cb.1: type = fn_type @Cpp.long.as.LeftShiftWith.impl.Op.2, @Cpp.long.as.LeftShiftWith.impl.272(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.9105a1.1: %Cpp.long.as.LeftShiftWith.impl.Op.type.1d34cb.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.type.1d34cb.2: type = fn_type @Cpp.long.as.LeftShiftWith.impl.Op.1, @Cpp.long.as.LeftShiftWith.impl.272(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.9105a1.2: %Cpp.long.as.LeftShiftWith.impl.Op.type.1d34cb.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %LeftShiftWith.facet.089: %LeftShiftWith.type.048 = facet_value %Cpp.long, (%LeftShiftWith.impl_witness.982) [concrete]
+// CHECK:STDOUT:   %.2be: type = fn_type_with_self_type %LeftShiftWith.Op.type.dfc, %LeftShiftWith.facet.089 [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.1fda18.1: <specific function> = specific_function %Cpp.long.as.LeftShiftWith.impl.Op.9105a1.2, @Cpp.long.as.LeftShiftWith.impl.Op.1(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.1fda18.2: <specific function> = specific_function %Cpp.long.as.LeftShiftWith.impl.Op.9105a1.1, @Cpp.long.as.LeftShiftWith.impl.Op.2(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %RightShiftWith.type.bc6: type = facet_type <@RightShiftWith, @RightShiftWith(%i32)> [concrete]
+// CHECK:STDOUT:   %RightShiftWith.Op.type.807: type = fn_type @RightShiftWith.Op, @RightShiftWith(%i32) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.type.cc50bd.1: type = fn_type @Cpp.long.as.RightShiftWith.impl.Op.1, @Cpp.long.as.RightShiftWith.impl.3d6(%T.57d) [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.e1e575.1: %Cpp.long.as.RightShiftWith.impl.Op.type.cc50bd.1 = struct_value () [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.type.cc50bd.2: type = fn_type @Cpp.long.as.RightShiftWith.impl.Op.2, @Cpp.long.as.RightShiftWith.impl.3d6(%T.57d) [symbolic]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.e1e575.2: %Cpp.long.as.RightShiftWith.impl.Op.type.cc50bd.2 = struct_value () [symbolic]
+// CHECK:STDOUT:   %RightShiftWith.type.18a: type = facet_type <@RightShiftWith, @RightShiftWith(Core.IntLiteral)> [concrete]
+// CHECK:STDOUT:   %RightShiftWith.Op.type.c0c: type = fn_type @RightShiftWith.Op, @RightShiftWith(Core.IntLiteral) [concrete]
+// CHECK:STDOUT:   %RightShiftWith.impl_witness.ccb: <witness> = impl_witness imports.%RightShiftWith.impl_witness_table.e0a, @Cpp.long.as.RightShiftWith.impl.3d6(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.type.e35e06.1: type = fn_type @Cpp.long.as.RightShiftWith.impl.Op.2, @Cpp.long.as.RightShiftWith.impl.3d6(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.50edfc.1: %Cpp.long.as.RightShiftWith.impl.Op.type.e35e06.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.type.e35e06.2: type = fn_type @Cpp.long.as.RightShiftWith.impl.Op.1, @Cpp.long.as.RightShiftWith.impl.3d6(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.50edfc.2: %Cpp.long.as.RightShiftWith.impl.Op.type.e35e06.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %RightShiftWith.facet.6d9: %RightShiftWith.type.bc6 = facet_value %Cpp.long, (%RightShiftWith.impl_witness.ccb) [concrete]
+// CHECK:STDOUT:   %.dac: type = fn_type_with_self_type %RightShiftWith.Op.type.807, %RightShiftWith.facet.6d9 [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.specific_fn.012106.1: <specific function> = specific_function %Cpp.long.as.RightShiftWith.impl.Op.50edfc.2, @Cpp.long.as.RightShiftWith.impl.Op.1(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.specific_fn.012106.2: <specific function> = specific_function %Cpp.long.as.RightShiftWith.impl.Op.50edfc.1, @Cpp.long.as.RightShiftWith.impl.Op.2(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %BitAndWith.impl_witness.0fc: <witness> = impl_witness imports.%BitAndWith.impl_witness_table.072, @Cpp.long.as.BitAndWith.impl.334(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.type.ae3ddd.1: type = fn_type @Cpp.long.as.BitAndWith.impl.Op.2, @Cpp.long.as.BitAndWith.impl.334(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.98f052.1: %Cpp.long.as.BitAndWith.impl.Op.type.ae3ddd.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.type.ae3ddd.2: type = fn_type @Cpp.long.as.BitAndWith.impl.Op.1, @Cpp.long.as.BitAndWith.impl.334(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.98f052.2: %Cpp.long.as.BitAndWith.impl.Op.type.ae3ddd.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %BitAndWith.facet.6ae: %BitAndWith.type.011 = facet_value %Cpp.long, (%BitAndWith.impl_witness.0fc) [concrete]
+// CHECK:STDOUT:   %.9d7: type = fn_type_with_self_type %BitAndWith.Op.type.4bf, %BitAndWith.facet.6ae [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.specific_fn.af17b5.1: <specific function> = specific_function %Cpp.long.as.BitAndWith.impl.Op.98f052.2, @Cpp.long.as.BitAndWith.impl.Op.1(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.specific_fn.af17b5.2: <specific function> = specific_function %Cpp.long.as.BitAndWith.impl.Op.98f052.1, @Cpp.long.as.BitAndWith.impl.Op.2(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %BitOrWith.impl_witness.39f: <witness> = impl_witness imports.%BitOrWith.impl_witness_table.9a6, @Cpp.long.as.BitOrWith.impl.fc3(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.type.331453.1: type = fn_type @Cpp.long.as.BitOrWith.impl.Op.2, @Cpp.long.as.BitOrWith.impl.fc3(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.664d1e.1: %Cpp.long.as.BitOrWith.impl.Op.type.331453.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.type.331453.2: type = fn_type @Cpp.long.as.BitOrWith.impl.Op.1, @Cpp.long.as.BitOrWith.impl.fc3(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.664d1e.2: %Cpp.long.as.BitOrWith.impl.Op.type.331453.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %BitOrWith.facet.9a5: %BitOrWith.type.cba = facet_value %Cpp.long, (%BitOrWith.impl_witness.39f) [concrete]
+// CHECK:STDOUT:   %.a50: type = fn_type_with_self_type %BitOrWith.Op.type.0e5, %BitOrWith.facet.9a5 [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.specific_fn.be7132.1: <specific function> = specific_function %Cpp.long.as.BitOrWith.impl.Op.664d1e.2, @Cpp.long.as.BitOrWith.impl.Op.1(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.specific_fn.be7132.2: <specific function> = specific_function %Cpp.long.as.BitOrWith.impl.Op.664d1e.1, @Cpp.long.as.BitOrWith.impl.Op.2(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %BitXorWith.impl_witness.001: <witness> = impl_witness imports.%BitXorWith.impl_witness_table.9f4, @Cpp.long.as.BitXorWith.impl.732(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.type.97a9a2.1: type = fn_type @Cpp.long.as.BitXorWith.impl.Op.2, @Cpp.long.as.BitXorWith.impl.732(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.5b3046.1: %Cpp.long.as.BitXorWith.impl.Op.type.97a9a2.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.type.97a9a2.2: type = fn_type @Cpp.long.as.BitXorWith.impl.Op.1, @Cpp.long.as.BitXorWith.impl.732(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.5b3046.2: %Cpp.long.as.BitXorWith.impl.Op.type.97a9a2.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %BitXorWith.facet.349: %BitXorWith.type.fd0 = facet_value %Cpp.long, (%BitXorWith.impl_witness.001) [concrete]
+// CHECK:STDOUT:   %.8e7: type = fn_type_with_self_type %BitXorWith.Op.type.1f1, %BitXorWith.facet.349 [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.specific_fn.f1c9e6.1: <specific function> = specific_function %Cpp.long.as.BitXorWith.impl.Op.5b3046.2, @Cpp.long.as.BitXorWith.impl.Op.1(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.specific_fn.f1c9e6.2: <specific function> = specific_function %Cpp.long.as.BitXorWith.impl.Op.5b3046.1, @Cpp.long.as.BitXorWith.impl.Op.2(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %LeftShiftWith.impl_witness.a1c: <witness> = impl_witness imports.%LeftShiftWith.impl_witness_table.a97, @Cpp.long.as.LeftShiftWith.impl.272(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.type.d93838.1: type = fn_type @Cpp.long.as.LeftShiftWith.impl.Op.2, @Cpp.long.as.LeftShiftWith.impl.272(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.f145d8.1: %Cpp.long.as.LeftShiftWith.impl.Op.type.d93838.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.type.d93838.2: type = fn_type @Cpp.long.as.LeftShiftWith.impl.Op.1, @Cpp.long.as.LeftShiftWith.impl.272(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.f145d8.2: %Cpp.long.as.LeftShiftWith.impl.Op.type.d93838.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %LeftShiftWith.facet.5e2: %LeftShiftWith.type.a1f = facet_value %Cpp.long, (%LeftShiftWith.impl_witness.a1c) [concrete]
+// CHECK:STDOUT:   %.0a1: type = fn_type_with_self_type %LeftShiftWith.Op.type.55b, %LeftShiftWith.facet.5e2 [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.abc44e.1: <specific function> = specific_function %Cpp.long.as.LeftShiftWith.impl.Op.f145d8.2, @Cpp.long.as.LeftShiftWith.impl.Op.1(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.abc44e.2: <specific function> = specific_function %Cpp.long.as.LeftShiftWith.impl.Op.f145d8.1, @Cpp.long.as.LeftShiftWith.impl.Op.2(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %RightShiftWith.impl_witness.5fe: <witness> = impl_witness imports.%RightShiftWith.impl_witness_table.e0a, @Cpp.long.as.RightShiftWith.impl.3d6(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.type.a6dc1c.1: type = fn_type @Cpp.long.as.RightShiftWith.impl.Op.2, @Cpp.long.as.RightShiftWith.impl.3d6(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.249bc3.1: %Cpp.long.as.RightShiftWith.impl.Op.type.a6dc1c.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.type.a6dc1c.2: type = fn_type @Cpp.long.as.RightShiftWith.impl.Op.1, @Cpp.long.as.RightShiftWith.impl.3d6(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.249bc3.2: %Cpp.long.as.RightShiftWith.impl.Op.type.a6dc1c.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %RightShiftWith.facet.1d4: %RightShiftWith.type.18a = facet_value %Cpp.long, (%RightShiftWith.impl_witness.5fe) [concrete]
+// CHECK:STDOUT:   %.fab: type = fn_type_with_self_type %RightShiftWith.Op.type.c0c, %RightShiftWith.facet.1d4 [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.specific_fn.c6040e.1: <specific function> = specific_function %Cpp.long.as.RightShiftWith.impl.Op.249bc3.2, @Cpp.long.as.RightShiftWith.impl.Op.1(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.specific_fn.c6040e.2: <specific function> = specific_function %Cpp.long.as.RightShiftWith.impl.Op.249bc3.1, @Cpp.long.as.RightShiftWith.impl.Op.2(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %ImplicitAs.type.e8c: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete]
+// CHECK:STDOUT:   %ImplicitAs.Convert.type.1b6: type = fn_type @ImplicitAs.Convert, @ImplicitAs(%i32) [concrete]
+// CHECK:STDOUT:   %ImplicitAs.impl_witness.6bc: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.74f, @Core.IntLiteral.as.ImplicitAs.impl.b2d(%int_32) [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e0d: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.2, @Core.IntLiteral.as.ImplicitAs.impl.b2d(%int_32) [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e0d = struct_value () [concrete]
+// CHECK:STDOUT:   %ImplicitAs.facet.b94: %ImplicitAs.type.e8c = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.6bc) [concrete]
+// CHECK:STDOUT:   %.863: type = fn_type_with_self_type %ImplicitAs.Convert.type.1b6, %ImplicitAs.facet.b94 [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.215: <bound method> = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5 [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5, @Core.IntLiteral.as.ImplicitAs.impl.Convert.2(%int_32) [concrete]
+// CHECK:STDOUT:   %bound_method.38b: <bound method> = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: imports {
@@ -5030,21 +5224,33 @@ fn CopyUnsignedLong() {
 // CHECK:STDOUT:   %ImplicitAs.impl_witness_table.903 = impl_witness_table (%Core.import_ref.b8a), @Core.IntLiteral.as.ImplicitAs.impl.052 [concrete]
 // CHECK:STDOUT:   %Core.import_ref.ca0: @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert.type (%Core.IntLiteral.as.As.impl.Convert.type.09e) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert (constants.%Core.IntLiteral.as.As.impl.Convert.dbe)]
 // CHECK:STDOUT:   %As.impl_witness_table.9fc = impl_witness_table (%Core.import_ref.ca0), @Core.IntLiteral.as.As.impl [concrete]
-// CHECK:STDOUT:   %Core.import_ref.475cb3.2 = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, unloaded
-// CHECK:STDOUT:   %Core.import_ref.611: @Int.as.BitAndWith.impl.4ac.%Int.as.BitAndWith.impl.Op.type.2 (%Int.as.BitAndWith.impl.Op.type.1b6537.1) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.BitAndWith.impl.4ac.%Int.as.BitAndWith.impl.Op.2 (constants.%Int.as.BitAndWith.impl.Op.b9569a.1)]
-// CHECK:STDOUT:   %BitAndWith.impl_witness_table.ebf = impl_witness_table (%Core.import_ref.475cb3.2, %Core.import_ref.611), @Int.as.BitAndWith.impl.4ac [concrete]
-// CHECK:STDOUT:   %Core.Op.36f: @Int.as.BitAndWith.impl.4ac.%Int.as.BitAndWith.impl.Op.type.1 (%Int.as.BitAndWith.impl.Op.type.1b6537.2) = import_ref Core//prelude/types/int, Op, loaded [symbolic = @Int.as.BitAndWith.impl.4ac.%Int.as.BitAndWith.impl.Op.1 (constants.%Int.as.BitAndWith.impl.Op.b9569a.2)]
-// CHECK:STDOUT:   %Core.import_ref.475cb3.3 = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, unloaded
-// CHECK:STDOUT:   %Core.import_ref.29d: @T.binding.as_type.as.BitAndWith.impl.96d.%T.binding.as_type.as.BitAndWith.impl.Op.type.2 (%T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.1) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @T.binding.as_type.as.BitAndWith.impl.96d.%T.binding.as_type.as.BitAndWith.impl.Op.2 (constants.%T.binding.as_type.as.BitAndWith.impl.Op.892c6d.1)]
-// CHECK:STDOUT:   %BitAndWith.impl_witness_table.5e7 = impl_witness_table (%Core.import_ref.475cb3.3, %Core.import_ref.29d), @T.binding.as_type.as.BitAndWith.impl.96d [concrete]
-// CHECK:STDOUT:   %Core.Op.944: @T.binding.as_type.as.BitAndWith.impl.96d.%T.binding.as_type.as.BitAndWith.impl.Op.type.1 (%T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.2) = import_ref Core//prelude/types/int, Op, loaded [symbolic = @T.binding.as_type.as.BitAndWith.impl.96d.%T.binding.as_type.as.BitAndWith.impl.Op.1 (constants.%T.binding.as_type.as.BitAndWith.impl.Op.892c6d.2)]
+// CHECK:STDOUT:   %Core.import_ref.cb912f.1 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.17a: @Cpp.long.as.BitAndWith.impl.334.%Cpp.long.as.BitAndWith.impl.Op.type.2 (%Cpp.long.as.BitAndWith.impl.Op.type.8319b2.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long.as.BitAndWith.impl.334.%Cpp.long.as.BitAndWith.impl.Op.2 (constants.%Cpp.long.as.BitAndWith.impl.Op.3828c1.1)]
+// CHECK:STDOUT:   %BitAndWith.impl_witness_table.072 = impl_witness_table (%Core.import_ref.cb912f.1, %Core.import_ref.17a), @Cpp.long.as.BitAndWith.impl.334 [concrete]
+// CHECK:STDOUT:   %Core.Op.c8a: @Cpp.long.as.BitAndWith.impl.334.%Cpp.long.as.BitAndWith.impl.Op.type.1 (%Cpp.long.as.BitAndWith.impl.Op.type.8319b2.2) = import_ref Core//prelude/types/cpp/int, Op, loaded [symbolic = @Cpp.long.as.BitAndWith.impl.334.%Cpp.long.as.BitAndWith.impl.Op.1 (constants.%Cpp.long.as.BitAndWith.impl.Op.3828c1.2)]
 // CHECK:STDOUT:   %Core.import_ref.42d: @Core.IntLiteral.as.ImplicitAs.impl.b2d.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.b2d.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2)]
 // CHECK:STDOUT:   %ImplicitAs.impl_witness_table.74f = impl_witness_table (%Core.import_ref.42d), @Core.IntLiteral.as.ImplicitAs.impl.b2d [concrete]
-// CHECK:STDOUT:   %Core.import_ref.297: %Cpp.long.as.ImplicitAs.impl.Convert.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.ImplicitAs.impl.Convert]
-// CHECK:STDOUT:   %ImplicitAs.impl_witness_table.cb1 = impl_witness_table (%Core.import_ref.297), @Cpp.long.as.ImplicitAs.impl.e6d [concrete]
+// CHECK:STDOUT:   %Core.import_ref.4fa: %i32.as.ImplicitAs.impl.Convert.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %ImplicitAs.impl_witness_table.5ad = impl_witness_table (%Core.import_ref.4fa), @i32.as.ImplicitAs.impl [concrete]
+// CHECK:STDOUT:   %Core.import_ref.cb912f.3 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.3b6: @Cpp.long.as.BitOrWith.impl.fc3.%Cpp.long.as.BitOrWith.impl.Op.type.2 (%Cpp.long.as.BitOrWith.impl.Op.type.9f5440.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long.as.BitOrWith.impl.fc3.%Cpp.long.as.BitOrWith.impl.Op.2 (constants.%Cpp.long.as.BitOrWith.impl.Op.81f55a.1)]
+// CHECK:STDOUT:   %BitOrWith.impl_witness_table.9a6 = impl_witness_table (%Core.import_ref.cb912f.3, %Core.import_ref.3b6), @Cpp.long.as.BitOrWith.impl.fc3 [concrete]
+// CHECK:STDOUT:   %Core.Op.788: @Cpp.long.as.BitOrWith.impl.fc3.%Cpp.long.as.BitOrWith.impl.Op.type.1 (%Cpp.long.as.BitOrWith.impl.Op.type.9f5440.2) = import_ref Core//prelude/types/cpp/int, Op, loaded [symbolic = @Cpp.long.as.BitOrWith.impl.fc3.%Cpp.long.as.BitOrWith.impl.Op.1 (constants.%Cpp.long.as.BitOrWith.impl.Op.81f55a.2)]
+// CHECK:STDOUT:   %Core.import_ref.cb912f.5 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.619: @Cpp.long.as.BitXorWith.impl.732.%Cpp.long.as.BitXorWith.impl.Op.type.2 (%Cpp.long.as.BitXorWith.impl.Op.type.876fc1.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long.as.BitXorWith.impl.732.%Cpp.long.as.BitXorWith.impl.Op.2 (constants.%Cpp.long.as.BitXorWith.impl.Op.c0eaae.1)]
+// CHECK:STDOUT:   %BitXorWith.impl_witness_table.9f4 = impl_witness_table (%Core.import_ref.cb912f.5, %Core.import_ref.619), @Cpp.long.as.BitXorWith.impl.732 [concrete]
+// CHECK:STDOUT:   %Core.Op.c61: @Cpp.long.as.BitXorWith.impl.732.%Cpp.long.as.BitXorWith.impl.Op.type.1 (%Cpp.long.as.BitXorWith.impl.Op.type.876fc1.2) = import_ref Core//prelude/types/cpp/int, Op, loaded [symbolic = @Cpp.long.as.BitXorWith.impl.732.%Cpp.long.as.BitXorWith.impl.Op.1 (constants.%Cpp.long.as.BitXorWith.impl.Op.c0eaae.2)]
+// CHECK:STDOUT:   %Core.import_ref.cb912f.7 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.0ca: @Cpp.long.as.LeftShiftWith.impl.272.%Cpp.long.as.LeftShiftWith.impl.Op.type.2 (%Cpp.long.as.LeftShiftWith.impl.Op.type.97b57f.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long.as.LeftShiftWith.impl.272.%Cpp.long.as.LeftShiftWith.impl.Op.2 (constants.%Cpp.long.as.LeftShiftWith.impl.Op.69ad3e.1)]
+// CHECK:STDOUT:   %LeftShiftWith.impl_witness_table.a97 = impl_witness_table (%Core.import_ref.cb912f.7, %Core.import_ref.0ca), @Cpp.long.as.LeftShiftWith.impl.272 [concrete]
+// CHECK:STDOUT:   %Core.Op.2db: @Cpp.long.as.LeftShiftWith.impl.272.%Cpp.long.as.LeftShiftWith.impl.Op.type.1 (%Cpp.long.as.LeftShiftWith.impl.Op.type.97b57f.2) = import_ref Core//prelude/types/cpp/int, Op, loaded [symbolic = @Cpp.long.as.LeftShiftWith.impl.272.%Cpp.long.as.LeftShiftWith.impl.Op.1 (constants.%Cpp.long.as.LeftShiftWith.impl.Op.69ad3e.2)]
+// CHECK:STDOUT:   %Core.import_ref.cb912f.9 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.038: @Cpp.long.as.RightShiftWith.impl.3d6.%Cpp.long.as.RightShiftWith.impl.Op.type.2 (%Cpp.long.as.RightShiftWith.impl.Op.type.cc50bd.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @Cpp.long.as.RightShiftWith.impl.3d6.%Cpp.long.as.RightShiftWith.impl.Op.2 (constants.%Cpp.long.as.RightShiftWith.impl.Op.e1e575.1)]
+// CHECK:STDOUT:   %RightShiftWith.impl_witness_table.e0a = impl_witness_table (%Core.import_ref.cb912f.9, %Core.import_ref.038), @Cpp.long.as.RightShiftWith.impl.3d6 [concrete]
+// CHECK:STDOUT:   %Core.Op.330: @Cpp.long.as.RightShiftWith.impl.3d6.%Cpp.long.as.RightShiftWith.impl.Op.type.1 (%Cpp.long.as.RightShiftWith.impl.Op.type.cc50bd.2) = import_ref Core//prelude/types/cpp/int, Op, loaded [symbolic = @Cpp.long.as.RightShiftWith.impl.3d6.%Cpp.long.as.RightShiftWith.impl.Op.1 (constants.%Cpp.long.as.RightShiftWith.impl.Op.e1e575.2)]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: fn @BitWiseHeterogeneousLong() {
+// CHECK:STDOUT: fn @BitWiseHeterogeneousLongLeftSide() {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   name_binding_decl {
 // CHECK:STDOUT:     %a.patt: %pattern_type.68c = value_binding_pattern a [concrete]
@@ -5060,94 +5266,1404 @@ fn CopyUnsignedLong() {
 // CHECK:STDOUT:   %.loc10_21.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc10 [concrete = constants.%int_1.5a4]
 // CHECK:STDOUT:   %.loc10_21.2: %Cpp.long = converted %int_1.loc10, %.loc10_21.1 [concrete = constants.%int_1.5a4]
 // CHECK:STDOUT:   %a: %Cpp.long = value_binding a, %.loc10_21.2
+// CHECK:STDOUT:   %AssertSameType.ref.loc12: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %a.ref.loc12_18: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %int_1.loc12: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:   %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   %impl.elem0.loc12_25.1: %.97a = impl_witness_access constants.%As.impl_witness.ab6, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.29b]
+// CHECK:STDOUT:   %bound_method.loc12_25.1: <bound method> = bound_method %int_1.loc12, %impl.elem0.loc12_25.1 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound]
+// CHECK:STDOUT:   %specific_fn.loc12_25: <specific function> = specific_function %impl.elem0.loc12_25.1, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc12_25.2: <bound method> = bound_method %int_1.loc12, %specific_fn.loc12_25 [concrete = constants.%bound_method.290]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.call.loc12: init %i32 = call %bound_method.loc12_25.2(%int_1.loc12) [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc12_25.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call.loc12 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc12_25.2: %i32 = converted %int_1.loc12, %.loc12_25.1 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %impl.elem1.loc12: %.bdd = impl_witness_access constants.%BitAndWith.impl_witness.fe3, element1 [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.a9ac84.2]
+// CHECK:STDOUT:   %bound_method.loc12_20.1: <bound method> = bound_method %a.ref.loc12_18, %impl.elem1.loc12
+// CHECK:STDOUT:   %ImplicitAs.facet.loc12_20.1: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc12_20.1: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc12_20.1 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %ImplicitAs.facet.loc12_20.2: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc12_20.2: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc12_20.2 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %specific_fn.loc12_20: <specific function> = specific_function %impl.elem1.loc12, @Cpp.long.as.BitAndWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.specific_fn.dcd797.1]
+// CHECK:STDOUT:   %bound_method.loc12_20.2: <bound method> = bound_method %a.ref.loc12_18, %specific_fn.loc12_20
+// CHECK:STDOUT:   %.loc12_20.3: %Cpp.long.as.BitAndWith.impl.Op.type.202298.1 = specific_constant imports.%Core.Op.c8a, @Cpp.long.as.BitAndWith.impl.334(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.a9ac84.1]
+// CHECK:STDOUT:   %Op.ref.loc12: %Cpp.long.as.BitAndWith.impl.Op.type.202298.1 = name_ref Op, %.loc12_20.3 [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.a9ac84.1]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.bound.loc12: <bound method> = bound_method %a.ref.loc12_18, %Op.ref.loc12
+// CHECK:STDOUT:   %impl.elem0.loc12_20: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc12_20.3: <bound method> = bound_method %.loc12_25.2, %impl.elem0.loc12_20 [concrete = constants.%i32.as.ImplicitAs.impl.Convert.bound]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc12_20: init %Cpp.long = call %bound_method.loc12_20.3(%.loc12_25.2) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc12_20.4: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc12_20 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc12_20.5: %Cpp.long = converted %.loc12_25.2, %.loc12_20.4 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.specific_fn.loc12: <specific function> = specific_function %Op.ref.loc12, @Cpp.long.as.BitAndWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.specific_fn.dcd797.2]
+// CHECK:STDOUT:   %bound_method.loc12_20.4: <bound method> = bound_method %a.ref.loc12_18, %Cpp.long.as.BitAndWith.impl.Op.specific_fn.loc12
+// CHECK:STDOUT:   %impl.elem0.loc12_25.2: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc12_25.3: <bound method> = bound_method %.loc12_25.2, %impl.elem0.loc12_25.2 [concrete = constants.%i32.as.ImplicitAs.impl.Convert.bound]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc12_25: init %Cpp.long = call %bound_method.loc12_25.3(%.loc12_25.2) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc12_25.3: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc12_25 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc12_25.4: %Cpp.long = converted %.loc12_25.2, %.loc12_25.3 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.call.loc12: init %Cpp.long = call %bound_method.loc12_20.4(%a.ref.loc12_18, %.loc12_25.4)
+// CHECK:STDOUT:   %a.ref.loc12_34: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc12: <specific function> = specific_function %AssertSameType.ref.loc12, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc12_20.6: %Cpp.long = value_of_initializer %Cpp.long.as.BitAndWith.impl.Op.call.loc12
+// CHECK:STDOUT:   %.loc12_20.7: %Cpp.long = converted %Cpp.long.as.BitAndWith.impl.Op.call.loc12, %.loc12_20.6
+// CHECK:STDOUT:   %AssertSameType.call.loc12: init %empty_tuple.type = call %AssertSameType.specific_fn.loc12(%.loc12_20.7, %a.ref.loc12_34)
+// CHECK:STDOUT:   %AssertSameType.ref.loc13: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %a.ref.loc13_18: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %int_1.loc13: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:   %i32.loc13: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   %impl.elem0.loc13_25.1: %.97a = impl_witness_access constants.%As.impl_witness.ab6, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.29b]
+// CHECK:STDOUT:   %bound_method.loc13_25.1: <bound method> = bound_method %int_1.loc13, %impl.elem0.loc13_25.1 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound]
+// CHECK:STDOUT:   %specific_fn.loc13_25: <specific function> = specific_function %impl.elem0.loc13_25.1, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc13_25.2: <bound method> = bound_method %int_1.loc13, %specific_fn.loc13_25 [concrete = constants.%bound_method.290]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.call.loc13: init %i32 = call %bound_method.loc13_25.2(%int_1.loc13) [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc13_25.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call.loc13 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc13_25.2: %i32 = converted %int_1.loc13, %.loc13_25.1 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %impl.elem1.loc13: %.faa = impl_witness_access constants.%BitOrWith.impl_witness.b0c, element1 [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.d9c870.2]
+// CHECK:STDOUT:   %bound_method.loc13_20.1: <bound method> = bound_method %a.ref.loc13_18, %impl.elem1.loc13
+// CHECK:STDOUT:   %ImplicitAs.facet.loc13_20.1: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc13_20.1: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc13_20.1 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %ImplicitAs.facet.loc13_20.2: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc13_20.2: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc13_20.2 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %specific_fn.loc13_20: <specific function> = specific_function %impl.elem1.loc13, @Cpp.long.as.BitOrWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.specific_fn.03ab4b.1]
+// CHECK:STDOUT:   %bound_method.loc13_20.2: <bound method> = bound_method %a.ref.loc13_18, %specific_fn.loc13_20
+// CHECK:STDOUT:   %.loc13_20.3: %Cpp.long.as.BitOrWith.impl.Op.type.dccbc7.1 = specific_constant imports.%Core.Op.788, @Cpp.long.as.BitOrWith.impl.fc3(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.d9c870.1]
+// CHECK:STDOUT:   %Op.ref.loc13: %Cpp.long.as.BitOrWith.impl.Op.type.dccbc7.1 = name_ref Op, %.loc13_20.3 [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.d9c870.1]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.bound.loc13: <bound method> = bound_method %a.ref.loc13_18, %Op.ref.loc13
+// CHECK:STDOUT:   %impl.elem0.loc13_20: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc13_20.3: <bound method> = bound_method %.loc13_25.2, %impl.elem0.loc13_20 [concrete = constants.%i32.as.ImplicitAs.impl.Convert.bound]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc13_20: init %Cpp.long = call %bound_method.loc13_20.3(%.loc13_25.2) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc13_20.4: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc13_20 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc13_20.5: %Cpp.long = converted %.loc13_25.2, %.loc13_20.4 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.specific_fn.loc13: <specific function> = specific_function %Op.ref.loc13, @Cpp.long.as.BitOrWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.specific_fn.03ab4b.2]
+// CHECK:STDOUT:   %bound_method.loc13_20.4: <bound method> = bound_method %a.ref.loc13_18, %Cpp.long.as.BitOrWith.impl.Op.specific_fn.loc13
+// CHECK:STDOUT:   %impl.elem0.loc13_25.2: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc13_25.3: <bound method> = bound_method %.loc13_25.2, %impl.elem0.loc13_25.2 [concrete = constants.%i32.as.ImplicitAs.impl.Convert.bound]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc13_25: init %Cpp.long = call %bound_method.loc13_25.3(%.loc13_25.2) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc13_25.3: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc13_25 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc13_25.4: %Cpp.long = converted %.loc13_25.2, %.loc13_25.3 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.call.loc13: init %Cpp.long = call %bound_method.loc13_20.4(%a.ref.loc13_18, %.loc13_25.4)
+// CHECK:STDOUT:   %a.ref.loc13_34: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc13: <specific function> = specific_function %AssertSameType.ref.loc13, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc13_20.6: %Cpp.long = value_of_initializer %Cpp.long.as.BitOrWith.impl.Op.call.loc13
+// CHECK:STDOUT:   %.loc13_20.7: %Cpp.long = converted %Cpp.long.as.BitOrWith.impl.Op.call.loc13, %.loc13_20.6
+// CHECK:STDOUT:   %AssertSameType.call.loc13: init %empty_tuple.type = call %AssertSameType.specific_fn.loc13(%.loc13_20.7, %a.ref.loc13_34)
+// CHECK:STDOUT:   %AssertSameType.ref.loc14: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %a.ref.loc14_18: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %int_1.loc14: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %int_32.loc14: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:   %i32.loc14: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   %impl.elem0.loc14_25.1: %.97a = impl_witness_access constants.%As.impl_witness.ab6, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.29b]
+// CHECK:STDOUT:   %bound_method.loc14_25.1: <bound method> = bound_method %int_1.loc14, %impl.elem0.loc14_25.1 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound]
+// CHECK:STDOUT:   %specific_fn.loc14_25: <specific function> = specific_function %impl.elem0.loc14_25.1, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc14_25.2: <bound method> = bound_method %int_1.loc14, %specific_fn.loc14_25 [concrete = constants.%bound_method.290]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.call.loc14: init %i32 = call %bound_method.loc14_25.2(%int_1.loc14) [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc14_25.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call.loc14 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc14_25.2: %i32 = converted %int_1.loc14, %.loc14_25.1 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %impl.elem1.loc14: %.f2f = impl_witness_access constants.%BitXorWith.impl_witness.8a0, element1 [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.48a9f4.2]
+// CHECK:STDOUT:   %bound_method.loc14_20.1: <bound method> = bound_method %a.ref.loc14_18, %impl.elem1.loc14
+// CHECK:STDOUT:   %ImplicitAs.facet.loc14_20.1: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc14_20.1: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc14_20.1 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %ImplicitAs.facet.loc14_20.2: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc14_20.2: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc14_20.2 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %specific_fn.loc14_20: <specific function> = specific_function %impl.elem1.loc14, @Cpp.long.as.BitXorWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.specific_fn.4ec2b6.1]
+// CHECK:STDOUT:   %bound_method.loc14_20.2: <bound method> = bound_method %a.ref.loc14_18, %specific_fn.loc14_20
+// CHECK:STDOUT:   %.loc14_20.3: %Cpp.long.as.BitXorWith.impl.Op.type.7fe348.1 = specific_constant imports.%Core.Op.c61, @Cpp.long.as.BitXorWith.impl.732(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.48a9f4.1]
+// CHECK:STDOUT:   %Op.ref.loc14: %Cpp.long.as.BitXorWith.impl.Op.type.7fe348.1 = name_ref Op, %.loc14_20.3 [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.48a9f4.1]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.bound.loc14: <bound method> = bound_method %a.ref.loc14_18, %Op.ref.loc14
+// CHECK:STDOUT:   %impl.elem0.loc14_20: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc14_20.3: <bound method> = bound_method %.loc14_25.2, %impl.elem0.loc14_20 [concrete = constants.%i32.as.ImplicitAs.impl.Convert.bound]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc14_20: init %Cpp.long = call %bound_method.loc14_20.3(%.loc14_25.2) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc14_20.4: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc14_20 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc14_20.5: %Cpp.long = converted %.loc14_25.2, %.loc14_20.4 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.specific_fn.loc14: <specific function> = specific_function %Op.ref.loc14, @Cpp.long.as.BitXorWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.specific_fn.4ec2b6.2]
+// CHECK:STDOUT:   %bound_method.loc14_20.4: <bound method> = bound_method %a.ref.loc14_18, %Cpp.long.as.BitXorWith.impl.Op.specific_fn.loc14
+// CHECK:STDOUT:   %impl.elem0.loc14_25.2: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc14_25.3: <bound method> = bound_method %.loc14_25.2, %impl.elem0.loc14_25.2 [concrete = constants.%i32.as.ImplicitAs.impl.Convert.bound]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc14_25: init %Cpp.long = call %bound_method.loc14_25.3(%.loc14_25.2) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc14_25.3: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc14_25 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc14_25.4: %Cpp.long = converted %.loc14_25.2, %.loc14_25.3 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.call.loc14: init %Cpp.long = call %bound_method.loc14_20.4(%a.ref.loc14_18, %.loc14_25.4)
+// CHECK:STDOUT:   %a.ref.loc14_34: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc14: <specific function> = specific_function %AssertSameType.ref.loc14, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc14_20.6: %Cpp.long = value_of_initializer %Cpp.long.as.BitXorWith.impl.Op.call.loc14
+// CHECK:STDOUT:   %.loc14_20.7: %Cpp.long = converted %Cpp.long.as.BitXorWith.impl.Op.call.loc14, %.loc14_20.6
+// CHECK:STDOUT:   %AssertSameType.call.loc14: init %empty_tuple.type = call %AssertSameType.specific_fn.loc14(%.loc14_20.7, %a.ref.loc14_34)
+// CHECK:STDOUT:   %AssertSameType.ref.loc15: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %a.ref.loc15_18: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %int_1.loc15: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %int_32.loc15: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:   %i32.loc15: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   %impl.elem0.loc15_26.1: %.97a = impl_witness_access constants.%As.impl_witness.ab6, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.29b]
+// CHECK:STDOUT:   %bound_method.loc15_26.1: <bound method> = bound_method %int_1.loc15, %impl.elem0.loc15_26.1 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound]
+// CHECK:STDOUT:   %specific_fn.loc15_26: <specific function> = specific_function %impl.elem0.loc15_26.1, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc15_26.2: <bound method> = bound_method %int_1.loc15, %specific_fn.loc15_26 [concrete = constants.%bound_method.290]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.call.loc15: init %i32 = call %bound_method.loc15_26.2(%int_1.loc15) [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc15_26.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call.loc15 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc15_26.2: %i32 = converted %int_1.loc15, %.loc15_26.1 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %impl.elem1.loc15: %.2be = impl_witness_access constants.%LeftShiftWith.impl_witness.982, element1 [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.9105a1.2]
+// CHECK:STDOUT:   %bound_method.loc15_20.1: <bound method> = bound_method %a.ref.loc15_18, %impl.elem1.loc15
+// CHECK:STDOUT:   %ImplicitAs.facet.loc15_20.1: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc15_20.1: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc15_20.1 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %ImplicitAs.facet.loc15_20.2: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc15_20.2: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc15_20.2 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %specific_fn.loc15_20: <specific function> = specific_function %impl.elem1.loc15, @Cpp.long.as.LeftShiftWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.1fda18.1]
+// CHECK:STDOUT:   %bound_method.loc15_20.2: <bound method> = bound_method %a.ref.loc15_18, %specific_fn.loc15_20
+// CHECK:STDOUT:   %.loc15_20.3: %Cpp.long.as.LeftShiftWith.impl.Op.type.1d34cb.1 = specific_constant imports.%Core.Op.2db, @Cpp.long.as.LeftShiftWith.impl.272(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.9105a1.1]
+// CHECK:STDOUT:   %Op.ref.loc15: %Cpp.long.as.LeftShiftWith.impl.Op.type.1d34cb.1 = name_ref Op, %.loc15_20.3 [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.9105a1.1]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.bound.loc15: <bound method> = bound_method %a.ref.loc15_18, %Op.ref.loc15
+// CHECK:STDOUT:   %impl.elem0.loc15_20: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc15_20.3: <bound method> = bound_method %.loc15_26.2, %impl.elem0.loc15_20 [concrete = constants.%i32.as.ImplicitAs.impl.Convert.bound]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc15_20: init %Cpp.long = call %bound_method.loc15_20.3(%.loc15_26.2) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc15_20.4: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc15_20 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc15_20.5: %Cpp.long = converted %.loc15_26.2, %.loc15_20.4 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.loc15: <specific function> = specific_function %Op.ref.loc15, @Cpp.long.as.LeftShiftWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.1fda18.2]
+// CHECK:STDOUT:   %bound_method.loc15_20.4: <bound method> = bound_method %a.ref.loc15_18, %Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.loc15
+// CHECK:STDOUT:   %impl.elem0.loc15_26.2: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc15_26.3: <bound method> = bound_method %.loc15_26.2, %impl.elem0.loc15_26.2 [concrete = constants.%i32.as.ImplicitAs.impl.Convert.bound]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc15_26: init %Cpp.long = call %bound_method.loc15_26.3(%.loc15_26.2) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc15_26.3: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc15_26 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc15_26.4: %Cpp.long = converted %.loc15_26.2, %.loc15_26.3 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.call.loc15: init %Cpp.long = call %bound_method.loc15_20.4(%a.ref.loc15_18, %.loc15_26.4)
+// CHECK:STDOUT:   %a.ref.loc15_35: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc15: <specific function> = specific_function %AssertSameType.ref.loc15, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc15_20.6: %Cpp.long = value_of_initializer %Cpp.long.as.LeftShiftWith.impl.Op.call.loc15
+// CHECK:STDOUT:   %.loc15_20.7: %Cpp.long = converted %Cpp.long.as.LeftShiftWith.impl.Op.call.loc15, %.loc15_20.6
+// CHECK:STDOUT:   %AssertSameType.call.loc15: init %empty_tuple.type = call %AssertSameType.specific_fn.loc15(%.loc15_20.7, %a.ref.loc15_35)
 // CHECK:STDOUT:   %AssertSameType.ref.loc16: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
 // CHECK:STDOUT:   %a.ref.loc16_18: %Cpp.long = name_ref a, %a
 // CHECK:STDOUT:   %int_1.loc16: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
 // CHECK:STDOUT:   %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
 // CHECK:STDOUT:   %i32.loc16: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
-// CHECK:STDOUT:   %impl.elem0.loc16: %.97a = impl_witness_access constants.%As.impl_witness.ab6, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.29b]
-// CHECK:STDOUT:   %bound_method.loc16_25.1: <bound method> = bound_method %int_1.loc16, %impl.elem0.loc16 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound]
-// CHECK:STDOUT:   %specific_fn.loc16: <specific function> = specific_function %impl.elem0.loc16, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn]
-// CHECK:STDOUT:   %bound_method.loc16_25.2: <bound method> = bound_method %int_1.loc16, %specific_fn.loc16 [concrete = constants.%bound_method.290]
-// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.call.loc16: init %i32 = call %bound_method.loc16_25.2(%int_1.loc16) [concrete = constants.%int_1.5d2]
-// CHECK:STDOUT:   %.loc16_25.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call.loc16 [concrete = constants.%int_1.5d2]
-// CHECK:STDOUT:   %.loc16_25.2: %i32 = converted %int_1.loc16, %.loc16_25.1 [concrete = constants.%int_1.5d2]
-// CHECK:STDOUT:   %a.ref.loc16_34: %Cpp.long = name_ref a, %a
-// CHECK:STDOUT:   %AssertSameType.ref.loc22: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
-// CHECK:STDOUT:   %int_1.loc22: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
-// CHECK:STDOUT:   %int_32.loc22: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
-// CHECK:STDOUT:   %i32.loc22: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
-// CHECK:STDOUT:   %impl.elem0.loc22: %.97a = impl_witness_access constants.%As.impl_witness.ab6, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.29b]
-// CHECK:STDOUT:   %bound_method.loc22_21.1: <bound method> = bound_method %int_1.loc22, %impl.elem0.loc22 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound]
-// CHECK:STDOUT:   %specific_fn.loc22: <specific function> = specific_function %impl.elem0.loc22, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn]
-// CHECK:STDOUT:   %bound_method.loc22_21.2: <bound method> = bound_method %int_1.loc22, %specific_fn.loc22 [concrete = constants.%bound_method.290]
-// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.call.loc22: init %i32 = call %bound_method.loc22_21.2(%int_1.loc22) [concrete = constants.%int_1.5d2]
-// CHECK:STDOUT:   %.loc22_21.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call.loc22 [concrete = constants.%int_1.5d2]
-// CHECK:STDOUT:   %.loc22_21.2: %i32 = converted %int_1.loc22, %.loc22_21.1 [concrete = constants.%int_1.5d2]
-// CHECK:STDOUT:   %a.ref.loc22_31: %Cpp.long = name_ref a, %a
-// CHECK:STDOUT:   %a.ref.loc22_34: %Cpp.long = name_ref a, %a
-// CHECK:STDOUT:   name_binding_decl {
-// CHECK:STDOUT:     %b.patt: %pattern_type.95b = value_binding_pattern b [concrete]
-// CHECK:STDOUT:   }
-// CHECK:STDOUT:   %int_1.loc24: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
-// CHECK:STDOUT:   %.loc24_10: type = splice_block %i64 [concrete = constants.%i64] {
-// CHECK:STDOUT:     %int_64: Core.IntLiteral = int_value 64 [concrete = constants.%int_64]
-// CHECK:STDOUT:     %i64: type = class_type @Int, @Int(constants.%int_64) [concrete = constants.%i64]
+// CHECK:STDOUT:   %impl.elem0.loc16_26.1: %.97a = impl_witness_access constants.%As.impl_witness.ab6, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.29b]
+// CHECK:STDOUT:   %bound_method.loc16_26.1: <bound method> = bound_method %int_1.loc16, %impl.elem0.loc16_26.1 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound]
+// CHECK:STDOUT:   %specific_fn.loc16_26: <specific function> = specific_function %impl.elem0.loc16_26.1, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc16_26.2: <bound method> = bound_method %int_1.loc16, %specific_fn.loc16_26 [concrete = constants.%bound_method.290]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.call.loc16: init %i32 = call %bound_method.loc16_26.2(%int_1.loc16) [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc16_26.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call.loc16 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc16_26.2: %i32 = converted %int_1.loc16, %.loc16_26.1 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %impl.elem1.loc16: %.dac = impl_witness_access constants.%RightShiftWith.impl_witness.ccb, element1 [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.50edfc.2]
+// CHECK:STDOUT:   %bound_method.loc16_20.1: <bound method> = bound_method %a.ref.loc16_18, %impl.elem1.loc16
+// CHECK:STDOUT:   %ImplicitAs.facet.loc16_20.1: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc16_20.1: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc16_20.1 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %ImplicitAs.facet.loc16_20.2: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc16_20.2: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc16_20.2 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %specific_fn.loc16_20: <specific function> = specific_function %impl.elem1.loc16, @Cpp.long.as.RightShiftWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.specific_fn.012106.1]
+// CHECK:STDOUT:   %bound_method.loc16_20.2: <bound method> = bound_method %a.ref.loc16_18, %specific_fn.loc16_20
+// CHECK:STDOUT:   %.loc16_20.3: %Cpp.long.as.RightShiftWith.impl.Op.type.e35e06.1 = specific_constant imports.%Core.Op.330, @Cpp.long.as.RightShiftWith.impl.3d6(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.50edfc.1]
+// CHECK:STDOUT:   %Op.ref.loc16: %Cpp.long.as.RightShiftWith.impl.Op.type.e35e06.1 = name_ref Op, %.loc16_20.3 [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.50edfc.1]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.bound.loc16: <bound method> = bound_method %a.ref.loc16_18, %Op.ref.loc16
+// CHECK:STDOUT:   %impl.elem0.loc16_20: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc16_20.3: <bound method> = bound_method %.loc16_26.2, %impl.elem0.loc16_20 [concrete = constants.%i32.as.ImplicitAs.impl.Convert.bound]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc16_20: init %Cpp.long = call %bound_method.loc16_20.3(%.loc16_26.2) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc16_20.4: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc16_20 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc16_20.5: %Cpp.long = converted %.loc16_26.2, %.loc16_20.4 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.specific_fn.loc16: <specific function> = specific_function %Op.ref.loc16, @Cpp.long.as.RightShiftWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.specific_fn.012106.2]
+// CHECK:STDOUT:   %bound_method.loc16_20.4: <bound method> = bound_method %a.ref.loc16_18, %Cpp.long.as.RightShiftWith.impl.Op.specific_fn.loc16
+// CHECK:STDOUT:   %impl.elem0.loc16_26.2: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc16_26.3: <bound method> = bound_method %.loc16_26.2, %impl.elem0.loc16_26.2 [concrete = constants.%i32.as.ImplicitAs.impl.Convert.bound]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc16_26: init %Cpp.long = call %bound_method.loc16_26.3(%.loc16_26.2) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc16_26.3: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc16_26 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc16_26.4: %Cpp.long = converted %.loc16_26.2, %.loc16_26.3 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.call.loc16: init %Cpp.long = call %bound_method.loc16_20.4(%a.ref.loc16_18, %.loc16_26.4)
+// CHECK:STDOUT:   %a.ref.loc16_35: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc16: <specific function> = specific_function %AssertSameType.ref.loc16, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc16_20.6: %Cpp.long = value_of_initializer %Cpp.long.as.RightShiftWith.impl.Op.call.loc16
+// CHECK:STDOUT:   %.loc16_20.7: %Cpp.long = converted %Cpp.long.as.RightShiftWith.impl.Op.call.loc16, %.loc16_20.6
+// CHECK:STDOUT:   %AssertSameType.call.loc16: init %empty_tuple.type = call %AssertSameType.specific_fn.loc16(%.loc16_20.7, %a.ref.loc16_35)
+// CHECK:STDOUT:   %AssertSameType.ref.loc18: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %a.ref.loc18_18: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %int_1.loc18: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %impl.elem1.loc18: %.9d7 = impl_witness_access constants.%BitAndWith.impl_witness.0fc, element1 [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.98f052.2]
+// CHECK:STDOUT:   %bound_method.loc18_20.1: <bound method> = bound_method %a.ref.loc18_18, %impl.elem1.loc18
+// CHECK:STDOUT:   %ImplicitAs.facet.loc18_20.1: %ImplicitAs.type.819 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.2ce) [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %.loc18_20.1: %ImplicitAs.type.819 = converted Core.IntLiteral, %ImplicitAs.facet.loc18_20.1 [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %ImplicitAs.facet.loc18_20.2: %ImplicitAs.type.819 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.2ce) [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %.loc18_20.2: %ImplicitAs.type.819 = converted Core.IntLiteral, %ImplicitAs.facet.loc18_20.2 [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %specific_fn.loc18: <specific function> = specific_function %impl.elem1.loc18, @Cpp.long.as.BitAndWith.impl.Op.1(constants.%ImplicitAs.facet.eed) [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.specific_fn.af17b5.1]
+// CHECK:STDOUT:   %bound_method.loc18_20.2: <bound method> = bound_method %a.ref.loc18_18, %specific_fn.loc18
+// CHECK:STDOUT:   %.loc18_20.3: %Cpp.long.as.BitAndWith.impl.Op.type.ae3ddd.1 = specific_constant imports.%Core.Op.c8a, @Cpp.long.as.BitAndWith.impl.334(constants.%ImplicitAs.facet.eed) [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.98f052.1]
+// CHECK:STDOUT:   %Op.ref.loc18: %Cpp.long.as.BitAndWith.impl.Op.type.ae3ddd.1 = name_ref Op, %.loc18_20.3 [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.98f052.1]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.bound.loc18: <bound method> = bound_method %a.ref.loc18_18, %Op.ref.loc18
+// CHECK:STDOUT:   %impl.elem0.loc18_20: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc18_20.3: <bound method> = bound_method %int_1.loc18, %impl.elem0.loc18_20 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc18_20: init %Cpp.long = call %bound_method.loc18_20.3(%int_1.loc18) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc18_20.4: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc18_20 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc18_20.5: %Cpp.long = converted %int_1.loc18, %.loc18_20.4 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.specific_fn.loc18: <specific function> = specific_function %Op.ref.loc18, @Cpp.long.as.BitAndWith.impl.Op.2(constants.%ImplicitAs.facet.eed) [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.specific_fn.af17b5.2]
+// CHECK:STDOUT:   %bound_method.loc18_20.4: <bound method> = bound_method %a.ref.loc18_18, %Cpp.long.as.BitAndWith.impl.Op.specific_fn.loc18
+// CHECK:STDOUT:   %impl.elem0.loc18_22: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc18_22: <bound method> = bound_method %int_1.loc18, %impl.elem0.loc18_22 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc18_22: init %Cpp.long = call %bound_method.loc18_22(%int_1.loc18) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc18_22.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc18_22 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc18_22.2: %Cpp.long = converted %int_1.loc18, %.loc18_22.1 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.call.loc18: init %Cpp.long = call %bound_method.loc18_20.4(%a.ref.loc18_18, %.loc18_22.2)
+// CHECK:STDOUT:   %a.ref.loc18_25: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc18: <specific function> = specific_function %AssertSameType.ref.loc18, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc18_20.6: %Cpp.long = value_of_initializer %Cpp.long.as.BitAndWith.impl.Op.call.loc18
+// CHECK:STDOUT:   %.loc18_20.7: %Cpp.long = converted %Cpp.long.as.BitAndWith.impl.Op.call.loc18, %.loc18_20.6
+// CHECK:STDOUT:   %AssertSameType.call.loc18: init %empty_tuple.type = call %AssertSameType.specific_fn.loc18(%.loc18_20.7, %a.ref.loc18_25)
+// CHECK:STDOUT:   %AssertSameType.ref.loc19: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %a.ref.loc19_18: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %int_1.loc19: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %impl.elem1.loc19: %.a50 = impl_witness_access constants.%BitOrWith.impl_witness.39f, element1 [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.664d1e.2]
+// CHECK:STDOUT:   %bound_method.loc19_20.1: <bound method> = bound_method %a.ref.loc19_18, %impl.elem1.loc19
+// CHECK:STDOUT:   %ImplicitAs.facet.loc19_20.1: %ImplicitAs.type.819 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.2ce) [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %.loc19_20.1: %ImplicitAs.type.819 = converted Core.IntLiteral, %ImplicitAs.facet.loc19_20.1 [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %ImplicitAs.facet.loc19_20.2: %ImplicitAs.type.819 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.2ce) [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %.loc19_20.2: %ImplicitAs.type.819 = converted Core.IntLiteral, %ImplicitAs.facet.loc19_20.2 [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %specific_fn.loc19: <specific function> = specific_function %impl.elem1.loc19, @Cpp.long.as.BitOrWith.impl.Op.1(constants.%ImplicitAs.facet.eed) [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.specific_fn.be7132.1]
+// CHECK:STDOUT:   %bound_method.loc19_20.2: <bound method> = bound_method %a.ref.loc19_18, %specific_fn.loc19
+// CHECK:STDOUT:   %.loc19_20.3: %Cpp.long.as.BitOrWith.impl.Op.type.331453.1 = specific_constant imports.%Core.Op.788, @Cpp.long.as.BitOrWith.impl.fc3(constants.%ImplicitAs.facet.eed) [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.664d1e.1]
+// CHECK:STDOUT:   %Op.ref.loc19: %Cpp.long.as.BitOrWith.impl.Op.type.331453.1 = name_ref Op, %.loc19_20.3 [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.664d1e.1]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.bound.loc19: <bound method> = bound_method %a.ref.loc19_18, %Op.ref.loc19
+// CHECK:STDOUT:   %impl.elem0.loc19_20: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc19_20.3: <bound method> = bound_method %int_1.loc19, %impl.elem0.loc19_20 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc19_20: init %Cpp.long = call %bound_method.loc19_20.3(%int_1.loc19) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc19_20.4: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc19_20 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc19_20.5: %Cpp.long = converted %int_1.loc19, %.loc19_20.4 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.specific_fn.loc19: <specific function> = specific_function %Op.ref.loc19, @Cpp.long.as.BitOrWith.impl.Op.2(constants.%ImplicitAs.facet.eed) [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.specific_fn.be7132.2]
+// CHECK:STDOUT:   %bound_method.loc19_20.4: <bound method> = bound_method %a.ref.loc19_18, %Cpp.long.as.BitOrWith.impl.Op.specific_fn.loc19
+// CHECK:STDOUT:   %impl.elem0.loc19_22: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc19_22: <bound method> = bound_method %int_1.loc19, %impl.elem0.loc19_22 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc19_22: init %Cpp.long = call %bound_method.loc19_22(%int_1.loc19) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc19_22.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc19_22 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc19_22.2: %Cpp.long = converted %int_1.loc19, %.loc19_22.1 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.call.loc19: init %Cpp.long = call %bound_method.loc19_20.4(%a.ref.loc19_18, %.loc19_22.2)
+// CHECK:STDOUT:   %a.ref.loc19_25: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc19: <specific function> = specific_function %AssertSameType.ref.loc19, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc19_20.6: %Cpp.long = value_of_initializer %Cpp.long.as.BitOrWith.impl.Op.call.loc19
+// CHECK:STDOUT:   %.loc19_20.7: %Cpp.long = converted %Cpp.long.as.BitOrWith.impl.Op.call.loc19, %.loc19_20.6
+// CHECK:STDOUT:   %AssertSameType.call.loc19: init %empty_tuple.type = call %AssertSameType.specific_fn.loc19(%.loc19_20.7, %a.ref.loc19_25)
+// CHECK:STDOUT:   %AssertSameType.ref.loc20: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %a.ref.loc20_18: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %int_1.loc20: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %impl.elem1.loc20: %.8e7 = impl_witness_access constants.%BitXorWith.impl_witness.001, element1 [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.5b3046.2]
+// CHECK:STDOUT:   %bound_method.loc20_20.1: <bound method> = bound_method %a.ref.loc20_18, %impl.elem1.loc20
+// CHECK:STDOUT:   %ImplicitAs.facet.loc20_20.1: %ImplicitAs.type.819 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.2ce) [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %.loc20_20.1: %ImplicitAs.type.819 = converted Core.IntLiteral, %ImplicitAs.facet.loc20_20.1 [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %ImplicitAs.facet.loc20_20.2: %ImplicitAs.type.819 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.2ce) [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %.loc20_20.2: %ImplicitAs.type.819 = converted Core.IntLiteral, %ImplicitAs.facet.loc20_20.2 [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %specific_fn.loc20: <specific function> = specific_function %impl.elem1.loc20, @Cpp.long.as.BitXorWith.impl.Op.1(constants.%ImplicitAs.facet.eed) [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.specific_fn.f1c9e6.1]
+// CHECK:STDOUT:   %bound_method.loc20_20.2: <bound method> = bound_method %a.ref.loc20_18, %specific_fn.loc20
+// CHECK:STDOUT:   %.loc20_20.3: %Cpp.long.as.BitXorWith.impl.Op.type.97a9a2.1 = specific_constant imports.%Core.Op.c61, @Cpp.long.as.BitXorWith.impl.732(constants.%ImplicitAs.facet.eed) [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.5b3046.1]
+// CHECK:STDOUT:   %Op.ref.loc20: %Cpp.long.as.BitXorWith.impl.Op.type.97a9a2.1 = name_ref Op, %.loc20_20.3 [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.5b3046.1]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.bound.loc20: <bound method> = bound_method %a.ref.loc20_18, %Op.ref.loc20
+// CHECK:STDOUT:   %impl.elem0.loc20_20: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc20_20.3: <bound method> = bound_method %int_1.loc20, %impl.elem0.loc20_20 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc20_20: init %Cpp.long = call %bound_method.loc20_20.3(%int_1.loc20) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc20_20.4: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc20_20 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc20_20.5: %Cpp.long = converted %int_1.loc20, %.loc20_20.4 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.specific_fn.loc20: <specific function> = specific_function %Op.ref.loc20, @Cpp.long.as.BitXorWith.impl.Op.2(constants.%ImplicitAs.facet.eed) [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.specific_fn.f1c9e6.2]
+// CHECK:STDOUT:   %bound_method.loc20_20.4: <bound method> = bound_method %a.ref.loc20_18, %Cpp.long.as.BitXorWith.impl.Op.specific_fn.loc20
+// CHECK:STDOUT:   %impl.elem0.loc20_22: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc20_22: <bound method> = bound_method %int_1.loc20, %impl.elem0.loc20_22 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc20_22: init %Cpp.long = call %bound_method.loc20_22(%int_1.loc20) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc20_22.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc20_22 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc20_22.2: %Cpp.long = converted %int_1.loc20, %.loc20_22.1 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.call.loc20: init %Cpp.long = call %bound_method.loc20_20.4(%a.ref.loc20_18, %.loc20_22.2)
+// CHECK:STDOUT:   %a.ref.loc20_25: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc20: <specific function> = specific_function %AssertSameType.ref.loc20, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc20_20.6: %Cpp.long = value_of_initializer %Cpp.long.as.BitXorWith.impl.Op.call.loc20
+// CHECK:STDOUT:   %.loc20_20.7: %Cpp.long = converted %Cpp.long.as.BitXorWith.impl.Op.call.loc20, %.loc20_20.6
+// CHECK:STDOUT:   %AssertSameType.call.loc20: init %empty_tuple.type = call %AssertSameType.specific_fn.loc20(%.loc20_20.7, %a.ref.loc20_25)
+// CHECK:STDOUT:   %AssertSameType.ref.loc21: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %a.ref.loc21_18: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %int_1.loc21: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %impl.elem1.loc21: %.0a1 = impl_witness_access constants.%LeftShiftWith.impl_witness.a1c, element1 [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.f145d8.2]
+// CHECK:STDOUT:   %bound_method.loc21_20.1: <bound method> = bound_method %a.ref.loc21_18, %impl.elem1.loc21
+// CHECK:STDOUT:   %ImplicitAs.facet.loc21_20.1: %ImplicitAs.type.819 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.2ce) [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %.loc21_20.1: %ImplicitAs.type.819 = converted Core.IntLiteral, %ImplicitAs.facet.loc21_20.1 [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %ImplicitAs.facet.loc21_20.2: %ImplicitAs.type.819 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.2ce) [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %.loc21_20.2: %ImplicitAs.type.819 = converted Core.IntLiteral, %ImplicitAs.facet.loc21_20.2 [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %specific_fn.loc21: <specific function> = specific_function %impl.elem1.loc21, @Cpp.long.as.LeftShiftWith.impl.Op.1(constants.%ImplicitAs.facet.eed) [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.abc44e.1]
+// CHECK:STDOUT:   %bound_method.loc21_20.2: <bound method> = bound_method %a.ref.loc21_18, %specific_fn.loc21
+// CHECK:STDOUT:   %.loc21_20.3: %Cpp.long.as.LeftShiftWith.impl.Op.type.d93838.1 = specific_constant imports.%Core.Op.2db, @Cpp.long.as.LeftShiftWith.impl.272(constants.%ImplicitAs.facet.eed) [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.f145d8.1]
+// CHECK:STDOUT:   %Op.ref.loc21: %Cpp.long.as.LeftShiftWith.impl.Op.type.d93838.1 = name_ref Op, %.loc21_20.3 [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.f145d8.1]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.bound.loc21: <bound method> = bound_method %a.ref.loc21_18, %Op.ref.loc21
+// CHECK:STDOUT:   %impl.elem0.loc21_20: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc21_20.3: <bound method> = bound_method %int_1.loc21, %impl.elem0.loc21_20 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc21_20: init %Cpp.long = call %bound_method.loc21_20.3(%int_1.loc21) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc21_20.4: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc21_20 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc21_20.5: %Cpp.long = converted %int_1.loc21, %.loc21_20.4 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.loc21: <specific function> = specific_function %Op.ref.loc21, @Cpp.long.as.LeftShiftWith.impl.Op.2(constants.%ImplicitAs.facet.eed) [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.abc44e.2]
+// CHECK:STDOUT:   %bound_method.loc21_20.4: <bound method> = bound_method %a.ref.loc21_18, %Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.loc21
+// CHECK:STDOUT:   %impl.elem0.loc21_23: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc21_23: <bound method> = bound_method %int_1.loc21, %impl.elem0.loc21_23 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc21_23: init %Cpp.long = call %bound_method.loc21_23(%int_1.loc21) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc21_23.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc21_23 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc21_23.2: %Cpp.long = converted %int_1.loc21, %.loc21_23.1 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.call.loc21: init %Cpp.long = call %bound_method.loc21_20.4(%a.ref.loc21_18, %.loc21_23.2)
+// CHECK:STDOUT:   %a.ref.loc21_26: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc21: <specific function> = specific_function %AssertSameType.ref.loc21, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc21_20.6: %Cpp.long = value_of_initializer %Cpp.long.as.LeftShiftWith.impl.Op.call.loc21
+// CHECK:STDOUT:   %.loc21_20.7: %Cpp.long = converted %Cpp.long.as.LeftShiftWith.impl.Op.call.loc21, %.loc21_20.6
+// CHECK:STDOUT:   %AssertSameType.call.loc21: init %empty_tuple.type = call %AssertSameType.specific_fn.loc21(%.loc21_20.7, %a.ref.loc21_26)
+// CHECK:STDOUT:   %AssertSameType.ref.loc22: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %a.ref.loc22_18: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %int_1.loc22: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %impl.elem1.loc22: %.fab = impl_witness_access constants.%RightShiftWith.impl_witness.5fe, element1 [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.249bc3.2]
+// CHECK:STDOUT:   %bound_method.loc22_20.1: <bound method> = bound_method %a.ref.loc22_18, %impl.elem1.loc22
+// CHECK:STDOUT:   %ImplicitAs.facet.loc22_20.1: %ImplicitAs.type.819 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.2ce) [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %.loc22_20.1: %ImplicitAs.type.819 = converted Core.IntLiteral, %ImplicitAs.facet.loc22_20.1 [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %ImplicitAs.facet.loc22_20.2: %ImplicitAs.type.819 = facet_value Core.IntLiteral, (constants.%ImplicitAs.impl_witness.2ce) [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %.loc22_20.2: %ImplicitAs.type.819 = converted Core.IntLiteral, %ImplicitAs.facet.loc22_20.2 [concrete = constants.%ImplicitAs.facet.eed]
+// CHECK:STDOUT:   %specific_fn.loc22: <specific function> = specific_function %impl.elem1.loc22, @Cpp.long.as.RightShiftWith.impl.Op.1(constants.%ImplicitAs.facet.eed) [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.specific_fn.c6040e.1]
+// CHECK:STDOUT:   %bound_method.loc22_20.2: <bound method> = bound_method %a.ref.loc22_18, %specific_fn.loc22
+// CHECK:STDOUT:   %.loc22_20.3: %Cpp.long.as.RightShiftWith.impl.Op.type.a6dc1c.1 = specific_constant imports.%Core.Op.330, @Cpp.long.as.RightShiftWith.impl.3d6(constants.%ImplicitAs.facet.eed) [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.249bc3.1]
+// CHECK:STDOUT:   %Op.ref.loc22: %Cpp.long.as.RightShiftWith.impl.Op.type.a6dc1c.1 = name_ref Op, %.loc22_20.3 [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.249bc3.1]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.bound.loc22: <bound method> = bound_method %a.ref.loc22_18, %Op.ref.loc22
+// CHECK:STDOUT:   %impl.elem0.loc22_20: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc22_20.3: <bound method> = bound_method %int_1.loc22, %impl.elem0.loc22_20 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc22_20: init %Cpp.long = call %bound_method.loc22_20.3(%int_1.loc22) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc22_20.4: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc22_20 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc22_20.5: %Cpp.long = converted %int_1.loc22, %.loc22_20.4 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.specific_fn.loc22: <specific function> = specific_function %Op.ref.loc22, @Cpp.long.as.RightShiftWith.impl.Op.2(constants.%ImplicitAs.facet.eed) [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.specific_fn.c6040e.2]
+// CHECK:STDOUT:   %bound_method.loc22_20.4: <bound method> = bound_method %a.ref.loc22_18, %Cpp.long.as.RightShiftWith.impl.Op.specific_fn.loc22
+// CHECK:STDOUT:   %impl.elem0.loc22_23: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc22_23: <bound method> = bound_method %int_1.loc22, %impl.elem0.loc22_23 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc22_23: init %Cpp.long = call %bound_method.loc22_23(%int_1.loc22) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc22_23.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc22_23 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc22_23.2: %Cpp.long = converted %int_1.loc22, %.loc22_23.1 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.call.loc22: init %Cpp.long = call %bound_method.loc22_20.4(%a.ref.loc22_18, %.loc22_23.2)
+// CHECK:STDOUT:   %a.ref.loc22_26: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc22: <specific function> = specific_function %AssertSameType.ref.loc22, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc22_20.6: %Cpp.long = value_of_initializer %Cpp.long.as.RightShiftWith.impl.Op.call.loc22
+// CHECK:STDOUT:   %.loc22_20.7: %Cpp.long = converted %Cpp.long.as.RightShiftWith.impl.Op.call.loc22, %.loc22_20.6
+// CHECK:STDOUT:   %AssertSameType.call.loc22: init %empty_tuple.type = call %AssertSameType.specific_fn.loc22(%.loc22_20.7, %a.ref.loc22_26)
+// CHECK:STDOUT:   name_binding_decl {
+// CHECK:STDOUT:     %b.patt: %pattern_type.7ce = value_binding_pattern b [concrete]
+// CHECK:STDOUT:   }
+// CHECK:STDOUT:   %int_1.loc24: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %.loc24_10: type = splice_block %i32.loc24 [concrete = constants.%i32] {
+// CHECK:STDOUT:     %int_32.loc24: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:     %i32.loc24: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   }
+// CHECK:STDOUT:   %impl.elem0.loc24: %.863 = impl_witness_access constants.%ImplicitAs.impl_witness.6bc, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5]
+// CHECK:STDOUT:   %bound_method.loc24_16.1: <bound method> = bound_method %int_1.loc24, %impl.elem0.loc24 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.215]
+// CHECK:STDOUT:   %specific_fn.loc24: <specific function> = specific_function %impl.elem0.loc24, @Core.IntLiteral.as.ImplicitAs.impl.Convert.2(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc24_16.2: <bound method> = bound_method %int_1.loc24, %specific_fn.loc24 [concrete = constants.%bound_method.38b]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc24: init %i32 = call %bound_method.loc24_16.2(%int_1.loc24) [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc24_16.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc24 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc24_16.2: %i32 = converted %int_1.loc24, %.loc24_16.1 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %b: %i32 = value_binding b, %.loc24_16.2
+// CHECK:STDOUT:   %AssertSameType.ref.loc25: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %a.ref.loc25_18: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %b.ref.loc25: %i32 = name_ref b, %b
+// CHECK:STDOUT:   %impl.elem1.loc25: %.bdd = impl_witness_access constants.%BitAndWith.impl_witness.fe3, element1 [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.a9ac84.2]
+// CHECK:STDOUT:   %bound_method.loc25_20.1: <bound method> = bound_method %a.ref.loc25_18, %impl.elem1.loc25
+// CHECK:STDOUT:   %ImplicitAs.facet.loc25_20.1: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc25_20.1: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc25_20.1 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %ImplicitAs.facet.loc25_20.2: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc25_20.2: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc25_20.2 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %specific_fn.loc25: <specific function> = specific_function %impl.elem1.loc25, @Cpp.long.as.BitAndWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.specific_fn.dcd797.1]
+// CHECK:STDOUT:   %bound_method.loc25_20.2: <bound method> = bound_method %a.ref.loc25_18, %specific_fn.loc25
+// CHECK:STDOUT:   %.loc25_20.3: %Cpp.long.as.BitAndWith.impl.Op.type.202298.1 = specific_constant imports.%Core.Op.c8a, @Cpp.long.as.BitAndWith.impl.334(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.a9ac84.1]
+// CHECK:STDOUT:   %Op.ref.loc25: %Cpp.long.as.BitAndWith.impl.Op.type.202298.1 = name_ref Op, %.loc25_20.3 [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.a9ac84.1]
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.bound.loc25: <bound method> = bound_method %a.ref.loc25_18, %Op.ref.loc25
+// CHECK:STDOUT:   %impl.elem0.loc25_20: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc25_20.3: <bound method> = bound_method %b.ref.loc25, %impl.elem0.loc25_20
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc25_20: init %Cpp.long = call %bound_method.loc25_20.3(%b.ref.loc25)
+// CHECK:STDOUT:   %.loc25_20.4: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc25_20
+// CHECK:STDOUT:   %.loc25_20.5: %Cpp.long = converted %b.ref.loc25, %.loc25_20.4
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.specific_fn.loc25: <specific function> = specific_function %Op.ref.loc25, @Cpp.long.as.BitAndWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitAndWith.impl.Op.specific_fn.dcd797.2]
+// CHECK:STDOUT:   %bound_method.loc25_20.4: <bound method> = bound_method %a.ref.loc25_18, %Cpp.long.as.BitAndWith.impl.Op.specific_fn.loc25
+// CHECK:STDOUT:   %impl.elem0.loc25_22: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc25_22: <bound method> = bound_method %b.ref.loc25, %impl.elem0.loc25_22
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc25_22: init %Cpp.long = call %bound_method.loc25_22(%b.ref.loc25)
+// CHECK:STDOUT:   %.loc25_22.1: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc25_22
+// CHECK:STDOUT:   %.loc25_22.2: %Cpp.long = converted %b.ref.loc25, %.loc25_22.1
+// CHECK:STDOUT:   %Cpp.long.as.BitAndWith.impl.Op.call.loc25: init %Cpp.long = call %bound_method.loc25_20.4(%a.ref.loc25_18, %.loc25_22.2)
+// CHECK:STDOUT:   %a.ref.loc25_25: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc25: <specific function> = specific_function %AssertSameType.ref.loc25, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc25_20.6: %Cpp.long = value_of_initializer %Cpp.long.as.BitAndWith.impl.Op.call.loc25
+// CHECK:STDOUT:   %.loc25_20.7: %Cpp.long = converted %Cpp.long.as.BitAndWith.impl.Op.call.loc25, %.loc25_20.6
+// CHECK:STDOUT:   %AssertSameType.call.loc25: init %empty_tuple.type = call %AssertSameType.specific_fn.loc25(%.loc25_20.7, %a.ref.loc25_25)
+// CHECK:STDOUT:   %AssertSameType.ref.loc26: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %a.ref.loc26_18: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %b.ref.loc26: %i32 = name_ref b, %b
+// CHECK:STDOUT:   %impl.elem1.loc26: %.faa = impl_witness_access constants.%BitOrWith.impl_witness.b0c, element1 [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.d9c870.2]
+// CHECK:STDOUT:   %bound_method.loc26_20.1: <bound method> = bound_method %a.ref.loc26_18, %impl.elem1.loc26
+// CHECK:STDOUT:   %ImplicitAs.facet.loc26_20.1: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc26_20.1: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc26_20.1 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %ImplicitAs.facet.loc26_20.2: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc26_20.2: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc26_20.2 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %specific_fn.loc26: <specific function> = specific_function %impl.elem1.loc26, @Cpp.long.as.BitOrWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.specific_fn.03ab4b.1]
+// CHECK:STDOUT:   %bound_method.loc26_20.2: <bound method> = bound_method %a.ref.loc26_18, %specific_fn.loc26
+// CHECK:STDOUT:   %.loc26_20.3: %Cpp.long.as.BitOrWith.impl.Op.type.dccbc7.1 = specific_constant imports.%Core.Op.788, @Cpp.long.as.BitOrWith.impl.fc3(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.d9c870.1]
+// CHECK:STDOUT:   %Op.ref.loc26: %Cpp.long.as.BitOrWith.impl.Op.type.dccbc7.1 = name_ref Op, %.loc26_20.3 [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.d9c870.1]
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.bound.loc26: <bound method> = bound_method %a.ref.loc26_18, %Op.ref.loc26
+// CHECK:STDOUT:   %impl.elem0.loc26_20: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc26_20.3: <bound method> = bound_method %b.ref.loc26, %impl.elem0.loc26_20
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc26_20: init %Cpp.long = call %bound_method.loc26_20.3(%b.ref.loc26)
+// CHECK:STDOUT:   %.loc26_20.4: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc26_20
+// CHECK:STDOUT:   %.loc26_20.5: %Cpp.long = converted %b.ref.loc26, %.loc26_20.4
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.specific_fn.loc26: <specific function> = specific_function %Op.ref.loc26, @Cpp.long.as.BitOrWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitOrWith.impl.Op.specific_fn.03ab4b.2]
+// CHECK:STDOUT:   %bound_method.loc26_20.4: <bound method> = bound_method %a.ref.loc26_18, %Cpp.long.as.BitOrWith.impl.Op.specific_fn.loc26
+// CHECK:STDOUT:   %impl.elem0.loc26_22: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc26_22: <bound method> = bound_method %b.ref.loc26, %impl.elem0.loc26_22
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc26_22: init %Cpp.long = call %bound_method.loc26_22(%b.ref.loc26)
+// CHECK:STDOUT:   %.loc26_22.1: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc26_22
+// CHECK:STDOUT:   %.loc26_22.2: %Cpp.long = converted %b.ref.loc26, %.loc26_22.1
+// CHECK:STDOUT:   %Cpp.long.as.BitOrWith.impl.Op.call.loc26: init %Cpp.long = call %bound_method.loc26_20.4(%a.ref.loc26_18, %.loc26_22.2)
+// CHECK:STDOUT:   %a.ref.loc26_25: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc26: <specific function> = specific_function %AssertSameType.ref.loc26, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc26_20.6: %Cpp.long = value_of_initializer %Cpp.long.as.BitOrWith.impl.Op.call.loc26
+// CHECK:STDOUT:   %.loc26_20.7: %Cpp.long = converted %Cpp.long.as.BitOrWith.impl.Op.call.loc26, %.loc26_20.6
+// CHECK:STDOUT:   %AssertSameType.call.loc26: init %empty_tuple.type = call %AssertSameType.specific_fn.loc26(%.loc26_20.7, %a.ref.loc26_25)
+// CHECK:STDOUT:   %AssertSameType.ref.loc27: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %a.ref.loc27_18: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %b.ref.loc27: %i32 = name_ref b, %b
+// CHECK:STDOUT:   %impl.elem1.loc27: %.f2f = impl_witness_access constants.%BitXorWith.impl_witness.8a0, element1 [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.48a9f4.2]
+// CHECK:STDOUT:   %bound_method.loc27_20.1: <bound method> = bound_method %a.ref.loc27_18, %impl.elem1.loc27
+// CHECK:STDOUT:   %ImplicitAs.facet.loc27_20.1: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc27_20.1: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc27_20.1 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %ImplicitAs.facet.loc27_20.2: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc27_20.2: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc27_20.2 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %specific_fn.loc27: <specific function> = specific_function %impl.elem1.loc27, @Cpp.long.as.BitXorWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.specific_fn.4ec2b6.1]
+// CHECK:STDOUT:   %bound_method.loc27_20.2: <bound method> = bound_method %a.ref.loc27_18, %specific_fn.loc27
+// CHECK:STDOUT:   %.loc27_20.3: %Cpp.long.as.BitXorWith.impl.Op.type.7fe348.1 = specific_constant imports.%Core.Op.c61, @Cpp.long.as.BitXorWith.impl.732(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.48a9f4.1]
+// CHECK:STDOUT:   %Op.ref.loc27: %Cpp.long.as.BitXorWith.impl.Op.type.7fe348.1 = name_ref Op, %.loc27_20.3 [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.48a9f4.1]
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.bound.loc27: <bound method> = bound_method %a.ref.loc27_18, %Op.ref.loc27
+// CHECK:STDOUT:   %impl.elem0.loc27_20: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc27_20.3: <bound method> = bound_method %b.ref.loc27, %impl.elem0.loc27_20
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc27_20: init %Cpp.long = call %bound_method.loc27_20.3(%b.ref.loc27)
+// CHECK:STDOUT:   %.loc27_20.4: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc27_20
+// CHECK:STDOUT:   %.loc27_20.5: %Cpp.long = converted %b.ref.loc27, %.loc27_20.4
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.specific_fn.loc27: <specific function> = specific_function %Op.ref.loc27, @Cpp.long.as.BitXorWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.BitXorWith.impl.Op.specific_fn.4ec2b6.2]
+// CHECK:STDOUT:   %bound_method.loc27_20.4: <bound method> = bound_method %a.ref.loc27_18, %Cpp.long.as.BitXorWith.impl.Op.specific_fn.loc27
+// CHECK:STDOUT:   %impl.elem0.loc27_22: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc27_22: <bound method> = bound_method %b.ref.loc27, %impl.elem0.loc27_22
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc27_22: init %Cpp.long = call %bound_method.loc27_22(%b.ref.loc27)
+// CHECK:STDOUT:   %.loc27_22.1: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc27_22
+// CHECK:STDOUT:   %.loc27_22.2: %Cpp.long = converted %b.ref.loc27, %.loc27_22.1
+// CHECK:STDOUT:   %Cpp.long.as.BitXorWith.impl.Op.call.loc27: init %Cpp.long = call %bound_method.loc27_20.4(%a.ref.loc27_18, %.loc27_22.2)
+// CHECK:STDOUT:   %a.ref.loc27_25: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc27: <specific function> = specific_function %AssertSameType.ref.loc27, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc27_20.6: %Cpp.long = value_of_initializer %Cpp.long.as.BitXorWith.impl.Op.call.loc27
+// CHECK:STDOUT:   %.loc27_20.7: %Cpp.long = converted %Cpp.long.as.BitXorWith.impl.Op.call.loc27, %.loc27_20.6
+// CHECK:STDOUT:   %AssertSameType.call.loc27: init %empty_tuple.type = call %AssertSameType.specific_fn.loc27(%.loc27_20.7, %a.ref.loc27_25)
+// CHECK:STDOUT:   %AssertSameType.ref.loc28: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %a.ref.loc28_18: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %b.ref.loc28: %i32 = name_ref b, %b
+// CHECK:STDOUT:   %impl.elem1.loc28: %.2be = impl_witness_access constants.%LeftShiftWith.impl_witness.982, element1 [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.9105a1.2]
+// CHECK:STDOUT:   %bound_method.loc28_20.1: <bound method> = bound_method %a.ref.loc28_18, %impl.elem1.loc28
+// CHECK:STDOUT:   %ImplicitAs.facet.loc28_20.1: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc28_20.1: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc28_20.1 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %ImplicitAs.facet.loc28_20.2: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc28_20.2: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc28_20.2 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %specific_fn.loc28: <specific function> = specific_function %impl.elem1.loc28, @Cpp.long.as.LeftShiftWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.1fda18.1]
+// CHECK:STDOUT:   %bound_method.loc28_20.2: <bound method> = bound_method %a.ref.loc28_18, %specific_fn.loc28
+// CHECK:STDOUT:   %.loc28_20.3: %Cpp.long.as.LeftShiftWith.impl.Op.type.1d34cb.1 = specific_constant imports.%Core.Op.2db, @Cpp.long.as.LeftShiftWith.impl.272(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.9105a1.1]
+// CHECK:STDOUT:   %Op.ref.loc28: %Cpp.long.as.LeftShiftWith.impl.Op.type.1d34cb.1 = name_ref Op, %.loc28_20.3 [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.9105a1.1]
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.bound.loc28: <bound method> = bound_method %a.ref.loc28_18, %Op.ref.loc28
+// CHECK:STDOUT:   %impl.elem0.loc28_20: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc28_20.3: <bound method> = bound_method %b.ref.loc28, %impl.elem0.loc28_20
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc28_20: init %Cpp.long = call %bound_method.loc28_20.3(%b.ref.loc28)
+// CHECK:STDOUT:   %.loc28_20.4: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc28_20
+// CHECK:STDOUT:   %.loc28_20.5: %Cpp.long = converted %b.ref.loc28, %.loc28_20.4
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.loc28: <specific function> = specific_function %Op.ref.loc28, @Cpp.long.as.LeftShiftWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.1fda18.2]
+// CHECK:STDOUT:   %bound_method.loc28_20.4: <bound method> = bound_method %a.ref.loc28_18, %Cpp.long.as.LeftShiftWith.impl.Op.specific_fn.loc28
+// CHECK:STDOUT:   %impl.elem0.loc28_23: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc28_23: <bound method> = bound_method %b.ref.loc28, %impl.elem0.loc28_23
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc28_23: init %Cpp.long = call %bound_method.loc28_23(%b.ref.loc28)
+// CHECK:STDOUT:   %.loc28_23.1: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc28_23
+// CHECK:STDOUT:   %.loc28_23.2: %Cpp.long = converted %b.ref.loc28, %.loc28_23.1
+// CHECK:STDOUT:   %Cpp.long.as.LeftShiftWith.impl.Op.call.loc28: init %Cpp.long = call %bound_method.loc28_20.4(%a.ref.loc28_18, %.loc28_23.2)
+// CHECK:STDOUT:   %a.ref.loc28_26: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc28: <specific function> = specific_function %AssertSameType.ref.loc28, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc28_20.6: %Cpp.long = value_of_initializer %Cpp.long.as.LeftShiftWith.impl.Op.call.loc28
+// CHECK:STDOUT:   %.loc28_20.7: %Cpp.long = converted %Cpp.long.as.LeftShiftWith.impl.Op.call.loc28, %.loc28_20.6
+// CHECK:STDOUT:   %AssertSameType.call.loc28: init %empty_tuple.type = call %AssertSameType.specific_fn.loc28(%.loc28_20.7, %a.ref.loc28_26)
+// CHECK:STDOUT:   %AssertSameType.ref.loc29: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %a.ref.loc29_18: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %b.ref.loc29: %i32 = name_ref b, %b
+// CHECK:STDOUT:   %impl.elem1.loc29: %.dac = impl_witness_access constants.%RightShiftWith.impl_witness.ccb, element1 [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.50edfc.2]
+// CHECK:STDOUT:   %bound_method.loc29_20.1: <bound method> = bound_method %a.ref.loc29_18, %impl.elem1.loc29
+// CHECK:STDOUT:   %ImplicitAs.facet.loc29_20.1: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc29_20.1: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc29_20.1 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %ImplicitAs.facet.loc29_20.2: %ImplicitAs.type.819 = facet_value constants.%i32, (constants.%ImplicitAs.impl_witness.0fc) [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %.loc29_20.2: %ImplicitAs.type.819 = converted constants.%i32, %ImplicitAs.facet.loc29_20.2 [concrete = constants.%ImplicitAs.facet.174]
+// CHECK:STDOUT:   %specific_fn.loc29: <specific function> = specific_function %impl.elem1.loc29, @Cpp.long.as.RightShiftWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.specific_fn.012106.1]
+// CHECK:STDOUT:   %bound_method.loc29_20.2: <bound method> = bound_method %a.ref.loc29_18, %specific_fn.loc29
+// CHECK:STDOUT:   %.loc29_20.3: %Cpp.long.as.RightShiftWith.impl.Op.type.e35e06.1 = specific_constant imports.%Core.Op.330, @Cpp.long.as.RightShiftWith.impl.3d6(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.50edfc.1]
+// CHECK:STDOUT:   %Op.ref.loc29: %Cpp.long.as.RightShiftWith.impl.Op.type.e35e06.1 = name_ref Op, %.loc29_20.3 [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.50edfc.1]
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.bound.loc29: <bound method> = bound_method %a.ref.loc29_18, %Op.ref.loc29
+// CHECK:STDOUT:   %impl.elem0.loc29_20: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc29_20.3: <bound method> = bound_method %b.ref.loc29, %impl.elem0.loc29_20
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc29_20: init %Cpp.long = call %bound_method.loc29_20.3(%b.ref.loc29)
+// CHECK:STDOUT:   %.loc29_20.4: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc29_20
+// CHECK:STDOUT:   %.loc29_20.5: %Cpp.long = converted %b.ref.loc29, %.loc29_20.4
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.specific_fn.loc29: <specific function> = specific_function %Op.ref.loc29, @Cpp.long.as.RightShiftWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%Cpp.long.as.RightShiftWith.impl.Op.specific_fn.012106.2]
+// CHECK:STDOUT:   %bound_method.loc29_20.4: <bound method> = bound_method %a.ref.loc29_18, %Cpp.long.as.RightShiftWith.impl.Op.specific_fn.loc29
+// CHECK:STDOUT:   %impl.elem0.loc29_23: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc29_23: <bound method> = bound_method %b.ref.loc29, %impl.elem0.loc29_23
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc29_23: init %Cpp.long = call %bound_method.loc29_23(%b.ref.loc29)
+// CHECK:STDOUT:   %.loc29_23.1: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc29_23
+// CHECK:STDOUT:   %.loc29_23.2: %Cpp.long = converted %b.ref.loc29, %.loc29_23.1
+// CHECK:STDOUT:   %Cpp.long.as.RightShiftWith.impl.Op.call.loc29: init %Cpp.long = call %bound_method.loc29_20.4(%a.ref.loc29_18, %.loc29_23.2)
+// CHECK:STDOUT:   %a.ref.loc29_26: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc29: <specific function> = specific_function %AssertSameType.ref.loc29, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc29_20.6: %Cpp.long = value_of_initializer %Cpp.long.as.RightShiftWith.impl.Op.call.loc29
+// CHECK:STDOUT:   %.loc29_20.7: %Cpp.long = converted %Cpp.long.as.RightShiftWith.impl.Op.call.loc29, %.loc29_20.6
+// CHECK:STDOUT:   %AssertSameType.call.loc29: init %empty_tuple.type = call %AssertSameType.specific_fn.loc29(%.loc29_20.7, %a.ref.loc29_26)
+// CHECK:STDOUT:   <elided>
+// CHECK:STDOUT: }
+// CHECK:STDOUT:
+// CHECK:STDOUT: --- bitwise_heterogeneous_long_right_side.carbon
+// CHECK:STDOUT:
+// CHECK:STDOUT: constants {
+// CHECK:STDOUT:   %AssertSameType.type: type = fn_type @AssertSameType [concrete]
+// CHECK:STDOUT:   %empty_tuple.type: type = tuple_type () [concrete]
+// CHECK:STDOUT:   %AssertSameType: %AssertSameType.type = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long: type = class_type @Long32 [concrete]
+// 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.68c: type = pattern_type %Cpp.long [concrete]
+// CHECK:STDOUT:   %int_1.5b8: Core.IntLiteral = int_value 1 [concrete]
+// CHECK:STDOUT:   %ImplicitAs.type.819: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long)> [concrete]
+// CHECK:STDOUT:   %ImplicitAs.Convert.type.4c2: type = fn_type @ImplicitAs.Convert, @ImplicitAs(%Cpp.long) [concrete]
+// CHECK:STDOUT:   %ImplicitAs.impl_witness.2ce: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.903 [concrete]
+// CHECK:STDOUT:   %ImplicitAs.facet.eed: %ImplicitAs.type.819 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.2ce) [concrete]
+// CHECK:STDOUT:   %.dad: type = fn_type_with_self_type %ImplicitAs.Convert.type.4c2, %ImplicitAs.facet.eed [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.b38: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.1 [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.b38 = struct_value () [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8: <bound method> = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a [concrete]
+// CHECK:STDOUT:   %int_1.5a4: %Cpp.long = int_value 1 [concrete]
+// CHECK:STDOUT:   %As.type.047: type = facet_type <@As, @As(%i32)> [concrete]
+// CHECK:STDOUT:   %As.Convert.type.99b: type = fn_type @As.Convert, @As(%i32) [concrete]
+// CHECK:STDOUT:   %To.fe9: Core.IntLiteral = symbolic_binding To, 0 [symbolic]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.type.09e: type = fn_type @Core.IntLiteral.as.As.impl.Convert, @Core.IntLiteral.as.As.impl(%To.fe9) [symbolic]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.dbe: %Core.IntLiteral.as.As.impl.Convert.type.09e = struct_value () [symbolic]
+// CHECK:STDOUT:   %As.impl_witness.ab6: <witness> = impl_witness imports.%As.impl_witness_table.9fc, @Core.IntLiteral.as.As.impl(%int_32) [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.type.8ec: type = fn_type @Core.IntLiteral.as.As.impl.Convert, @Core.IntLiteral.as.As.impl(%int_32) [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.29b: %Core.IntLiteral.as.As.impl.Convert.type.8ec = struct_value () [concrete]
+// CHECK:STDOUT:   %As.facet: %As.type.047 = facet_value Core.IntLiteral, (%As.impl_witness.ab6) [concrete]
+// CHECK:STDOUT:   %.97a: type = fn_type_with_self_type %As.Convert.type.99b, %As.facet [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.bound: <bound method> = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.29b [concrete]
+// CHECK:STDOUT:   %pattern_type.7ce: type = pattern_type %i32 [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.As.impl.Convert.29b, @Core.IntLiteral.as.As.impl.Convert(%int_32) [concrete]
+// CHECK:STDOUT:   %bound_method.290: <bound method> = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.specific_fn [concrete]
+// CHECK:STDOUT:   %int_1.5d2: %i32 = int_value 1 [concrete]
+// CHECK:STDOUT:   %BitAndWith.type.0b5: type = facet_type <@BitAndWith, @BitAndWith(%Cpp.long)> [concrete]
+// CHECK:STDOUT:   %BitAndWith.Op.type.e13: type = fn_type @BitAndWith.Op, @BitAndWith(%Cpp.long) [concrete]
+// CHECK:STDOUT:   %T.57d: %ImplicitAs.type.819 = symbolic_binding T, 0 [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.b0dfa2.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.1, @T.binding.as_type.as.BitAndWith.impl.2e8(%T.57d) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.ae0f20.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.b0dfa2.1 = struct_value () [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.b0dfa2.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.2, @T.binding.as_type.as.BitAndWith.impl.2e8(%T.57d) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.ae0f20.2: %T.binding.as_type.as.BitAndWith.impl.Op.type.b0dfa2.2 = struct_value () [symbolic]
+// CHECK:STDOUT:   %ImplicitAs.type.e8c: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.2, @Core.IntLiteral.as.ImplicitAs.impl.b2d(%To.fe9) [symbolic]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6 = struct_value () [symbolic]
+// CHECK:STDOUT:   %ImplicitAs.impl_witness.0fc: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.5ad [concrete]
+// CHECK:STDOUT:   %ImplicitAs.facet.174: %ImplicitAs.type.819 = facet_value %i32, (%ImplicitAs.impl_witness.0fc) [concrete]
+// CHECK:STDOUT:   %BitAndWith.impl_witness.a02: <witness> = impl_witness imports.%BitAndWith.impl_witness_table.1c0, @T.binding.as_type.as.BitAndWith.impl.2e8(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.f24b53.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.2, @T.binding.as_type.as.BitAndWith.impl.2e8(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.3425be.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.f24b53.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.f24b53.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.1, @T.binding.as_type.as.BitAndWith.impl.2e8(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.3425be.2: %T.binding.as_type.as.BitAndWith.impl.Op.type.f24b53.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %BitAndWith.facet.2fb: %BitAndWith.type.0b5 = facet_value %i32, (%BitAndWith.impl_witness.a02) [concrete]
+// CHECK:STDOUT:   %.419: type = fn_type_with_self_type %BitAndWith.Op.type.e13, %BitAndWith.facet.2fb [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound.7e10ec.1: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.BitAndWith.impl.Op.3425be.2 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.f76196.1: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.3425be.2, @T.binding.as_type.as.BitAndWith.impl.Op.1(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %bound_method.61cff7.1: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.f76196.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound.7e10ec.2: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.BitAndWith.impl.Op.3425be.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.f76196.2: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.3425be.1, @T.binding.as_type.as.BitAndWith.impl.Op.2(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %bound_method.61cff7.2: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.f76196.2 [concrete]
+// CHECK:STDOUT:   %.c45: type = fn_type_with_self_type %ImplicitAs.Convert.type.4c2, %ImplicitAs.facet.174 [concrete]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.type: type = fn_type @i32.as.ImplicitAs.impl.Convert [concrete]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert: %i32.as.ImplicitAs.impl.Convert.type = struct_value () [concrete]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.bound: <bound method> = bound_method %int_1.5d2, %i32.as.ImplicitAs.impl.Convert [concrete]
+// CHECK:STDOUT:   %AssertSameType.specific_fn: <specific function> = specific_function %AssertSameType, @AssertSameType(%Cpp.long) [concrete]
+// CHECK:STDOUT:   %BitOrWith.type.b22: type = facet_type <@BitOrWith, @BitOrWith(%Cpp.long)> [concrete]
+// CHECK:STDOUT:   %BitOrWith.Op.type.a1b: type = fn_type @BitOrWith.Op, @BitOrWith(%Cpp.long) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.f4a873.1: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.1, @T.binding.as_type.as.BitOrWith.impl.e42(%T.57d) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.53d67c.1: %T.binding.as_type.as.BitOrWith.impl.Op.type.f4a873.1 = struct_value () [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.f4a873.2: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.2, @T.binding.as_type.as.BitOrWith.impl.e42(%T.57d) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.53d67c.2: %T.binding.as_type.as.BitOrWith.impl.Op.type.f4a873.2 = struct_value () [symbolic]
+// CHECK:STDOUT:   %BitOrWith.impl_witness.d0a: <witness> = impl_witness imports.%BitOrWith.impl_witness_table.946, @T.binding.as_type.as.BitOrWith.impl.e42(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.c5501d.1: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.2, @T.binding.as_type.as.BitOrWith.impl.e42(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.c9149f.1: %T.binding.as_type.as.BitOrWith.impl.Op.type.c5501d.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.c5501d.2: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.1, @T.binding.as_type.as.BitOrWith.impl.e42(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.c9149f.2: %T.binding.as_type.as.BitOrWith.impl.Op.type.c5501d.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %BitOrWith.facet.ea7: %BitOrWith.type.b22 = facet_value %i32, (%BitOrWith.impl_witness.d0a) [concrete]
+// CHECK:STDOUT:   %.2e2: type = fn_type_with_self_type %BitOrWith.Op.type.a1b, %BitOrWith.facet.ea7 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bound.3218ee.1: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.BitOrWith.impl.Op.c9149f.2 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.fbab3e.1: <specific function> = specific_function %T.binding.as_type.as.BitOrWith.impl.Op.c9149f.2, @T.binding.as_type.as.BitOrWith.impl.Op.1(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %bound_method.37450b.1: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.fbab3e.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bound.3218ee.2: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.BitOrWith.impl.Op.c9149f.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.fbab3e.2: <specific function> = specific_function %T.binding.as_type.as.BitOrWith.impl.Op.c9149f.1, @T.binding.as_type.as.BitOrWith.impl.Op.2(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %bound_method.37450b.2: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.fbab3e.2 [concrete]
+// CHECK:STDOUT:   %BitXorWith.type.87f: type = facet_type <@BitXorWith, @BitXorWith(%Cpp.long)> [concrete]
+// CHECK:STDOUT:   %BitXorWith.Op.type.5cf: type = fn_type @BitXorWith.Op, @BitXorWith(%Cpp.long) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.fdc423.1: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.1, @T.binding.as_type.as.BitXorWith.impl.878(%T.57d) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.659e6b.1: %T.binding.as_type.as.BitXorWith.impl.Op.type.fdc423.1 = struct_value () [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.fdc423.2: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.2, @T.binding.as_type.as.BitXorWith.impl.878(%T.57d) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.659e6b.2: %T.binding.as_type.as.BitXorWith.impl.Op.type.fdc423.2 = struct_value () [symbolic]
+// CHECK:STDOUT:   %BitXorWith.impl_witness.e8e: <witness> = impl_witness imports.%BitXorWith.impl_witness_table.39f, @T.binding.as_type.as.BitXorWith.impl.878(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.42bd3d.1: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.2, @T.binding.as_type.as.BitXorWith.impl.878(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.c338c8.1: %T.binding.as_type.as.BitXorWith.impl.Op.type.42bd3d.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.42bd3d.2: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.1, @T.binding.as_type.as.BitXorWith.impl.878(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.c338c8.2: %T.binding.as_type.as.BitXorWith.impl.Op.type.42bd3d.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %BitXorWith.facet.19e: %BitXorWith.type.87f = facet_value %i32, (%BitXorWith.impl_witness.e8e) [concrete]
+// CHECK:STDOUT:   %.24d: type = fn_type_with_self_type %BitXorWith.Op.type.5cf, %BitXorWith.facet.19e [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.bound.9a6c35.1: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.BitXorWith.impl.Op.c338c8.2 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.125c34.1: <specific function> = specific_function %T.binding.as_type.as.BitXorWith.impl.Op.c338c8.2, @T.binding.as_type.as.BitXorWith.impl.Op.1(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %bound_method.6a6348.1: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.125c34.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.bound.9a6c35.2: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.BitXorWith.impl.Op.c338c8.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.125c34.2: <specific function> = specific_function %T.binding.as_type.as.BitXorWith.impl.Op.c338c8.1, @T.binding.as_type.as.BitXorWith.impl.Op.2(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %bound_method.6a6348.2: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.125c34.2 [concrete]
+// CHECK:STDOUT:   %LeftShiftWith.type.3f9: type = facet_type <@LeftShiftWith, @LeftShiftWith(%Cpp.long)> [concrete]
+// CHECK:STDOUT:   %LeftShiftWith.Op.type.224: type = fn_type @LeftShiftWith.Op, @LeftShiftWith(%Cpp.long) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.278104.1: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.1, @T.binding.as_type.as.LeftShiftWith.impl.b71(%T.57d) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.fdafb7.1: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.278104.1 = struct_value () [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.278104.2: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.2, @T.binding.as_type.as.LeftShiftWith.impl.b71(%T.57d) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.fdafb7.2: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.278104.2 = struct_value () [symbolic]
+// CHECK:STDOUT:   %LeftShiftWith.impl_witness.fb3: <witness> = impl_witness imports.%LeftShiftWith.impl_witness_table.ce8, @T.binding.as_type.as.LeftShiftWith.impl.b71(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.ab52f6.1: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.2, @T.binding.as_type.as.LeftShiftWith.impl.b71(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.c3e103.1: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.ab52f6.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.ab52f6.2: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.1, @T.binding.as_type.as.LeftShiftWith.impl.b71(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.c3e103.2: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.ab52f6.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %LeftShiftWith.facet.702: %LeftShiftWith.type.3f9 = facet_value %i32, (%LeftShiftWith.impl_witness.fb3) [concrete]
+// CHECK:STDOUT:   %.509: type = fn_type_with_self_type %LeftShiftWith.Op.type.224, %LeftShiftWith.facet.702 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.bound.30239c.1: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.LeftShiftWith.impl.Op.c3e103.2 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.547c25.1: <specific function> = specific_function %T.binding.as_type.as.LeftShiftWith.impl.Op.c3e103.2, @T.binding.as_type.as.LeftShiftWith.impl.Op.1(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %bound_method.137506.1: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.547c25.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.bound.30239c.2: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.LeftShiftWith.impl.Op.c3e103.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.547c25.2: <specific function> = specific_function %T.binding.as_type.as.LeftShiftWith.impl.Op.c3e103.1, @T.binding.as_type.as.LeftShiftWith.impl.Op.2(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %bound_method.137506.2: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.547c25.2 [concrete]
+// CHECK:STDOUT:   %RightShiftWith.type.995: type = facet_type <@RightShiftWith, @RightShiftWith(%Cpp.long)> [concrete]
+// CHECK:STDOUT:   %RightShiftWith.Op.type.fd9: type = fn_type @RightShiftWith.Op, @RightShiftWith(%Cpp.long) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.8ef087.1: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.1, @T.binding.as_type.as.RightShiftWith.impl.28b(%T.57d) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.3f8b9d.1: %T.binding.as_type.as.RightShiftWith.impl.Op.type.8ef087.1 = struct_value () [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.8ef087.2: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.2, @T.binding.as_type.as.RightShiftWith.impl.28b(%T.57d) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.3f8b9d.2: %T.binding.as_type.as.RightShiftWith.impl.Op.type.8ef087.2 = struct_value () [symbolic]
+// CHECK:STDOUT:   %RightShiftWith.impl_witness.7d0: <witness> = impl_witness imports.%RightShiftWith.impl_witness_table.050, @T.binding.as_type.as.RightShiftWith.impl.28b(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.2fe33f.1: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.2, @T.binding.as_type.as.RightShiftWith.impl.28b(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.44dea2.1: %T.binding.as_type.as.RightShiftWith.impl.Op.type.2fe33f.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.2fe33f.2: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.1, @T.binding.as_type.as.RightShiftWith.impl.28b(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.44dea2.2: %T.binding.as_type.as.RightShiftWith.impl.Op.type.2fe33f.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %RightShiftWith.facet.4bd: %RightShiftWith.type.995 = facet_value %i32, (%RightShiftWith.impl_witness.7d0) [concrete]
+// CHECK:STDOUT:   %.9db: type = fn_type_with_self_type %RightShiftWith.Op.type.fd9, %RightShiftWith.facet.4bd [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.bound.08a5b1.1: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.RightShiftWith.impl.Op.44dea2.2 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.888028.1: <specific function> = specific_function %T.binding.as_type.as.RightShiftWith.impl.Op.44dea2.2, @T.binding.as_type.as.RightShiftWith.impl.Op.1(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %bound_method.4658fd.1: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.888028.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.bound.08a5b1.2: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.RightShiftWith.impl.Op.44dea2.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.888028.2: <specific function> = specific_function %T.binding.as_type.as.RightShiftWith.impl.Op.44dea2.1, @T.binding.as_type.as.RightShiftWith.impl.Op.2(%ImplicitAs.facet.174) [concrete]
+// CHECK:STDOUT:   %bound_method.4658fd.2: <bound method> = bound_method %int_1.5d2, %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.888028.2 [concrete]
+// CHECK:STDOUT:   %BitAndWith.impl_witness.11b: <witness> = impl_witness imports.%BitAndWith.impl_witness_table.1c0, @T.binding.as_type.as.BitAndWith.impl.2e8(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.371e74.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.2, @T.binding.as_type.as.BitAndWith.impl.2e8(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.657411.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.371e74.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.371e74.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.1, @T.binding.as_type.as.BitAndWith.impl.2e8(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.657411.2: %T.binding.as_type.as.BitAndWith.impl.Op.type.371e74.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %BitAndWith.facet.c73: %BitAndWith.type.0b5 = facet_value Core.IntLiteral, (%BitAndWith.impl_witness.11b) [concrete]
+// CHECK:STDOUT:   %.e0e: type = fn_type_with_self_type %BitAndWith.Op.type.e13, %BitAndWith.facet.c73 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound.62b211.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitAndWith.impl.Op.657411.2 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.76feb8.1: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.657411.2, @T.binding.as_type.as.BitAndWith.impl.Op.1(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %bound_method.284eaa.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.76feb8.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound.62b211.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitAndWith.impl.Op.657411.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.76feb8.2: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.657411.1, @T.binding.as_type.as.BitAndWith.impl.Op.2(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %bound_method.284eaa.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.76feb8.2 [concrete]
+// CHECK:STDOUT:   %BitOrWith.impl_witness.f0b: <witness> = impl_witness imports.%BitOrWith.impl_witness_table.946, @T.binding.as_type.as.BitOrWith.impl.e42(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.6b5126.1: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.2, @T.binding.as_type.as.BitOrWith.impl.e42(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.552722.1: %T.binding.as_type.as.BitOrWith.impl.Op.type.6b5126.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.6b5126.2: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.1, @T.binding.as_type.as.BitOrWith.impl.e42(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.552722.2: %T.binding.as_type.as.BitOrWith.impl.Op.type.6b5126.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %BitOrWith.facet.c28: %BitOrWith.type.b22 = facet_value Core.IntLiteral, (%BitOrWith.impl_witness.f0b) [concrete]
+// CHECK:STDOUT:   %.9f3: type = fn_type_with_self_type %BitOrWith.Op.type.a1b, %BitOrWith.facet.c28 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bound.0cc7c8.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitOrWith.impl.Op.552722.2 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.f5e026.1: <specific function> = specific_function %T.binding.as_type.as.BitOrWith.impl.Op.552722.2, @T.binding.as_type.as.BitOrWith.impl.Op.1(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %bound_method.ba7a8e.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.f5e026.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bound.0cc7c8.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitOrWith.impl.Op.552722.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.f5e026.2: <specific function> = specific_function %T.binding.as_type.as.BitOrWith.impl.Op.552722.1, @T.binding.as_type.as.BitOrWith.impl.Op.2(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %bound_method.ba7a8e.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.f5e026.2 [concrete]
+// CHECK:STDOUT:   %BitXorWith.impl_witness.a75: <witness> = impl_witness imports.%BitXorWith.impl_witness_table.39f, @T.binding.as_type.as.BitXorWith.impl.878(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.c3bcf6.1: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.2, @T.binding.as_type.as.BitXorWith.impl.878(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.c5dfcc.1: %T.binding.as_type.as.BitXorWith.impl.Op.type.c3bcf6.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.c3bcf6.2: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.1, @T.binding.as_type.as.BitXorWith.impl.878(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.c5dfcc.2: %T.binding.as_type.as.BitXorWith.impl.Op.type.c3bcf6.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %BitXorWith.facet.b31: %BitXorWith.type.87f = facet_value Core.IntLiteral, (%BitXorWith.impl_witness.a75) [concrete]
+// CHECK:STDOUT:   %.498: type = fn_type_with_self_type %BitXorWith.Op.type.5cf, %BitXorWith.facet.b31 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.bound.8d10e0.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitXorWith.impl.Op.c5dfcc.2 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.9cdf74.1: <specific function> = specific_function %T.binding.as_type.as.BitXorWith.impl.Op.c5dfcc.2, @T.binding.as_type.as.BitXorWith.impl.Op.1(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %bound_method.91b787.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.9cdf74.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.bound.8d10e0.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitXorWith.impl.Op.c5dfcc.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.9cdf74.2: <specific function> = specific_function %T.binding.as_type.as.BitXorWith.impl.Op.c5dfcc.1, @T.binding.as_type.as.BitXorWith.impl.Op.2(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %bound_method.91b787.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.9cdf74.2 [concrete]
+// CHECK:STDOUT:   %LeftShiftWith.impl_witness.ad3: <witness> = impl_witness imports.%LeftShiftWith.impl_witness_table.ce8, @T.binding.as_type.as.LeftShiftWith.impl.b71(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.0d7d28.1: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.2, @T.binding.as_type.as.LeftShiftWith.impl.b71(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.f0c7aa.1: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.0d7d28.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.0d7d28.2: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.1, @T.binding.as_type.as.LeftShiftWith.impl.b71(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.f0c7aa.2: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.0d7d28.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %LeftShiftWith.facet.65b: %LeftShiftWith.type.3f9 = facet_value Core.IntLiteral, (%LeftShiftWith.impl_witness.ad3) [concrete]
+// CHECK:STDOUT:   %.468: type = fn_type_with_self_type %LeftShiftWith.Op.type.224, %LeftShiftWith.facet.65b [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.bound.df9a08.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.LeftShiftWith.impl.Op.f0c7aa.2 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.18a0d8.1: <specific function> = specific_function %T.binding.as_type.as.LeftShiftWith.impl.Op.f0c7aa.2, @T.binding.as_type.as.LeftShiftWith.impl.Op.1(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %bound_method.05d3ad.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.18a0d8.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.bound.df9a08.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.LeftShiftWith.impl.Op.f0c7aa.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.18a0d8.2: <specific function> = specific_function %T.binding.as_type.as.LeftShiftWith.impl.Op.f0c7aa.1, @T.binding.as_type.as.LeftShiftWith.impl.Op.2(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %bound_method.05d3ad.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.18a0d8.2 [concrete]
+// CHECK:STDOUT:   %RightShiftWith.impl_witness.269: <witness> = impl_witness imports.%RightShiftWith.impl_witness_table.050, @T.binding.as_type.as.RightShiftWith.impl.28b(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.b3fbc2.1: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.2, @T.binding.as_type.as.RightShiftWith.impl.28b(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.79036b.1: %T.binding.as_type.as.RightShiftWith.impl.Op.type.b3fbc2.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.b3fbc2.2: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.1, @T.binding.as_type.as.RightShiftWith.impl.28b(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.79036b.2: %T.binding.as_type.as.RightShiftWith.impl.Op.type.b3fbc2.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %RightShiftWith.facet.62c: %RightShiftWith.type.995 = facet_value Core.IntLiteral, (%RightShiftWith.impl_witness.269) [concrete]
+// CHECK:STDOUT:   %.dd3: type = fn_type_with_self_type %RightShiftWith.Op.type.fd9, %RightShiftWith.facet.62c [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.bound.2baaff.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.RightShiftWith.impl.Op.79036b.2 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.fe68a8.1: <specific function> = specific_function %T.binding.as_type.as.RightShiftWith.impl.Op.79036b.2, @T.binding.as_type.as.RightShiftWith.impl.Op.1(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %bound_method.fb5cd1.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.fe68a8.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.bound.2baaff.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.RightShiftWith.impl.Op.79036b.1 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.fe68a8.2: <specific function> = specific_function %T.binding.as_type.as.RightShiftWith.impl.Op.79036b.1, @T.binding.as_type.as.RightShiftWith.impl.Op.2(%ImplicitAs.facet.eed) [concrete]
+// CHECK:STDOUT:   %bound_method.fb5cd1.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.fe68a8.2 [concrete]
+// CHECK:STDOUT:   %ImplicitAs.Convert.type.1b6: type = fn_type @ImplicitAs.Convert, @ImplicitAs(%i32) [concrete]
+// CHECK:STDOUT:   %ImplicitAs.impl_witness.6bc: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.74f, @Core.IntLiteral.as.ImplicitAs.impl.b2d(%int_32) [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e0d: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.2, @Core.IntLiteral.as.ImplicitAs.impl.b2d(%int_32) [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e0d = struct_value () [concrete]
+// CHECK:STDOUT:   %ImplicitAs.facet.b94: %ImplicitAs.type.e8c = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.6bc) [concrete]
+// CHECK:STDOUT:   %.863: type = fn_type_with_self_type %ImplicitAs.Convert.type.1b6, %ImplicitAs.facet.b94 [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.215: <bound method> = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5 [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5, @Core.IntLiteral.as.ImplicitAs.impl.Convert.2(%int_32) [concrete]
+// CHECK:STDOUT:   %bound_method.38b: <bound method> = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete]
+// CHECK:STDOUT: }
+// CHECK:STDOUT:
+// CHECK:STDOUT: imports {
+// CHECK:STDOUT:   %Cpp: <namespace> = namespace file.%Cpp.import_cpp, [concrete] {
+// CHECK:STDOUT:     .long = constants.%Cpp.long
+// CHECK:STDOUT:     import Cpp//...
+// CHECK:STDOUT:   }
+// CHECK:STDOUT:   %Core.import_ref.b8a: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.b38 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %ImplicitAs.impl_witness_table.903 = impl_witness_table (%Core.import_ref.b8a), @Core.IntLiteral.as.ImplicitAs.impl.052 [concrete]
+// CHECK:STDOUT:   %Core.import_ref.ca0: @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert.type (%Core.IntLiteral.as.As.impl.Convert.type.09e) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert (constants.%Core.IntLiteral.as.As.impl.Convert.dbe)]
+// CHECK:STDOUT:   %As.impl_witness_table.9fc = impl_witness_table (%Core.import_ref.ca0), @Core.IntLiteral.as.As.impl [concrete]
+// CHECK:STDOUT:   %Core.import_ref.cb912f.2 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.eb9: @T.binding.as_type.as.BitAndWith.impl.2e8.%T.binding.as_type.as.BitAndWith.impl.Op.type.2 (%T.binding.as_type.as.BitAndWith.impl.Op.type.b0dfa2.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @T.binding.as_type.as.BitAndWith.impl.2e8.%T.binding.as_type.as.BitAndWith.impl.Op.2 (constants.%T.binding.as_type.as.BitAndWith.impl.Op.ae0f20.1)]
+// CHECK:STDOUT:   %BitAndWith.impl_witness_table.1c0 = impl_witness_table (%Core.import_ref.cb912f.2, %Core.import_ref.eb9), @T.binding.as_type.as.BitAndWith.impl.2e8 [concrete]
+// CHECK:STDOUT:   %Core.Op.36a: @T.binding.as_type.as.BitAndWith.impl.2e8.%T.binding.as_type.as.BitAndWith.impl.Op.type.1 (%T.binding.as_type.as.BitAndWith.impl.Op.type.b0dfa2.2) = import_ref Core//prelude/types/cpp/int, Op, loaded [symbolic = @T.binding.as_type.as.BitAndWith.impl.2e8.%T.binding.as_type.as.BitAndWith.impl.Op.1 (constants.%T.binding.as_type.as.BitAndWith.impl.Op.ae0f20.2)]
+// CHECK:STDOUT:   %Core.import_ref.42d: @Core.IntLiteral.as.ImplicitAs.impl.b2d.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.b2d.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2)]
+// CHECK:STDOUT:   %ImplicitAs.impl_witness_table.74f = impl_witness_table (%Core.import_ref.42d), @Core.IntLiteral.as.ImplicitAs.impl.b2d [concrete]
+// CHECK:STDOUT:   %Core.import_ref.4fa: %i32.as.ImplicitAs.impl.Convert.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %ImplicitAs.impl_witness_table.5ad = impl_witness_table (%Core.import_ref.4fa), @i32.as.ImplicitAs.impl [concrete]
+// CHECK:STDOUT:   %Core.import_ref.cb912f.4 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.d41: @T.binding.as_type.as.BitOrWith.impl.e42.%T.binding.as_type.as.BitOrWith.impl.Op.type.2 (%T.binding.as_type.as.BitOrWith.impl.Op.type.f4a873.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @T.binding.as_type.as.BitOrWith.impl.e42.%T.binding.as_type.as.BitOrWith.impl.Op.2 (constants.%T.binding.as_type.as.BitOrWith.impl.Op.53d67c.1)]
+// CHECK:STDOUT:   %BitOrWith.impl_witness_table.946 = impl_witness_table (%Core.import_ref.cb912f.4, %Core.import_ref.d41), @T.binding.as_type.as.BitOrWith.impl.e42 [concrete]
+// CHECK:STDOUT:   %Core.Op.e80: @T.binding.as_type.as.BitOrWith.impl.e42.%T.binding.as_type.as.BitOrWith.impl.Op.type.1 (%T.binding.as_type.as.BitOrWith.impl.Op.type.f4a873.2) = import_ref Core//prelude/types/cpp/int, Op, loaded [symbolic = @T.binding.as_type.as.BitOrWith.impl.e42.%T.binding.as_type.as.BitOrWith.impl.Op.1 (constants.%T.binding.as_type.as.BitOrWith.impl.Op.53d67c.2)]
+// CHECK:STDOUT:   %Core.import_ref.cb912f.6 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.fef: @T.binding.as_type.as.BitXorWith.impl.878.%T.binding.as_type.as.BitXorWith.impl.Op.type.2 (%T.binding.as_type.as.BitXorWith.impl.Op.type.fdc423.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @T.binding.as_type.as.BitXorWith.impl.878.%T.binding.as_type.as.BitXorWith.impl.Op.2 (constants.%T.binding.as_type.as.BitXorWith.impl.Op.659e6b.1)]
+// CHECK:STDOUT:   %BitXorWith.impl_witness_table.39f = impl_witness_table (%Core.import_ref.cb912f.6, %Core.import_ref.fef), @T.binding.as_type.as.BitXorWith.impl.878 [concrete]
+// CHECK:STDOUT:   %Core.Op.a2d: @T.binding.as_type.as.BitXorWith.impl.878.%T.binding.as_type.as.BitXorWith.impl.Op.type.1 (%T.binding.as_type.as.BitXorWith.impl.Op.type.fdc423.2) = import_ref Core//prelude/types/cpp/int, Op, loaded [symbolic = @T.binding.as_type.as.BitXorWith.impl.878.%T.binding.as_type.as.BitXorWith.impl.Op.1 (constants.%T.binding.as_type.as.BitXorWith.impl.Op.659e6b.2)]
+// CHECK:STDOUT:   %Core.import_ref.cb912f.8 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.4cb: @T.binding.as_type.as.LeftShiftWith.impl.b71.%T.binding.as_type.as.LeftShiftWith.impl.Op.type.2 (%T.binding.as_type.as.LeftShiftWith.impl.Op.type.278104.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @T.binding.as_type.as.LeftShiftWith.impl.b71.%T.binding.as_type.as.LeftShiftWith.impl.Op.2 (constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.fdafb7.1)]
+// CHECK:STDOUT:   %LeftShiftWith.impl_witness_table.ce8 = impl_witness_table (%Core.import_ref.cb912f.8, %Core.import_ref.4cb), @T.binding.as_type.as.LeftShiftWith.impl.b71 [concrete]
+// CHECK:STDOUT:   %Core.Op.79e: @T.binding.as_type.as.LeftShiftWith.impl.b71.%T.binding.as_type.as.LeftShiftWith.impl.Op.type.1 (%T.binding.as_type.as.LeftShiftWith.impl.Op.type.278104.2) = import_ref Core//prelude/types/cpp/int, Op, loaded [symbolic = @T.binding.as_type.as.LeftShiftWith.impl.b71.%T.binding.as_type.as.LeftShiftWith.impl.Op.1 (constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.fdafb7.2)]
+// CHECK:STDOUT:   %Core.import_ref.cb912f.10 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.172: @T.binding.as_type.as.RightShiftWith.impl.28b.%T.binding.as_type.as.RightShiftWith.impl.Op.type.2 (%T.binding.as_type.as.RightShiftWith.impl.Op.type.8ef087.1) = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [symbolic = @T.binding.as_type.as.RightShiftWith.impl.28b.%T.binding.as_type.as.RightShiftWith.impl.Op.2 (constants.%T.binding.as_type.as.RightShiftWith.impl.Op.3f8b9d.1)]
+// CHECK:STDOUT:   %RightShiftWith.impl_witness_table.050 = impl_witness_table (%Core.import_ref.cb912f.10, %Core.import_ref.172), @T.binding.as_type.as.RightShiftWith.impl.28b [concrete]
+// CHECK:STDOUT:   %Core.Op.f2f: @T.binding.as_type.as.RightShiftWith.impl.28b.%T.binding.as_type.as.RightShiftWith.impl.Op.type.1 (%T.binding.as_type.as.RightShiftWith.impl.Op.type.8ef087.2) = import_ref Core//prelude/types/cpp/int, Op, loaded [symbolic = @T.binding.as_type.as.RightShiftWith.impl.28b.%T.binding.as_type.as.RightShiftWith.impl.Op.1 (constants.%T.binding.as_type.as.RightShiftWith.impl.Op.3f8b9d.2)]
+// CHECK:STDOUT: }
+// CHECK:STDOUT:
+// CHECK:STDOUT: fn @BitWiseHeterogeneousLongRightSide() {
+// CHECK:STDOUT: !entry:
+// CHECK:STDOUT:   name_binding_decl {
+// CHECK:STDOUT:     %a.patt: %pattern_type.68c = value_binding_pattern a [concrete]
+// CHECK:STDOUT:   }
+// CHECK:STDOUT:   %int_1.loc10: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %.loc10_13: type = splice_block %long.ref [concrete = constants.%Cpp.long] {
+// CHECK:STDOUT:     %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
+// CHECK:STDOUT:     %long.ref: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long]
+// CHECK:STDOUT:   }
+// CHECK:STDOUT:   %impl.elem0.loc10: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc10: <bound method> = bound_method %int_1.loc10, %impl.elem0.loc10 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc10: init %Cpp.long = call %bound_method.loc10(%int_1.loc10) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc10_21.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc10 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc10_21.2: %Cpp.long = converted %int_1.loc10, %.loc10_21.1 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %a: %Cpp.long = value_binding a, %.loc10_21.2
+// CHECK:STDOUT:   %AssertSameType.ref.loc12: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %int_1.loc12: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:   %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   %impl.elem0.loc12_21.1: %.97a = impl_witness_access constants.%As.impl_witness.ab6, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.29b]
+// CHECK:STDOUT:   %bound_method.loc12_21.1: <bound method> = bound_method %int_1.loc12, %impl.elem0.loc12_21.1 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound]
+// CHECK:STDOUT:   %specific_fn.loc12_21: <specific function> = specific_function %impl.elem0.loc12_21.1, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc12_21.2: <bound method> = bound_method %int_1.loc12, %specific_fn.loc12_21 [concrete = constants.%bound_method.290]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.call.loc12: init %i32 = call %bound_method.loc12_21.2(%int_1.loc12) [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc12_21.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call.loc12 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc12_21.2: %i32 = converted %int_1.loc12, %.loc12_21.1 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %a.ref.loc12_31: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc12: %.419 = impl_witness_access constants.%BitAndWith.impl_witness.a02, element1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.3425be.2]
+// CHECK:STDOUT:   %bound_method.loc12_29.1: <bound method> = bound_method %.loc12_21.2, %impl.elem1.loc12 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.bound.7e10ec.1]
+// CHECK:STDOUT:   %specific_fn.loc12_29: <specific function> = specific_function %impl.elem1.loc12, @T.binding.as_type.as.BitAndWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.f76196.1]
+// CHECK:STDOUT:   %bound_method.loc12_29.2: <bound method> = bound_method %.loc12_21.2, %specific_fn.loc12_29 [concrete = constants.%bound_method.61cff7.1]
+// CHECK:STDOUT:   %.loc12_29.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.f24b53.1 = specific_constant imports.%Core.Op.36a, @T.binding.as_type.as.BitAndWith.impl.2e8(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.3425be.1]
+// CHECK:STDOUT:   %Op.ref.loc12: %T.binding.as_type.as.BitAndWith.impl.Op.type.f24b53.1 = name_ref Op, %.loc12_29.1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.3425be.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound.loc12: <bound method> = bound_method %.loc12_21.2, %Op.ref.loc12 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.bound.7e10ec.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.loc12: <specific function> = specific_function %Op.ref.loc12, @T.binding.as_type.as.BitAndWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.f76196.2]
+// CHECK:STDOUT:   %bound_method.loc12_29.3: <bound method> = bound_method %.loc12_21.2, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.loc12 [concrete = constants.%bound_method.61cff7.2]
+// CHECK:STDOUT:   %impl.elem0.loc12_21.2: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc12_21.3: <bound method> = bound_method %.loc12_21.2, %impl.elem0.loc12_21.2 [concrete = constants.%i32.as.ImplicitAs.impl.Convert.bound]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc12: init %Cpp.long = call %bound_method.loc12_21.3(%.loc12_21.2) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc12_21.3: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc12 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc12_21.4: %Cpp.long = converted %.loc12_21.2, %.loc12_21.3 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.call.loc12: init %Cpp.long = call %bound_method.loc12_29.3(%.loc12_21.4, %a.ref.loc12_31)
+// CHECK:STDOUT:   %a.ref.loc12_34: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc12: <specific function> = specific_function %AssertSameType.ref.loc12, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc12_29.2: %Cpp.long = value_of_initializer %T.binding.as_type.as.BitAndWith.impl.Op.call.loc12
+// CHECK:STDOUT:   %.loc12_29.3: %Cpp.long = converted %T.binding.as_type.as.BitAndWith.impl.Op.call.loc12, %.loc12_29.2
+// CHECK:STDOUT:   %AssertSameType.call.loc12: init %empty_tuple.type = call %AssertSameType.specific_fn.loc12(%.loc12_29.3, %a.ref.loc12_34)
+// CHECK:STDOUT:   %AssertSameType.ref.loc13: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %int_1.loc13: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:   %i32.loc13: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   %impl.elem0.loc13_21.1: %.97a = impl_witness_access constants.%As.impl_witness.ab6, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.29b]
+// CHECK:STDOUT:   %bound_method.loc13_21.1: <bound method> = bound_method %int_1.loc13, %impl.elem0.loc13_21.1 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound]
+// CHECK:STDOUT:   %specific_fn.loc13_21: <specific function> = specific_function %impl.elem0.loc13_21.1, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc13_21.2: <bound method> = bound_method %int_1.loc13, %specific_fn.loc13_21 [concrete = constants.%bound_method.290]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.call.loc13: init %i32 = call %bound_method.loc13_21.2(%int_1.loc13) [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc13_21.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call.loc13 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc13_21.2: %i32 = converted %int_1.loc13, %.loc13_21.1 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %a.ref.loc13_31: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc13: %.2e2 = impl_witness_access constants.%BitOrWith.impl_witness.d0a, element1 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.c9149f.2]
+// CHECK:STDOUT:   %bound_method.loc13_29.1: <bound method> = bound_method %.loc13_21.2, %impl.elem1.loc13 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.bound.3218ee.1]
+// CHECK:STDOUT:   %specific_fn.loc13_29: <specific function> = specific_function %impl.elem1.loc13, @T.binding.as_type.as.BitOrWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.fbab3e.1]
+// CHECK:STDOUT:   %bound_method.loc13_29.2: <bound method> = bound_method %.loc13_21.2, %specific_fn.loc13_29 [concrete = constants.%bound_method.37450b.1]
+// CHECK:STDOUT:   %.loc13_29.1: %T.binding.as_type.as.BitOrWith.impl.Op.type.c5501d.1 = specific_constant imports.%Core.Op.e80, @T.binding.as_type.as.BitOrWith.impl.e42(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.c9149f.1]
+// CHECK:STDOUT:   %Op.ref.loc13: %T.binding.as_type.as.BitOrWith.impl.Op.type.c5501d.1 = name_ref Op, %.loc13_29.1 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.c9149f.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bound.loc13: <bound method> = bound_method %.loc13_21.2, %Op.ref.loc13 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.bound.3218ee.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.loc13: <specific function> = specific_function %Op.ref.loc13, @T.binding.as_type.as.BitOrWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.fbab3e.2]
+// CHECK:STDOUT:   %bound_method.loc13_29.3: <bound method> = bound_method %.loc13_21.2, %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.loc13 [concrete = constants.%bound_method.37450b.2]
+// CHECK:STDOUT:   %impl.elem0.loc13_21.2: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc13_21.3: <bound method> = bound_method %.loc13_21.2, %impl.elem0.loc13_21.2 [concrete = constants.%i32.as.ImplicitAs.impl.Convert.bound]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc13: init %Cpp.long = call %bound_method.loc13_21.3(%.loc13_21.2) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc13_21.3: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc13 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc13_21.4: %Cpp.long = converted %.loc13_21.2, %.loc13_21.3 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.call.loc13: init %Cpp.long = call %bound_method.loc13_29.3(%.loc13_21.4, %a.ref.loc13_31)
+// CHECK:STDOUT:   %a.ref.loc13_34: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc13: <specific function> = specific_function %AssertSameType.ref.loc13, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc13_29.2: %Cpp.long = value_of_initializer %T.binding.as_type.as.BitOrWith.impl.Op.call.loc13
+// CHECK:STDOUT:   %.loc13_29.3: %Cpp.long = converted %T.binding.as_type.as.BitOrWith.impl.Op.call.loc13, %.loc13_29.2
+// CHECK:STDOUT:   %AssertSameType.call.loc13: init %empty_tuple.type = call %AssertSameType.specific_fn.loc13(%.loc13_29.3, %a.ref.loc13_34)
+// CHECK:STDOUT:   %AssertSameType.ref.loc14: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %int_1.loc14: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %int_32.loc14: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:   %i32.loc14: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   %impl.elem0.loc14_21.1: %.97a = impl_witness_access constants.%As.impl_witness.ab6, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.29b]
+// CHECK:STDOUT:   %bound_method.loc14_21.1: <bound method> = bound_method %int_1.loc14, %impl.elem0.loc14_21.1 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound]
+// CHECK:STDOUT:   %specific_fn.loc14_21: <specific function> = specific_function %impl.elem0.loc14_21.1, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc14_21.2: <bound method> = bound_method %int_1.loc14, %specific_fn.loc14_21 [concrete = constants.%bound_method.290]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.call.loc14: init %i32 = call %bound_method.loc14_21.2(%int_1.loc14) [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc14_21.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call.loc14 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc14_21.2: %i32 = converted %int_1.loc14, %.loc14_21.1 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %a.ref.loc14_31: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc14: %.24d = impl_witness_access constants.%BitXorWith.impl_witness.e8e, element1 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.c338c8.2]
+// CHECK:STDOUT:   %bound_method.loc14_29.1: <bound method> = bound_method %.loc14_21.2, %impl.elem1.loc14 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.bound.9a6c35.1]
+// CHECK:STDOUT:   %specific_fn.loc14_29: <specific function> = specific_function %impl.elem1.loc14, @T.binding.as_type.as.BitXorWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.125c34.1]
+// CHECK:STDOUT:   %bound_method.loc14_29.2: <bound method> = bound_method %.loc14_21.2, %specific_fn.loc14_29 [concrete = constants.%bound_method.6a6348.1]
+// CHECK:STDOUT:   %.loc14_29.1: %T.binding.as_type.as.BitXorWith.impl.Op.type.42bd3d.1 = specific_constant imports.%Core.Op.a2d, @T.binding.as_type.as.BitXorWith.impl.878(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.c338c8.1]
+// CHECK:STDOUT:   %Op.ref.loc14: %T.binding.as_type.as.BitXorWith.impl.Op.type.42bd3d.1 = name_ref Op, %.loc14_29.1 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.c338c8.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.bound.loc14: <bound method> = bound_method %.loc14_21.2, %Op.ref.loc14 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.bound.9a6c35.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.loc14: <specific function> = specific_function %Op.ref.loc14, @T.binding.as_type.as.BitXorWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.125c34.2]
+// CHECK:STDOUT:   %bound_method.loc14_29.3: <bound method> = bound_method %.loc14_21.2, %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.loc14 [concrete = constants.%bound_method.6a6348.2]
+// CHECK:STDOUT:   %impl.elem0.loc14_21.2: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc14_21.3: <bound method> = bound_method %.loc14_21.2, %impl.elem0.loc14_21.2 [concrete = constants.%i32.as.ImplicitAs.impl.Convert.bound]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc14: init %Cpp.long = call %bound_method.loc14_21.3(%.loc14_21.2) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc14_21.3: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc14 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc14_21.4: %Cpp.long = converted %.loc14_21.2, %.loc14_21.3 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.call.loc14: init %Cpp.long = call %bound_method.loc14_29.3(%.loc14_21.4, %a.ref.loc14_31)
+// CHECK:STDOUT:   %a.ref.loc14_34: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc14: <specific function> = specific_function %AssertSameType.ref.loc14, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc14_29.2: %Cpp.long = value_of_initializer %T.binding.as_type.as.BitXorWith.impl.Op.call.loc14
+// CHECK:STDOUT:   %.loc14_29.3: %Cpp.long = converted %T.binding.as_type.as.BitXorWith.impl.Op.call.loc14, %.loc14_29.2
+// CHECK:STDOUT:   %AssertSameType.call.loc14: init %empty_tuple.type = call %AssertSameType.specific_fn.loc14(%.loc14_29.3, %a.ref.loc14_34)
+// CHECK:STDOUT:   %AssertSameType.ref.loc15: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %int_1.loc15: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %int_32.loc15: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:   %i32.loc15: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   %impl.elem0.loc15_21.1: %.97a = impl_witness_access constants.%As.impl_witness.ab6, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.29b]
+// CHECK:STDOUT:   %bound_method.loc15_21.1: <bound method> = bound_method %int_1.loc15, %impl.elem0.loc15_21.1 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound]
+// CHECK:STDOUT:   %specific_fn.loc15_21: <specific function> = specific_function %impl.elem0.loc15_21.1, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc15_21.2: <bound method> = bound_method %int_1.loc15, %specific_fn.loc15_21 [concrete = constants.%bound_method.290]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.call.loc15: init %i32 = call %bound_method.loc15_21.2(%int_1.loc15) [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc15_21.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call.loc15 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc15_21.2: %i32 = converted %int_1.loc15, %.loc15_21.1 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %a.ref.loc15_32: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc15: %.509 = impl_witness_access constants.%LeftShiftWith.impl_witness.fb3, element1 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.c3e103.2]
+// CHECK:STDOUT:   %bound_method.loc15_29.1: <bound method> = bound_method %.loc15_21.2, %impl.elem1.loc15 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.bound.30239c.1]
+// CHECK:STDOUT:   %specific_fn.loc15_29: <specific function> = specific_function %impl.elem1.loc15, @T.binding.as_type.as.LeftShiftWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.547c25.1]
+// CHECK:STDOUT:   %bound_method.loc15_29.2: <bound method> = bound_method %.loc15_21.2, %specific_fn.loc15_29 [concrete = constants.%bound_method.137506.1]
+// CHECK:STDOUT:   %.loc15_29.1: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.ab52f6.1 = specific_constant imports.%Core.Op.79e, @T.binding.as_type.as.LeftShiftWith.impl.b71(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.c3e103.1]
+// CHECK:STDOUT:   %Op.ref.loc15: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.ab52f6.1 = name_ref Op, %.loc15_29.1 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.c3e103.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.bound.loc15: <bound method> = bound_method %.loc15_21.2, %Op.ref.loc15 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.bound.30239c.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.loc15: <specific function> = specific_function %Op.ref.loc15, @T.binding.as_type.as.LeftShiftWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.547c25.2]
+// CHECK:STDOUT:   %bound_method.loc15_29.3: <bound method> = bound_method %.loc15_21.2, %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.loc15 [concrete = constants.%bound_method.137506.2]
+// CHECK:STDOUT:   %impl.elem0.loc15_21.2: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc15_21.3: <bound method> = bound_method %.loc15_21.2, %impl.elem0.loc15_21.2 [concrete = constants.%i32.as.ImplicitAs.impl.Convert.bound]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc15: init %Cpp.long = call %bound_method.loc15_21.3(%.loc15_21.2) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc15_21.3: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc15 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc15_21.4: %Cpp.long = converted %.loc15_21.2, %.loc15_21.3 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.call.loc15: init %Cpp.long = call %bound_method.loc15_29.3(%.loc15_21.4, %a.ref.loc15_32)
+// CHECK:STDOUT:   %a.ref.loc15_35: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc15: <specific function> = specific_function %AssertSameType.ref.loc15, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc15_29.2: %Cpp.long = value_of_initializer %T.binding.as_type.as.LeftShiftWith.impl.Op.call.loc15
+// CHECK:STDOUT:   %.loc15_29.3: %Cpp.long = converted %T.binding.as_type.as.LeftShiftWith.impl.Op.call.loc15, %.loc15_29.2
+// CHECK:STDOUT:   %AssertSameType.call.loc15: init %empty_tuple.type = call %AssertSameType.specific_fn.loc15(%.loc15_29.3, %a.ref.loc15_35)
+// CHECK:STDOUT:   %AssertSameType.ref.loc16: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %int_1.loc16: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %int_32.loc16: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:   %i32.loc16: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   %impl.elem0.loc16_21.1: %.97a = impl_witness_access constants.%As.impl_witness.ab6, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.29b]
+// CHECK:STDOUT:   %bound_method.loc16_21.1: <bound method> = bound_method %int_1.loc16, %impl.elem0.loc16_21.1 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound]
+// CHECK:STDOUT:   %specific_fn.loc16_21: <specific function> = specific_function %impl.elem0.loc16_21.1, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc16_21.2: <bound method> = bound_method %int_1.loc16, %specific_fn.loc16_21 [concrete = constants.%bound_method.290]
+// CHECK:STDOUT:   %Core.IntLiteral.as.As.impl.Convert.call.loc16: init %i32 = call %bound_method.loc16_21.2(%int_1.loc16) [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc16_21.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call.loc16 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc16_21.2: %i32 = converted %int_1.loc16, %.loc16_21.1 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %a.ref.loc16_32: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc16: %.9db = impl_witness_access constants.%RightShiftWith.impl_witness.7d0, element1 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.44dea2.2]
+// CHECK:STDOUT:   %bound_method.loc16_29.1: <bound method> = bound_method %.loc16_21.2, %impl.elem1.loc16 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.bound.08a5b1.1]
+// CHECK:STDOUT:   %specific_fn.loc16_29: <specific function> = specific_function %impl.elem1.loc16, @T.binding.as_type.as.RightShiftWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.888028.1]
+// CHECK:STDOUT:   %bound_method.loc16_29.2: <bound method> = bound_method %.loc16_21.2, %specific_fn.loc16_29 [concrete = constants.%bound_method.4658fd.1]
+// CHECK:STDOUT:   %.loc16_29.1: %T.binding.as_type.as.RightShiftWith.impl.Op.type.2fe33f.1 = specific_constant imports.%Core.Op.f2f, @T.binding.as_type.as.RightShiftWith.impl.28b(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.44dea2.1]
+// CHECK:STDOUT:   %Op.ref.loc16: %T.binding.as_type.as.RightShiftWith.impl.Op.type.2fe33f.1 = name_ref Op, %.loc16_29.1 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.44dea2.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.bound.loc16: <bound method> = bound_method %.loc16_21.2, %Op.ref.loc16 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.bound.08a5b1.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.loc16: <specific function> = specific_function %Op.ref.loc16, @T.binding.as_type.as.RightShiftWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.888028.2]
+// CHECK:STDOUT:   %bound_method.loc16_29.3: <bound method> = bound_method %.loc16_21.2, %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.loc16 [concrete = constants.%bound_method.4658fd.2]
+// CHECK:STDOUT:   %impl.elem0.loc16_21.2: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc16_21.3: <bound method> = bound_method %.loc16_21.2, %impl.elem0.loc16_21.2 [concrete = constants.%i32.as.ImplicitAs.impl.Convert.bound]
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc16: init %Cpp.long = call %bound_method.loc16_21.3(%.loc16_21.2) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc16_21.3: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc16 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc16_21.4: %Cpp.long = converted %.loc16_21.2, %.loc16_21.3 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.call.loc16: init %Cpp.long = call %bound_method.loc16_29.3(%.loc16_21.4, %a.ref.loc16_32)
+// CHECK:STDOUT:   %a.ref.loc16_35: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc16: <specific function> = specific_function %AssertSameType.ref.loc16, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc16_29.2: %Cpp.long = value_of_initializer %T.binding.as_type.as.RightShiftWith.impl.Op.call.loc16
+// CHECK:STDOUT:   %.loc16_29.3: %Cpp.long = converted %T.binding.as_type.as.RightShiftWith.impl.Op.call.loc16, %.loc16_29.2
+// CHECK:STDOUT:   %AssertSameType.call.loc16: init %empty_tuple.type = call %AssertSameType.specific_fn.loc16(%.loc16_29.3, %a.ref.loc16_35)
+// CHECK:STDOUT:   %AssertSameType.ref.loc18: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %int_1.loc18: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %a.ref.loc18_22: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc18: %.e0e = impl_witness_access constants.%BitAndWith.impl_witness.11b, element1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.657411.2]
+// CHECK:STDOUT:   %bound_method.loc18_20.1: <bound method> = bound_method %int_1.loc18, %impl.elem1.loc18 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.bound.62b211.1]
+// CHECK:STDOUT:   %specific_fn.loc18: <specific function> = specific_function %impl.elem1.loc18, @T.binding.as_type.as.BitAndWith.impl.Op.1(constants.%ImplicitAs.facet.eed) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.76feb8.1]
+// CHECK:STDOUT:   %bound_method.loc18_20.2: <bound method> = bound_method %int_1.loc18, %specific_fn.loc18 [concrete = constants.%bound_method.284eaa.1]
+// CHECK:STDOUT:   %.loc18_20.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.371e74.1 = specific_constant imports.%Core.Op.36a, @T.binding.as_type.as.BitAndWith.impl.2e8(constants.%ImplicitAs.facet.eed) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.657411.1]
+// CHECK:STDOUT:   %Op.ref.loc18: %T.binding.as_type.as.BitAndWith.impl.Op.type.371e74.1 = name_ref Op, %.loc18_20.1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.657411.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound.loc18: <bound method> = bound_method %int_1.loc18, %Op.ref.loc18 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.bound.62b211.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.loc18: <specific function> = specific_function %Op.ref.loc18, @T.binding.as_type.as.BitAndWith.impl.Op.2(constants.%ImplicitAs.facet.eed) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.76feb8.2]
+// CHECK:STDOUT:   %bound_method.loc18_20.3: <bound method> = bound_method %int_1.loc18, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.loc18 [concrete = constants.%bound_method.284eaa.2]
+// CHECK:STDOUT:   %impl.elem0.loc18: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc18_18: <bound method> = bound_method %int_1.loc18, %impl.elem0.loc18 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc18: init %Cpp.long = call %bound_method.loc18_18(%int_1.loc18) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc18_18.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc18 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc18_18.2: %Cpp.long = converted %int_1.loc18, %.loc18_18.1 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.call.loc18: init %Cpp.long = call %bound_method.loc18_20.3(%.loc18_18.2, %a.ref.loc18_22)
+// CHECK:STDOUT:   %a.ref.loc18_25: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc18: <specific function> = specific_function %AssertSameType.ref.loc18, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc18_20.2: %Cpp.long = value_of_initializer %T.binding.as_type.as.BitAndWith.impl.Op.call.loc18
+// CHECK:STDOUT:   %.loc18_20.3: %Cpp.long = converted %T.binding.as_type.as.BitAndWith.impl.Op.call.loc18, %.loc18_20.2
+// CHECK:STDOUT:   %AssertSameType.call.loc18: init %empty_tuple.type = call %AssertSameType.specific_fn.loc18(%.loc18_20.3, %a.ref.loc18_25)
+// CHECK:STDOUT:   %AssertSameType.ref.loc19: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %int_1.loc19: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %a.ref.loc19_22: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc19: %.9f3 = impl_witness_access constants.%BitOrWith.impl_witness.f0b, element1 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.552722.2]
+// CHECK:STDOUT:   %bound_method.loc19_20.1: <bound method> = bound_method %int_1.loc19, %impl.elem1.loc19 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.bound.0cc7c8.1]
+// CHECK:STDOUT:   %specific_fn.loc19: <specific function> = specific_function %impl.elem1.loc19, @T.binding.as_type.as.BitOrWith.impl.Op.1(constants.%ImplicitAs.facet.eed) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.f5e026.1]
+// CHECK:STDOUT:   %bound_method.loc19_20.2: <bound method> = bound_method %int_1.loc19, %specific_fn.loc19 [concrete = constants.%bound_method.ba7a8e.1]
+// CHECK:STDOUT:   %.loc19_20.1: %T.binding.as_type.as.BitOrWith.impl.Op.type.6b5126.1 = specific_constant imports.%Core.Op.e80, @T.binding.as_type.as.BitOrWith.impl.e42(constants.%ImplicitAs.facet.eed) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.552722.1]
+// CHECK:STDOUT:   %Op.ref.loc19: %T.binding.as_type.as.BitOrWith.impl.Op.type.6b5126.1 = name_ref Op, %.loc19_20.1 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.552722.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bound.loc19: <bound method> = bound_method %int_1.loc19, %Op.ref.loc19 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.bound.0cc7c8.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.loc19: <specific function> = specific_function %Op.ref.loc19, @T.binding.as_type.as.BitOrWith.impl.Op.2(constants.%ImplicitAs.facet.eed) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.f5e026.2]
+// CHECK:STDOUT:   %bound_method.loc19_20.3: <bound method> = bound_method %int_1.loc19, %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.loc19 [concrete = constants.%bound_method.ba7a8e.2]
+// CHECK:STDOUT:   %impl.elem0.loc19: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc19_18: <bound method> = bound_method %int_1.loc19, %impl.elem0.loc19 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc19: init %Cpp.long = call %bound_method.loc19_18(%int_1.loc19) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc19_18.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc19 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc19_18.2: %Cpp.long = converted %int_1.loc19, %.loc19_18.1 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.call.loc19: init %Cpp.long = call %bound_method.loc19_20.3(%.loc19_18.2, %a.ref.loc19_22)
+// CHECK:STDOUT:   %a.ref.loc19_25: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc19: <specific function> = specific_function %AssertSameType.ref.loc19, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc19_20.2: %Cpp.long = value_of_initializer %T.binding.as_type.as.BitOrWith.impl.Op.call.loc19
+// CHECK:STDOUT:   %.loc19_20.3: %Cpp.long = converted %T.binding.as_type.as.BitOrWith.impl.Op.call.loc19, %.loc19_20.2
+// CHECK:STDOUT:   %AssertSameType.call.loc19: init %empty_tuple.type = call %AssertSameType.specific_fn.loc19(%.loc19_20.3, %a.ref.loc19_25)
+// CHECK:STDOUT:   %AssertSameType.ref.loc20: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %int_1.loc20: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %a.ref.loc20_22: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc20: %.498 = impl_witness_access constants.%BitXorWith.impl_witness.a75, element1 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.c5dfcc.2]
+// CHECK:STDOUT:   %bound_method.loc20_20.1: <bound method> = bound_method %int_1.loc20, %impl.elem1.loc20 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.bound.8d10e0.1]
+// CHECK:STDOUT:   %specific_fn.loc20: <specific function> = specific_function %impl.elem1.loc20, @T.binding.as_type.as.BitXorWith.impl.Op.1(constants.%ImplicitAs.facet.eed) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.9cdf74.1]
+// CHECK:STDOUT:   %bound_method.loc20_20.2: <bound method> = bound_method %int_1.loc20, %specific_fn.loc20 [concrete = constants.%bound_method.91b787.1]
+// CHECK:STDOUT:   %.loc20_20.1: %T.binding.as_type.as.BitXorWith.impl.Op.type.c3bcf6.1 = specific_constant imports.%Core.Op.a2d, @T.binding.as_type.as.BitXorWith.impl.878(constants.%ImplicitAs.facet.eed) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.c5dfcc.1]
+// CHECK:STDOUT:   %Op.ref.loc20: %T.binding.as_type.as.BitXorWith.impl.Op.type.c3bcf6.1 = name_ref Op, %.loc20_20.1 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.c5dfcc.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.bound.loc20: <bound method> = bound_method %int_1.loc20, %Op.ref.loc20 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.bound.8d10e0.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.loc20: <specific function> = specific_function %Op.ref.loc20, @T.binding.as_type.as.BitXorWith.impl.Op.2(constants.%ImplicitAs.facet.eed) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.9cdf74.2]
+// CHECK:STDOUT:   %bound_method.loc20_20.3: <bound method> = bound_method %int_1.loc20, %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.loc20 [concrete = constants.%bound_method.91b787.2]
+// CHECK:STDOUT:   %impl.elem0.loc20: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc20_18: <bound method> = bound_method %int_1.loc20, %impl.elem0.loc20 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc20: init %Cpp.long = call %bound_method.loc20_18(%int_1.loc20) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc20_18.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc20 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc20_18.2: %Cpp.long = converted %int_1.loc20, %.loc20_18.1 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.call.loc20: init %Cpp.long = call %bound_method.loc20_20.3(%.loc20_18.2, %a.ref.loc20_22)
+// CHECK:STDOUT:   %a.ref.loc20_25: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc20: <specific function> = specific_function %AssertSameType.ref.loc20, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc20_20.2: %Cpp.long = value_of_initializer %T.binding.as_type.as.BitXorWith.impl.Op.call.loc20
+// CHECK:STDOUT:   %.loc20_20.3: %Cpp.long = converted %T.binding.as_type.as.BitXorWith.impl.Op.call.loc20, %.loc20_20.2
+// CHECK:STDOUT:   %AssertSameType.call.loc20: init %empty_tuple.type = call %AssertSameType.specific_fn.loc20(%.loc20_20.3, %a.ref.loc20_25)
+// CHECK:STDOUT:   %AssertSameType.ref.loc21: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %int_1.loc21: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %a.ref.loc21_23: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc21: %.468 = impl_witness_access constants.%LeftShiftWith.impl_witness.ad3, element1 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.f0c7aa.2]
+// CHECK:STDOUT:   %bound_method.loc21_20.1: <bound method> = bound_method %int_1.loc21, %impl.elem1.loc21 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.bound.df9a08.1]
+// CHECK:STDOUT:   %specific_fn.loc21: <specific function> = specific_function %impl.elem1.loc21, @T.binding.as_type.as.LeftShiftWith.impl.Op.1(constants.%ImplicitAs.facet.eed) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.18a0d8.1]
+// CHECK:STDOUT:   %bound_method.loc21_20.2: <bound method> = bound_method %int_1.loc21, %specific_fn.loc21 [concrete = constants.%bound_method.05d3ad.1]
+// CHECK:STDOUT:   %.loc21_20.1: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.0d7d28.1 = specific_constant imports.%Core.Op.79e, @T.binding.as_type.as.LeftShiftWith.impl.b71(constants.%ImplicitAs.facet.eed) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.f0c7aa.1]
+// CHECK:STDOUT:   %Op.ref.loc21: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.0d7d28.1 = name_ref Op, %.loc21_20.1 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.f0c7aa.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.bound.loc21: <bound method> = bound_method %int_1.loc21, %Op.ref.loc21 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.bound.df9a08.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.loc21: <specific function> = specific_function %Op.ref.loc21, @T.binding.as_type.as.LeftShiftWith.impl.Op.2(constants.%ImplicitAs.facet.eed) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.18a0d8.2]
+// CHECK:STDOUT:   %bound_method.loc21_20.3: <bound method> = bound_method %int_1.loc21, %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.loc21 [concrete = constants.%bound_method.05d3ad.2]
+// CHECK:STDOUT:   %impl.elem0.loc21: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc21_18: <bound method> = bound_method %int_1.loc21, %impl.elem0.loc21 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc21: init %Cpp.long = call %bound_method.loc21_18(%int_1.loc21) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc21_18.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc21 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc21_18.2: %Cpp.long = converted %int_1.loc21, %.loc21_18.1 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.call.loc21: init %Cpp.long = call %bound_method.loc21_20.3(%.loc21_18.2, %a.ref.loc21_23)
+// CHECK:STDOUT:   %a.ref.loc21_26: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc21: <specific function> = specific_function %AssertSameType.ref.loc21, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc21_20.2: %Cpp.long = value_of_initializer %T.binding.as_type.as.LeftShiftWith.impl.Op.call.loc21
+// CHECK:STDOUT:   %.loc21_20.3: %Cpp.long = converted %T.binding.as_type.as.LeftShiftWith.impl.Op.call.loc21, %.loc21_20.2
+// CHECK:STDOUT:   %AssertSameType.call.loc21: init %empty_tuple.type = call %AssertSameType.specific_fn.loc21(%.loc21_20.3, %a.ref.loc21_26)
+// CHECK:STDOUT:   %AssertSameType.ref.loc22: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %int_1.loc22: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %a.ref.loc22_23: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc22: %.dd3 = impl_witness_access constants.%RightShiftWith.impl_witness.269, element1 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.79036b.2]
+// CHECK:STDOUT:   %bound_method.loc22_20.1: <bound method> = bound_method %int_1.loc22, %impl.elem1.loc22 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.bound.2baaff.1]
+// CHECK:STDOUT:   %specific_fn.loc22: <specific function> = specific_function %impl.elem1.loc22, @T.binding.as_type.as.RightShiftWith.impl.Op.1(constants.%ImplicitAs.facet.eed) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.fe68a8.1]
+// CHECK:STDOUT:   %bound_method.loc22_20.2: <bound method> = bound_method %int_1.loc22, %specific_fn.loc22 [concrete = constants.%bound_method.fb5cd1.1]
+// CHECK:STDOUT:   %.loc22_20.1: %T.binding.as_type.as.RightShiftWith.impl.Op.type.b3fbc2.1 = specific_constant imports.%Core.Op.f2f, @T.binding.as_type.as.RightShiftWith.impl.28b(constants.%ImplicitAs.facet.eed) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.79036b.1]
+// CHECK:STDOUT:   %Op.ref.loc22: %T.binding.as_type.as.RightShiftWith.impl.Op.type.b3fbc2.1 = name_ref Op, %.loc22_20.1 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.79036b.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.bound.loc22: <bound method> = bound_method %int_1.loc22, %Op.ref.loc22 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.bound.2baaff.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.loc22: <specific function> = specific_function %Op.ref.loc22, @T.binding.as_type.as.RightShiftWith.impl.Op.2(constants.%ImplicitAs.facet.eed) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.fe68a8.2]
+// CHECK:STDOUT:   %bound_method.loc22_20.3: <bound method> = bound_method %int_1.loc22, %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.loc22 [concrete = constants.%bound_method.fb5cd1.2]
+// CHECK:STDOUT:   %impl.elem0.loc22: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc22_18: <bound method> = bound_method %int_1.loc22, %impl.elem0.loc22 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc22: init %Cpp.long = call %bound_method.loc22_18(%int_1.loc22) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc22_18.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc22 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc22_18.2: %Cpp.long = converted %int_1.loc22, %.loc22_18.1 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.call.loc22: init %Cpp.long = call %bound_method.loc22_20.3(%.loc22_18.2, %a.ref.loc22_23)
+// CHECK:STDOUT:   %a.ref.loc22_26: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc22: <specific function> = specific_function %AssertSameType.ref.loc22, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc22_20.2: %Cpp.long = value_of_initializer %T.binding.as_type.as.RightShiftWith.impl.Op.call.loc22
+// CHECK:STDOUT:   %.loc22_20.3: %Cpp.long = converted %T.binding.as_type.as.RightShiftWith.impl.Op.call.loc22, %.loc22_20.2
+// CHECK:STDOUT:   %AssertSameType.call.loc22: init %empty_tuple.type = call %AssertSameType.specific_fn.loc22(%.loc22_20.3, %a.ref.loc22_26)
+// CHECK:STDOUT:   name_binding_decl {
+// CHECK:STDOUT:     %b.patt: %pattern_type.7ce = value_binding_pattern b [concrete]
+// CHECK:STDOUT:   }
+// CHECK:STDOUT:   %int_1.loc24: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %.loc24_10: type = splice_block %i32.loc24 [concrete = constants.%i32] {
+// CHECK:STDOUT:     %int_32.loc24: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:     %i32.loc24: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %impl.elem0.loc24: %.567 = impl_witness_access constants.%ImplicitAs.impl_witness.556, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.57d]
-// CHECK:STDOUT:   %bound_method.loc24_16.1: <bound method> = bound_method %int_1.loc24, %impl.elem0.loc24 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.102]
-// CHECK:STDOUT:   %specific_fn.loc24: <specific function> = specific_function %impl.elem0.loc24, @Core.IntLiteral.as.ImplicitAs.impl.Convert.2(constants.%int_64) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn]
-// CHECK:STDOUT:   %bound_method.loc24_16.2: <bound method> = bound_method %int_1.loc24, %specific_fn.loc24 [concrete = constants.%bound_method.288]
-// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc24: init %i64 = call %bound_method.loc24_16.2(%int_1.loc24) [concrete = constants.%int_1.41a]
-// CHECK:STDOUT:   %.loc24_16.1: %i64 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc24 [concrete = constants.%int_1.41a]
-// CHECK:STDOUT:   %.loc24_16.2: %i64 = converted %int_1.loc24, %.loc24_16.1 [concrete = constants.%int_1.41a]
-// CHECK:STDOUT:   %b: %i64 = value_binding b, %.loc24_16.2
+// CHECK:STDOUT:   %impl.elem0.loc24: %.863 = impl_witness_access constants.%ImplicitAs.impl_witness.6bc, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5]
+// CHECK:STDOUT:   %bound_method.loc24_16.1: <bound method> = bound_method %int_1.loc24, %impl.elem0.loc24 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.215]
+// CHECK:STDOUT:   %specific_fn.loc24: <specific function> = specific_function %impl.elem0.loc24, @Core.IntLiteral.as.ImplicitAs.impl.Convert.2(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc24_16.2: <bound method> = bound_method %int_1.loc24, %specific_fn.loc24 [concrete = constants.%bound_method.38b]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc24: init %i32 = call %bound_method.loc24_16.2(%int_1.loc24) [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc24_16.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc24 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc24_16.2: %i32 = converted %int_1.loc24, %.loc24_16.1 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %b: %i32 = value_binding b, %.loc24_16.2
 // CHECK:STDOUT:   %AssertSameType.ref.loc25: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
-// CHECK:STDOUT:   %a.ref.loc25: %Cpp.long = name_ref a, %a
-// CHECK:STDOUT:   %b.ref.loc25_22: %i64 = name_ref b, %b
-// CHECK:STDOUT:   %impl.elem1.loc25: %.656 = impl_witness_access constants.%BitAndWith.impl_witness.c6a, element1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.12fb91.2]
-// CHECK:STDOUT:   %bound_method.loc25_20.1: <bound method> = bound_method %a.ref.loc25, %impl.elem1.loc25
-// CHECK:STDOUT:   %specific_fn.loc25: <specific function> = specific_function %impl.elem1.loc25, @T.binding.as_type.as.BitAndWith.impl.Op.3(constants.%int_64, constants.%ImplicitAs.facet.ba4) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.d9a57f.1]
-// CHECK:STDOUT:   %bound_method.loc25_20.2: <bound method> = bound_method %a.ref.loc25, %specific_fn.loc25
-// CHECK:STDOUT:   %.loc25_20.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.7732f0.1 = specific_constant imports.%Core.Op.944, @T.binding.as_type.as.BitAndWith.impl.96d(constants.%int_64, constants.%ImplicitAs.facet.ba4) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.12fb91.1]
-// CHECK:STDOUT:   %Op.ref.loc25: %T.binding.as_type.as.BitAndWith.impl.Op.type.7732f0.1 = name_ref Op, %.loc25_20.1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.12fb91.1]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound: <bound method> = bound_method %a.ref.loc25, %Op.ref.loc25
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn: <specific function> = specific_function %Op.ref.loc25, @T.binding.as_type.as.BitAndWith.impl.Op.4(constants.%int_64, constants.%ImplicitAs.facet.ba4) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.d9a57f.2]
-// CHECK:STDOUT:   %bound_method.loc25_20.3: <bound method> = bound_method %a.ref.loc25, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn
-// CHECK:STDOUT:   %impl.elem0.loc25: %.8a2 = impl_witness_access constants.%ImplicitAs.impl_witness.bbc, element0 [concrete = constants.%Cpp.long.as.ImplicitAs.impl.Convert]
-// CHECK:STDOUT:   %bound_method.loc25_18: <bound method> = bound_method %a.ref.loc25, %impl.elem0.loc25
-// CHECK:STDOUT:   %Cpp.long.as.ImplicitAs.impl.Convert.call.loc25: init %i64 = call %bound_method.loc25_18(%a.ref.loc25)
-// CHECK:STDOUT:   %.loc25_18.1: %i64 = value_of_initializer %Cpp.long.as.ImplicitAs.impl.Convert.call.loc25
-// CHECK:STDOUT:   %.loc25_18.2: %i64 = converted %a.ref.loc25, %.loc25_18.1
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.call: init %i64 = call %bound_method.loc25_20.3(%.loc25_18.2, %b.ref.loc25_22)
-// CHECK:STDOUT:   %b.ref.loc25_25: %i64 = name_ref b, %b
-// CHECK:STDOUT:   %AssertSameType.specific_fn.loc25: <specific function> = specific_function %AssertSameType.ref.loc25, @AssertSameType(constants.%i64) [concrete = constants.%AssertSameType.specific_fn]
-// CHECK:STDOUT:   %.loc25_20.2: %i64 = value_of_initializer %T.binding.as_type.as.BitAndWith.impl.Op.call
-// CHECK:STDOUT:   %.loc25_20.3: %i64 = converted %T.binding.as_type.as.BitAndWith.impl.Op.call, %.loc25_20.2
-// CHECK:STDOUT:   %AssertSameType.call.loc25: init %empty_tuple.type = call %AssertSameType.specific_fn.loc25(%.loc25_20.3, %b.ref.loc25_25)
+// CHECK:STDOUT:   %b.ref.loc25: %i32 = name_ref b, %b
+// CHECK:STDOUT:   %a.ref.loc25_22: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc25: %.419 = impl_witness_access constants.%BitAndWith.impl_witness.a02, element1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.3425be.2]
+// CHECK:STDOUT:   %bound_method.loc25_20.1: <bound method> = bound_method %b.ref.loc25, %impl.elem1.loc25
+// CHECK:STDOUT:   %specific_fn.loc25: <specific function> = specific_function %impl.elem1.loc25, @T.binding.as_type.as.BitAndWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.f76196.1]
+// CHECK:STDOUT:   %bound_method.loc25_20.2: <bound method> = bound_method %b.ref.loc25, %specific_fn.loc25
+// CHECK:STDOUT:   %.loc25_20.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.f24b53.1 = specific_constant imports.%Core.Op.36a, @T.binding.as_type.as.BitAndWith.impl.2e8(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.3425be.1]
+// CHECK:STDOUT:   %Op.ref.loc25: %T.binding.as_type.as.BitAndWith.impl.Op.type.f24b53.1 = name_ref Op, %.loc25_20.1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.3425be.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound.loc25: <bound method> = bound_method %b.ref.loc25, %Op.ref.loc25
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.loc25: <specific function> = specific_function %Op.ref.loc25, @T.binding.as_type.as.BitAndWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.f76196.2]
+// CHECK:STDOUT:   %bound_method.loc25_20.3: <bound method> = bound_method %b.ref.loc25, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.loc25
+// CHECK:STDOUT:   %impl.elem0.loc25: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc25_18: <bound method> = bound_method %b.ref.loc25, %impl.elem0.loc25
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc25: init %Cpp.long = call %bound_method.loc25_18(%b.ref.loc25)
+// CHECK:STDOUT:   %.loc25_18.1: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc25
+// CHECK:STDOUT:   %.loc25_18.2: %Cpp.long = converted %b.ref.loc25, %.loc25_18.1
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.call.loc25: init %Cpp.long = call %bound_method.loc25_20.3(%.loc25_18.2, %a.ref.loc25_22)
+// CHECK:STDOUT:   %a.ref.loc25_25: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc25: <specific function> = specific_function %AssertSameType.ref.loc25, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc25_20.2: %Cpp.long = value_of_initializer %T.binding.as_type.as.BitAndWith.impl.Op.call.loc25
+// CHECK:STDOUT:   %.loc25_20.3: %Cpp.long = converted %T.binding.as_type.as.BitAndWith.impl.Op.call.loc25, %.loc25_20.2
+// CHECK:STDOUT:   %AssertSameType.call.loc25: init %empty_tuple.type = call %AssertSameType.specific_fn.loc25(%.loc25_20.3, %a.ref.loc25_25)
+// CHECK:STDOUT:   %AssertSameType.ref.loc26: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %b.ref.loc26: %i32 = name_ref b, %b
+// CHECK:STDOUT:   %a.ref.loc26_22: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc26: %.2e2 = impl_witness_access constants.%BitOrWith.impl_witness.d0a, element1 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.c9149f.2]
+// CHECK:STDOUT:   %bound_method.loc26_20.1: <bound method> = bound_method %b.ref.loc26, %impl.elem1.loc26
+// CHECK:STDOUT:   %specific_fn.loc26: <specific function> = specific_function %impl.elem1.loc26, @T.binding.as_type.as.BitOrWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.fbab3e.1]
+// CHECK:STDOUT:   %bound_method.loc26_20.2: <bound method> = bound_method %b.ref.loc26, %specific_fn.loc26
+// CHECK:STDOUT:   %.loc26_20.1: %T.binding.as_type.as.BitOrWith.impl.Op.type.c5501d.1 = specific_constant imports.%Core.Op.e80, @T.binding.as_type.as.BitOrWith.impl.e42(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.c9149f.1]
+// CHECK:STDOUT:   %Op.ref.loc26: %T.binding.as_type.as.BitOrWith.impl.Op.type.c5501d.1 = name_ref Op, %.loc26_20.1 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.c9149f.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bound.loc26: <bound method> = bound_method %b.ref.loc26, %Op.ref.loc26
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.loc26: <specific function> = specific_function %Op.ref.loc26, @T.binding.as_type.as.BitOrWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.fbab3e.2]
+// CHECK:STDOUT:   %bound_method.loc26_20.3: <bound method> = bound_method %b.ref.loc26, %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.loc26
+// CHECK:STDOUT:   %impl.elem0.loc26: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc26_18: <bound method> = bound_method %b.ref.loc26, %impl.elem0.loc26
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc26: init %Cpp.long = call %bound_method.loc26_18(%b.ref.loc26)
+// CHECK:STDOUT:   %.loc26_18.1: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc26
+// CHECK:STDOUT:   %.loc26_18.2: %Cpp.long = converted %b.ref.loc26, %.loc26_18.1
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.call.loc26: init %Cpp.long = call %bound_method.loc26_20.3(%.loc26_18.2, %a.ref.loc26_22)
+// CHECK:STDOUT:   %a.ref.loc26_25: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc26: <specific function> = specific_function %AssertSameType.ref.loc26, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc26_20.2: %Cpp.long = value_of_initializer %T.binding.as_type.as.BitOrWith.impl.Op.call.loc26
+// CHECK:STDOUT:   %.loc26_20.3: %Cpp.long = converted %T.binding.as_type.as.BitOrWith.impl.Op.call.loc26, %.loc26_20.2
+// CHECK:STDOUT:   %AssertSameType.call.loc26: init %empty_tuple.type = call %AssertSameType.specific_fn.loc26(%.loc26_20.3, %a.ref.loc26_25)
 // CHECK:STDOUT:   %AssertSameType.ref.loc27: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
-// CHECK:STDOUT:   %b.ref.loc27_18: %i64 = name_ref b, %b
-// CHECK:STDOUT:   %a.ref.loc27: %Cpp.long = name_ref a, %a
-// CHECK:STDOUT:   %impl.elem1.loc27: %.29c = impl_witness_access constants.%BitAndWith.impl_witness.c34, element1 [concrete = constants.%Int.as.BitAndWith.impl.Op.740875.2]
-// CHECK:STDOUT:   %bound_method.loc27_20.1: <bound method> = bound_method %b.ref.loc27_18, %impl.elem1.loc27
-// CHECK:STDOUT:   %specific_fn.loc27: <specific function> = specific_function %impl.elem1.loc27, @Int.as.BitAndWith.impl.Op.2(constants.%int_64, constants.%ImplicitAs.facet.ba4) [concrete = constants.%Int.as.BitAndWith.impl.Op.specific_fn.7b1efb.1]
-// CHECK:STDOUT:   %bound_method.loc27_20.2: <bound method> = bound_method %b.ref.loc27_18, %specific_fn.loc27
-// CHECK:STDOUT:   %.loc27_20.1: %Int.as.BitAndWith.impl.Op.type.871ddc.1 = specific_constant imports.%Core.Op.36f, @Int.as.BitAndWith.impl.4ac(constants.%int_64, constants.%ImplicitAs.facet.ba4) [concrete = constants.%Int.as.BitAndWith.impl.Op.740875.1]
-// CHECK:STDOUT:   %Op.ref.loc27: %Int.as.BitAndWith.impl.Op.type.871ddc.1 = name_ref Op, %.loc27_20.1 [concrete = constants.%Int.as.BitAndWith.impl.Op.740875.1]
-// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.bound: <bound method> = bound_method %b.ref.loc27_18, %Op.ref.loc27
-// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.specific_fn: <specific function> = specific_function %Op.ref.loc27, @Int.as.BitAndWith.impl.Op.3(constants.%int_64, constants.%ImplicitAs.facet.ba4) [concrete = constants.%Int.as.BitAndWith.impl.Op.specific_fn.7b1efb.2]
-// CHECK:STDOUT:   %bound_method.loc27_20.3: <bound method> = bound_method %b.ref.loc27_18, %Int.as.BitAndWith.impl.Op.specific_fn
-// CHECK:STDOUT:   %impl.elem0.loc27: %.8a2 = impl_witness_access constants.%ImplicitAs.impl_witness.bbc, element0 [concrete = constants.%Cpp.long.as.ImplicitAs.impl.Convert]
-// CHECK:STDOUT:   %bound_method.loc27_22: <bound method> = bound_method %a.ref.loc27, %impl.elem0.loc27
-// CHECK:STDOUT:   %Cpp.long.as.ImplicitAs.impl.Convert.call.loc27: init %i64 = call %bound_method.loc27_22(%a.ref.loc27)
-// CHECK:STDOUT:   %.loc27_22.1: %i64 = value_of_initializer %Cpp.long.as.ImplicitAs.impl.Convert.call.loc27
-// CHECK:STDOUT:   %.loc27_22.2: %i64 = converted %a.ref.loc27, %.loc27_22.1
-// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.call: init %i64 = call %bound_method.loc27_20.3(%b.ref.loc27_18, %.loc27_22.2)
-// CHECK:STDOUT:   %b.ref.loc27_25: %i64 = name_ref b, %b
-// CHECK:STDOUT:   %AssertSameType.specific_fn.loc27: <specific function> = specific_function %AssertSameType.ref.loc27, @AssertSameType(constants.%i64) [concrete = constants.%AssertSameType.specific_fn]
-// CHECK:STDOUT:   %.loc27_20.2: %i64 = value_of_initializer %Int.as.BitAndWith.impl.Op.call
-// CHECK:STDOUT:   %.loc27_20.3: %i64 = converted %Int.as.BitAndWith.impl.Op.call, %.loc27_20.2
-// CHECK:STDOUT:   %AssertSameType.call.loc27: init %empty_tuple.type = call %AssertSameType.specific_fn.loc27(%.loc27_20.3, %b.ref.loc27_25)
+// CHECK:STDOUT:   %b.ref.loc27: %i32 = name_ref b, %b
+// CHECK:STDOUT:   %a.ref.loc27_22: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc27: %.24d = impl_witness_access constants.%BitXorWith.impl_witness.e8e, element1 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.c338c8.2]
+// CHECK:STDOUT:   %bound_method.loc27_20.1: <bound method> = bound_method %b.ref.loc27, %impl.elem1.loc27
+// CHECK:STDOUT:   %specific_fn.loc27: <specific function> = specific_function %impl.elem1.loc27, @T.binding.as_type.as.BitXorWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.125c34.1]
+// CHECK:STDOUT:   %bound_method.loc27_20.2: <bound method> = bound_method %b.ref.loc27, %specific_fn.loc27
+// CHECK:STDOUT:   %.loc27_20.1: %T.binding.as_type.as.BitXorWith.impl.Op.type.42bd3d.1 = specific_constant imports.%Core.Op.a2d, @T.binding.as_type.as.BitXorWith.impl.878(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.c338c8.1]
+// CHECK:STDOUT:   %Op.ref.loc27: %T.binding.as_type.as.BitXorWith.impl.Op.type.42bd3d.1 = name_ref Op, %.loc27_20.1 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.c338c8.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.bound.loc27: <bound method> = bound_method %b.ref.loc27, %Op.ref.loc27
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.loc27: <specific function> = specific_function %Op.ref.loc27, @T.binding.as_type.as.BitXorWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.125c34.2]
+// CHECK:STDOUT:   %bound_method.loc27_20.3: <bound method> = bound_method %b.ref.loc27, %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.loc27
+// CHECK:STDOUT:   %impl.elem0.loc27: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc27_18: <bound method> = bound_method %b.ref.loc27, %impl.elem0.loc27
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc27: init %Cpp.long = call %bound_method.loc27_18(%b.ref.loc27)
+// CHECK:STDOUT:   %.loc27_18.1: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc27
+// CHECK:STDOUT:   %.loc27_18.2: %Cpp.long = converted %b.ref.loc27, %.loc27_18.1
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.call.loc27: init %Cpp.long = call %bound_method.loc27_20.3(%.loc27_18.2, %a.ref.loc27_22)
+// CHECK:STDOUT:   %a.ref.loc27_25: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc27: <specific function> = specific_function %AssertSameType.ref.loc27, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc27_20.2: %Cpp.long = value_of_initializer %T.binding.as_type.as.BitXorWith.impl.Op.call.loc27
+// CHECK:STDOUT:   %.loc27_20.3: %Cpp.long = converted %T.binding.as_type.as.BitXorWith.impl.Op.call.loc27, %.loc27_20.2
+// CHECK:STDOUT:   %AssertSameType.call.loc27: init %empty_tuple.type = call %AssertSameType.specific_fn.loc27(%.loc27_20.3, %a.ref.loc27_25)
+// CHECK:STDOUT:   %AssertSameType.ref.loc28: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %b.ref.loc28: %i32 = name_ref b, %b
+// CHECK:STDOUT:   %a.ref.loc28_23: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc28: %.509 = impl_witness_access constants.%LeftShiftWith.impl_witness.fb3, element1 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.c3e103.2]
+// CHECK:STDOUT:   %bound_method.loc28_20.1: <bound method> = bound_method %b.ref.loc28, %impl.elem1.loc28
+// CHECK:STDOUT:   %specific_fn.loc28: <specific function> = specific_function %impl.elem1.loc28, @T.binding.as_type.as.LeftShiftWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.547c25.1]
+// CHECK:STDOUT:   %bound_method.loc28_20.2: <bound method> = bound_method %b.ref.loc28, %specific_fn.loc28
+// CHECK:STDOUT:   %.loc28_20.1: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.ab52f6.1 = specific_constant imports.%Core.Op.79e, @T.binding.as_type.as.LeftShiftWith.impl.b71(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.c3e103.1]
+// CHECK:STDOUT:   %Op.ref.loc28: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.ab52f6.1 = name_ref Op, %.loc28_20.1 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.c3e103.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.bound.loc28: <bound method> = bound_method %b.ref.loc28, %Op.ref.loc28
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.loc28: <specific function> = specific_function %Op.ref.loc28, @T.binding.as_type.as.LeftShiftWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.547c25.2]
+// CHECK:STDOUT:   %bound_method.loc28_20.3: <bound method> = bound_method %b.ref.loc28, %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.loc28
+// CHECK:STDOUT:   %impl.elem0.loc28: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc28_18: <bound method> = bound_method %b.ref.loc28, %impl.elem0.loc28
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc28: init %Cpp.long = call %bound_method.loc28_18(%b.ref.loc28)
+// CHECK:STDOUT:   %.loc28_18.1: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc28
+// CHECK:STDOUT:   %.loc28_18.2: %Cpp.long = converted %b.ref.loc28, %.loc28_18.1
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.call.loc28: init %Cpp.long = call %bound_method.loc28_20.3(%.loc28_18.2, %a.ref.loc28_23)
+// CHECK:STDOUT:   %a.ref.loc28_26: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc28: <specific function> = specific_function %AssertSameType.ref.loc28, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc28_20.2: %Cpp.long = value_of_initializer %T.binding.as_type.as.LeftShiftWith.impl.Op.call.loc28
+// CHECK:STDOUT:   %.loc28_20.3: %Cpp.long = converted %T.binding.as_type.as.LeftShiftWith.impl.Op.call.loc28, %.loc28_20.2
+// CHECK:STDOUT:   %AssertSameType.call.loc28: init %empty_tuple.type = call %AssertSameType.specific_fn.loc28(%.loc28_20.3, %a.ref.loc28_26)
+// CHECK:STDOUT:   %AssertSameType.ref.loc29: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %b.ref.loc29: %i32 = name_ref b, %b
+// CHECK:STDOUT:   %a.ref.loc29_23: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc29: %.9db = impl_witness_access constants.%RightShiftWith.impl_witness.7d0, element1 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.44dea2.2]
+// CHECK:STDOUT:   %bound_method.loc29_20.1: <bound method> = bound_method %b.ref.loc29, %impl.elem1.loc29
+// CHECK:STDOUT:   %specific_fn.loc29: <specific function> = specific_function %impl.elem1.loc29, @T.binding.as_type.as.RightShiftWith.impl.Op.1(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.888028.1]
+// CHECK:STDOUT:   %bound_method.loc29_20.2: <bound method> = bound_method %b.ref.loc29, %specific_fn.loc29
+// CHECK:STDOUT:   %.loc29_20.1: %T.binding.as_type.as.RightShiftWith.impl.Op.type.2fe33f.1 = specific_constant imports.%Core.Op.f2f, @T.binding.as_type.as.RightShiftWith.impl.28b(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.44dea2.1]
+// CHECK:STDOUT:   %Op.ref.loc29: %T.binding.as_type.as.RightShiftWith.impl.Op.type.2fe33f.1 = name_ref Op, %.loc29_20.1 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.44dea2.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.bound.loc29: <bound method> = bound_method %b.ref.loc29, %Op.ref.loc29
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.loc29: <specific function> = specific_function %Op.ref.loc29, @T.binding.as_type.as.RightShiftWith.impl.Op.2(constants.%ImplicitAs.facet.174) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.888028.2]
+// CHECK:STDOUT:   %bound_method.loc29_20.3: <bound method> = bound_method %b.ref.loc29, %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.loc29
+// CHECK:STDOUT:   %impl.elem0.loc29: %.c45 = impl_witness_access constants.%ImplicitAs.impl_witness.0fc, element0 [concrete = constants.%i32.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc29_18: <bound method> = bound_method %b.ref.loc29, %impl.elem0.loc29
+// CHECK:STDOUT:   %i32.as.ImplicitAs.impl.Convert.call.loc29: init %Cpp.long = call %bound_method.loc29_18(%b.ref.loc29)
+// CHECK:STDOUT:   %.loc29_18.1: %Cpp.long = value_of_initializer %i32.as.ImplicitAs.impl.Convert.call.loc29
+// CHECK:STDOUT:   %.loc29_18.2: %Cpp.long = converted %b.ref.loc29, %.loc29_18.1
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.call.loc29: init %Cpp.long = call %bound_method.loc29_20.3(%.loc29_18.2, %a.ref.loc29_23)
+// CHECK:STDOUT:   %a.ref.loc29_26: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc29: <specific function> = specific_function %AssertSameType.ref.loc29, @AssertSameType(constants.%Cpp.long) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc29_20.2: %Cpp.long = value_of_initializer %T.binding.as_type.as.RightShiftWith.impl.Op.call.loc29
+// CHECK:STDOUT:   %.loc29_20.3: %Cpp.long = converted %T.binding.as_type.as.RightShiftWith.impl.Op.call.loc29, %.loc29_20.2
+// CHECK:STDOUT:   %AssertSameType.call.loc29: init %empty_tuple.type = call %AssertSameType.specific_fn.loc29(%.loc29_20.3, %a.ref.loc29_26)
+// CHECK:STDOUT:   <elided>
+// CHECK:STDOUT: }
+// CHECK:STDOUT:
+// CHECK:STDOUT: --- bitwise_heterogeneous_long_and_i64.carbon
+// CHECK:STDOUT:
+// CHECK:STDOUT: constants {
+// CHECK:STDOUT:   %AssertSameType.type: type = fn_type @AssertSameType [concrete]
+// CHECK:STDOUT:   %empty_tuple.type: type = tuple_type () [concrete]
+// CHECK:STDOUT:   %AssertSameType: %AssertSameType.type = struct_value () [concrete]
+// CHECK:STDOUT:   %Cpp.long: type = class_type @Long32 [concrete]
+// CHECK:STDOUT:   %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic]
+// CHECK:STDOUT:   %Int.fc6021.1: type = class_type @Int, @Int(%N) [symbolic]
+// CHECK:STDOUT:   %pattern_type.68c: type = pattern_type %Cpp.long [concrete]
+// CHECK:STDOUT:   %int_1.5b8: Core.IntLiteral = int_value 1 [concrete]
+// CHECK:STDOUT:   %ImplicitAs.type.819: type = facet_type <@ImplicitAs, @ImplicitAs(%Cpp.long)> [concrete]
+// CHECK:STDOUT:   %ImplicitAs.Convert.type.4c2: type = fn_type @ImplicitAs.Convert, @ImplicitAs(%Cpp.long) [concrete]
+// CHECK:STDOUT:   %int_64: Core.IntLiteral = int_value 64 [concrete]
+// CHECK:STDOUT:   %i64: type = class_type @Int, @Int(%int_64) [concrete]
+// CHECK:STDOUT:   %ImplicitAs.type.2ad: type = facet_type <@ImplicitAs, @ImplicitAs(%i64)> [concrete]
+// CHECK:STDOUT:   %ImplicitAs.Convert.type.94e: type = fn_type @ImplicitAs.Convert, @ImplicitAs(%i64) [concrete]
+// CHECK:STDOUT:   %ImplicitAs.impl_witness.2ce: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.903 [concrete]
+// CHECK:STDOUT:   %ImplicitAs.facet.eed: %ImplicitAs.type.819 = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.2ce) [concrete]
+// CHECK:STDOUT:   %.dad: type = fn_type_with_self_type %ImplicitAs.Convert.type.4c2, %ImplicitAs.facet.eed [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.b38: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.1 [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.b38 = struct_value () [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8: <bound method> = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a [concrete]
+// CHECK:STDOUT:   %int_1.5a4: %Cpp.long = int_value 1 [concrete]
+// CHECK:STDOUT:   %pattern_type.95b: type = pattern_type %i64 [concrete]
+// CHECK:STDOUT:   %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.2, @Core.IntLiteral.as.ImplicitAs.impl.b2d(%To) [symbolic]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6 = struct_value () [symbolic]
+// CHECK:STDOUT:   %ImplicitAs.impl_witness.556: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.74f, @Core.IntLiteral.as.ImplicitAs.impl.b2d(%int_64) [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.b78: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.2, @Core.IntLiteral.as.ImplicitAs.impl.b2d(%int_64) [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.57d: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.b78 = struct_value () [concrete]
+// CHECK:STDOUT:   %ImplicitAs.facet.d48: %ImplicitAs.type.2ad = facet_value Core.IntLiteral, (%ImplicitAs.impl_witness.556) [concrete]
+// CHECK:STDOUT:   %.567: type = fn_type_with_self_type %ImplicitAs.Convert.type.94e, %ImplicitAs.facet.d48 [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.102: <bound method> = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.57d [concrete]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: <specific function> = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.57d, @Core.IntLiteral.as.ImplicitAs.impl.Convert.2(%int_64) [concrete]
+// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %int_1.5b8, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete]
+// CHECK:STDOUT:   %int_1.41a: %i64 = int_value 1 [concrete]
+// CHECK:STDOUT:   %BitAndWith.type.46b: type = facet_type <@BitAndWith, @BitAndWith(%i64)> [concrete]
+// CHECK:STDOUT:   %BitAndWith.Op.type.2e7: type = fn_type @BitAndWith.Op, @BitAndWith(%i64) [concrete]
+// CHECK:STDOUT:   %BitAndWith.type.0b5: type = facet_type <@BitAndWith, @BitAndWith(%Cpp.long)> [concrete]
+// CHECK:STDOUT:   %BitAndWith.Op.type.e13: type = fn_type @BitAndWith.Op, @BitAndWith(%Cpp.long) [concrete]
+// CHECK:STDOUT:   %ImplicitAs.type.39a54f.2: type = facet_type <@ImplicitAs, @ImplicitAs(%Int.fc6021.1)> [symbolic]
+// CHECK:STDOUT:   %U.354: %ImplicitAs.type.39a54f.2 = symbolic_binding U, 1 [symbolic]
+// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.type.1b6537.1: type = fn_type @Int.as.BitAndWith.impl.Op.2, @Int.as.BitAndWith.impl.4ac(%N, %U.354) [symbolic]
+// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.b9569a.1: %Int.as.BitAndWith.impl.Op.type.1b6537.1 = struct_value () [symbolic]
+// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.type.1b6537.2: type = fn_type @Int.as.BitAndWith.impl.Op.3, @Int.as.BitAndWith.impl.4ac(%N, %U.354) [symbolic]
+// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.b9569a.2: %Int.as.BitAndWith.impl.Op.type.1b6537.2 = struct_value () [symbolic]
+// CHECK:STDOUT:   %T.354: %ImplicitAs.type.39a54f.2 = symbolic_binding T, 1 [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.5, @T.binding.as_type.as.BitAndWith.impl.96d(%N, %T.354) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.892c6d.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.1 = struct_value () [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.6, @T.binding.as_type.as.BitAndWith.impl.96d(%N, %T.354) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.892c6d.2: %T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.2 = struct_value () [symbolic]
+// CHECK:STDOUT:   %ImplicitAs.impl_witness.bbc: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.cb1 [concrete]
+// CHECK:STDOUT:   %ImplicitAs.facet.ba4: %ImplicitAs.type.2ad = facet_value %Cpp.long, (%ImplicitAs.impl_witness.bbc) [concrete]
+// CHECK:STDOUT:   %BitAndWith.impl_witness.c6a: <witness> = impl_witness imports.%BitAndWith.impl_witness_table.5e7, @T.binding.as_type.as.BitAndWith.impl.96d(%int_64, %ImplicitAs.facet.ba4) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.7732f0.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.6, @T.binding.as_type.as.BitAndWith.impl.96d(%int_64, %ImplicitAs.facet.ba4) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.12fb91.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.7732f0.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.7732f0.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.5, @T.binding.as_type.as.BitAndWith.impl.96d(%int_64, %ImplicitAs.facet.ba4) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.12fb91.2: %T.binding.as_type.as.BitAndWith.impl.Op.type.7732f0.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %BitAndWith.facet.bc4: %BitAndWith.type.46b = facet_value %Cpp.long, (%BitAndWith.impl_witness.c6a) [concrete]
+// CHECK:STDOUT:   %.656: type = fn_type_with_self_type %BitAndWith.Op.type.2e7, %BitAndWith.facet.bc4 [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.d9a57f.1: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.12fb91.2, @T.binding.as_type.as.BitAndWith.impl.Op.5(%int_64, %ImplicitAs.facet.ba4) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.d9a57f.2: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.12fb91.1, @T.binding.as_type.as.BitAndWith.impl.Op.6(%int_64, %ImplicitAs.facet.ba4) [concrete]
+// CHECK:STDOUT:   %.8a2: type = fn_type_with_self_type %ImplicitAs.Convert.type.94e, %ImplicitAs.facet.ba4 [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.ImplicitAs.impl.Convert.type: type = fn_type @Cpp.long.as.ImplicitAs.impl.Convert [concrete]
+// CHECK:STDOUT:   %Cpp.long.as.ImplicitAs.impl.Convert: %Cpp.long.as.ImplicitAs.impl.Convert.type = struct_value () [concrete]
+// CHECK:STDOUT:   %AssertSameType.specific_fn: <specific function> = specific_function %AssertSameType, @AssertSameType(%i64) [concrete]
+// CHECK:STDOUT:   %BitAndWith.impl_witness.c34: <witness> = impl_witness imports.%BitAndWith.impl_witness_table.ebf, @Int.as.BitAndWith.impl.4ac(%int_64, %ImplicitAs.facet.ba4) [concrete]
+// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.type.871ddc.1: type = fn_type @Int.as.BitAndWith.impl.Op.3, @Int.as.BitAndWith.impl.4ac(%int_64, %ImplicitAs.facet.ba4) [concrete]
+// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.740875.1: %Int.as.BitAndWith.impl.Op.type.871ddc.1 = struct_value () [concrete]
+// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.type.871ddc.2: type = fn_type @Int.as.BitAndWith.impl.Op.2, @Int.as.BitAndWith.impl.4ac(%int_64, %ImplicitAs.facet.ba4) [concrete]
+// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.740875.2: %Int.as.BitAndWith.impl.Op.type.871ddc.2 = struct_value () [concrete]
+// CHECK:STDOUT:   %BitAndWith.facet.a93: %BitAndWith.type.0b5 = facet_value %i64, (%BitAndWith.impl_witness.c34) [concrete]
+// CHECK:STDOUT:   %.29c: type = fn_type_with_self_type %BitAndWith.Op.type.e13, %BitAndWith.facet.a93 [concrete]
+// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.specific_fn.7b1efb.1: <specific function> = specific_function %Int.as.BitAndWith.impl.Op.740875.2, @Int.as.BitAndWith.impl.Op.2(%int_64, %ImplicitAs.facet.ba4) [concrete]
+// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.specific_fn.7b1efb.2: <specific function> = specific_function %Int.as.BitAndWith.impl.Op.740875.1, @Int.as.BitAndWith.impl.Op.3(%int_64, %ImplicitAs.facet.ba4) [concrete]
+// CHECK:STDOUT: }
+// CHECK:STDOUT:
+// CHECK:STDOUT: imports {
+// CHECK:STDOUT:   %Cpp: <namespace> = namespace file.%Cpp.import_cpp, [concrete] {
+// CHECK:STDOUT:     .long = constants.%Cpp.long
+// CHECK:STDOUT:     import Cpp//...
+// CHECK:STDOUT:   }
+// CHECK:STDOUT:   %Core.import_ref.b8a: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.b38 = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %ImplicitAs.impl_witness_table.903 = impl_witness_table (%Core.import_ref.b8a), @Core.IntLiteral.as.ImplicitAs.impl.052 [concrete]
+// CHECK:STDOUT:   %Core.import_ref.42d: @Core.IntLiteral.as.ImplicitAs.impl.b2d.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.b2d.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2)]
+// CHECK:STDOUT:   %ImplicitAs.impl_witness_table.74f = impl_witness_table (%Core.import_ref.42d), @Core.IntLiteral.as.ImplicitAs.impl.b2d [concrete]
+// CHECK:STDOUT:   %Core.import_ref.475cb3.2 = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.611: @Int.as.BitAndWith.impl.4ac.%Int.as.BitAndWith.impl.Op.type.2 (%Int.as.BitAndWith.impl.Op.type.1b6537.1) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.BitAndWith.impl.4ac.%Int.as.BitAndWith.impl.Op.2 (constants.%Int.as.BitAndWith.impl.Op.b9569a.1)]
+// CHECK:STDOUT:   %BitAndWith.impl_witness_table.ebf = impl_witness_table (%Core.import_ref.475cb3.2, %Core.import_ref.611), @Int.as.BitAndWith.impl.4ac [concrete]
+// CHECK:STDOUT:   %Core.Op.36f: @Int.as.BitAndWith.impl.4ac.%Int.as.BitAndWith.impl.Op.type.1 (%Int.as.BitAndWith.impl.Op.type.1b6537.2) = import_ref Core//prelude/types/int, Op, loaded [symbolic = @Int.as.BitAndWith.impl.4ac.%Int.as.BitAndWith.impl.Op.1 (constants.%Int.as.BitAndWith.impl.Op.b9569a.2)]
+// CHECK:STDOUT:   %Core.import_ref.475cb3.3 = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, unloaded
+// CHECK:STDOUT:   %Core.import_ref.29d: @T.binding.as_type.as.BitAndWith.impl.96d.%T.binding.as_type.as.BitAndWith.impl.Op.type.2 (%T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.1) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @T.binding.as_type.as.BitAndWith.impl.96d.%T.binding.as_type.as.BitAndWith.impl.Op.2 (constants.%T.binding.as_type.as.BitAndWith.impl.Op.892c6d.1)]
+// CHECK:STDOUT:   %BitAndWith.impl_witness_table.5e7 = impl_witness_table (%Core.import_ref.475cb3.3, %Core.import_ref.29d), @T.binding.as_type.as.BitAndWith.impl.96d [concrete]
+// CHECK:STDOUT:   %Core.Op.944: @T.binding.as_type.as.BitAndWith.impl.96d.%T.binding.as_type.as.BitAndWith.impl.Op.type.1 (%T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.2) = import_ref Core//prelude/types/int, Op, loaded [symbolic = @T.binding.as_type.as.BitAndWith.impl.96d.%T.binding.as_type.as.BitAndWith.impl.Op.1 (constants.%T.binding.as_type.as.BitAndWith.impl.Op.892c6d.2)]
+// CHECK:STDOUT:   %Core.import_ref.297: %Cpp.long.as.ImplicitAs.impl.Convert.type = import_ref Core//prelude/types/cpp/int, loc{{\d+_\d+}}, loaded [concrete = constants.%Cpp.long.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %ImplicitAs.impl_witness_table.cb1 = impl_witness_table (%Core.import_ref.297), @Cpp.long.as.ImplicitAs.impl.e6d [concrete]
+// CHECK:STDOUT: }
+// CHECK:STDOUT:
+// CHECK:STDOUT: fn @BitWiseHeterogeneousLongAndI64() {
+// CHECK:STDOUT: !entry:
+// CHECK:STDOUT:   name_binding_decl {
+// CHECK:STDOUT:     %a.patt: %pattern_type.68c = value_binding_pattern a [concrete]
+// CHECK:STDOUT:   }
+// CHECK:STDOUT:   %int_1.loc10: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %.loc10_13: type = splice_block %long.ref [concrete = constants.%Cpp.long] {
+// CHECK:STDOUT:     %Cpp.ref: <namespace> = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp]
+// CHECK:STDOUT:     %long.ref: type = name_ref long, constants.%Cpp.long [concrete = constants.%Cpp.long]
+// CHECK:STDOUT:   }
+// CHECK:STDOUT:   %impl.elem0.loc10: %.dad = impl_witness_access constants.%ImplicitAs.impl_witness.2ce, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.f2a]
+// CHECK:STDOUT:   %bound_method.loc10: <bound method> = bound_method %int_1.loc10, %impl.elem0.loc10 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.cc8]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc10: init %Cpp.long = call %bound_method.loc10(%int_1.loc10) [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc10_21.1: %Cpp.long = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc10 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %.loc10_21.2: %Cpp.long = converted %int_1.loc10, %.loc10_21.1 [concrete = constants.%int_1.5a4]
+// CHECK:STDOUT:   %a: %Cpp.long = value_binding a, %.loc10_21.2
+// CHECK:STDOUT:   name_binding_decl {
+// CHECK:STDOUT:     %b.patt: %pattern_type.95b = value_binding_pattern b [concrete]
+// CHECK:STDOUT:   }
+// CHECK:STDOUT:   %int_1.loc11: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
+// CHECK:STDOUT:   %.loc11_10: type = splice_block %i64 [concrete = constants.%i64] {
+// CHECK:STDOUT:     %int_64: Core.IntLiteral = int_value 64 [concrete = constants.%int_64]
+// CHECK:STDOUT:     %i64: type = class_type @Int, @Int(constants.%int_64) [concrete = constants.%i64]
+// CHECK:STDOUT:   }
+// CHECK:STDOUT:   %impl.elem0.loc11: %.567 = impl_witness_access constants.%ImplicitAs.impl_witness.556, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.57d]
+// CHECK:STDOUT:   %bound_method.loc11_16.1: <bound method> = bound_method %int_1.loc11, %impl.elem0.loc11 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.102]
+// CHECK:STDOUT:   %specific_fn.loc11: <specific function> = specific_function %impl.elem0.loc11, @Core.IntLiteral.as.ImplicitAs.impl.Convert.2(constants.%int_64) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc11_16.2: <bound method> = bound_method %int_1.loc11, %specific_fn.loc11 [concrete = constants.%bound_method]
+// CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc11: init %i64 = call %bound_method.loc11_16.2(%int_1.loc11) [concrete = constants.%int_1.41a]
+// CHECK:STDOUT:   %.loc11_16.1: %i64 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc11 [concrete = constants.%int_1.41a]
+// CHECK:STDOUT:   %.loc11_16.2: %i64 = converted %int_1.loc11, %.loc11_16.1 [concrete = constants.%int_1.41a]
+// CHECK:STDOUT:   %b: %i64 = value_binding b, %.loc11_16.2
+// CHECK:STDOUT:   %AssertSameType.ref.loc13: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %a.ref.loc13: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %b.ref.loc13_22: %i64 = name_ref b, %b
+// CHECK:STDOUT:   %impl.elem1.loc13: %.656 = impl_witness_access constants.%BitAndWith.impl_witness.c6a, element1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.12fb91.2]
+// CHECK:STDOUT:   %bound_method.loc13_20.1: <bound method> = bound_method %a.ref.loc13, %impl.elem1.loc13
+// CHECK:STDOUT:   %specific_fn.loc13: <specific function> = specific_function %impl.elem1.loc13, @T.binding.as_type.as.BitAndWith.impl.Op.5(constants.%int_64, constants.%ImplicitAs.facet.ba4) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.d9a57f.1]
+// CHECK:STDOUT:   %bound_method.loc13_20.2: <bound method> = bound_method %a.ref.loc13, %specific_fn.loc13
+// CHECK:STDOUT:   %.loc13_20.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.7732f0.1 = specific_constant imports.%Core.Op.944, @T.binding.as_type.as.BitAndWith.impl.96d(constants.%int_64, constants.%ImplicitAs.facet.ba4) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.12fb91.1]
+// CHECK:STDOUT:   %Op.ref.loc13: %T.binding.as_type.as.BitAndWith.impl.Op.type.7732f0.1 = name_ref Op, %.loc13_20.1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.12fb91.1]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound: <bound method> = bound_method %a.ref.loc13, %Op.ref.loc13
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn: <specific function> = specific_function %Op.ref.loc13, @T.binding.as_type.as.BitAndWith.impl.Op.6(constants.%int_64, constants.%ImplicitAs.facet.ba4) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.d9a57f.2]
+// CHECK:STDOUT:   %bound_method.loc13_20.3: <bound method> = bound_method %a.ref.loc13, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn
+// CHECK:STDOUT:   %impl.elem0.loc13: %.8a2 = impl_witness_access constants.%ImplicitAs.impl_witness.bbc, element0 [concrete = constants.%Cpp.long.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc13_18: <bound method> = bound_method %a.ref.loc13, %impl.elem0.loc13
+// CHECK:STDOUT:   %Cpp.long.as.ImplicitAs.impl.Convert.call.loc13: init %i64 = call %bound_method.loc13_18(%a.ref.loc13)
+// CHECK:STDOUT:   %.loc13_18.1: %i64 = value_of_initializer %Cpp.long.as.ImplicitAs.impl.Convert.call.loc13
+// CHECK:STDOUT:   %.loc13_18.2: %i64 = converted %a.ref.loc13, %.loc13_18.1
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.call: init %i64 = call %bound_method.loc13_20.3(%.loc13_18.2, %b.ref.loc13_22)
+// CHECK:STDOUT:   %b.ref.loc13_25: %i64 = name_ref b, %b
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc13: <specific function> = specific_function %AssertSameType.ref.loc13, @AssertSameType(constants.%i64) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc13_20.2: %i64 = value_of_initializer %T.binding.as_type.as.BitAndWith.impl.Op.call
+// CHECK:STDOUT:   %.loc13_20.3: %i64 = converted %T.binding.as_type.as.BitAndWith.impl.Op.call, %.loc13_20.2
+// CHECK:STDOUT:   %AssertSameType.call.loc13: init %empty_tuple.type = call %AssertSameType.specific_fn.loc13(%.loc13_20.3, %b.ref.loc13_25)
+// CHECK:STDOUT:   %AssertSameType.ref.loc14: %AssertSameType.type = name_ref AssertSameType, file.%AssertSameType.decl [concrete = constants.%AssertSameType]
+// CHECK:STDOUT:   %b.ref.loc14_18: %i64 = name_ref b, %b
+// CHECK:STDOUT:   %a.ref.loc14: %Cpp.long = name_ref a, %a
+// CHECK:STDOUT:   %impl.elem1.loc14: %.29c = impl_witness_access constants.%BitAndWith.impl_witness.c34, element1 [concrete = constants.%Int.as.BitAndWith.impl.Op.740875.2]
+// CHECK:STDOUT:   %bound_method.loc14_20.1: <bound method> = bound_method %b.ref.loc14_18, %impl.elem1.loc14
+// CHECK:STDOUT:   %specific_fn.loc14: <specific function> = specific_function %impl.elem1.loc14, @Int.as.BitAndWith.impl.Op.2(constants.%int_64, constants.%ImplicitAs.facet.ba4) [concrete = constants.%Int.as.BitAndWith.impl.Op.specific_fn.7b1efb.1]
+// CHECK:STDOUT:   %bound_method.loc14_20.2: <bound method> = bound_method %b.ref.loc14_18, %specific_fn.loc14
+// CHECK:STDOUT:   %.loc14_20.1: %Int.as.BitAndWith.impl.Op.type.871ddc.1 = specific_constant imports.%Core.Op.36f, @Int.as.BitAndWith.impl.4ac(constants.%int_64, constants.%ImplicitAs.facet.ba4) [concrete = constants.%Int.as.BitAndWith.impl.Op.740875.1]
+// CHECK:STDOUT:   %Op.ref.loc14: %Int.as.BitAndWith.impl.Op.type.871ddc.1 = name_ref Op, %.loc14_20.1 [concrete = constants.%Int.as.BitAndWith.impl.Op.740875.1]
+// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.bound: <bound method> = bound_method %b.ref.loc14_18, %Op.ref.loc14
+// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.specific_fn: <specific function> = specific_function %Op.ref.loc14, @Int.as.BitAndWith.impl.Op.3(constants.%int_64, constants.%ImplicitAs.facet.ba4) [concrete = constants.%Int.as.BitAndWith.impl.Op.specific_fn.7b1efb.2]
+// CHECK:STDOUT:   %bound_method.loc14_20.3: <bound method> = bound_method %b.ref.loc14_18, %Int.as.BitAndWith.impl.Op.specific_fn
+// CHECK:STDOUT:   %impl.elem0.loc14: %.8a2 = impl_witness_access constants.%ImplicitAs.impl_witness.bbc, element0 [concrete = constants.%Cpp.long.as.ImplicitAs.impl.Convert]
+// CHECK:STDOUT:   %bound_method.loc14_22: <bound method> = bound_method %a.ref.loc14, %impl.elem0.loc14
+// CHECK:STDOUT:   %Cpp.long.as.ImplicitAs.impl.Convert.call.loc14: init %i64 = call %bound_method.loc14_22(%a.ref.loc14)
+// CHECK:STDOUT:   %.loc14_22.1: %i64 = value_of_initializer %Cpp.long.as.ImplicitAs.impl.Convert.call.loc14
+// CHECK:STDOUT:   %.loc14_22.2: %i64 = converted %a.ref.loc14, %.loc14_22.1
+// CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.call: init %i64 = call %bound_method.loc14_20.3(%b.ref.loc14_18, %.loc14_22.2)
+// CHECK:STDOUT:   %b.ref.loc14_25: %i64 = name_ref b, %b
+// CHECK:STDOUT:   %AssertSameType.specific_fn.loc14: <specific function> = specific_function %AssertSameType.ref.loc14, @AssertSameType(constants.%i64) [concrete = constants.%AssertSameType.specific_fn]
+// CHECK:STDOUT:   %.loc14_20.2: %i64 = value_of_initializer %Int.as.BitAndWith.impl.Op.call
+// CHECK:STDOUT:   %.loc14_20.3: %i64 = converted %Int.as.BitAndWith.impl.Op.call, %.loc14_20.2
+// CHECK:STDOUT:   %AssertSameType.call.loc14: init %empty_tuple.type = call %AssertSameType.specific_fn.loc14(%.loc14_20.3, %b.ref.loc14_25)
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 88 - 88
toolchain/check/testdata/interop/cpp/builtins.lp64.carbon

@@ -5741,26 +5741,26 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %BitAndWith.type.97f: type = facet_type <@BitAndWith, @BitAndWith(%Cpp.long_long)> [concrete]
 // CHECK:STDOUT:   %BitAndWith.Op.type.c6c: type = fn_type @BitAndWith.Op, @BitAndWith(%Cpp.long_long) [concrete]
 // CHECK:STDOUT:   %T.ea5: %ImplicitAs.type.a03 = symbolic_binding T, 0 [symbolic]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.e1600b.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.1, @T.binding.as_type.as.BitAndWith.impl.972(%T.ea5) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.e1600b.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.3, @T.binding.as_type.as.BitAndWith.impl.972(%T.ea5) [symbolic]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.183211.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.e1600b.1 = struct_value () [symbolic]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.e1600b.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.2, @T.binding.as_type.as.BitAndWith.impl.972(%T.ea5) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.e1600b.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.4, @T.binding.as_type.as.BitAndWith.impl.972(%T.ea5) [symbolic]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.183211.2: %T.binding.as_type.as.BitAndWith.impl.Op.type.e1600b.2 = struct_value () [symbolic]
 // CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.2, @Core.IntLiteral.as.ImplicitAs.impl.b2d(%To.fe9) [symbolic]
 // CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.3c2: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.4e6 = struct_value () [symbolic]
 // CHECK:STDOUT:   %ImplicitAs.impl_witness.1b3: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.b19 [concrete]
 // CHECK:STDOUT:   %ImplicitAs.facet.c59: %ImplicitAs.type.a03 = facet_value %i64, (%ImplicitAs.impl_witness.1b3) [concrete]
 // CHECK:STDOUT:   %BitAndWith.impl_witness.668: <witness> = impl_witness imports.%BitAndWith.impl_witness_table.1b6, @T.binding.as_type.as.BitAndWith.impl.972(%ImplicitAs.facet.c59) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.d0d4e3.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.2, @T.binding.as_type.as.BitAndWith.impl.972(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.d0d4e3.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.4, @T.binding.as_type.as.BitAndWith.impl.972(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.77d50f.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.d0d4e3.1 = struct_value () [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.d0d4e3.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.1, @T.binding.as_type.as.BitAndWith.impl.972(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.d0d4e3.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.3, @T.binding.as_type.as.BitAndWith.impl.972(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.77d50f.2: %T.binding.as_type.as.BitAndWith.impl.Op.type.d0d4e3.2 = struct_value () [concrete]
 // CHECK:STDOUT:   %BitAndWith.facet.ed4: %BitAndWith.type.97f = facet_value %i64, (%BitAndWith.impl_witness.668) [concrete]
 // CHECK:STDOUT:   %.14d: type = fn_type_with_self_type %BitAndWith.Op.type.c6c, %BitAndWith.facet.ed4 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound.733cd6.1: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.BitAndWith.impl.Op.77d50f.2 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.16125d.1: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.77d50f.2, @T.binding.as_type.as.BitAndWith.impl.Op.1(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.16125d.1: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.77d50f.2, @T.binding.as_type.as.BitAndWith.impl.Op.3(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %bound_method.ba7306.1: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.16125d.1 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound.733cd6.2: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.BitAndWith.impl.Op.77d50f.1 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.16125d.2: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.77d50f.1, @T.binding.as_type.as.BitAndWith.impl.Op.2(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.16125d.2: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.77d50f.1, @T.binding.as_type.as.BitAndWith.impl.Op.4(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %bound_method.ba7306.2: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.16125d.2 [concrete]
 // CHECK:STDOUT:   %.b29: type = fn_type_with_self_type %ImplicitAs.Convert.type.6e4, %ImplicitAs.facet.c59 [concrete]
 // CHECK:STDOUT:   %i64.as.ImplicitAs.impl.Convert.type: type = fn_type @i64.as.ImplicitAs.impl.Convert [concrete]
@@ -5769,144 +5769,144 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %AssertSameType.specific_fn: <specific function> = specific_function %AssertSameType, @AssertSameType(%Cpp.long_long) [concrete]
 // CHECK:STDOUT:   %BitOrWith.type.d59: type = facet_type <@BitOrWith, @BitOrWith(%Cpp.long_long)> [concrete]
 // CHECK:STDOUT:   %BitOrWith.Op.type.c9c: type = fn_type @BitOrWith.Op, @BitOrWith(%Cpp.long_long) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.aeba4a.1: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.1, @T.binding.as_type.as.BitOrWith.impl.a9d(%T.ea5) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.aeba4a.1: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.3, @T.binding.as_type.as.BitOrWith.impl.a9d(%T.ea5) [symbolic]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bafb09.1: %T.binding.as_type.as.BitOrWith.impl.Op.type.aeba4a.1 = struct_value () [symbolic]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.aeba4a.2: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.2, @T.binding.as_type.as.BitOrWith.impl.a9d(%T.ea5) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.aeba4a.2: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.4, @T.binding.as_type.as.BitOrWith.impl.a9d(%T.ea5) [symbolic]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bafb09.2: %T.binding.as_type.as.BitOrWith.impl.Op.type.aeba4a.2 = struct_value () [symbolic]
 // CHECK:STDOUT:   %BitOrWith.impl_witness.771: <witness> = impl_witness imports.%BitOrWith.impl_witness_table.54a, @T.binding.as_type.as.BitOrWith.impl.a9d(%ImplicitAs.facet.c59) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.2c510c.1: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.2, @T.binding.as_type.as.BitOrWith.impl.a9d(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.2c510c.1: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.4, @T.binding.as_type.as.BitOrWith.impl.a9d(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.9b8362.1: %T.binding.as_type.as.BitOrWith.impl.Op.type.2c510c.1 = struct_value () [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.2c510c.2: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.1, @T.binding.as_type.as.BitOrWith.impl.a9d(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.2c510c.2: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.3, @T.binding.as_type.as.BitOrWith.impl.a9d(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.9b8362.2: %T.binding.as_type.as.BitOrWith.impl.Op.type.2c510c.2 = struct_value () [concrete]
 // CHECK:STDOUT:   %BitOrWith.facet.794: %BitOrWith.type.d59 = facet_value %i64, (%BitOrWith.impl_witness.771) [concrete]
 // CHECK:STDOUT:   %.a4a: type = fn_type_with_self_type %BitOrWith.Op.type.c9c, %BitOrWith.facet.794 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bound.40f9e4.1: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.BitOrWith.impl.Op.9b8362.2 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.bd6228.1: <specific function> = specific_function %T.binding.as_type.as.BitOrWith.impl.Op.9b8362.2, @T.binding.as_type.as.BitOrWith.impl.Op.1(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.bd6228.1: <specific function> = specific_function %T.binding.as_type.as.BitOrWith.impl.Op.9b8362.2, @T.binding.as_type.as.BitOrWith.impl.Op.3(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %bound_method.55f403.1: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.bd6228.1 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bound.40f9e4.2: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.BitOrWith.impl.Op.9b8362.1 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.bd6228.2: <specific function> = specific_function %T.binding.as_type.as.BitOrWith.impl.Op.9b8362.1, @T.binding.as_type.as.BitOrWith.impl.Op.2(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.bd6228.2: <specific function> = specific_function %T.binding.as_type.as.BitOrWith.impl.Op.9b8362.1, @T.binding.as_type.as.BitOrWith.impl.Op.4(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %bound_method.55f403.2: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.bd6228.2 [concrete]
 // CHECK:STDOUT:   %BitXorWith.type.b7e: type = facet_type <@BitXorWith, @BitXorWith(%Cpp.long_long)> [concrete]
 // CHECK:STDOUT:   %BitXorWith.Op.type.1d5: type = fn_type @BitXorWith.Op, @BitXorWith(%Cpp.long_long) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.ac630d.1: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.1, @T.binding.as_type.as.BitXorWith.impl.0e9(%T.ea5) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.ac630d.1: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.3, @T.binding.as_type.as.BitXorWith.impl.0e9(%T.ea5) [symbolic]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.ffb1c4.1: %T.binding.as_type.as.BitXorWith.impl.Op.type.ac630d.1 = struct_value () [symbolic]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.ac630d.2: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.2, @T.binding.as_type.as.BitXorWith.impl.0e9(%T.ea5) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.ac630d.2: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.4, @T.binding.as_type.as.BitXorWith.impl.0e9(%T.ea5) [symbolic]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.ffb1c4.2: %T.binding.as_type.as.BitXorWith.impl.Op.type.ac630d.2 = struct_value () [symbolic]
 // CHECK:STDOUT:   %BitXorWith.impl_witness.28f: <witness> = impl_witness imports.%BitXorWith.impl_witness_table.2f7, @T.binding.as_type.as.BitXorWith.impl.0e9(%ImplicitAs.facet.c59) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.02ef16.1: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.2, @T.binding.as_type.as.BitXorWith.impl.0e9(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.02ef16.1: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.4, @T.binding.as_type.as.BitXorWith.impl.0e9(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.f03227.1: %T.binding.as_type.as.BitXorWith.impl.Op.type.02ef16.1 = struct_value () [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.02ef16.2: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.1, @T.binding.as_type.as.BitXorWith.impl.0e9(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.02ef16.2: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.3, @T.binding.as_type.as.BitXorWith.impl.0e9(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.f03227.2: %T.binding.as_type.as.BitXorWith.impl.Op.type.02ef16.2 = struct_value () [concrete]
 // CHECK:STDOUT:   %BitXorWith.facet.e2c: %BitXorWith.type.b7e = facet_value %i64, (%BitXorWith.impl_witness.28f) [concrete]
 // CHECK:STDOUT:   %.f37: type = fn_type_with_self_type %BitXorWith.Op.type.1d5, %BitXorWith.facet.e2c [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.bound.6bfecd.1: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.BitXorWith.impl.Op.f03227.2 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.bae3fa.1: <specific function> = specific_function %T.binding.as_type.as.BitXorWith.impl.Op.f03227.2, @T.binding.as_type.as.BitXorWith.impl.Op.1(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.bae3fa.1: <specific function> = specific_function %T.binding.as_type.as.BitXorWith.impl.Op.f03227.2, @T.binding.as_type.as.BitXorWith.impl.Op.3(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %bound_method.b2ba8d.1: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.bae3fa.1 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.bound.6bfecd.2: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.BitXorWith.impl.Op.f03227.1 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.bae3fa.2: <specific function> = specific_function %T.binding.as_type.as.BitXorWith.impl.Op.f03227.1, @T.binding.as_type.as.BitXorWith.impl.Op.2(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.bae3fa.2: <specific function> = specific_function %T.binding.as_type.as.BitXorWith.impl.Op.f03227.1, @T.binding.as_type.as.BitXorWith.impl.Op.4(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %bound_method.b2ba8d.2: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.bae3fa.2 [concrete]
 // CHECK:STDOUT:   %LeftShiftWith.type.091: type = facet_type <@LeftShiftWith, @LeftShiftWith(%Cpp.long_long)> [concrete]
 // CHECK:STDOUT:   %LeftShiftWith.Op.type.5df: type = fn_type @LeftShiftWith.Op, @LeftShiftWith(%Cpp.long_long) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.3ecd57.1: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.1, @T.binding.as_type.as.LeftShiftWith.impl.b8c(%T.ea5) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.3ecd57.1: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.3, @T.binding.as_type.as.LeftShiftWith.impl.b8c(%T.ea5) [symbolic]
 // CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.3ee0c1.1: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.3ecd57.1 = struct_value () [symbolic]
-// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.3ecd57.2: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.2, @T.binding.as_type.as.LeftShiftWith.impl.b8c(%T.ea5) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.3ecd57.2: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.4, @T.binding.as_type.as.LeftShiftWith.impl.b8c(%T.ea5) [symbolic]
 // CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.3ee0c1.2: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.3ecd57.2 = struct_value () [symbolic]
 // CHECK:STDOUT:   %LeftShiftWith.impl_witness.95c: <witness> = impl_witness imports.%LeftShiftWith.impl_witness_table.6dc, @T.binding.as_type.as.LeftShiftWith.impl.b8c(%ImplicitAs.facet.c59) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.c82b93.1: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.2, @T.binding.as_type.as.LeftShiftWith.impl.b8c(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.c82b93.1: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.4, @T.binding.as_type.as.LeftShiftWith.impl.b8c(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.300e5a.1: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.c82b93.1 = struct_value () [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.c82b93.2: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.1, @T.binding.as_type.as.LeftShiftWith.impl.b8c(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.c82b93.2: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.3, @T.binding.as_type.as.LeftShiftWith.impl.b8c(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.300e5a.2: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.c82b93.2 = struct_value () [concrete]
 // CHECK:STDOUT:   %LeftShiftWith.facet.3b6: %LeftShiftWith.type.091 = facet_value %i64, (%LeftShiftWith.impl_witness.95c) [concrete]
 // CHECK:STDOUT:   %.3c0: type = fn_type_with_self_type %LeftShiftWith.Op.type.5df, %LeftShiftWith.facet.3b6 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.bound.9bca52.1: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.LeftShiftWith.impl.Op.300e5a.2 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.c7ed9a.1: <specific function> = specific_function %T.binding.as_type.as.LeftShiftWith.impl.Op.300e5a.2, @T.binding.as_type.as.LeftShiftWith.impl.Op.1(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.c7ed9a.1: <specific function> = specific_function %T.binding.as_type.as.LeftShiftWith.impl.Op.300e5a.2, @T.binding.as_type.as.LeftShiftWith.impl.Op.3(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %bound_method.2b7c80.1: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.c7ed9a.1 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.bound.9bca52.2: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.LeftShiftWith.impl.Op.300e5a.1 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.c7ed9a.2: <specific function> = specific_function %T.binding.as_type.as.LeftShiftWith.impl.Op.300e5a.1, @T.binding.as_type.as.LeftShiftWith.impl.Op.2(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.c7ed9a.2: <specific function> = specific_function %T.binding.as_type.as.LeftShiftWith.impl.Op.300e5a.1, @T.binding.as_type.as.LeftShiftWith.impl.Op.4(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %bound_method.2b7c80.2: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.c7ed9a.2 [concrete]
 // CHECK:STDOUT:   %RightShiftWith.type.382: type = facet_type <@RightShiftWith, @RightShiftWith(%Cpp.long_long)> [concrete]
 // CHECK:STDOUT:   %RightShiftWith.Op.type.202: type = fn_type @RightShiftWith.Op, @RightShiftWith(%Cpp.long_long) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.e5d568.1: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.1, @T.binding.as_type.as.RightShiftWith.impl.677(%T.ea5) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.e5d568.1: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.3, @T.binding.as_type.as.RightShiftWith.impl.677(%T.ea5) [symbolic]
 // CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.e94511.1: %T.binding.as_type.as.RightShiftWith.impl.Op.type.e5d568.1 = struct_value () [symbolic]
-// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.e5d568.2: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.2, @T.binding.as_type.as.RightShiftWith.impl.677(%T.ea5) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.e5d568.2: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.4, @T.binding.as_type.as.RightShiftWith.impl.677(%T.ea5) [symbolic]
 // CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.e94511.2: %T.binding.as_type.as.RightShiftWith.impl.Op.type.e5d568.2 = struct_value () [symbolic]
 // CHECK:STDOUT:   %RightShiftWith.impl_witness.015: <witness> = impl_witness imports.%RightShiftWith.impl_witness_table.6b8, @T.binding.as_type.as.RightShiftWith.impl.677(%ImplicitAs.facet.c59) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.ff07c1.1: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.2, @T.binding.as_type.as.RightShiftWith.impl.677(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.ff07c1.1: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.4, @T.binding.as_type.as.RightShiftWith.impl.677(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.513286.1: %T.binding.as_type.as.RightShiftWith.impl.Op.type.ff07c1.1 = struct_value () [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.ff07c1.2: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.1, @T.binding.as_type.as.RightShiftWith.impl.677(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.ff07c1.2: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.3, @T.binding.as_type.as.RightShiftWith.impl.677(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.513286.2: %T.binding.as_type.as.RightShiftWith.impl.Op.type.ff07c1.2 = struct_value () [concrete]
 // CHECK:STDOUT:   %RightShiftWith.facet.532: %RightShiftWith.type.382 = facet_value %i64, (%RightShiftWith.impl_witness.015) [concrete]
 // CHECK:STDOUT:   %.c72: type = fn_type_with_self_type %RightShiftWith.Op.type.202, %RightShiftWith.facet.532 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.bound.1bfdb6.1: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.RightShiftWith.impl.Op.513286.2 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.7142b6.1: <specific function> = specific_function %T.binding.as_type.as.RightShiftWith.impl.Op.513286.2, @T.binding.as_type.as.RightShiftWith.impl.Op.1(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.7142b6.1: <specific function> = specific_function %T.binding.as_type.as.RightShiftWith.impl.Op.513286.2, @T.binding.as_type.as.RightShiftWith.impl.Op.3(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %bound_method.cba0de.1: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.7142b6.1 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.bound.1bfdb6.2: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.RightShiftWith.impl.Op.513286.1 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.7142b6.2: <specific function> = specific_function %T.binding.as_type.as.RightShiftWith.impl.Op.513286.1, @T.binding.as_type.as.RightShiftWith.impl.Op.2(%ImplicitAs.facet.c59) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.7142b6.2: <specific function> = specific_function %T.binding.as_type.as.RightShiftWith.impl.Op.513286.1, @T.binding.as_type.as.RightShiftWith.impl.Op.4(%ImplicitAs.facet.c59) [concrete]
 // CHECK:STDOUT:   %bound_method.cba0de.2: <bound method> = bound_method %int_1.41a, %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.7142b6.2 [concrete]
 // CHECK:STDOUT:   %BitAndWith.impl_witness.d64: <witness> = impl_witness imports.%BitAndWith.impl_witness_table.1b6, @T.binding.as_type.as.BitAndWith.impl.972(%ImplicitAs.facet.d52) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.41163c.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.2, @T.binding.as_type.as.BitAndWith.impl.972(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.41163c.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.4, @T.binding.as_type.as.BitAndWith.impl.972(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.23dbf6.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.41163c.1 = struct_value () [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.41163c.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.1, @T.binding.as_type.as.BitAndWith.impl.972(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.41163c.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.3, @T.binding.as_type.as.BitAndWith.impl.972(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.23dbf6.2: %T.binding.as_type.as.BitAndWith.impl.Op.type.41163c.2 = struct_value () [concrete]
 // CHECK:STDOUT:   %BitAndWith.facet.da7: %BitAndWith.type.97f = facet_value Core.IntLiteral, (%BitAndWith.impl_witness.d64) [concrete]
 // CHECK:STDOUT:   %.47c: type = fn_type_with_self_type %BitAndWith.Op.type.c6c, %BitAndWith.facet.da7 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound.d8a3c5.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitAndWith.impl.Op.23dbf6.2 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.a59d01.1: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.23dbf6.2, @T.binding.as_type.as.BitAndWith.impl.Op.1(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.a59d01.1: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.23dbf6.2, @T.binding.as_type.as.BitAndWith.impl.Op.3(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %bound_method.a03ffd.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.a59d01.1 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound.d8a3c5.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitAndWith.impl.Op.23dbf6.1 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.a59d01.2: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.23dbf6.1, @T.binding.as_type.as.BitAndWith.impl.Op.2(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.a59d01.2: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.23dbf6.1, @T.binding.as_type.as.BitAndWith.impl.Op.4(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %bound_method.a03ffd.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.a59d01.2 [concrete]
 // CHECK:STDOUT:   %BitOrWith.impl_witness.502: <witness> = impl_witness imports.%BitOrWith.impl_witness_table.54a, @T.binding.as_type.as.BitOrWith.impl.a9d(%ImplicitAs.facet.d52) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.30a2d8.1: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.2, @T.binding.as_type.as.BitOrWith.impl.a9d(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.30a2d8.1: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.4, @T.binding.as_type.as.BitOrWith.impl.a9d(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.c03bdc.1: %T.binding.as_type.as.BitOrWith.impl.Op.type.30a2d8.1 = struct_value () [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.30a2d8.2: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.1, @T.binding.as_type.as.BitOrWith.impl.a9d(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.type.30a2d8.2: type = fn_type @T.binding.as_type.as.BitOrWith.impl.Op.3, @T.binding.as_type.as.BitOrWith.impl.a9d(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.c03bdc.2: %T.binding.as_type.as.BitOrWith.impl.Op.type.30a2d8.2 = struct_value () [concrete]
 // CHECK:STDOUT:   %BitOrWith.facet.9bb: %BitOrWith.type.d59 = facet_value Core.IntLiteral, (%BitOrWith.impl_witness.502) [concrete]
 // CHECK:STDOUT:   %.82a: type = fn_type_with_self_type %BitOrWith.Op.type.c9c, %BitOrWith.facet.9bb [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bound.df7ea0.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitOrWith.impl.Op.c03bdc.2 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.caa89a.1: <specific function> = specific_function %T.binding.as_type.as.BitOrWith.impl.Op.c03bdc.2, @T.binding.as_type.as.BitOrWith.impl.Op.1(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.caa89a.1: <specific function> = specific_function %T.binding.as_type.as.BitOrWith.impl.Op.c03bdc.2, @T.binding.as_type.as.BitOrWith.impl.Op.3(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %bound_method.c36bb1.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.caa89a.1 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bound.df7ea0.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitOrWith.impl.Op.c03bdc.1 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.caa89a.2: <specific function> = specific_function %T.binding.as_type.as.BitOrWith.impl.Op.c03bdc.1, @T.binding.as_type.as.BitOrWith.impl.Op.2(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.caa89a.2: <specific function> = specific_function %T.binding.as_type.as.BitOrWith.impl.Op.c03bdc.1, @T.binding.as_type.as.BitOrWith.impl.Op.4(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %bound_method.c36bb1.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.caa89a.2 [concrete]
 // CHECK:STDOUT:   %BitXorWith.impl_witness.f51: <witness> = impl_witness imports.%BitXorWith.impl_witness_table.2f7, @T.binding.as_type.as.BitXorWith.impl.0e9(%ImplicitAs.facet.d52) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.5acb01.1: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.2, @T.binding.as_type.as.BitXorWith.impl.0e9(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.5acb01.1: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.4, @T.binding.as_type.as.BitXorWith.impl.0e9(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.b5e49f.1: %T.binding.as_type.as.BitXorWith.impl.Op.type.5acb01.1 = struct_value () [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.5acb01.2: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.1, @T.binding.as_type.as.BitXorWith.impl.0e9(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.type.5acb01.2: type = fn_type @T.binding.as_type.as.BitXorWith.impl.Op.3, @T.binding.as_type.as.BitXorWith.impl.0e9(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.b5e49f.2: %T.binding.as_type.as.BitXorWith.impl.Op.type.5acb01.2 = struct_value () [concrete]
 // CHECK:STDOUT:   %BitXorWith.facet.289: %BitXorWith.type.b7e = facet_value Core.IntLiteral, (%BitXorWith.impl_witness.f51) [concrete]
 // CHECK:STDOUT:   %.012: type = fn_type_with_self_type %BitXorWith.Op.type.1d5, %BitXorWith.facet.289 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.bound.01bd1e.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitXorWith.impl.Op.b5e49f.2 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.0f91c3.1: <specific function> = specific_function %T.binding.as_type.as.BitXorWith.impl.Op.b5e49f.2, @T.binding.as_type.as.BitXorWith.impl.Op.1(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.0f91c3.1: <specific function> = specific_function %T.binding.as_type.as.BitXorWith.impl.Op.b5e49f.2, @T.binding.as_type.as.BitXorWith.impl.Op.3(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %bound_method.55c9d3.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.0f91c3.1 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.bound.01bd1e.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitXorWith.impl.Op.b5e49f.1 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.0f91c3.2: <specific function> = specific_function %T.binding.as_type.as.BitXorWith.impl.Op.b5e49f.1, @T.binding.as_type.as.BitXorWith.impl.Op.2(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.0f91c3.2: <specific function> = specific_function %T.binding.as_type.as.BitXorWith.impl.Op.b5e49f.1, @T.binding.as_type.as.BitXorWith.impl.Op.4(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %bound_method.55c9d3.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.0f91c3.2 [concrete]
 // CHECK:STDOUT:   %LeftShiftWith.impl_witness.399: <witness> = impl_witness imports.%LeftShiftWith.impl_witness_table.6dc, @T.binding.as_type.as.LeftShiftWith.impl.b8c(%ImplicitAs.facet.d52) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.407181.1: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.2, @T.binding.as_type.as.LeftShiftWith.impl.b8c(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.407181.1: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.4, @T.binding.as_type.as.LeftShiftWith.impl.b8c(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.e1a1d9.1: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.407181.1 = struct_value () [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.407181.2: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.1, @T.binding.as_type.as.LeftShiftWith.impl.b8c(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.type.407181.2: type = fn_type @T.binding.as_type.as.LeftShiftWith.impl.Op.3, @T.binding.as_type.as.LeftShiftWith.impl.b8c(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.e1a1d9.2: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.407181.2 = struct_value () [concrete]
 // CHECK:STDOUT:   %LeftShiftWith.facet.8de: %LeftShiftWith.type.091 = facet_value Core.IntLiteral, (%LeftShiftWith.impl_witness.399) [concrete]
 // CHECK:STDOUT:   %.8cf: type = fn_type_with_self_type %LeftShiftWith.Op.type.5df, %LeftShiftWith.facet.8de [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.bound.481050.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.LeftShiftWith.impl.Op.e1a1d9.2 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.3f9028.1: <specific function> = specific_function %T.binding.as_type.as.LeftShiftWith.impl.Op.e1a1d9.2, @T.binding.as_type.as.LeftShiftWith.impl.Op.1(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.3f9028.1: <specific function> = specific_function %T.binding.as_type.as.LeftShiftWith.impl.Op.e1a1d9.2, @T.binding.as_type.as.LeftShiftWith.impl.Op.3(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %bound_method.9fc9b7.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.3f9028.1 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.bound.481050.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.LeftShiftWith.impl.Op.e1a1d9.1 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.3f9028.2: <specific function> = specific_function %T.binding.as_type.as.LeftShiftWith.impl.Op.e1a1d9.1, @T.binding.as_type.as.LeftShiftWith.impl.Op.2(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.3f9028.2: <specific function> = specific_function %T.binding.as_type.as.LeftShiftWith.impl.Op.e1a1d9.1, @T.binding.as_type.as.LeftShiftWith.impl.Op.4(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %bound_method.9fc9b7.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.3f9028.2 [concrete]
 // CHECK:STDOUT:   %RightShiftWith.impl_witness.464: <witness> = impl_witness imports.%RightShiftWith.impl_witness_table.6b8, @T.binding.as_type.as.RightShiftWith.impl.677(%ImplicitAs.facet.d52) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.82e117.1: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.2, @T.binding.as_type.as.RightShiftWith.impl.677(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.82e117.1: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.4, @T.binding.as_type.as.RightShiftWith.impl.677(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.88b7d8.1: %T.binding.as_type.as.RightShiftWith.impl.Op.type.82e117.1 = struct_value () [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.82e117.2: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.1, @T.binding.as_type.as.RightShiftWith.impl.677(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.type.82e117.2: type = fn_type @T.binding.as_type.as.RightShiftWith.impl.Op.3, @T.binding.as_type.as.RightShiftWith.impl.677(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.88b7d8.2: %T.binding.as_type.as.RightShiftWith.impl.Op.type.82e117.2 = struct_value () [concrete]
 // CHECK:STDOUT:   %RightShiftWith.facet.e35: %RightShiftWith.type.382 = facet_value Core.IntLiteral, (%RightShiftWith.impl_witness.464) [concrete]
 // CHECK:STDOUT:   %.543: type = fn_type_with_self_type %RightShiftWith.Op.type.202, %RightShiftWith.facet.e35 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.bound.d5049d.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.RightShiftWith.impl.Op.88b7d8.2 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.3d7026.1: <specific function> = specific_function %T.binding.as_type.as.RightShiftWith.impl.Op.88b7d8.2, @T.binding.as_type.as.RightShiftWith.impl.Op.1(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.3d7026.1: <specific function> = specific_function %T.binding.as_type.as.RightShiftWith.impl.Op.88b7d8.2, @T.binding.as_type.as.RightShiftWith.impl.Op.3(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %bound_method.dacc1a.1: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.3d7026.1 [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.bound.d5049d.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.RightShiftWith.impl.Op.88b7d8.1 [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.3d7026.2: <specific function> = specific_function %T.binding.as_type.as.RightShiftWith.impl.Op.88b7d8.1, @T.binding.as_type.as.RightShiftWith.impl.Op.2(%ImplicitAs.facet.d52) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.3d7026.2: <specific function> = specific_function %T.binding.as_type.as.RightShiftWith.impl.Op.88b7d8.1, @T.binding.as_type.as.RightShiftWith.impl.Op.4(%ImplicitAs.facet.d52) [concrete]
 // CHECK:STDOUT:   %bound_method.dacc1a.2: <bound method> = bound_method %int_1.5b8, %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.3d7026.2 [concrete]
 // CHECK:STDOUT:   %ImplicitAs.impl_witness.556: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.74f, @Core.IntLiteral.as.ImplicitAs.impl.b2d(%int_64) [concrete]
 // CHECK:STDOUT:   %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.b78: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert.2, @Core.IntLiteral.as.ImplicitAs.impl.b2d(%int_64) [concrete]
@@ -5983,12 +5983,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %a.ref.loc12_31: %Cpp.long_long = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1.loc12: %.14d = impl_witness_access constants.%BitAndWith.impl_witness.668, element1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.77d50f.2]
 // CHECK:STDOUT:   %bound_method.loc12_29.1: <bound method> = bound_method %.loc12_21.2, %impl.elem1.loc12 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.bound.733cd6.1]
-// CHECK:STDOUT:   %specific_fn.loc12_29: <specific function> = specific_function %impl.elem1.loc12, @T.binding.as_type.as.BitAndWith.impl.Op.1(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.16125d.1]
+// CHECK:STDOUT:   %specific_fn.loc12_29: <specific function> = specific_function %impl.elem1.loc12, @T.binding.as_type.as.BitAndWith.impl.Op.3(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.16125d.1]
 // CHECK:STDOUT:   %bound_method.loc12_29.2: <bound method> = bound_method %.loc12_21.2, %specific_fn.loc12_29 [concrete = constants.%bound_method.ba7306.1]
 // CHECK:STDOUT:   %.loc12_29.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.d0d4e3.1 = specific_constant imports.%Core.Op.f87, @T.binding.as_type.as.BitAndWith.impl.972(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.77d50f.1]
 // CHECK:STDOUT:   %Op.ref.loc12: %T.binding.as_type.as.BitAndWith.impl.Op.type.d0d4e3.1 = name_ref Op, %.loc12_29.1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.77d50f.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound.loc12: <bound method> = bound_method %.loc12_21.2, %Op.ref.loc12 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.bound.733cd6.2]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.loc12: <specific function> = specific_function %Op.ref.loc12, @T.binding.as_type.as.BitAndWith.impl.Op.2(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.16125d.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.loc12: <specific function> = specific_function %Op.ref.loc12, @T.binding.as_type.as.BitAndWith.impl.Op.4(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.16125d.2]
 // CHECK:STDOUT:   %bound_method.loc12_29.3: <bound method> = bound_method %.loc12_21.2, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.loc12 [concrete = constants.%bound_method.ba7306.2]
 // CHECK:STDOUT:   %impl.elem0.loc12_21.2: %.b29 = impl_witness_access constants.%ImplicitAs.impl_witness.1b3, element0 [concrete = constants.%i64.as.ImplicitAs.impl.Convert]
 // CHECK:STDOUT:   %bound_method.loc12_21.3: <bound method> = bound_method %.loc12_21.2, %impl.elem0.loc12_21.2 [concrete = constants.%i64.as.ImplicitAs.impl.Convert.bound]
@@ -6015,12 +6015,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %a.ref.loc13_31: %Cpp.long_long = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1.loc13: %.a4a = impl_witness_access constants.%BitOrWith.impl_witness.771, element1 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.9b8362.2]
 // CHECK:STDOUT:   %bound_method.loc13_29.1: <bound method> = bound_method %.loc13_21.2, %impl.elem1.loc13 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.bound.40f9e4.1]
-// CHECK:STDOUT:   %specific_fn.loc13_29: <specific function> = specific_function %impl.elem1.loc13, @T.binding.as_type.as.BitOrWith.impl.Op.1(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.bd6228.1]
+// CHECK:STDOUT:   %specific_fn.loc13_29: <specific function> = specific_function %impl.elem1.loc13, @T.binding.as_type.as.BitOrWith.impl.Op.3(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.bd6228.1]
 // CHECK:STDOUT:   %bound_method.loc13_29.2: <bound method> = bound_method %.loc13_21.2, %specific_fn.loc13_29 [concrete = constants.%bound_method.55f403.1]
 // CHECK:STDOUT:   %.loc13_29.1: %T.binding.as_type.as.BitOrWith.impl.Op.type.2c510c.1 = specific_constant imports.%Core.Op.eb3, @T.binding.as_type.as.BitOrWith.impl.a9d(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.9b8362.1]
 // CHECK:STDOUT:   %Op.ref.loc13: %T.binding.as_type.as.BitOrWith.impl.Op.type.2c510c.1 = name_ref Op, %.loc13_29.1 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.9b8362.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bound.loc13: <bound method> = bound_method %.loc13_21.2, %Op.ref.loc13 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.bound.40f9e4.2]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.loc13: <specific function> = specific_function %Op.ref.loc13, @T.binding.as_type.as.BitOrWith.impl.Op.2(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.bd6228.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.loc13: <specific function> = specific_function %Op.ref.loc13, @T.binding.as_type.as.BitOrWith.impl.Op.4(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.bd6228.2]
 // CHECK:STDOUT:   %bound_method.loc13_29.3: <bound method> = bound_method %.loc13_21.2, %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.loc13 [concrete = constants.%bound_method.55f403.2]
 // CHECK:STDOUT:   %impl.elem0.loc13_21.2: %.b29 = impl_witness_access constants.%ImplicitAs.impl_witness.1b3, element0 [concrete = constants.%i64.as.ImplicitAs.impl.Convert]
 // CHECK:STDOUT:   %bound_method.loc13_21.3: <bound method> = bound_method %.loc13_21.2, %impl.elem0.loc13_21.2 [concrete = constants.%i64.as.ImplicitAs.impl.Convert.bound]
@@ -6047,12 +6047,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %a.ref.loc14_31: %Cpp.long_long = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1.loc14: %.f37 = impl_witness_access constants.%BitXorWith.impl_witness.28f, element1 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.f03227.2]
 // CHECK:STDOUT:   %bound_method.loc14_29.1: <bound method> = bound_method %.loc14_21.2, %impl.elem1.loc14 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.bound.6bfecd.1]
-// CHECK:STDOUT:   %specific_fn.loc14_29: <specific function> = specific_function %impl.elem1.loc14, @T.binding.as_type.as.BitXorWith.impl.Op.1(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.bae3fa.1]
+// CHECK:STDOUT:   %specific_fn.loc14_29: <specific function> = specific_function %impl.elem1.loc14, @T.binding.as_type.as.BitXorWith.impl.Op.3(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.bae3fa.1]
 // CHECK:STDOUT:   %bound_method.loc14_29.2: <bound method> = bound_method %.loc14_21.2, %specific_fn.loc14_29 [concrete = constants.%bound_method.b2ba8d.1]
 // CHECK:STDOUT:   %.loc14_29.1: %T.binding.as_type.as.BitXorWith.impl.Op.type.02ef16.1 = specific_constant imports.%Core.Op.06a, @T.binding.as_type.as.BitXorWith.impl.0e9(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.f03227.1]
 // CHECK:STDOUT:   %Op.ref.loc14: %T.binding.as_type.as.BitXorWith.impl.Op.type.02ef16.1 = name_ref Op, %.loc14_29.1 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.f03227.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.bound.loc14: <bound method> = bound_method %.loc14_21.2, %Op.ref.loc14 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.bound.6bfecd.2]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.loc14: <specific function> = specific_function %Op.ref.loc14, @T.binding.as_type.as.BitXorWith.impl.Op.2(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.bae3fa.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.loc14: <specific function> = specific_function %Op.ref.loc14, @T.binding.as_type.as.BitXorWith.impl.Op.4(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.bae3fa.2]
 // CHECK:STDOUT:   %bound_method.loc14_29.3: <bound method> = bound_method %.loc14_21.2, %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.loc14 [concrete = constants.%bound_method.b2ba8d.2]
 // CHECK:STDOUT:   %impl.elem0.loc14_21.2: %.b29 = impl_witness_access constants.%ImplicitAs.impl_witness.1b3, element0 [concrete = constants.%i64.as.ImplicitAs.impl.Convert]
 // CHECK:STDOUT:   %bound_method.loc14_21.3: <bound method> = bound_method %.loc14_21.2, %impl.elem0.loc14_21.2 [concrete = constants.%i64.as.ImplicitAs.impl.Convert.bound]
@@ -6079,12 +6079,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %a.ref.loc15_32: %Cpp.long_long = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1.loc15: %.3c0 = impl_witness_access constants.%LeftShiftWith.impl_witness.95c, element1 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.300e5a.2]
 // CHECK:STDOUT:   %bound_method.loc15_29.1: <bound method> = bound_method %.loc15_21.2, %impl.elem1.loc15 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.bound.9bca52.1]
-// CHECK:STDOUT:   %specific_fn.loc15_29: <specific function> = specific_function %impl.elem1.loc15, @T.binding.as_type.as.LeftShiftWith.impl.Op.1(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.c7ed9a.1]
+// CHECK:STDOUT:   %specific_fn.loc15_29: <specific function> = specific_function %impl.elem1.loc15, @T.binding.as_type.as.LeftShiftWith.impl.Op.3(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.c7ed9a.1]
 // CHECK:STDOUT:   %bound_method.loc15_29.2: <bound method> = bound_method %.loc15_21.2, %specific_fn.loc15_29 [concrete = constants.%bound_method.2b7c80.1]
 // CHECK:STDOUT:   %.loc15_29.1: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.c82b93.1 = specific_constant imports.%Core.Op.0db, @T.binding.as_type.as.LeftShiftWith.impl.b8c(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.300e5a.1]
 // CHECK:STDOUT:   %Op.ref.loc15: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.c82b93.1 = name_ref Op, %.loc15_29.1 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.300e5a.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.bound.loc15: <bound method> = bound_method %.loc15_21.2, %Op.ref.loc15 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.bound.9bca52.2]
-// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.loc15: <specific function> = specific_function %Op.ref.loc15, @T.binding.as_type.as.LeftShiftWith.impl.Op.2(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.c7ed9a.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.loc15: <specific function> = specific_function %Op.ref.loc15, @T.binding.as_type.as.LeftShiftWith.impl.Op.4(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.c7ed9a.2]
 // CHECK:STDOUT:   %bound_method.loc15_29.3: <bound method> = bound_method %.loc15_21.2, %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.loc15 [concrete = constants.%bound_method.2b7c80.2]
 // CHECK:STDOUT:   %impl.elem0.loc15_21.2: %.b29 = impl_witness_access constants.%ImplicitAs.impl_witness.1b3, element0 [concrete = constants.%i64.as.ImplicitAs.impl.Convert]
 // CHECK:STDOUT:   %bound_method.loc15_21.3: <bound method> = bound_method %.loc15_21.2, %impl.elem0.loc15_21.2 [concrete = constants.%i64.as.ImplicitAs.impl.Convert.bound]
@@ -6111,12 +6111,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %a.ref.loc16_32: %Cpp.long_long = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1.loc16: %.c72 = impl_witness_access constants.%RightShiftWith.impl_witness.015, element1 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.513286.2]
 // CHECK:STDOUT:   %bound_method.loc16_29.1: <bound method> = bound_method %.loc16_21.2, %impl.elem1.loc16 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.bound.1bfdb6.1]
-// CHECK:STDOUT:   %specific_fn.loc16_29: <specific function> = specific_function %impl.elem1.loc16, @T.binding.as_type.as.RightShiftWith.impl.Op.1(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.7142b6.1]
+// CHECK:STDOUT:   %specific_fn.loc16_29: <specific function> = specific_function %impl.elem1.loc16, @T.binding.as_type.as.RightShiftWith.impl.Op.3(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.7142b6.1]
 // CHECK:STDOUT:   %bound_method.loc16_29.2: <bound method> = bound_method %.loc16_21.2, %specific_fn.loc16_29 [concrete = constants.%bound_method.cba0de.1]
 // CHECK:STDOUT:   %.loc16_29.1: %T.binding.as_type.as.RightShiftWith.impl.Op.type.ff07c1.1 = specific_constant imports.%Core.Op.db5, @T.binding.as_type.as.RightShiftWith.impl.677(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.513286.1]
 // CHECK:STDOUT:   %Op.ref.loc16: %T.binding.as_type.as.RightShiftWith.impl.Op.type.ff07c1.1 = name_ref Op, %.loc16_29.1 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.513286.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.bound.loc16: <bound method> = bound_method %.loc16_21.2, %Op.ref.loc16 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.bound.1bfdb6.2]
-// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.loc16: <specific function> = specific_function %Op.ref.loc16, @T.binding.as_type.as.RightShiftWith.impl.Op.2(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.7142b6.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.loc16: <specific function> = specific_function %Op.ref.loc16, @T.binding.as_type.as.RightShiftWith.impl.Op.4(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.7142b6.2]
 // CHECK:STDOUT:   %bound_method.loc16_29.3: <bound method> = bound_method %.loc16_21.2, %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.loc16 [concrete = constants.%bound_method.cba0de.2]
 // CHECK:STDOUT:   %impl.elem0.loc16_21.2: %.b29 = impl_witness_access constants.%ImplicitAs.impl_witness.1b3, element0 [concrete = constants.%i64.as.ImplicitAs.impl.Convert]
 // CHECK:STDOUT:   %bound_method.loc16_21.3: <bound method> = bound_method %.loc16_21.2, %impl.elem0.loc16_21.2 [concrete = constants.%i64.as.ImplicitAs.impl.Convert.bound]
@@ -6134,12 +6134,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %a.ref.loc18_22: %Cpp.long_long = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1.loc18: %.47c = impl_witness_access constants.%BitAndWith.impl_witness.d64, element1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.23dbf6.2]
 // CHECK:STDOUT:   %bound_method.loc18_20.1: <bound method> = bound_method %int_1.loc18, %impl.elem1.loc18 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.bound.d8a3c5.1]
-// CHECK:STDOUT:   %specific_fn.loc18: <specific function> = specific_function %impl.elem1.loc18, @T.binding.as_type.as.BitAndWith.impl.Op.1(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.a59d01.1]
+// CHECK:STDOUT:   %specific_fn.loc18: <specific function> = specific_function %impl.elem1.loc18, @T.binding.as_type.as.BitAndWith.impl.Op.3(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.a59d01.1]
 // CHECK:STDOUT:   %bound_method.loc18_20.2: <bound method> = bound_method %int_1.loc18, %specific_fn.loc18 [concrete = constants.%bound_method.a03ffd.1]
 // CHECK:STDOUT:   %.loc18_20.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.41163c.1 = specific_constant imports.%Core.Op.f87, @T.binding.as_type.as.BitAndWith.impl.972(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.23dbf6.1]
 // CHECK:STDOUT:   %Op.ref.loc18: %T.binding.as_type.as.BitAndWith.impl.Op.type.41163c.1 = name_ref Op, %.loc18_20.1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.23dbf6.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound.loc18: <bound method> = bound_method %int_1.loc18, %Op.ref.loc18 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.bound.d8a3c5.2]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.loc18: <specific function> = specific_function %Op.ref.loc18, @T.binding.as_type.as.BitAndWith.impl.Op.2(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.a59d01.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.loc18: <specific function> = specific_function %Op.ref.loc18, @T.binding.as_type.as.BitAndWith.impl.Op.4(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.a59d01.2]
 // CHECK:STDOUT:   %bound_method.loc18_20.3: <bound method> = bound_method %int_1.loc18, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.loc18 [concrete = constants.%bound_method.a03ffd.2]
 // CHECK:STDOUT:   %impl.elem0.loc18: %.a93 = impl_witness_access constants.%ImplicitAs.impl_witness.82e, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.a20]
 // CHECK:STDOUT:   %bound_method.loc18_18: <bound method> = bound_method %int_1.loc18, %impl.elem0.loc18 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.aae]
@@ -6157,12 +6157,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %a.ref.loc19_22: %Cpp.long_long = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1.loc19: %.82a = impl_witness_access constants.%BitOrWith.impl_witness.502, element1 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.c03bdc.2]
 // CHECK:STDOUT:   %bound_method.loc19_20.1: <bound method> = bound_method %int_1.loc19, %impl.elem1.loc19 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.bound.df7ea0.1]
-// CHECK:STDOUT:   %specific_fn.loc19: <specific function> = specific_function %impl.elem1.loc19, @T.binding.as_type.as.BitOrWith.impl.Op.1(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.caa89a.1]
+// CHECK:STDOUT:   %specific_fn.loc19: <specific function> = specific_function %impl.elem1.loc19, @T.binding.as_type.as.BitOrWith.impl.Op.3(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.caa89a.1]
 // CHECK:STDOUT:   %bound_method.loc19_20.2: <bound method> = bound_method %int_1.loc19, %specific_fn.loc19 [concrete = constants.%bound_method.c36bb1.1]
 // CHECK:STDOUT:   %.loc19_20.1: %T.binding.as_type.as.BitOrWith.impl.Op.type.30a2d8.1 = specific_constant imports.%Core.Op.eb3, @T.binding.as_type.as.BitOrWith.impl.a9d(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.c03bdc.1]
 // CHECK:STDOUT:   %Op.ref.loc19: %T.binding.as_type.as.BitOrWith.impl.Op.type.30a2d8.1 = name_ref Op, %.loc19_20.1 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.c03bdc.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bound.loc19: <bound method> = bound_method %int_1.loc19, %Op.ref.loc19 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.bound.df7ea0.2]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.loc19: <specific function> = specific_function %Op.ref.loc19, @T.binding.as_type.as.BitOrWith.impl.Op.2(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.caa89a.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.loc19: <specific function> = specific_function %Op.ref.loc19, @T.binding.as_type.as.BitOrWith.impl.Op.4(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.caa89a.2]
 // CHECK:STDOUT:   %bound_method.loc19_20.3: <bound method> = bound_method %int_1.loc19, %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.loc19 [concrete = constants.%bound_method.c36bb1.2]
 // CHECK:STDOUT:   %impl.elem0.loc19: %.a93 = impl_witness_access constants.%ImplicitAs.impl_witness.82e, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.a20]
 // CHECK:STDOUT:   %bound_method.loc19_18: <bound method> = bound_method %int_1.loc19, %impl.elem0.loc19 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.aae]
@@ -6180,12 +6180,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %a.ref.loc20_22: %Cpp.long_long = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1.loc20: %.012 = impl_witness_access constants.%BitXorWith.impl_witness.f51, element1 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.b5e49f.2]
 // CHECK:STDOUT:   %bound_method.loc20_20.1: <bound method> = bound_method %int_1.loc20, %impl.elem1.loc20 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.bound.01bd1e.1]
-// CHECK:STDOUT:   %specific_fn.loc20: <specific function> = specific_function %impl.elem1.loc20, @T.binding.as_type.as.BitXorWith.impl.Op.1(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.0f91c3.1]
+// CHECK:STDOUT:   %specific_fn.loc20: <specific function> = specific_function %impl.elem1.loc20, @T.binding.as_type.as.BitXorWith.impl.Op.3(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.0f91c3.1]
 // CHECK:STDOUT:   %bound_method.loc20_20.2: <bound method> = bound_method %int_1.loc20, %specific_fn.loc20 [concrete = constants.%bound_method.55c9d3.1]
 // CHECK:STDOUT:   %.loc20_20.1: %T.binding.as_type.as.BitXorWith.impl.Op.type.5acb01.1 = specific_constant imports.%Core.Op.06a, @T.binding.as_type.as.BitXorWith.impl.0e9(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.b5e49f.1]
 // CHECK:STDOUT:   %Op.ref.loc20: %T.binding.as_type.as.BitXorWith.impl.Op.type.5acb01.1 = name_ref Op, %.loc20_20.1 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.b5e49f.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.bound.loc20: <bound method> = bound_method %int_1.loc20, %Op.ref.loc20 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.bound.01bd1e.2]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.loc20: <specific function> = specific_function %Op.ref.loc20, @T.binding.as_type.as.BitXorWith.impl.Op.2(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.0f91c3.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.loc20: <specific function> = specific_function %Op.ref.loc20, @T.binding.as_type.as.BitXorWith.impl.Op.4(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.0f91c3.2]
 // CHECK:STDOUT:   %bound_method.loc20_20.3: <bound method> = bound_method %int_1.loc20, %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.loc20 [concrete = constants.%bound_method.55c9d3.2]
 // CHECK:STDOUT:   %impl.elem0.loc20: %.a93 = impl_witness_access constants.%ImplicitAs.impl_witness.82e, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.a20]
 // CHECK:STDOUT:   %bound_method.loc20_18: <bound method> = bound_method %int_1.loc20, %impl.elem0.loc20 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.aae]
@@ -6203,12 +6203,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %a.ref.loc21_23: %Cpp.long_long = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1.loc21: %.8cf = impl_witness_access constants.%LeftShiftWith.impl_witness.399, element1 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.e1a1d9.2]
 // CHECK:STDOUT:   %bound_method.loc21_20.1: <bound method> = bound_method %int_1.loc21, %impl.elem1.loc21 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.bound.481050.1]
-// CHECK:STDOUT:   %specific_fn.loc21: <specific function> = specific_function %impl.elem1.loc21, @T.binding.as_type.as.LeftShiftWith.impl.Op.1(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.3f9028.1]
+// CHECK:STDOUT:   %specific_fn.loc21: <specific function> = specific_function %impl.elem1.loc21, @T.binding.as_type.as.LeftShiftWith.impl.Op.3(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.3f9028.1]
 // CHECK:STDOUT:   %bound_method.loc21_20.2: <bound method> = bound_method %int_1.loc21, %specific_fn.loc21 [concrete = constants.%bound_method.9fc9b7.1]
 // CHECK:STDOUT:   %.loc21_20.1: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.407181.1 = specific_constant imports.%Core.Op.0db, @T.binding.as_type.as.LeftShiftWith.impl.b8c(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.e1a1d9.1]
 // CHECK:STDOUT:   %Op.ref.loc21: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.407181.1 = name_ref Op, %.loc21_20.1 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.e1a1d9.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.bound.loc21: <bound method> = bound_method %int_1.loc21, %Op.ref.loc21 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.bound.481050.2]
-// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.loc21: <specific function> = specific_function %Op.ref.loc21, @T.binding.as_type.as.LeftShiftWith.impl.Op.2(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.3f9028.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.loc21: <specific function> = specific_function %Op.ref.loc21, @T.binding.as_type.as.LeftShiftWith.impl.Op.4(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.3f9028.2]
 // CHECK:STDOUT:   %bound_method.loc21_20.3: <bound method> = bound_method %int_1.loc21, %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.loc21 [concrete = constants.%bound_method.9fc9b7.2]
 // CHECK:STDOUT:   %impl.elem0.loc21: %.a93 = impl_witness_access constants.%ImplicitAs.impl_witness.82e, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.a20]
 // CHECK:STDOUT:   %bound_method.loc21_18: <bound method> = bound_method %int_1.loc21, %impl.elem0.loc21 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.aae]
@@ -6226,12 +6226,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %a.ref.loc22_23: %Cpp.long_long = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1.loc22: %.543 = impl_witness_access constants.%RightShiftWith.impl_witness.464, element1 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.88b7d8.2]
 // CHECK:STDOUT:   %bound_method.loc22_20.1: <bound method> = bound_method %int_1.loc22, %impl.elem1.loc22 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.bound.d5049d.1]
-// CHECK:STDOUT:   %specific_fn.loc22: <specific function> = specific_function %impl.elem1.loc22, @T.binding.as_type.as.RightShiftWith.impl.Op.1(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.3d7026.1]
+// CHECK:STDOUT:   %specific_fn.loc22: <specific function> = specific_function %impl.elem1.loc22, @T.binding.as_type.as.RightShiftWith.impl.Op.3(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.3d7026.1]
 // CHECK:STDOUT:   %bound_method.loc22_20.2: <bound method> = bound_method %int_1.loc22, %specific_fn.loc22 [concrete = constants.%bound_method.dacc1a.1]
 // CHECK:STDOUT:   %.loc22_20.1: %T.binding.as_type.as.RightShiftWith.impl.Op.type.82e117.1 = specific_constant imports.%Core.Op.db5, @T.binding.as_type.as.RightShiftWith.impl.677(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.88b7d8.1]
 // CHECK:STDOUT:   %Op.ref.loc22: %T.binding.as_type.as.RightShiftWith.impl.Op.type.82e117.1 = name_ref Op, %.loc22_20.1 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.88b7d8.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.bound.loc22: <bound method> = bound_method %int_1.loc22, %Op.ref.loc22 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.bound.d5049d.2]
-// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.loc22: <specific function> = specific_function %Op.ref.loc22, @T.binding.as_type.as.RightShiftWith.impl.Op.2(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.3d7026.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.loc22: <specific function> = specific_function %Op.ref.loc22, @T.binding.as_type.as.RightShiftWith.impl.Op.4(constants.%ImplicitAs.facet.d52) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.3d7026.2]
 // CHECK:STDOUT:   %bound_method.loc22_20.3: <bound method> = bound_method %int_1.loc22, %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.loc22 [concrete = constants.%bound_method.dacc1a.2]
 // CHECK:STDOUT:   %impl.elem0.loc22: %.a93 = impl_witness_access constants.%ImplicitAs.impl_witness.82e, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.a20]
 // CHECK:STDOUT:   %bound_method.loc22_18: <bound method> = bound_method %int_1.loc22, %impl.elem0.loc22 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.aae]
@@ -6265,12 +6265,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %a.ref.loc25_22: %Cpp.long_long = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1.loc25: %.14d = impl_witness_access constants.%BitAndWith.impl_witness.668, element1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.77d50f.2]
 // CHECK:STDOUT:   %bound_method.loc25_20.1: <bound method> = bound_method %b.ref.loc25, %impl.elem1.loc25
-// CHECK:STDOUT:   %specific_fn.loc25: <specific function> = specific_function %impl.elem1.loc25, @T.binding.as_type.as.BitAndWith.impl.Op.1(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.16125d.1]
+// CHECK:STDOUT:   %specific_fn.loc25: <specific function> = specific_function %impl.elem1.loc25, @T.binding.as_type.as.BitAndWith.impl.Op.3(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.16125d.1]
 // CHECK:STDOUT:   %bound_method.loc25_20.2: <bound method> = bound_method %b.ref.loc25, %specific_fn.loc25
 // CHECK:STDOUT:   %.loc25_20.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.d0d4e3.1 = specific_constant imports.%Core.Op.f87, @T.binding.as_type.as.BitAndWith.impl.972(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.77d50f.1]
 // CHECK:STDOUT:   %Op.ref.loc25: %T.binding.as_type.as.BitAndWith.impl.Op.type.d0d4e3.1 = name_ref Op, %.loc25_20.1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.77d50f.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound.loc25: <bound method> = bound_method %b.ref.loc25, %Op.ref.loc25
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.loc25: <specific function> = specific_function %Op.ref.loc25, @T.binding.as_type.as.BitAndWith.impl.Op.2(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.16125d.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.loc25: <specific function> = specific_function %Op.ref.loc25, @T.binding.as_type.as.BitAndWith.impl.Op.4(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.16125d.2]
 // CHECK:STDOUT:   %bound_method.loc25_20.3: <bound method> = bound_method %b.ref.loc25, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.loc25
 // CHECK:STDOUT:   %impl.elem0.loc25: %.b29 = impl_witness_access constants.%ImplicitAs.impl_witness.1b3, element0 [concrete = constants.%i64.as.ImplicitAs.impl.Convert]
 // CHECK:STDOUT:   %bound_method.loc25_18: <bound method> = bound_method %b.ref.loc25, %impl.elem0.loc25
@@ -6288,12 +6288,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %a.ref.loc26_22: %Cpp.long_long = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1.loc26: %.a4a = impl_witness_access constants.%BitOrWith.impl_witness.771, element1 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.9b8362.2]
 // CHECK:STDOUT:   %bound_method.loc26_20.1: <bound method> = bound_method %b.ref.loc26, %impl.elem1.loc26
-// CHECK:STDOUT:   %specific_fn.loc26: <specific function> = specific_function %impl.elem1.loc26, @T.binding.as_type.as.BitOrWith.impl.Op.1(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.bd6228.1]
+// CHECK:STDOUT:   %specific_fn.loc26: <specific function> = specific_function %impl.elem1.loc26, @T.binding.as_type.as.BitOrWith.impl.Op.3(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.bd6228.1]
 // CHECK:STDOUT:   %bound_method.loc26_20.2: <bound method> = bound_method %b.ref.loc26, %specific_fn.loc26
 // CHECK:STDOUT:   %.loc26_20.1: %T.binding.as_type.as.BitOrWith.impl.Op.type.2c510c.1 = specific_constant imports.%Core.Op.eb3, @T.binding.as_type.as.BitOrWith.impl.a9d(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.9b8362.1]
 // CHECK:STDOUT:   %Op.ref.loc26: %T.binding.as_type.as.BitOrWith.impl.Op.type.2c510c.1 = name_ref Op, %.loc26_20.1 [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.9b8362.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.bound.loc26: <bound method> = bound_method %b.ref.loc26, %Op.ref.loc26
-// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.loc26: <specific function> = specific_function %Op.ref.loc26, @T.binding.as_type.as.BitOrWith.impl.Op.2(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.bd6228.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.loc26: <specific function> = specific_function %Op.ref.loc26, @T.binding.as_type.as.BitOrWith.impl.Op.4(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.bd6228.2]
 // CHECK:STDOUT:   %bound_method.loc26_20.3: <bound method> = bound_method %b.ref.loc26, %T.binding.as_type.as.BitOrWith.impl.Op.specific_fn.loc26
 // CHECK:STDOUT:   %impl.elem0.loc26: %.b29 = impl_witness_access constants.%ImplicitAs.impl_witness.1b3, element0 [concrete = constants.%i64.as.ImplicitAs.impl.Convert]
 // CHECK:STDOUT:   %bound_method.loc26_18: <bound method> = bound_method %b.ref.loc26, %impl.elem0.loc26
@@ -6311,12 +6311,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %a.ref.loc27_22: %Cpp.long_long = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1.loc27: %.f37 = impl_witness_access constants.%BitXorWith.impl_witness.28f, element1 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.f03227.2]
 // CHECK:STDOUT:   %bound_method.loc27_20.1: <bound method> = bound_method %b.ref.loc27, %impl.elem1.loc27
-// CHECK:STDOUT:   %specific_fn.loc27: <specific function> = specific_function %impl.elem1.loc27, @T.binding.as_type.as.BitXorWith.impl.Op.1(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.bae3fa.1]
+// CHECK:STDOUT:   %specific_fn.loc27: <specific function> = specific_function %impl.elem1.loc27, @T.binding.as_type.as.BitXorWith.impl.Op.3(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.bae3fa.1]
 // CHECK:STDOUT:   %bound_method.loc27_20.2: <bound method> = bound_method %b.ref.loc27, %specific_fn.loc27
 // CHECK:STDOUT:   %.loc27_20.1: %T.binding.as_type.as.BitXorWith.impl.Op.type.02ef16.1 = specific_constant imports.%Core.Op.06a, @T.binding.as_type.as.BitXorWith.impl.0e9(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.f03227.1]
 // CHECK:STDOUT:   %Op.ref.loc27: %T.binding.as_type.as.BitXorWith.impl.Op.type.02ef16.1 = name_ref Op, %.loc27_20.1 [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.f03227.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.bound.loc27: <bound method> = bound_method %b.ref.loc27, %Op.ref.loc27
-// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.loc27: <specific function> = specific_function %Op.ref.loc27, @T.binding.as_type.as.BitXorWith.impl.Op.2(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.bae3fa.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.loc27: <specific function> = specific_function %Op.ref.loc27, @T.binding.as_type.as.BitXorWith.impl.Op.4(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.bae3fa.2]
 // CHECK:STDOUT:   %bound_method.loc27_20.3: <bound method> = bound_method %b.ref.loc27, %T.binding.as_type.as.BitXorWith.impl.Op.specific_fn.loc27
 // CHECK:STDOUT:   %impl.elem0.loc27: %.b29 = impl_witness_access constants.%ImplicitAs.impl_witness.1b3, element0 [concrete = constants.%i64.as.ImplicitAs.impl.Convert]
 // CHECK:STDOUT:   %bound_method.loc27_18: <bound method> = bound_method %b.ref.loc27, %impl.elem0.loc27
@@ -6334,12 +6334,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %a.ref.loc28_23: %Cpp.long_long = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1.loc28: %.3c0 = impl_witness_access constants.%LeftShiftWith.impl_witness.95c, element1 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.300e5a.2]
 // CHECK:STDOUT:   %bound_method.loc28_20.1: <bound method> = bound_method %b.ref.loc28, %impl.elem1.loc28
-// CHECK:STDOUT:   %specific_fn.loc28: <specific function> = specific_function %impl.elem1.loc28, @T.binding.as_type.as.LeftShiftWith.impl.Op.1(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.c7ed9a.1]
+// CHECK:STDOUT:   %specific_fn.loc28: <specific function> = specific_function %impl.elem1.loc28, @T.binding.as_type.as.LeftShiftWith.impl.Op.3(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.c7ed9a.1]
 // CHECK:STDOUT:   %bound_method.loc28_20.2: <bound method> = bound_method %b.ref.loc28, %specific_fn.loc28
 // CHECK:STDOUT:   %.loc28_20.1: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.c82b93.1 = specific_constant imports.%Core.Op.0db, @T.binding.as_type.as.LeftShiftWith.impl.b8c(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.300e5a.1]
 // CHECK:STDOUT:   %Op.ref.loc28: %T.binding.as_type.as.LeftShiftWith.impl.Op.type.c82b93.1 = name_ref Op, %.loc28_20.1 [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.300e5a.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.bound.loc28: <bound method> = bound_method %b.ref.loc28, %Op.ref.loc28
-// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.loc28: <specific function> = specific_function %Op.ref.loc28, @T.binding.as_type.as.LeftShiftWith.impl.Op.2(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.c7ed9a.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.loc28: <specific function> = specific_function %Op.ref.loc28, @T.binding.as_type.as.LeftShiftWith.impl.Op.4(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.c7ed9a.2]
 // CHECK:STDOUT:   %bound_method.loc28_20.3: <bound method> = bound_method %b.ref.loc28, %T.binding.as_type.as.LeftShiftWith.impl.Op.specific_fn.loc28
 // CHECK:STDOUT:   %impl.elem0.loc28: %.b29 = impl_witness_access constants.%ImplicitAs.impl_witness.1b3, element0 [concrete = constants.%i64.as.ImplicitAs.impl.Convert]
 // CHECK:STDOUT:   %bound_method.loc28_18: <bound method> = bound_method %b.ref.loc28, %impl.elem0.loc28
@@ -6357,12 +6357,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %a.ref.loc29_23: %Cpp.long_long = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1.loc29: %.c72 = impl_witness_access constants.%RightShiftWith.impl_witness.015, element1 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.513286.2]
 // CHECK:STDOUT:   %bound_method.loc29_20.1: <bound method> = bound_method %b.ref.loc29, %impl.elem1.loc29
-// CHECK:STDOUT:   %specific_fn.loc29: <specific function> = specific_function %impl.elem1.loc29, @T.binding.as_type.as.RightShiftWith.impl.Op.1(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.7142b6.1]
+// CHECK:STDOUT:   %specific_fn.loc29: <specific function> = specific_function %impl.elem1.loc29, @T.binding.as_type.as.RightShiftWith.impl.Op.3(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.7142b6.1]
 // CHECK:STDOUT:   %bound_method.loc29_20.2: <bound method> = bound_method %b.ref.loc29, %specific_fn.loc29
 // CHECK:STDOUT:   %.loc29_20.1: %T.binding.as_type.as.RightShiftWith.impl.Op.type.ff07c1.1 = specific_constant imports.%Core.Op.db5, @T.binding.as_type.as.RightShiftWith.impl.677(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.513286.1]
 // CHECK:STDOUT:   %Op.ref.loc29: %T.binding.as_type.as.RightShiftWith.impl.Op.type.ff07c1.1 = name_ref Op, %.loc29_20.1 [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.513286.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.bound.loc29: <bound method> = bound_method %b.ref.loc29, %Op.ref.loc29
-// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.loc29: <specific function> = specific_function %Op.ref.loc29, @T.binding.as_type.as.RightShiftWith.impl.Op.2(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.7142b6.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.loc29: <specific function> = specific_function %Op.ref.loc29, @T.binding.as_type.as.RightShiftWith.impl.Op.4(constants.%ImplicitAs.facet.c59) [concrete = constants.%T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.7142b6.2]
 // CHECK:STDOUT:   %bound_method.loc29_20.3: <bound method> = bound_method %b.ref.loc29, %T.binding.as_type.as.RightShiftWith.impl.Op.specific_fn.loc29
 // CHECK:STDOUT:   %impl.elem0.loc29: %.b29 = impl_witness_access constants.%ImplicitAs.impl_witness.1b3, element0 [concrete = constants.%i64.as.ImplicitAs.impl.Convert]
 // CHECK:STDOUT:   %bound_method.loc29_18: <bound method> = bound_method %b.ref.loc29, %impl.elem0.loc29
@@ -6426,21 +6426,21 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.type.1b6537.2: type = fn_type @Int.as.BitAndWith.impl.Op.3, @Int.as.BitAndWith.impl.4ac(%N, %U.354) [symbolic]
 // CHECK:STDOUT:   %Int.as.BitAndWith.impl.Op.b9569a.2: %Int.as.BitAndWith.impl.Op.type.1b6537.2 = struct_value () [symbolic]
 // CHECK:STDOUT:   %T.354: %ImplicitAs.type.39a54f.2 = symbolic_binding T, 1 [symbolic]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.3, @T.binding.as_type.as.BitAndWith.impl.96d(%N, %T.354) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.5, @T.binding.as_type.as.BitAndWith.impl.96d(%N, %T.354) [symbolic]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.892c6d.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.1 = struct_value () [symbolic]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.4, @T.binding.as_type.as.BitAndWith.impl.96d(%N, %T.354) [symbolic]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.6, @T.binding.as_type.as.BitAndWith.impl.96d(%N, %T.354) [symbolic]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.892c6d.2: %T.binding.as_type.as.BitAndWith.impl.Op.type.e95062.2 = struct_value () [symbolic]
 // CHECK:STDOUT:   %ImplicitAs.impl_witness.0f2: <witness> = impl_witness imports.%ImplicitAs.impl_witness_table.eb2 [concrete]
 // CHECK:STDOUT:   %ImplicitAs.facet.211: %ImplicitAs.type.e19 = facet_value %Cpp.long_long, (%ImplicitAs.impl_witness.0f2) [concrete]
 // CHECK:STDOUT:   %BitAndWith.impl_witness.da1: <witness> = impl_witness imports.%BitAndWith.impl_witness_table.5e7, @T.binding.as_type.as.BitAndWith.impl.96d(%int_128, %ImplicitAs.facet.211) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.4c32e1.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.4, @T.binding.as_type.as.BitAndWith.impl.96d(%int_128, %ImplicitAs.facet.211) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.4c32e1.1: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.6, @T.binding.as_type.as.BitAndWith.impl.96d(%int_128, %ImplicitAs.facet.211) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.85dfed.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.4c32e1.1 = struct_value () [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.4c32e1.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.3, @T.binding.as_type.as.BitAndWith.impl.96d(%int_128, %ImplicitAs.facet.211) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.type.4c32e1.2: type = fn_type @T.binding.as_type.as.BitAndWith.impl.Op.5, @T.binding.as_type.as.BitAndWith.impl.96d(%int_128, %ImplicitAs.facet.211) [concrete]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.85dfed.2: %T.binding.as_type.as.BitAndWith.impl.Op.type.4c32e1.2 = struct_value () [concrete]
 // CHECK:STDOUT:   %BitAndWith.facet.1ed: %BitAndWith.type.a54 = facet_value %Cpp.long_long, (%BitAndWith.impl_witness.da1) [concrete]
 // CHECK:STDOUT:   %.53c: type = fn_type_with_self_type %BitAndWith.Op.type.77e, %BitAndWith.facet.1ed [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.98f0dd.1: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.85dfed.2, @T.binding.as_type.as.BitAndWith.impl.Op.3(%int_128, %ImplicitAs.facet.211) [concrete]
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.98f0dd.2: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.85dfed.1, @T.binding.as_type.as.BitAndWith.impl.Op.4(%int_128, %ImplicitAs.facet.211) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.98f0dd.1: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.85dfed.2, @T.binding.as_type.as.BitAndWith.impl.Op.5(%int_128, %ImplicitAs.facet.211) [concrete]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.98f0dd.2: <specific function> = specific_function %T.binding.as_type.as.BitAndWith.impl.Op.85dfed.1, @T.binding.as_type.as.BitAndWith.impl.Op.6(%int_128, %ImplicitAs.facet.211) [concrete]
 // CHECK:STDOUT:   %.6e1: type = fn_type_with_self_type %ImplicitAs.Convert.type.812, %ImplicitAs.facet.211 [concrete]
 // CHECK:STDOUT:   %Cpp.long_long.as.ImplicitAs.impl.Convert.type: type = fn_type @Cpp.long_long.as.ImplicitAs.impl.Convert [concrete]
 // CHECK:STDOUT:   %Cpp.long_long.as.ImplicitAs.impl.Convert: %Cpp.long_long.as.ImplicitAs.impl.Convert.type = struct_value () [concrete]
@@ -6514,12 +6514,12 @@ fn CopyUnsignedLongLong() {
 // CHECK:STDOUT:   %b.ref.loc13_22: %i128 = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem1.loc13: %.53c = impl_witness_access constants.%BitAndWith.impl_witness.da1, element1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.85dfed.2]
 // CHECK:STDOUT:   %bound_method.loc13_20.1: <bound method> = bound_method %a.ref.loc13, %impl.elem1.loc13
-// CHECK:STDOUT:   %specific_fn.loc13: <specific function> = specific_function %impl.elem1.loc13, @T.binding.as_type.as.BitAndWith.impl.Op.3(constants.%int_128, constants.%ImplicitAs.facet.211) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.98f0dd.1]
+// CHECK:STDOUT:   %specific_fn.loc13: <specific function> = specific_function %impl.elem1.loc13, @T.binding.as_type.as.BitAndWith.impl.Op.5(constants.%int_128, constants.%ImplicitAs.facet.211) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.98f0dd.1]
 // CHECK:STDOUT:   %bound_method.loc13_20.2: <bound method> = bound_method %a.ref.loc13, %specific_fn.loc13
 // CHECK:STDOUT:   %.loc13_20.1: %T.binding.as_type.as.BitAndWith.impl.Op.type.4c32e1.1 = specific_constant imports.%Core.Op.944, @T.binding.as_type.as.BitAndWith.impl.96d(constants.%int_128, constants.%ImplicitAs.facet.211) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.85dfed.1]
 // CHECK:STDOUT:   %Op.ref.loc13: %T.binding.as_type.as.BitAndWith.impl.Op.type.4c32e1.1 = name_ref Op, %.loc13_20.1 [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.85dfed.1]
 // CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.bound: <bound method> = bound_method %a.ref.loc13, %Op.ref.loc13
-// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn: <specific function> = specific_function %Op.ref.loc13, @T.binding.as_type.as.BitAndWith.impl.Op.4(constants.%int_128, constants.%ImplicitAs.facet.211) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.98f0dd.2]
+// CHECK:STDOUT:   %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn: <specific function> = specific_function %Op.ref.loc13, @T.binding.as_type.as.BitAndWith.impl.Op.6(constants.%int_128, constants.%ImplicitAs.facet.211) [concrete = constants.%T.binding.as_type.as.BitAndWith.impl.Op.specific_fn.98f0dd.2]
 // CHECK:STDOUT:   %bound_method.loc13_20.3: <bound method> = bound_method %a.ref.loc13, %T.binding.as_type.as.BitAndWith.impl.Op.specific_fn
 // CHECK:STDOUT:   %impl.elem0.loc13: %.6e1 = impl_witness_access constants.%ImplicitAs.impl_witness.0f2, element0 [concrete = constants.%Cpp.long_long.as.ImplicitAs.impl.Convert]
 // CHECK:STDOUT:   %bound_method.loc13_18: <bound method> = bound_method %a.ref.loc13, %impl.elem0.loc13