Ver Fonte

Collapse names into VarStorage (#3116)

This removes BindName, putting name information directly on VarStorage.
As a side-effect of updating semantics_ir_test for this change, I also
noted that function bodies were being generated as invalid YAML so am
fixing that (just `{}` to `[]` bracketing, otherwise the test wouldn't
work anymore).

Because names are now available, I've updated lowering to use them for
vars.

In the SemIR formatter, the name is now repeated because it's a
parameter to VarStorage. I believe this is just default behavior, and
we'd have to special-case VarStorage to remove it because it's automatic
argument printing in action. On the balance, it felt like letting it
print was reasonable.

I've noted in places that the name on VarStorage is expected to be
optional, but am not adding support because I'd have no way of testing
it at present.
Jon Ross-Perkins há 2 anos atrás
pai
commit
2425e28e3a
100 ficheiros alterados com 862 adições e 1089 exclusões
  1. 3 6
      toolchain/lowering/lowering_context.cpp
  2. 5 7
      toolchain/lowering/lowering_handle.cpp
  3. 2 2
      toolchain/lowering/testdata/array/assign_return_value.carbon
  4. 71 71
      toolchain/lowering/testdata/array/base.carbon
  5. 2 2
      toolchain/lowering/testdata/function/call/empty_struct.carbon
  6. 2 2
      toolchain/lowering/testdata/function/call/empty_tuple.carbon
  7. 2 2
      toolchain/lowering/testdata/function/call/i32.carbon
  8. 2 2
      toolchain/lowering/testdata/function/call/implicit_empty_tuple_as_arg.carbon
  9. 2 2
      toolchain/lowering/testdata/function/call/return_implicit.carbon
  10. 3 3
      toolchain/lowering/testdata/function/call/var_param.carbon
  11. 13 13
      toolchain/lowering/testdata/index/array_element_access.carbon
  12. 9 9
      toolchain/lowering/testdata/index/tuple_element_access.carbon
  13. 2 2
      toolchain/lowering/testdata/index/tuple_return_value_access.carbon
  14. 9 9
      toolchain/lowering/testdata/operators/assignment.carbon
  15. 3 3
      toolchain/lowering/testdata/pointer/address_of_field.carbon
  16. 3 3
      toolchain/lowering/testdata/pointer/basic.carbon
  17. 3 3
      toolchain/lowering/testdata/return/var.carbon
  18. 5 5
      toolchain/lowering/testdata/struct/empty.carbon
  19. 9 9
      toolchain/lowering/testdata/struct/member_access.carbon
  20. 5 5
      toolchain/lowering/testdata/struct/one_entry.carbon
  21. 5 5
      toolchain/lowering/testdata/struct/two_entries.carbon
  22. 5 5
      toolchain/lowering/testdata/tuple/empty.carbon
  23. 5 5
      toolchain/lowering/testdata/tuple/one_entry.carbon
  24. 5 5
      toolchain/lowering/testdata/tuple/two_entries.carbon
  25. 3 3
      toolchain/lowering/testdata/var/local.carbon
  26. 2 2
      toolchain/semantics/semantics_handle_function.cpp
  27. 2 7
      toolchain/semantics/semantics_handle_pattern_binding.cpp
  28. 7 8
      toolchain/semantics/semantics_handle_variable.cpp
  29. 0 8
      toolchain/semantics/semantics_ir.cpp
  30. 1 1
      toolchain/semantics/semantics_ir.h
  31. 20 37
      toolchain/semantics/semantics_ir_formatter.cpp
  32. 11 9
      toolchain/semantics/semantics_ir_test.cpp
  33. 4 6
      toolchain/semantics/semantics_node.h
  34. 0 1
      toolchain/semantics/semantics_node_kind.def
  35. 6 8
      toolchain/semantics/testdata/array/assign_return_value.carbon
  36. 14 18
      toolchain/semantics/testdata/array/assign_var.carbon
  37. 35 41
      toolchain/semantics/testdata/array/base.carbon
  38. 2 4
      toolchain/semantics/testdata/array/fail_invalid_type.carbon
  39. 9 11
      toolchain/semantics/testdata/array/fail_out_of_bound.carbon
  40. 7 9
      toolchain/semantics/testdata/array/fail_type_mismatch.carbon
  41. 12 20
      toolchain/semantics/testdata/basics/builtin_types.carbon
  42. 1 1
      toolchain/semantics/testdata/basics/fail_name_lookup.carbon
  43. 2 4
      toolchain/semantics/testdata/basics/fail_non_type_as_type.carbon
  44. 5 9
      toolchain/semantics/testdata/basics/fail_qualifier_unsupported.carbon
  45. 4 6
      toolchain/semantics/testdata/basics/parens.carbon
  46. 5 7
      toolchain/semantics/testdata/const/collapse.carbon
  47. 6 8
      toolchain/semantics/testdata/const/fail_collapse.carbon
  48. 10 12
      toolchain/semantics/testdata/function/call/empty_struct.carbon
  49. 10 12
      toolchain/semantics/testdata/function/call/empty_tuple.carbon
  50. 31 37
      toolchain/semantics/testdata/function/call/fail_param_count.carbon
  51. 10 12
      toolchain/semantics/testdata/function/call/fail_param_type.carbon
  52. 4 6
      toolchain/semantics/testdata/function/call/fail_return_type_mismatch.carbon
  53. 13 17
      toolchain/semantics/testdata/function/call/i32.carbon
  54. 22 28
      toolchain/semantics/testdata/function/call/more_param_ir.carbon
  55. 11 13
      toolchain/semantics/testdata/function/call/params_one.carbon
  56. 13 15
      toolchain/semantics/testdata/function/call/params_one_comma.carbon
  57. 13 17
      toolchain/semantics/testdata/function/call/params_two.carbon
  58. 16 20
      toolchain/semantics/testdata/function/call/params_two_comma.carbon
  59. 2 2
      toolchain/semantics/testdata/function/call/params_zero.carbon
  60. 5 7
      toolchain/semantics/testdata/function/call/return_implicit.carbon
  61. 1 1
      toolchain/semantics/testdata/function/declaration/simple.carbon
  62. 6 10
      toolchain/semantics/testdata/function/definition/fail_param_name_conflict.carbon
  63. 3 3
      toolchain/semantics/testdata/function/definition/order.carbon
  64. 5 7
      toolchain/semantics/testdata/function/definition/params_one.carbon
  65. 5 7
      toolchain/semantics/testdata/function/definition/params_one_comma.carbon
  66. 6 10
      toolchain/semantics/testdata/function/definition/params_two.carbon
  67. 6 10
      toolchain/semantics/testdata/function/definition/params_two_comma.carbon
  68. 1 1
      toolchain/semantics/testdata/function/definition/params_zero.carbon
  69. 9 13
      toolchain/semantics/testdata/function/definition/same_param_name.carbon
  70. 13 15
      toolchain/semantics/testdata/if/else.carbon
  71. 25 31
      toolchain/semantics/testdata/if/fail_reachable_fallthrough.carbon
  72. 11 15
      toolchain/semantics/testdata/if/fail_scope.carbon
  73. 10 12
      toolchain/semantics/testdata/if/no_else.carbon
  74. 9 11
      toolchain/semantics/testdata/if/unreachable_fallthrough.carbon
  75. 18 24
      toolchain/semantics/testdata/if_expression/basic.carbon
  76. 4 4
      toolchain/semantics/testdata/if_expression/constant_condition.carbon
  77. 12 14
      toolchain/semantics/testdata/if_expression/control_flow.carbon
  78. 29 35
      toolchain/semantics/testdata/if_expression/nested.carbon
  79. 20 28
      toolchain/semantics/testdata/index/array_element_access.carbon
  80. 10 14
      toolchain/semantics/testdata/index/fail_array_large_index.carbon
  81. 10 14
      toolchain/semantics/testdata/index/fail_array_non_int_indexing.carbon
  82. 10 14
      toolchain/semantics/testdata/index/fail_array_out_of_bound_access.carbon
  83. 2 2
      toolchain/semantics/testdata/index/fail_empty_tuple_access.carbon
  84. 3 5
      toolchain/semantics/testdata/index/fail_name_not_found.carbon
  85. 7 11
      toolchain/semantics/testdata/index/fail_negative_indexing.carbon
  86. 13 19
      toolchain/semantics/testdata/index/fail_non_deterministic_type.carbon
  87. 1 1
      toolchain/semantics/testdata/index/fail_non_tuple_access.carbon
  88. 12 18
      toolchain/semantics/testdata/index/fail_tuple_large_index.carbon
  89. 10 14
      toolchain/semantics/testdata/index/fail_tuple_non_int_indexing.carbon
  90. 10 14
      toolchain/semantics/testdata/index/fail_tuple_out_of_bound_access.carbon
  91. 13 19
      toolchain/semantics/testdata/index/tuple_element_access.carbon
  92. 2 2
      toolchain/semantics/testdata/index/tuple_return_value_access.carbon
  93. 10 14
      toolchain/semantics/testdata/ir/duplicate_name_same_line.carbon
  94. 2 2
      toolchain/semantics/testdata/namespace/fail_duplicate.carbon
  95. 1 1
      toolchain/semantics/testdata/namespace/fail_unresolved_scope.carbon
  96. 3 3
      toolchain/semantics/testdata/namespace/function.carbon
  97. 2 2
      toolchain/semantics/testdata/namespace/nested.carbon
  98. 3 3
      toolchain/semantics/testdata/operators/and.carbon
  99. 51 59
      toolchain/semantics/testdata/operators/assignment.carbon
  100. 1 1
      toolchain/semantics/testdata/operators/binary_op.carbon

+ 3 - 6
toolchain/lowering/lowering_context.cpp

@@ -78,9 +78,8 @@ auto LoweringContext::BuildFunctionDeclaration(SemanticsFunctionId function_id)
 
   // Set parameter names.
   for (int i = 0; i < static_cast<int>(param_refs.size()); ++i) {
-    auto [param_name_id, _] =
-        semantics_ir().GetNode(param_refs[i]).GetAsBindName();
-    llvm_function->getArg(i)->setName(semantics_ir().GetString(param_name_id));
+    auto name_id = semantics_ir().GetNode(param_refs[i]).GetAsVarStorage();
+    llvm_function->getArg(i)->setName(semantics_ir().GetString(name_id));
   }
 
   return llvm_function;
@@ -101,9 +100,7 @@ auto LoweringContext::BuildFunctionDefinition(SemanticsFunctionId function_id)
   // Add parameters to locals.
   auto param_refs = semantics_ir().GetNodeBlock(function.param_refs_id);
   for (int i = 0; i < static_cast<int>(param_refs.size()); ++i) {
-    auto param_storage =
-        semantics_ir().GetNode(param_refs[i]).GetAsBindName().second;
-    function_lowering.SetLocal(param_storage, llvm_function->getArg(i));
+    function_lowering.SetLocal(param_refs[i], llvm_function->getArg(i));
   }
 
   // Lower all blocks.

+ 5 - 7
toolchain/lowering/lowering_handle.cpp

@@ -363,14 +363,12 @@ auto LoweringHandleUnaryOperatorNot(LoweringFunctionContext& context,
 auto LoweringHandleVarStorage(LoweringFunctionContext& context,
                               SemanticsNodeId node_id, SemanticsNode node)
     -> void {
-  // TODO: This should provide a name, not just `var`. Also, LLVM requires
-  // globals to have a name. Do we want to generate a name, which would need to
-  // be consistent across translation units, or use the given name, which
-  // requires either looking ahead for BindName or restructuring semantics,
-  // either of which affects the destructuring due to the difference in
-  // storage?
+  // TODO: Eventually this name will be optional, and we'll want to provide
+  // something like `var` as a default. However, that's not possible right now
+  // so cannot be tested.
+  auto name = context.semantics_ir().GetString(node.GetAsVarStorage());
   auto* alloca = context.builder().CreateAlloca(context.GetType(node.type_id()),
-                                                /*ArraySize=*/nullptr, "var");
+                                                /*ArraySize=*/nullptr, name);
   context.SetLocal(node_id, alloca);
 }
 

+ 2 - 2
toolchain/lowering/testdata/array/assign_return_value.carbon

@@ -24,7 +24,7 @@ fn Run() {
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @Run() {
-// CHECK:STDOUT:   %var = alloca [2 x i32], align 4
+// CHECK:STDOUT:   %t = alloca [2 x i32], align 4
 // CHECK:STDOUT:   %F = call { i32, i32 } @F()
 // CHECK:STDOUT:   %array = alloca [2 x i32], align 4
 // CHECK:STDOUT:   %array.element = extractvalue { i32, i32 } %F, 0
@@ -34,6 +34,6 @@ fn Run() {
 // CHECK:STDOUT:   %2 = getelementptr inbounds [2 x i32], ptr %array, i32 0, i32 1
 // CHECK:STDOUT:   store i32 %array.element1, ptr %2, align 4
 // CHECK:STDOUT:   %3 = load [2 x i32], ptr %array, align 4
-// CHECK:STDOUT:   store [2 x i32] %3, ptr %var, align 4
+// CHECK:STDOUT:   store [2 x i32] %3, ptr %t, align 4
 // CHECK:STDOUT:   ret void
 // CHECK:STDOUT: }

+ 71 - 71
toolchain/lowering/testdata/array/base.carbon

@@ -18,7 +18,7 @@ fn Run() {
 // CHECK:STDOUT: %type = type {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @Run() {
-// CHECK:STDOUT:   %var = alloca [1 x i32], align 4
+// CHECK:STDOUT:   %a = alloca [1 x i32], align 4
 // CHECK:STDOUT:   %tuple = alloca { i32 }, align 8
 // CHECK:STDOUT:   %1 = getelementptr inbounds { i32 }, ptr %tuple, i32 0, i32 0
 // CHECK:STDOUT:   store i32 1, ptr %1, align 4
@@ -28,97 +28,97 @@ fn Run() {
 // CHECK:STDOUT:   %3 = getelementptr inbounds [1 x i32], ptr %array, i32 0, i32 0
 // CHECK:STDOUT:   store i32 %2, ptr %3, align 4
 // CHECK:STDOUT:   %4 = load [1 x i32], ptr %array, align 4
-// CHECK:STDOUT:   store [1 x i32] %4, ptr %var, align 4
-// CHECK:STDOUT:   %var1 = alloca [2 x double], align 8
-// CHECK:STDOUT:   %tuple2 = alloca { double, double }, align 8
-// CHECK:STDOUT:   %5 = getelementptr inbounds { double, double }, ptr %tuple2, i32 0, i32 0
+// CHECK:STDOUT:   store [1 x i32] %4, ptr %a, align 4
+// CHECK:STDOUT:   %b = alloca [2 x double], align 8
+// CHECK:STDOUT:   %tuple1 = alloca { double, double }, align 8
+// CHECK:STDOUT:   %5 = getelementptr inbounds { double, double }, ptr %tuple1, i32 0, i32 0
 // CHECK:STDOUT:   store double 0x4026333333333334, ptr %5, align 8
-// CHECK:STDOUT:   %6 = getelementptr inbounds { double, double }, ptr %tuple2, i32 0, i32 1
+// CHECK:STDOUT:   %6 = getelementptr inbounds { double, double }, ptr %tuple1, i32 0, i32 1
 // CHECK:STDOUT:   store double 2.200000e+00, ptr %6, align 8
-// CHECK:STDOUT:   %array3 = alloca [2 x double], align 8
-// CHECK:STDOUT:   %array.element4 = getelementptr inbounds { double, double }, ptr %tuple2, i32 0, i32 0
-// CHECK:STDOUT:   %7 = load double, ptr %array.element4, align 8
-// CHECK:STDOUT:   %8 = getelementptr inbounds [2 x double], ptr %array3, i32 0, i32 0
+// CHECK:STDOUT:   %array2 = alloca [2 x double], align 8
+// CHECK:STDOUT:   %array.element3 = getelementptr inbounds { double, double }, ptr %tuple1, i32 0, i32 0
+// CHECK:STDOUT:   %7 = load double, ptr %array.element3, align 8
+// CHECK:STDOUT:   %8 = getelementptr inbounds [2 x double], ptr %array2, i32 0, i32 0
 // CHECK:STDOUT:   store double %7, ptr %8, align 8
-// CHECK:STDOUT:   %array.element5 = getelementptr inbounds { double, double }, ptr %tuple2, i32 0, i32 1
-// CHECK:STDOUT:   %9 = load double, ptr %array.element5, align 8
-// CHECK:STDOUT:   %10 = getelementptr inbounds [2 x double], ptr %array3, i32 0, i32 1
+// CHECK:STDOUT:   %array.element4 = getelementptr inbounds { double, double }, ptr %tuple1, i32 0, i32 1
+// CHECK:STDOUT:   %9 = load double, ptr %array.element4, align 8
+// CHECK:STDOUT:   %10 = getelementptr inbounds [2 x double], ptr %array2, i32 0, i32 1
 // CHECK:STDOUT:   store double %9, ptr %10, align 8
-// CHECK:STDOUT:   %11 = load [2 x double], ptr %array3, align 8
-// CHECK:STDOUT:   store [2 x double] %11, ptr %var1, align 8
+// CHECK:STDOUT:   %11 = load [2 x double], ptr %array2, align 8
+// CHECK:STDOUT:   store [2 x double] %11, ptr %b, align 8
+// CHECK:STDOUT:   %tuple5 = alloca {}, align 8
+// CHECK:STDOUT:   %c = alloca [5 x {}], align 8
 // CHECK:STDOUT:   %tuple6 = alloca {}, align 8
-// CHECK:STDOUT:   %var7 = alloca [5 x {}], align 8
+// CHECK:STDOUT:   %tuple7 = alloca {}, align 8
 // CHECK:STDOUT:   %tuple8 = alloca {}, align 8
 // CHECK:STDOUT:   %tuple9 = alloca {}, align 8
 // CHECK:STDOUT:   %tuple10 = alloca {}, align 8
-// CHECK:STDOUT:   %tuple11 = alloca {}, align 8
-// CHECK:STDOUT:   %tuple12 = alloca {}, align 8
-// CHECK:STDOUT:   %tuple13 = alloca { {}, {}, {}, {}, {} }, align 8
-// CHECK:STDOUT:   %12 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple13, i32 0, i32 0
-// CHECK:STDOUT:   store ptr %tuple8, ptr %12, align 8
-// CHECK:STDOUT:   %13 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple13, i32 0, i32 1
-// CHECK:STDOUT:   store ptr %tuple9, ptr %13, align 8
-// CHECK:STDOUT:   %14 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple13, i32 0, i32 2
-// CHECK:STDOUT:   store ptr %tuple10, ptr %14, align 8
-// CHECK:STDOUT:   %15 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple13, i32 0, i32 3
-// CHECK:STDOUT:   store ptr %tuple11, ptr %15, align 8
-// CHECK:STDOUT:   %16 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple13, i32 0, i32 4
-// CHECK:STDOUT:   store ptr %tuple12, ptr %16, align 8
-// CHECK:STDOUT:   %array14 = alloca [5 x {}], align 8
-// CHECK:STDOUT:   %array.element15 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple13, i32 0, i32 0
-// CHECK:STDOUT:   %17 = load {}, ptr %array.element15, align 1
-// CHECK:STDOUT:   %18 = getelementptr inbounds [5 x {}], ptr %array14, i32 0, i32 0
+// CHECK:STDOUT:   %tuple11 = alloca { {}, {}, {}, {}, {} }, align 8
+// CHECK:STDOUT:   %12 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple11, i32 0, i32 0
+// CHECK:STDOUT:   store ptr %tuple6, ptr %12, align 8
+// CHECK:STDOUT:   %13 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple11, i32 0, i32 1
+// CHECK:STDOUT:   store ptr %tuple7, ptr %13, align 8
+// CHECK:STDOUT:   %14 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple11, i32 0, i32 2
+// CHECK:STDOUT:   store ptr %tuple8, ptr %14, align 8
+// CHECK:STDOUT:   %15 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple11, i32 0, i32 3
+// CHECK:STDOUT:   store ptr %tuple9, ptr %15, align 8
+// CHECK:STDOUT:   %16 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple11, i32 0, i32 4
+// CHECK:STDOUT:   store ptr %tuple10, ptr %16, align 8
+// CHECK:STDOUT:   %array12 = alloca [5 x {}], align 8
+// CHECK:STDOUT:   %array.element13 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple11, i32 0, i32 0
+// CHECK:STDOUT:   %17 = load {}, ptr %array.element13, align 1
+// CHECK:STDOUT:   %18 = getelementptr inbounds [5 x {}], ptr %array12, i32 0, i32 0
 // CHECK:STDOUT:   store {} %17, ptr %18, align 1
-// CHECK:STDOUT:   %array.element16 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple13, i32 0, i32 1
-// CHECK:STDOUT:   %19 = load {}, ptr %array.element16, align 1
-// CHECK:STDOUT:   %20 = getelementptr inbounds [5 x {}], ptr %array14, i32 0, i32 1
+// CHECK:STDOUT:   %array.element14 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple11, i32 0, i32 1
+// CHECK:STDOUT:   %19 = load {}, ptr %array.element14, align 1
+// CHECK:STDOUT:   %20 = getelementptr inbounds [5 x {}], ptr %array12, i32 0, i32 1
 // CHECK:STDOUT:   store {} %19, ptr %20, align 1
-// CHECK:STDOUT:   %array.element17 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple13, i32 0, i32 2
-// CHECK:STDOUT:   %21 = load {}, ptr %array.element17, align 1
-// CHECK:STDOUT:   %22 = getelementptr inbounds [5 x {}], ptr %array14, i32 0, i32 2
+// CHECK:STDOUT:   %array.element15 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple11, i32 0, i32 2
+// CHECK:STDOUT:   %21 = load {}, ptr %array.element15, align 1
+// CHECK:STDOUT:   %22 = getelementptr inbounds [5 x {}], ptr %array12, i32 0, i32 2
 // CHECK:STDOUT:   store {} %21, ptr %22, align 1
-// CHECK:STDOUT:   %array.element18 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple13, i32 0, i32 3
-// CHECK:STDOUT:   %23 = load {}, ptr %array.element18, align 1
-// CHECK:STDOUT:   %24 = getelementptr inbounds [5 x {}], ptr %array14, i32 0, i32 3
+// CHECK:STDOUT:   %array.element16 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple11, i32 0, i32 3
+// CHECK:STDOUT:   %23 = load {}, ptr %array.element16, align 1
+// CHECK:STDOUT:   %24 = getelementptr inbounds [5 x {}], ptr %array12, i32 0, i32 3
 // CHECK:STDOUT:   store {} %23, ptr %24, align 1
-// CHECK:STDOUT:   %array.element19 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple13, i32 0, i32 4
-// CHECK:STDOUT:   %25 = load {}, ptr %array.element19, align 1
-// CHECK:STDOUT:   %26 = getelementptr inbounds [5 x {}], ptr %array14, i32 0, i32 4
+// CHECK:STDOUT:   %array.element17 = getelementptr inbounds { {}, {}, {}, {}, {} }, ptr %tuple11, i32 0, i32 4
+// CHECK:STDOUT:   %25 = load {}, ptr %array.element17, align 1
+// CHECK:STDOUT:   %26 = getelementptr inbounds [5 x {}], ptr %array12, i32 0, i32 4
 // CHECK:STDOUT:   store {} %25, ptr %26, align 1
-// CHECK:STDOUT:   %27 = load [5 x {}], ptr %array14, align 1
-// CHECK:STDOUT:   store [5 x {}] %27, ptr %var7, align 1
-// CHECK:STDOUT:   %tuple20 = alloca { %type, %type, %type }, align 8
-// CHECK:STDOUT:   %28 = getelementptr inbounds { %type, %type, %type }, ptr %tuple20, i32 0, i32 0
+// CHECK:STDOUT:   %27 = load [5 x {}], ptr %array12, align 1
+// CHECK:STDOUT:   store [5 x {}] %27, ptr %c, align 1
+// CHECK:STDOUT:   %tuple18 = alloca { %type, %type, %type }, align 8
+// CHECK:STDOUT:   %28 = getelementptr inbounds { %type, %type, %type }, ptr %tuple18, i32 0, i32 0
 // CHECK:STDOUT:   store %type zeroinitializer, ptr %28, align 1
-// CHECK:STDOUT:   %29 = getelementptr inbounds { %type, %type, %type }, ptr %tuple20, i32 0, i32 1
+// CHECK:STDOUT:   %29 = getelementptr inbounds { %type, %type, %type }, ptr %tuple18, i32 0, i32 1
 // CHECK:STDOUT:   store %type zeroinitializer, ptr %29, align 1
-// CHECK:STDOUT:   %30 = getelementptr inbounds { %type, %type, %type }, ptr %tuple20, i32 0, i32 2
+// CHECK:STDOUT:   %30 = getelementptr inbounds { %type, %type, %type }, ptr %tuple18, i32 0, i32 2
 // CHECK:STDOUT:   store %type zeroinitializer, ptr %30, align 1
-// CHECK:STDOUT:   %var21 = alloca { i32, i32, i32 }, align 8
-// CHECK:STDOUT:   %tuple22 = alloca { i32, i32, i32 }, align 8
-// CHECK:STDOUT:   %31 = getelementptr inbounds { i32, i32, i32 }, ptr %tuple22, i32 0, i32 0
+// CHECK:STDOUT:   %d = alloca { i32, i32, i32 }, align 8
+// CHECK:STDOUT:   %tuple19 = alloca { i32, i32, i32 }, align 8
+// CHECK:STDOUT:   %31 = getelementptr inbounds { i32, i32, i32 }, ptr %tuple19, i32 0, i32 0
 // CHECK:STDOUT:   store i32 1, ptr %31, align 4
-// CHECK:STDOUT:   %32 = getelementptr inbounds { i32, i32, i32 }, ptr %tuple22, i32 0, i32 1
+// CHECK:STDOUT:   %32 = getelementptr inbounds { i32, i32, i32 }, ptr %tuple19, i32 0, i32 1
 // CHECK:STDOUT:   store i32 2, ptr %32, align 4
-// CHECK:STDOUT:   %33 = getelementptr inbounds { i32, i32, i32 }, ptr %tuple22, i32 0, i32 2
+// CHECK:STDOUT:   %33 = getelementptr inbounds { i32, i32, i32 }, ptr %tuple19, i32 0, i32 2
 // CHECK:STDOUT:   store i32 3, ptr %33, align 4
-// CHECK:STDOUT:   %34 = load { i32, i32, i32 }, ptr %tuple22, align 4
-// CHECK:STDOUT:   store { i32, i32, i32 } %34, ptr %var21, align 4
-// CHECK:STDOUT:   %var23 = alloca [3 x i32], align 4
-// CHECK:STDOUT:   %array24 = alloca [3 x i32], align 4
-// CHECK:STDOUT:   %array.element25 = getelementptr inbounds { i32, i32, i32 }, ptr %var21, i32 0, i32 0
-// CHECK:STDOUT:   %35 = load i32, ptr %array.element25, align 4
-// CHECK:STDOUT:   %36 = getelementptr inbounds [3 x i32], ptr %array24, i32 0, i32 0
+// CHECK:STDOUT:   %34 = load { i32, i32, i32 }, ptr %tuple19, align 4
+// CHECK:STDOUT:   store { i32, i32, i32 } %34, ptr %d, align 4
+// CHECK:STDOUT:   %e = alloca [3 x i32], align 4
+// CHECK:STDOUT:   %array20 = alloca [3 x i32], align 4
+// CHECK:STDOUT:   %array.element21 = getelementptr inbounds { i32, i32, i32 }, ptr %d, i32 0, i32 0
+// CHECK:STDOUT:   %35 = load i32, ptr %array.element21, align 4
+// CHECK:STDOUT:   %36 = getelementptr inbounds [3 x i32], ptr %array20, i32 0, i32 0
 // CHECK:STDOUT:   store i32 %35, ptr %36, align 4
-// CHECK:STDOUT:   %array.element26 = getelementptr inbounds { i32, i32, i32 }, ptr %var21, i32 0, i32 1
-// CHECK:STDOUT:   %37 = load i32, ptr %array.element26, align 4
-// CHECK:STDOUT:   %38 = getelementptr inbounds [3 x i32], ptr %array24, i32 0, i32 1
+// CHECK:STDOUT:   %array.element22 = getelementptr inbounds { i32, i32, i32 }, ptr %d, i32 0, i32 1
+// CHECK:STDOUT:   %37 = load i32, ptr %array.element22, align 4
+// CHECK:STDOUT:   %38 = getelementptr inbounds [3 x i32], ptr %array20, i32 0, i32 1
 // CHECK:STDOUT:   store i32 %37, ptr %38, align 4
-// CHECK:STDOUT:   %array.element27 = getelementptr inbounds { i32, i32, i32 }, ptr %var21, i32 0, i32 2
-// CHECK:STDOUT:   %39 = load i32, ptr %array.element27, align 4
-// CHECK:STDOUT:   %40 = getelementptr inbounds [3 x i32], ptr %array24, i32 0, i32 2
+// CHECK:STDOUT:   %array.element23 = getelementptr inbounds { i32, i32, i32 }, ptr %d, i32 0, i32 2
+// CHECK:STDOUT:   %39 = load i32, ptr %array.element23, align 4
+// CHECK:STDOUT:   %40 = getelementptr inbounds [3 x i32], ptr %array20, i32 0, i32 2
 // CHECK:STDOUT:   store i32 %39, ptr %40, align 4
-// CHECK:STDOUT:   %41 = load [3 x i32], ptr %array24, align 4
-// CHECK:STDOUT:   store [3 x i32] %41, ptr %var23, align 4
+// CHECK:STDOUT:   %41 = load [3 x i32], ptr %array20, align 4
+// CHECK:STDOUT:   store [3 x i32] %41, ptr %e, align 4
 // CHECK:STDOUT:   ret void
 // CHECK:STDOUT: }

+ 2 - 2
toolchain/lowering/testdata/function/call/empty_struct.carbon

@@ -23,10 +23,10 @@ fn Main() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @Main() {
 // CHECK:STDOUT:   %struct = alloca {}, align 8
-// CHECK:STDOUT:   %var = alloca {}, align 8
+// CHECK:STDOUT:   %b = alloca {}, align 8
 // CHECK:STDOUT:   %struct1 = alloca {}, align 8
 // CHECK:STDOUT:   %1 = load {}, ptr %struct1, align 1
 // CHECK:STDOUT:   %Echo = call {} @Echo({} %1)
-// CHECK:STDOUT:   store {} %Echo, ptr %var, align 1
+// CHECK:STDOUT:   store {} %Echo, ptr %b, align 1
 // CHECK:STDOUT:   ret void
 // CHECK:STDOUT: }

+ 2 - 2
toolchain/lowering/testdata/function/call/empty_tuple.carbon

@@ -21,10 +21,10 @@ fn Main() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @Main() {
 // CHECK:STDOUT:   %tuple = alloca {}, align 8
-// CHECK:STDOUT:   %var = alloca {}, align 8
+// CHECK:STDOUT:   %b = alloca {}, align 8
 // CHECK:STDOUT:   %tuple1 = alloca {}, align 8
 // CHECK:STDOUT:   %1 = load {}, ptr %tuple1, align 1
 // CHECK:STDOUT:   %Echo = call {} @Echo({} %1)
-// CHECK:STDOUT:   store {} %Echo, ptr %var, align 1
+// CHECK:STDOUT:   store {} %Echo, ptr %b, align 1
 // CHECK:STDOUT:   ret void
 // CHECK:STDOUT: }

+ 2 - 2
toolchain/lowering/testdata/function/call/i32.carbon

@@ -20,8 +20,8 @@ fn Main() {
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @Main() {
-// CHECK:STDOUT:   %var = alloca i32, align 4
+// CHECK:STDOUT:   %b = alloca i32, align 4
 // CHECK:STDOUT:   %Echo = call i32 @Echo(i32 1)
-// CHECK:STDOUT:   store i32 %Echo, ptr %var, align 4
+// CHECK:STDOUT:   store i32 %Echo, ptr %b, align 4
 // CHECK:STDOUT:   ret void
 // CHECK:STDOUT: }

+ 2 - 2
toolchain/lowering/testdata/function/call/implicit_empty_tuple_as_arg.carbon

@@ -26,11 +26,11 @@ fn Main() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @Main() {
 // CHECK:STDOUT:   %tuple = alloca {}, align 8
-// CHECK:STDOUT:   %var = alloca {}, align 8
+// CHECK:STDOUT:   %x = alloca {}, align 8
 // CHECK:STDOUT:   call void @Foo()
 // CHECK:STDOUT:   %call.result = alloca {}, align 8
 // CHECK:STDOUT:   %1 = load {}, ptr %call.result, align 1
 // CHECK:STDOUT:   %Bar = call {} @Bar({} %1)
-// CHECK:STDOUT:   store {} %Bar, ptr %var, align 1
+// CHECK:STDOUT:   store {} %Bar, ptr %x, align 1
 // CHECK:STDOUT:   ret void
 // CHECK:STDOUT: }

+ 2 - 2
toolchain/lowering/testdata/function/call/return_implicit.carbon

@@ -21,10 +21,10 @@ fn Main() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @Main() {
 // CHECK:STDOUT:   %tuple = alloca {}, align 8
-// CHECK:STDOUT:   %var = alloca {}, align 8
+// CHECK:STDOUT:   %b = alloca {}, align 8
 // CHECK:STDOUT:   call void @MakeImplicitEmptyTuple()
 // CHECK:STDOUT:   %call.result = alloca {}, align 8
 // CHECK:STDOUT:   %1 = load {}, ptr %call.result, align 1
-// CHECK:STDOUT:   store {} %1, ptr %var, align 1
+// CHECK:STDOUT:   store {} %1, ptr %b, align 1
 // CHECK:STDOUT:   ret void
 // CHECK:STDOUT: }

+ 3 - 3
toolchain/lowering/testdata/function/call/var_param.carbon

@@ -19,9 +19,9 @@ fn Main() {
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @Main() {
-// CHECK:STDOUT:   %var = alloca i32, align 4
-// CHECK:STDOUT:   store i32 0, ptr %var, align 4
-// CHECK:STDOUT:   %1 = load i32, ptr %var, align 4
+// CHECK:STDOUT:   %a = alloca i32, align 4
+// CHECK:STDOUT:   store i32 0, ptr %a, align 4
+// CHECK:STDOUT:   %1 = load i32, ptr %a, align 4
 // CHECK:STDOUT:   call void @DoNothing(i32 %1)
 // CHECK:STDOUT:   %call.result = alloca {}, align 8
 // CHECK:STDOUT:   ret void

+ 13 - 13
toolchain/lowering/testdata/index/array_element_access.carbon

@@ -47,7 +47,7 @@ fn Run() {
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @Run() {
-// CHECK:STDOUT:   %var = alloca [2 x i32], align 4
+// CHECK:STDOUT:   %a = alloca [2 x i32], align 4
 // CHECK:STDOUT:   %A = call { i32, i32 } @A()
 // CHECK:STDOUT:   %array = alloca [2 x i32], align 4
 // CHECK:STDOUT:   %array.element = extractvalue { i32, i32 } %A, 0
@@ -57,19 +57,19 @@ fn Run() {
 // CHECK:STDOUT:   %2 = getelementptr inbounds [2 x i32], ptr %array, i32 0, i32 1
 // CHECK:STDOUT:   store i32 %array.element1, ptr %2, align 4
 // CHECK:STDOUT:   %3 = load [2 x i32], ptr %array, align 4
-// CHECK:STDOUT:   store [2 x i32] %3, ptr %var, align 4
-// CHECK:STDOUT:   %var2 = alloca i32, align 4
-// CHECK:STDOUT:   %A3 = call { i32, i32 } @A()
-// CHECK:STDOUT:   %tuple.index = extractvalue { i32, i32 } %A3, 0
-// CHECK:STDOUT:   store i32 %tuple.index, ptr %var2, align 4
-// CHECK:STDOUT:   %var4 = alloca i32, align 4
-// CHECK:STDOUT:   %4 = load i32, ptr %var2, align 4
-// CHECK:STDOUT:   %array.index = getelementptr inbounds [2 x i32], ptr %var, i32 %4
+// CHECK:STDOUT:   store [2 x i32] %3, ptr %a, align 4
+// CHECK:STDOUT:   %b = alloca i32, align 4
+// CHECK:STDOUT:   %A2 = call { i32, i32 } @A()
+// CHECK:STDOUT:   %tuple.index = extractvalue { i32, i32 } %A2, 0
+// CHECK:STDOUT:   store i32 %tuple.index, ptr %b, align 4
+// CHECK:STDOUT:   %c = alloca i32, align 4
+// CHECK:STDOUT:   %4 = load i32, ptr %b, align 4
+// CHECK:STDOUT:   %array.index = getelementptr inbounds [2 x i32], ptr %a, i32 %4
 // CHECK:STDOUT:   %5 = load i32, ptr %array.index, align 4
-// CHECK:STDOUT:   store i32 %5, ptr %var4, align 4
-// CHECK:STDOUT:   %var5 = alloca i32, align 4
+// CHECK:STDOUT:   store i32 %5, ptr %c, align 4
+// CHECK:STDOUT:   %d = alloca i32, align 4
 // CHECK:STDOUT:   %B = call [2 x i32] @B()
-// CHECK:STDOUT:   %array.index6 = extractvalue [2 x i32] %B, 1
-// CHECK:STDOUT:   store i32 %array.index6, ptr %var5, align 4
+// CHECK:STDOUT:   %array.index3 = extractvalue [2 x i32] %B, 1
+// CHECK:STDOUT:   store i32 %array.index3, ptr %d, align 4
 // CHECK:STDOUT:   ret void
 // CHECK:STDOUT: }

+ 9 - 9
toolchain/lowering/testdata/index/tuple_element_access.carbon

@@ -24,7 +24,7 @@ fn Run() -> i32 {
 // CHECK:STDOUT:   store %type zeroinitializer, ptr %2, align 1
 // CHECK:STDOUT:   %3 = getelementptr inbounds { %type, %type, %type }, ptr %tuple, i32 0, i32 2
 // CHECK:STDOUT:   store %type zeroinitializer, ptr %3, align 1
-// CHECK:STDOUT:   %var = alloca { i32, i32, i32 }, align 8
+// CHECK:STDOUT:   %a = alloca { i32, i32, i32 }, align 8
 // CHECK:STDOUT:   %tuple1 = alloca { i32, i32, i32 }, align 8
 // CHECK:STDOUT:   %4 = getelementptr inbounds { i32, i32, i32 }, ptr %tuple1, i32 0, i32 0
 // CHECK:STDOUT:   store i32 0, ptr %4, align 4
@@ -33,14 +33,14 @@ fn Run() -> i32 {
 // CHECK:STDOUT:   %6 = getelementptr inbounds { i32, i32, i32 }, ptr %tuple1, i32 0, i32 2
 // CHECK:STDOUT:   store i32 2, ptr %6, align 4
 // CHECK:STDOUT:   %7 = load { i32, i32, i32 }, ptr %tuple1, align 4
-// CHECK:STDOUT:   store { i32, i32, i32 } %7, ptr %var, align 4
-// CHECK:STDOUT:   %var2 = alloca i32, align 4
-// CHECK:STDOUT:   %tuple.index = getelementptr inbounds { i32, i32, i32 }, ptr %var, i32 0, i32 0
+// CHECK:STDOUT:   store { i32, i32, i32 } %7, ptr %a, align 4
+// CHECK:STDOUT:   %b = alloca i32, align 4
+// CHECK:STDOUT:   %tuple.index = getelementptr inbounds { i32, i32, i32 }, ptr %a, i32 0, i32 0
 // CHECK:STDOUT:   %8 = load i32, ptr %tuple.index, align 4
-// CHECK:STDOUT:   store i32 %8, ptr %var2, align 4
-// CHECK:STDOUT:   %var3 = alloca i32, align 4
-// CHECK:STDOUT:   %tuple.index4 = getelementptr inbounds { i32, i32, i32 }, ptr %var, i32 0, i32 2
-// CHECK:STDOUT:   %9 = load i32, ptr %tuple.index4, align 4
-// CHECK:STDOUT:   store i32 %9, ptr %var3, align 4
+// CHECK:STDOUT:   store i32 %8, ptr %b, align 4
+// CHECK:STDOUT:   %c = alloca i32, align 4
+// CHECK:STDOUT:   %tuple.index2 = getelementptr inbounds { i32, i32, i32 }, ptr %a, i32 0, i32 2
+// CHECK:STDOUT:   %9 = load i32, ptr %tuple.index2, align 4
+// CHECK:STDOUT:   store i32 %9, ptr %c, align 4
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT: }

+ 2 - 2
toolchain/lowering/testdata/index/tuple_return_value_access.carbon

@@ -24,9 +24,9 @@ fn Run() {
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @Run() {
-// CHECK:STDOUT:   %var = alloca i32, align 4
+// CHECK:STDOUT:   %t = alloca i32, align 4
 // CHECK:STDOUT:   %F = call { i32, i32 } @F()
 // CHECK:STDOUT:   %tuple.index = extractvalue { i32, i32 } %F, 1
-// CHECK:STDOUT:   store i32 %tuple.index, ptr %var, align 4
+// CHECK:STDOUT:   store i32 %tuple.index, ptr %t, align 4
 // CHECK:STDOUT:   ret void
 // CHECK:STDOUT: }

+ 9 - 9
toolchain/lowering/testdata/operators/assignment.carbon

@@ -17,21 +17,21 @@ fn Main() {
 // CHECK:STDOUT: %type = type {}
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @Main() {
-// CHECK:STDOUT:   %var = alloca i32, align 4
-// CHECK:STDOUT:   store i32 12, ptr %var, align 4
-// CHECK:STDOUT:   store i32 -7, ptr %var, align 4
+// CHECK:STDOUT:   %a = alloca i32, align 4
+// CHECK:STDOUT:   store i32 12, ptr %a, align 4
+// CHECK:STDOUT:   store i32 -7, ptr %a, align 4
 // CHECK:STDOUT:   %tuple = alloca { %type, %type }, align 8
 // CHECK:STDOUT:   %1 = getelementptr inbounds { %type, %type }, ptr %tuple, i32 0, i32 0
 // CHECK:STDOUT:   store %type zeroinitializer, ptr %1, align 1
 // CHECK:STDOUT:   %2 = getelementptr inbounds { %type, %type }, ptr %tuple, i32 0, i32 1
 // CHECK:STDOUT:   store %type zeroinitializer, ptr %2, align 1
-// CHECK:STDOUT:   %var1 = alloca { i32, i32 }, align 8
-// CHECK:STDOUT:   %tuple2 = alloca { i32, i32 }, align 8
-// CHECK:STDOUT:   %3 = getelementptr inbounds { i32, i32 }, ptr %tuple2, i32 0, i32 0
+// CHECK:STDOUT:   %b = alloca { i32, i32 }, align 8
+// CHECK:STDOUT:   %tuple1 = alloca { i32, i32 }, align 8
+// CHECK:STDOUT:   %3 = getelementptr inbounds { i32, i32 }, ptr %tuple1, i32 0, i32 0
 // CHECK:STDOUT:   store i32 1, ptr %3, align 4
-// CHECK:STDOUT:   %4 = getelementptr inbounds { i32, i32 }, ptr %tuple2, i32 0, i32 1
+// CHECK:STDOUT:   %4 = getelementptr inbounds { i32, i32 }, ptr %tuple1, i32 0, i32 1
 // CHECK:STDOUT:   store i32 2, ptr %4, align 4
-// CHECK:STDOUT:   %5 = load { i32, i32 }, ptr %tuple2, align 4
-// CHECK:STDOUT:   store { i32, i32 } %5, ptr %var1, align 4
+// CHECK:STDOUT:   %5 = load { i32, i32 }, ptr %tuple1, align 4
+// CHECK:STDOUT:   store { i32, i32 } %5, ptr %b, align 4
 // CHECK:STDOUT:   ret void
 // CHECK:STDOUT: }

+ 3 - 3
toolchain/lowering/testdata/pointer/address_of_field.carbon

@@ -18,15 +18,15 @@ fn F() {
 // CHECK:STDOUT: declare void @G(ptr)
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @F() {
-// CHECK:STDOUT:   %var = alloca { i32, i32 }, align 8
+// CHECK:STDOUT:   %s = alloca { i32, i32 }, align 8
 // CHECK:STDOUT:   %struct = alloca { i32, i32 }, align 8
 // CHECK:STDOUT:   %a = getelementptr inbounds { i32, i32 }, ptr %struct, i32 0, i32 0
 // CHECK:STDOUT:   store i32 1, ptr %a, align 4
 // CHECK:STDOUT:   %b = getelementptr inbounds { i32, i32 }, ptr %struct, i32 0, i32 1
 // CHECK:STDOUT:   store i32 2, ptr %b, align 4
 // CHECK:STDOUT:   %1 = load { i32, i32 }, ptr %struct, align 4
-// CHECK:STDOUT:   store { i32, i32 } %1, ptr %var, align 4
-// CHECK:STDOUT:   %b1 = getelementptr inbounds { i32, i32 }, ptr %var, i32 0, i32 1
+// CHECK:STDOUT:   store { i32, i32 } %1, ptr %s, align 4
+// CHECK:STDOUT:   %b1 = getelementptr inbounds { i32, i32 }, ptr %s, i32 0, i32 1
 // CHECK:STDOUT:   %2 = load ptr, ptr %b1, align 8
 // CHECK:STDOUT:   call void @G(ptr %2)
 // CHECK:STDOUT:   %call.result = alloca {}, align 8

+ 3 - 3
toolchain/lowering/testdata/pointer/basic.carbon

@@ -22,9 +22,9 @@ fn F() -> i32 {
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: define i32 @F() {
-// CHECK:STDOUT:   %var = alloca i32, align 4
-// CHECK:STDOUT:   store i32 0, ptr %var, align 4
-// CHECK:STDOUT:   %1 = load ptr, ptr %var, align 8
+// CHECK:STDOUT:   %n = alloca i32, align 4
+// CHECK:STDOUT:   store i32 0, ptr %n, align 4
+// CHECK:STDOUT:   %1 = load ptr, ptr %n, align 8
 // CHECK:STDOUT:   %G = call i32 @G(ptr %1)
 // CHECK:STDOUT:   ret i32 %G
 // CHECK:STDOUT: }

+ 3 - 3
toolchain/lowering/testdata/return/var.carbon

@@ -13,8 +13,8 @@ fn Main() -> i32 {
 // CHECK:STDOUT: source_filename = "var.carbon"
 // CHECK:STDOUT:
 // CHECK:STDOUT: define i32 @Main() {
-// CHECK:STDOUT:   %var = alloca i32, align 4
-// CHECK:STDOUT:   store i32 0, ptr %var, align 4
-// CHECK:STDOUT:   %1 = load i32, ptr %var, align 4
+// CHECK:STDOUT:   %x = alloca i32, align 4
+// CHECK:STDOUT:   store i32 0, ptr %x, align 4
+// CHECK:STDOUT:   %1 = load i32, ptr %x, align 4
 // CHECK:STDOUT:   ret i32 %1
 // CHECK:STDOUT: }

+ 5 - 5
toolchain/lowering/testdata/struct/empty.carbon

@@ -15,13 +15,13 @@ fn Run() -> i32 {
 // CHECK:STDOUT:
 // CHECK:STDOUT: define i32 @Run() {
 // CHECK:STDOUT:   %struct = alloca {}, align 8
-// CHECK:STDOUT:   %var = alloca {}, align 8
+// CHECK:STDOUT:   %x = alloca {}, align 8
 // CHECK:STDOUT:   %struct1 = alloca {}, align 8
 // CHECK:STDOUT:   %1 = load {}, ptr %struct1, align 1
-// CHECK:STDOUT:   store {} %1, ptr %var, align 1
+// CHECK:STDOUT:   store {} %1, ptr %x, align 1
 // CHECK:STDOUT:   %struct2 = alloca {}, align 8
-// CHECK:STDOUT:   %var3 = alloca {}, align 8
-// CHECK:STDOUT:   %2 = load {}, ptr %var, align 1
-// CHECK:STDOUT:   store {} %2, ptr %var3, align 1
+// CHECK:STDOUT:   %y = alloca {}, align 8
+// CHECK:STDOUT:   %2 = load {}, ptr %x, align 1
+// CHECK:STDOUT:   store {} %2, ptr %y, align 1
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT: }

+ 9 - 9
toolchain/lowering/testdata/struct/member_access.carbon

@@ -15,20 +15,20 @@ fn Run() -> i32 {
 // CHECK:STDOUT: source_filename = "member_access.carbon"
 // CHECK:STDOUT:
 // CHECK:STDOUT: define i32 @Run() {
-// CHECK:STDOUT:   %var = alloca { double, i32 }, align 8
+// CHECK:STDOUT:   %x = alloca { double, i32 }, align 8
 // CHECK:STDOUT:   %struct = alloca { double, i32 }, align 8
 // CHECK:STDOUT:   %a = getelementptr inbounds { double, i32 }, ptr %struct, i32 0, i32 0
 // CHECK:STDOUT:   store double 0.000000e+00, ptr %a, align 8
 // CHECK:STDOUT:   %b = getelementptr inbounds { double, i32 }, ptr %struct, i32 0, i32 1
 // CHECK:STDOUT:   store i32 1, ptr %b, align 4
 // CHECK:STDOUT:   %1 = load { double, i32 }, ptr %struct, align 8
-// CHECK:STDOUT:   store { double, i32 } %1, ptr %var, align 8
-// CHECK:STDOUT:   %var1 = alloca i32, align 4
-// CHECK:STDOUT:   %b2 = getelementptr inbounds { double, i32 }, ptr %var, i32 0, i32 1
-// CHECK:STDOUT:   %2 = load i32, ptr %b2, align 4
-// CHECK:STDOUT:   store i32 %2, ptr %var1, align 4
-// CHECK:STDOUT:   %var3 = alloca i32, align 4
-// CHECK:STDOUT:   %3 = load i32, ptr %var1, align 4
-// CHECK:STDOUT:   store i32 %3, ptr %var3, align 4
+// CHECK:STDOUT:   store { double, i32 } %1, ptr %x, align 8
+// CHECK:STDOUT:   %y = alloca i32, align 4
+// CHECK:STDOUT:   %b1 = getelementptr inbounds { double, i32 }, ptr %x, i32 0, i32 1
+// CHECK:STDOUT:   %2 = load i32, ptr %b1, align 4
+// CHECK:STDOUT:   store i32 %2, ptr %y, align 4
+// CHECK:STDOUT:   %z = alloca i32, align 4
+// CHECK:STDOUT:   %3 = load i32, ptr %y, align 4
+// CHECK:STDOUT:   store i32 %3, ptr %z, align 4
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT: }

+ 5 - 5
toolchain/lowering/testdata/struct/one_entry.carbon

@@ -14,14 +14,14 @@ fn Run() -> i32 {
 // CHECK:STDOUT: source_filename = "one_entry.carbon"
 // CHECK:STDOUT:
 // CHECK:STDOUT: define i32 @Run() {
-// CHECK:STDOUT:   %var = alloca { i32 }, align 8
+// CHECK:STDOUT:   %x = alloca { i32 }, align 8
 // CHECK:STDOUT:   %struct = alloca { i32 }, align 8
 // CHECK:STDOUT:   %a = getelementptr inbounds { i32 }, ptr %struct, i32 0, i32 0
 // CHECK:STDOUT:   store i32 4, ptr %a, align 4
 // CHECK:STDOUT:   %1 = load { i32 }, ptr %struct, align 4
-// CHECK:STDOUT:   store { i32 } %1, ptr %var, align 4
-// CHECK:STDOUT:   %var1 = alloca { i32 }, align 8
-// CHECK:STDOUT:   %2 = load { i32 }, ptr %var, align 4
-// CHECK:STDOUT:   store { i32 } %2, ptr %var1, align 4
+// CHECK:STDOUT:   store { i32 } %1, ptr %x, align 4
+// CHECK:STDOUT:   %y = alloca { i32 }, align 8
+// CHECK:STDOUT:   %2 = load { i32 }, ptr %x, align 4
+// CHECK:STDOUT:   store { i32 } %2, ptr %y, align 4
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT: }

+ 5 - 5
toolchain/lowering/testdata/struct/two_entries.carbon

@@ -14,16 +14,16 @@ fn Run() -> i32 {
 // CHECK:STDOUT: source_filename = "two_entries.carbon"
 // CHECK:STDOUT:
 // CHECK:STDOUT: define i32 @Run() {
-// CHECK:STDOUT:   %var = alloca { i32, i32 }, align 8
+// CHECK:STDOUT:   %x = alloca { i32, i32 }, align 8
 // CHECK:STDOUT:   %struct = alloca { i32, i32 }, align 8
 // CHECK:STDOUT:   %a = getelementptr inbounds { i32, i32 }, ptr %struct, i32 0, i32 0
 // CHECK:STDOUT:   store i32 1, ptr %a, align 4
 // CHECK:STDOUT:   %b = getelementptr inbounds { i32, i32 }, ptr %struct, i32 0, i32 1
 // CHECK:STDOUT:   store i32 2, ptr %b, align 4
 // CHECK:STDOUT:   %1 = load { i32, i32 }, ptr %struct, align 4
-// CHECK:STDOUT:   store { i32, i32 } %1, ptr %var, align 4
-// CHECK:STDOUT:   %var1 = alloca { i32, i32 }, align 8
-// CHECK:STDOUT:   %2 = load { i32, i32 }, ptr %var, align 4
-// CHECK:STDOUT:   store { i32, i32 } %2, ptr %var1, align 4
+// CHECK:STDOUT:   store { i32, i32 } %1, ptr %x, align 4
+// CHECK:STDOUT:   %y = alloca { i32, i32 }, align 8
+// CHECK:STDOUT:   %2 = load { i32, i32 }, ptr %x, align 4
+// CHECK:STDOUT:   store { i32, i32 } %2, ptr %y, align 4
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT: }

+ 5 - 5
toolchain/lowering/testdata/tuple/empty.carbon

@@ -15,13 +15,13 @@ fn Run() -> i32 {
 // CHECK:STDOUT:
 // CHECK:STDOUT: define i32 @Run() {
 // CHECK:STDOUT:   %tuple = alloca {}, align 8
-// CHECK:STDOUT:   %var = alloca {}, align 8
+// CHECK:STDOUT:   %x = alloca {}, align 8
 // CHECK:STDOUT:   %tuple1 = alloca {}, align 8
 // CHECK:STDOUT:   %1 = load {}, ptr %tuple1, align 1
-// CHECK:STDOUT:   store {} %1, ptr %var, align 1
+// CHECK:STDOUT:   store {} %1, ptr %x, align 1
 // CHECK:STDOUT:   %tuple2 = alloca {}, align 8
-// CHECK:STDOUT:   %var3 = alloca {}, align 8
-// CHECK:STDOUT:   %2 = load {}, ptr %var, align 1
-// CHECK:STDOUT:   store {} %2, ptr %var3, align 1
+// CHECK:STDOUT:   %y = alloca {}, align 8
+// CHECK:STDOUT:   %2 = load {}, ptr %x, align 1
+// CHECK:STDOUT:   store {} %2, ptr %y, align 1
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT: }

+ 5 - 5
toolchain/lowering/testdata/tuple/one_entry.carbon

@@ -19,17 +19,17 @@ fn Run() -> i32 {
 // CHECK:STDOUT:   %tuple = alloca { %type }, align 8
 // CHECK:STDOUT:   %1 = getelementptr inbounds { %type }, ptr %tuple, i32 0, i32 0
 // CHECK:STDOUT:   store %type zeroinitializer, ptr %1, align 1
-// CHECK:STDOUT:   %var = alloca { i32 }, align 8
+// CHECK:STDOUT:   %x = alloca { i32 }, align 8
 // CHECK:STDOUT:   %tuple1 = alloca { i32 }, align 8
 // CHECK:STDOUT:   %2 = getelementptr inbounds { i32 }, ptr %tuple1, i32 0, i32 0
 // CHECK:STDOUT:   store i32 1, ptr %2, align 4
 // CHECK:STDOUT:   %3 = load { i32 }, ptr %tuple1, align 4
-// CHECK:STDOUT:   store { i32 } %3, ptr %var, align 4
+// CHECK:STDOUT:   store { i32 } %3, ptr %x, align 4
 // CHECK:STDOUT:   %tuple2 = alloca { %type }, align 8
 // CHECK:STDOUT:   %4 = getelementptr inbounds { %type }, ptr %tuple2, i32 0, i32 0
 // CHECK:STDOUT:   store %type zeroinitializer, ptr %4, align 1
-// CHECK:STDOUT:   %var3 = alloca { i32 }, align 8
-// CHECK:STDOUT:   %5 = load { i32 }, ptr %var, align 4
-// CHECK:STDOUT:   store { i32 } %5, ptr %var3, align 4
+// CHECK:STDOUT:   %y = alloca { i32 }, align 8
+// CHECK:STDOUT:   %5 = load { i32 }, ptr %x, align 4
+// CHECK:STDOUT:   store { i32 } %5, ptr %y, align 4
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT: }

+ 5 - 5
toolchain/lowering/testdata/tuple/two_entries.carbon

@@ -21,21 +21,21 @@ fn Run() -> i32 {
 // CHECK:STDOUT:   store %type zeroinitializer, ptr %1, align 1
 // CHECK:STDOUT:   %2 = getelementptr inbounds { %type, %type }, ptr %tuple, i32 0, i32 1
 // CHECK:STDOUT:   store %type zeroinitializer, ptr %2, align 1
-// CHECK:STDOUT:   %var = alloca { i32, i32 }, align 8
+// CHECK:STDOUT:   %x = alloca { i32, i32 }, align 8
 // CHECK:STDOUT:   %tuple1 = alloca { i32, i32 }, align 8
 // CHECK:STDOUT:   %3 = getelementptr inbounds { i32, i32 }, ptr %tuple1, i32 0, i32 0
 // CHECK:STDOUT:   store i32 12, ptr %3, align 4
 // CHECK:STDOUT:   %4 = getelementptr inbounds { i32, i32 }, ptr %tuple1, i32 0, i32 1
 // CHECK:STDOUT:   store i32 7, ptr %4, align 4
 // CHECK:STDOUT:   %5 = load { i32, i32 }, ptr %tuple1, align 4
-// CHECK:STDOUT:   store { i32, i32 } %5, ptr %var, align 4
+// CHECK:STDOUT:   store { i32, i32 } %5, ptr %x, align 4
 // CHECK:STDOUT:   %tuple2 = alloca { %type, %type }, align 8
 // CHECK:STDOUT:   %6 = getelementptr inbounds { %type, %type }, ptr %tuple2, i32 0, i32 0
 // CHECK:STDOUT:   store %type zeroinitializer, ptr %6, align 1
 // CHECK:STDOUT:   %7 = getelementptr inbounds { %type, %type }, ptr %tuple2, i32 0, i32 1
 // CHECK:STDOUT:   store %type zeroinitializer, ptr %7, align 1
-// CHECK:STDOUT:   %var3 = alloca { i32, i32 }, align 8
-// CHECK:STDOUT:   %8 = load { i32, i32 }, ptr %var, align 4
-// CHECK:STDOUT:   store { i32, i32 } %8, ptr %var3, align 4
+// CHECK:STDOUT:   %y = alloca { i32, i32 }, align 8
+// CHECK:STDOUT:   %8 = load { i32, i32 }, ptr %x, align 4
+// CHECK:STDOUT:   store { i32, i32 } %8, ptr %y, align 4
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT: }

+ 3 - 3
toolchain/lowering/testdata/var/local.carbon

@@ -13,8 +13,8 @@ fn Run() -> i32 {
 // CHECK:STDOUT: source_filename = "local.carbon"
 // CHECK:STDOUT:
 // CHECK:STDOUT: define i32 @Run() {
-// CHECK:STDOUT:   %var = alloca i32, align 4
-// CHECK:STDOUT:   store i32 1, ptr %var, align 4
-// CHECK:STDOUT:   %1 = load i32, ptr %var, align 4
+// CHECK:STDOUT:   %x = alloca i32, align 4
+// CHECK:STDOUT:   store i32 1, ptr %x, align 4
+// CHECK:STDOUT:   %1 = load i32, ptr %x, align 4
 // CHECK:STDOUT:   ret i32 %1
 // CHECK:STDOUT: }

+ 2 - 2
toolchain/semantics/semantics_handle_function.cpp

@@ -91,8 +91,8 @@ auto SemanticsHandleFunctionDefinitionStart(SemanticsContext& context,
   for (auto ref_id :
        context.semantics_ir().GetNodeBlock(function.param_refs_id)) {
     auto ref = context.semantics_ir().GetNode(ref_id);
-    auto [name_id, target_id] = ref.GetAsBindName();
-    context.AddNameToLookup(ref.parse_node(), name_id, target_id);
+    auto name_id = ref.GetAsVarStorage();
+    context.AddNameToLookup(ref.parse_node(), name_id, ref_id);
   }
 
   context.node_stack().Push(parse_node, function_id);

+ 2 - 7
toolchain/semantics/semantics_handle_pattern_binding.cpp

@@ -28,13 +28,8 @@ auto SemanticsHandlePatternBinding(SemanticsContext& context,
       context.node_stack().PopWithParseNode<ParseNodeKind::Name>();
 
   // Allocate storage, linked to the name for error locations.
-  auto storage_id =
-      context.AddNode(SemanticsNode::VarStorage::Make(name_node, cast_type_id));
-
-  // Bind the name to storage.
-  context.AddNodeAndPush(parse_node,
-                         SemanticsNode::BindName::Make(name_node, cast_type_id,
-                                                       name_id, storage_id));
+  context.AddNodeAndPush(parse_node, SemanticsNode::VarStorage::Make(
+                                         name_node, cast_type_id, name_id));
   return true;
 }
 

+ 7 - 8
toolchain/semantics/semantics_handle_variable.cpp

@@ -21,18 +21,17 @@ auto SemanticsHandleVariableDeclaration(SemanticsContext& context,
   }
 
   // Get the storage and add it to name lookup.
-  SemanticsNodeId binding_id =
+  SemanticsNodeId var_id =
       context.node_stack().Pop<ParseNodeKind::PatternBinding>();
-  auto binding = context.semantics_ir().GetNode(binding_id);
-  auto [name_id, storage_id] = binding.GetAsBindName();
-  context.AddNameToLookup(binding.parse_node(), name_id, storage_id);
+  auto var = context.semantics_ir().GetNode(var_id);
+  auto name_id = var.GetAsVarStorage();
+  context.AddNameToLookup(var.parse_node(), name_id, var_id);
   // If there was an initializer, assign it to storage.
   if (has_init) {
-    auto cast_value_id = context.ImplicitAsRequired(
-        parse_node, expr_node_id,
-        context.semantics_ir().GetNode(storage_id).type_id());
+    auto cast_value_id =
+        context.ImplicitAsRequired(parse_node, expr_node_id, var.type_id());
     context.AddNode(
-        SemanticsNode::Assign::Make(parse_node, storage_id, cast_value_id));
+        SemanticsNode::Assign::Make(parse_node, var_id, cast_value_id));
   }
 
   context.node_stack()

+ 0 - 8
toolchain/semantics/semantics_ir.cpp

@@ -226,7 +226,6 @@ static auto GetTypePrecedence(SemanticsNodeKind kind) -> int {
     case SemanticsNodeKind::ArrayValue:
     case SemanticsNodeKind::Assign:
     case SemanticsNodeKind::BinaryOperatorAdd:
-    case SemanticsNodeKind::BindName:
     case SemanticsNodeKind::BlockArg:
     case SemanticsNodeKind::BoolLiteral:
     case SemanticsNodeKind::Branch:
@@ -381,7 +380,6 @@ auto SemanticsIR::StringifyType(SemanticsTypeId type_id,
       case SemanticsNodeKind::ArrayValue:
       case SemanticsNodeKind::Assign:
       case SemanticsNodeKind::BinaryOperatorAdd:
-      case SemanticsNodeKind::BindName:
       case SemanticsNodeKind::BlockArg:
       case SemanticsNodeKind::BoolLiteral:
       case SemanticsNodeKind::Branch:
@@ -459,12 +457,6 @@ auto GetSemanticsExpressionCategory(const SemanticsIR& semantics_ir,
         // TODO: This should eventually be Initializing.
         return SemanticsExpressionCategory::Value;
 
-      case SemanticsNodeKind::BindName: {
-        auto [name_id, value_id] = node.GetAsBindName();
-        node_id = value_id;
-        continue;
-      }
-
       case SemanticsNodeKind::AddressOf:
       case SemanticsNodeKind::ArrayType:
       case SemanticsNodeKind::BinaryOperatorAdd:

+ 1 - 1
toolchain/semantics/semantics_ir.h

@@ -24,7 +24,7 @@ struct SemanticsFunction {
     }
     if (!body_block_ids.empty()) {
       out << llvm::formatv(
-          ", body: {{{0}}}",
+          ", body: [{0}]",
           llvm::make_range(body_block_ids.begin(), body_block_ids.end()));
     }
     out << "}";

+ 20 - 37
toolchain/semantics/semantics_ir_formatter.cpp

@@ -326,20 +326,10 @@ class NodeNamer {
 
     Scope& scope = GetScopeInfo(scope_idx);
 
-    // Use bound names where available. The BindName node appears after the node
-    // that it's giving a name to, so we need to do this before assigning
-    // fallback names.
+    // Use bound names where available. Otherwise, assign a backup name.
     for (auto node_id : semantics_ir_.GetNodeBlock(block_id)) {
       auto node = semantics_ir_.GetNode(node_id);
       switch (node.kind()) {
-        case SemanticsNodeKind::BindName: {
-          auto [name_id, named_node_id] = node.GetAsBindName();
-          nodes[named_node_id.index] = {
-              scope_idx,
-              scope.nodes.AllocateName(*this, node.parse_node(),
-                                       semantics_ir_.GetString(name_id).str())};
-          break;
-        }
         case SemanticsNodeKind::Branch: {
           auto dest_id = node.GetAsBranch();
           AddBlockLabel(scope_idx, dest_id, node);
@@ -355,20 +345,24 @@ class NodeNamer {
           AddBlockLabel(scope_idx, dest_id, node);
           break;
         }
-        default:
+        case SemanticsNodeKind::VarStorage: {
+          // TODO: Eventually this name will be optional, and we'll want to
+          // provide something like `var` as a default. However, that's not
+          // possible right now so cannot be tested.
+          auto name_id = node.GetAsVarStorage();
+          nodes[node_id.index] = {
+              scope_idx,
+              scope.nodes.AllocateName(*this, node.parse_node(),
+                                       semantics_ir_.GetString(name_id).str())};
+          break;
+        }
+        default: {
+          // Sequentially number all remaining values.
+          if (node.kind().value_kind() != SemanticsNodeValueKind::None) {
+            nodes[node_id.index] = {
+                scope_idx, scope.nodes.AllocateName(*this, node.parse_node())};
+          }
           break;
-      }
-    }
-
-    // Sequentially number all remaining values.
-    for (auto node_id : semantics_ir_.GetNodeBlock(block_id)) {
-      auto node = semantics_ir_.GetNode(node_id);
-      if (node.kind() != SemanticsNodeKind::BindName &&
-          node.kind().value_kind() != SemanticsNodeValueKind::None) {
-        auto& name = nodes[node_id.index];
-        if (!name.second) {
-          name = {scope_idx,
-                  scope.nodes.AllocateName(*this, node.parse_node())};
         }
       }
     }
@@ -429,11 +423,9 @@ class SemanticsIRFormatter {
     for (const SemanticsNodeId param_id :
          semantics_ir_.GetNodeBlock(fn.param_refs_id)) {
       out_ << sep;
-      auto param = semantics_ir_.GetNode(param_id);
-      auto [name_id, node_id] = param.GetAsBindName();
-      FormatNodeName(node_id);
+      FormatNodeName(param_id);
       out_ << ": ";
-      FormatType(param.type_id());
+      FormatType(semantics_ir_.GetNode(param_id).type_id());
     }
     out_ << ")";
     if (fn.return_type_id.is_valid()) {
@@ -521,15 +513,6 @@ class SemanticsIRFormatter {
     FormatArgs(Kind::Get(node));
   }
 
-  // BindName is handled by the NodeNamer and doesn't appear in the output.
-  // These nodes are currently used simply to give a name to another node, and
-  // are never referenced themselves.
-  // TODO: Include BindName nodes in the output if we start referring to them.
-  template <>
-  auto FormatInstruction<SemanticsNode::BindName>(SemanticsNodeId /*node_id*/,
-                                                  SemanticsNode /*node*/)
-      -> void {}
-
   template <>
   auto FormatInstructionRHS<SemanticsNode::BlockArg>(SemanticsNode node)
       -> void {

+ 11 - 9
toolchain/semantics/semantics_ir_test.cpp

@@ -25,11 +25,13 @@ using ::testing::ElementsAre;
 using ::testing::IsEmpty;
 using ::testing::MatchesRegex;
 using ::testing::Pair;
+using ::testing::SizeIs;
 
 TEST(SemanticsIRTest, YAML) {
   llvm::vfs::InMemoryFileSystem fs;
-  CARBON_CHECK(fs.addFile("test.carbon", /*ModificationTime=*/0,
-                          llvm::MemoryBuffer::getMemBuffer("var x: i32 = 0;")));
+  CARBON_CHECK(fs.addFile(
+      "test.carbon", /*ModificationTime=*/0,
+      llvm::MemoryBuffer::getMemBuffer("fn F() { var x: i32 = 0; return; }")));
   TestRawOstream print_stream;
   Driver d(fs, print_stream, llvm::errs());
   d.RunCommand(
@@ -45,10 +47,10 @@ TEST(SemanticsIRTest, YAML) {
       Yaml::Value::FromText(print_stream.TakeStr()),
       ElementsAre(Yaml::Mapping(ElementsAre(
           Pair("cross_reference_irs_size", "1"),
-          Pair("functions", Yaml::Sequence(IsEmpty())),
+          Pair("functions", Yaml::Sequence(SizeIs(1))),
           Pair("integer_literals", Yaml::Sequence(ElementsAre("0"))),
           Pair("real_literals", Yaml::Sequence(IsEmpty())),
-          Pair("strings", Yaml::Sequence(ElementsAre("x"))),
+          Pair("strings", Yaml::Sequence(ElementsAre("F", "x"))),
           Pair("types", Yaml::Sequence(ElementsAre(node_builtin))),
           Pair("type_blocks", Yaml::Sequence(IsEmpty())),
           Pair("nodes",
@@ -56,19 +58,19 @@ TEST(SemanticsIRTest, YAML) {
                    // kind is required, other parts are optional.
                    Each(Yaml::Mapping(Contains(Pair("kind", _)))),
                    // A 0-arg node.
-                   Contains(Yaml::Mapping(ElementsAre(
-                       Pair("kind", "VarStorage"), Pair("type", type_id)))),
+                   Contains(Yaml::Mapping(ElementsAre(Pair("kind", "Return")))),
                    // A 1-arg node.
                    Contains(Yaml::Mapping(ElementsAre(
                        Pair("kind", "IntegerLiteral"), Pair("arg0", "int0"),
                        Pair("type", type_id)))),
                    // A 2-arg node.
                    Contains(Yaml::Mapping(ElementsAre(
-                       Pair("kind", "BindName"), Pair("arg0", "str0"),
-                       Pair("arg1", node_id), Pair("type", type_id))))))),
-          // This production has only one node block.
+                       Pair("kind", "Assign"), Pair("arg0", node_id),
+                       Pair("arg1", node_id))))))),
+          // This production has only two node blocks.
           Pair("node_blocks",
                Yaml::Sequence(ElementsAre(Yaml::Sequence(IsEmpty()),
+                                          Yaml::Sequence(Each(node_id)),
                                           Yaml::Sequence(Each(node_id)))))))));
 }
 

+ 4 - 6
toolchain/semantics/semantics_node.h

@@ -331,10 +331,6 @@ class SemanticsNode {
                              SemanticsNodeId /*lhs_id*/,
                              SemanticsNodeId /*rhs_id*/>;
 
-  using BindName = SemanticsNode::Factory<SemanticsNodeKind::BindName,
-                                          SemanticsStringId /*name_id*/,
-                                          SemanticsNodeId /*node_id*/>;
-
   using BlockArg =
       Factory<SemanticsNodeKind::BlockArg, SemanticsNodeBlockId /*block_id*/>;
 
@@ -448,8 +444,10 @@ class SemanticsNode {
   using UnaryOperatorNot = Factory<SemanticsNodeKind::UnaryOperatorNot,
                                    SemanticsNodeId /*operand_id*/>;
 
-  using VarStorage = Factory<SemanticsNodeKind::VarStorage>;
-  SemanticsNode()
+  using VarStorage =
+      Factory<SemanticsNodeKind::VarStorage, SemanticsStringId /*name_id*/>;
+
+  explicit SemanticsNode()
       : SemanticsNode(ParseTree::Node::Invalid, SemanticsNodeKind::Invalid,
                       SemanticsTypeId::Invalid) {}
 

+ 0 - 1
toolchain/semantics/semantics_node_kind.def

@@ -51,7 +51,6 @@ CARBON_SEMANTICS_NODE_KIND_IMPL(ArrayType, "array_type", Typed, NotTerminator)
 CARBON_SEMANTICS_NODE_KIND_IMPL(ArrayValue, "array_value", Typed, NotTerminator)
 CARBON_SEMANTICS_NODE_KIND_IMPL(Assign, "assign", None, NotTerminator)
 CARBON_SEMANTICS_NODE_KIND_IMPL(BinaryOperatorAdd, "add", Typed, NotTerminator)
-CARBON_SEMANTICS_NODE_KIND_IMPL(BindName, "bind_name", Typed, NotTerminator)
 CARBON_SEMANTICS_NODE_KIND_IMPL(BlockArg, "block_arg", Typed, NotTerminator)
 CARBON_SEMANTICS_NODE_KIND_IMPL(BoolLiteral, "bool_literal", Typed, NotTerminator)
 CARBON_SEMANTICS_NODE_KIND_IMPL(Branch, "br", None, Terminator)

+ 6 - 8
toolchain/semantics/testdata/array/assign_return_value.carbon

@@ -12,8 +12,8 @@ fn Run() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, return_type: type2, body: {block3}}},
-// CHECK:STDOUT:   {name: str1, param_refs: block0, body: {block5}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, return_type: type2, body: [block3]},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, body: [block5]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,
@@ -53,11 +53,10 @@ fn Run() {
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type1},
 // CHECK:STDOUT:   {kind: ArrayType, arg0: node+10, arg1: type1, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type3},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+12, type: type3},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type3},
 // CHECK:STDOUT:   {kind: Call, arg0: block0, arg1: function0, type: type2},
-// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+14, type: type3},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+12, arg1: node+15},
+// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+13, type: type3},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+12, arg1: node+14},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
@@ -91,7 +90,6 @@ fn Run() {
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+15,
 // CHECK:STDOUT:     node+16,
-// CHECK:STDOUT:     node+17,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
@@ -116,7 +114,7 @@ fn Run() {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %.loc10_16: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc10_17: type = array_type %.loc10_16, i32
-// CHECK:STDOUT:   %t: [i32; 1] = var
+// CHECK:STDOUT:   %t: [i32; 1] = var "t"
 // CHECK:STDOUT:   %.loc10_22.1: (i32,) = call @F()
 // CHECK:STDOUT:   %.loc10_22.2: [i32; 1] = array_value %.loc10_22.1
 // CHECK:STDOUT:   assign %t, %.loc10_22.2

+ 14 - 18
toolchain/semantics/testdata/array/assign_var.carbon

@@ -26,7 +26,7 @@ var b: [i32; 3] = a;
 // CHECK:STDOUT:   node+3,
 // CHECK:STDOUT:   nodeIntegerType,
 // CHECK:STDOUT:   node+5,
-// CHECK:STDOUT:   node+17,
+// CHECK:STDOUT:   node+16,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT:   [
@@ -47,22 +47,20 @@ var b: [i32; 3] = a;
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block2, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock1, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type2},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+6, type: type2},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type2},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type1},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: type1},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type1},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+10, type: type1},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: type1},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+12, type: type1},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+11, type: type1},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block3, type: type2},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+6, arg1: node+14},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+6, arg1: node+13},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int3, type: type1},
-// CHECK:STDOUT:   {kind: ArrayType, arg0: node+16, arg1: type1, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type3},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+18, type: type3},
+// CHECK:STDOUT:   {kind: ArrayType, arg0: node+15, arg1: type1, type: typeTypeType},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type3},
 // CHECK:STDOUT:   {kind: ArrayValue, arg0: node+6, type: type3},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+18, arg1: node+20},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+17, arg1: node+18},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -88,8 +86,6 @@ var b: [i32; 3] = a;
 // CHECK:STDOUT:     node+17,
 // CHECK:STDOUT:     node+18,
 // CHECK:STDOUT:     node+19,
-// CHECK:STDOUT:     node+20,
-// CHECK:STDOUT:     node+21,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
@@ -97,9 +93,9 @@ var b: [i32; 3] = a;
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+9,
-// CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:     node+13,
+// CHECK:STDOUT:     node+8,
+// CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
@@ -110,7 +106,7 @@ var b: [i32; 3] = a;
 // CHECK:STDOUT:   %.loc7_22.1: type = tuple_type (type, type, type)
 // CHECK:STDOUT:   %.loc7_22.2: (type, type, type) = tuple_value (%.loc7_9, %.loc7_14, %.loc7_19)
 // CHECK:STDOUT:   %.loc7_22.3: type = tuple_type (i32, i32, i32)
-// CHECK:STDOUT:   %a: (i32, i32, i32) = var
+// CHECK:STDOUT:   %a: (i32, i32, i32) = var "a"
 // CHECK:STDOUT:   %.loc7_27.1: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc7_27.2: i32 = stub_reference %.loc7_27.1
 // CHECK:STDOUT:   %.loc7_30.1: i32 = int_literal 2
@@ -121,7 +117,7 @@ var b: [i32; 3] = a;
 // CHECK:STDOUT:   assign %a, %.loc7_34
 // CHECK:STDOUT:   %.loc8_14: i32 = int_literal 3
 // CHECK:STDOUT:   %.loc8_15: type = array_type %.loc8_14, i32
-// CHECK:STDOUT:   %b: [i32; 3] = var
+// CHECK:STDOUT:   %b: [i32; 3] = var "b"
 // CHECK:STDOUT:   %.loc7_5: [i32; 3] = array_value %a
 // CHECK:STDOUT:   assign %b, %.loc7_5
 // CHECK:STDOUT: }

+ 35 - 41
toolchain/semantics/testdata/array/base.carbon

@@ -29,13 +29,13 @@ var c: [(); 5] = ((), (), (), (), (),);
 // CHECK:STDOUT: types: [
 // CHECK:STDOUT:   nodeIntegerType,
 // CHECK:STDOUT:   node+1,
-// CHECK:STDOUT:   node+6,
+// CHECK:STDOUT:   node+5,
 // CHECK:STDOUT:   nodeFloatingPointType,
-// CHECK:STDOUT:   node+11,
-// CHECK:STDOUT:   node+18,
-// CHECK:STDOUT:   node+22,
-// CHECK:STDOUT:   node+25,
-// CHECK:STDOUT:   node+38,
+// CHECK:STDOUT:   node+10,
+// CHECK:STDOUT:   node+16,
+// CHECK:STDOUT:   node+20,
+// CHECK:STDOUT:   node+23,
+// CHECK:STDOUT:   node+35,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT:   [
@@ -58,46 +58,43 @@ var c: [(); 5] = ((), (), (), (), (),);
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
 // CHECK:STDOUT:   {kind: ArrayType, arg0: node+0, arg1: type0, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+2, type: type1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+3, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block2, type: type2},
-// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+7, type: type1},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+8},
+// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+6, type: type1},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+7},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: type0},
-// CHECK:STDOUT:   {kind: ArrayType, arg0: node+10, arg1: type3, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type4},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+12, type: type4},
+// CHECK:STDOUT:   {kind: ArrayType, arg0: node+9, arg1: type3, type: typeTypeType},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type4},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: type3},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+14, type: type3},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+12, type: type3},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real1, type: type3},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+16, type: type3},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+14, type: type3},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock1, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block3, type: type5},
-// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+19, type: type4},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+12, arg1: node+20},
+// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+17, type: type4},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+11, arg1: node+18},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock2, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block0, type: type6},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int3, type: type0},
-// CHECK:STDOUT:   {kind: ArrayType, arg0: node+24, arg1: type6, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type7},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+26, type: type7},
+// CHECK:STDOUT:   {kind: ArrayType, arg0: node+22, arg1: type6, type: typeTypeType},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type7},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block0, type: type6},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+28, type: type6},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+25, type: type6},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block0, type: type6},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+30, type: type6},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+27, type: type6},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block0, type: type6},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+32, type: type6},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+29, type: type6},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block0, type: type6},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+34, type: type6},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+31, type: type6},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block0, type: type6},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+36, type: type6},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+33, type: type6},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock3, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block4, type: type8},
-// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+39, type: type7},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+26, arg1: node+40},
+// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+36, type: type7},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+24, arg1: node+37},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -142,30 +139,27 @@ var c: [(); 5] = ((), (), (), (), (),);
 // CHECK:STDOUT:     node+36,
 // CHECK:STDOUT:     node+37,
 // CHECK:STDOUT:     node+38,
-// CHECK:STDOUT:     node+39,
-// CHECK:STDOUT:     node+40,
-// CHECK:STDOUT:     node+41,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+15,
-// CHECK:STDOUT:     node+17,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+29,
-// CHECK:STDOUT:     node+31,
-// CHECK:STDOUT:     node+33,
-// CHECK:STDOUT:     node+35,
-// CHECK:STDOUT:     node+37,
+// CHECK:STDOUT:     node+26,
+// CHECK:STDOUT:     node+28,
+// CHECK:STDOUT:     node+30,
+// CHECK:STDOUT:     node+32,
+// CHECK:STDOUT:     node+34,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
 // CHECK:STDOUT: package {
 // CHECK:STDOUT:   %.loc7_14: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc7_15: type = array_type %.loc7_14, i32
-// CHECK:STDOUT:   %a: [i32; 1] = var
+// CHECK:STDOUT:   %a: [i32; 1] = var "a"
 // CHECK:STDOUT:   %.loc7_20.1: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc7_20.2: i32 = stub_reference %.loc7_20.1
 // CHECK:STDOUT:   %.loc7_22.1: type = tuple_type (i32)
@@ -174,7 +168,7 @@ var c: [(); 5] = ((), (), (), (), (),);
 // CHECK:STDOUT:   assign %a, %.loc7_22.3
 // CHECK:STDOUT:   %.loc8_14: i32 = int_literal 2
 // CHECK:STDOUT:   %.loc8_15: type = array_type %.loc8_14, f64
-// CHECK:STDOUT:   %b: [f64; 2] = var
+// CHECK:STDOUT:   %b: [f64; 2] = var "b"
 // CHECK:STDOUT:   %.loc8_20.1: f64 = real_literal 111e-1
 // CHECK:STDOUT:   %.loc8_20.2: f64 = stub_reference %.loc8_20.1
 // CHECK:STDOUT:   %.loc8_26.1: f64 = real_literal 22e-1
@@ -187,7 +181,7 @@ var c: [(); 5] = ((), (), (), (), (),);
 // CHECK:STDOUT:   %.loc9_10.2: () = tuple_value ()
 // CHECK:STDOUT:   %.loc9_13: i32 = int_literal 5
 // CHECK:STDOUT:   %.loc9_14: type = array_type %.loc9_13, ()
-// CHECK:STDOUT:   %c: [(); 5] = var
+// CHECK:STDOUT:   %c: [(); 5] = var "c"
 // CHECK:STDOUT:   %.loc9_20.1: () = tuple_value ()
 // CHECK:STDOUT:   %.loc9_20.2: () = stub_reference %.loc9_20.1
 // CHECK:STDOUT:   %.loc9_24.1: () = tuple_value ()

+ 2 - 4
toolchain/semantics/testdata/array/fail_invalid_type.carbon

@@ -31,8 +31,7 @@ var a: [1; 1];
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
 // CHECK:STDOUT:   {kind: ArrayType, arg0: node+1, arg1: typeError, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+3, type: type1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type1},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -42,7 +41,6 @@ var a: [1; 1];
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
-// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
@@ -50,5 +48,5 @@ var a: [1; 1];
 // CHECK:STDOUT:   %.loc10_9: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc10_12: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc10_13: type = array_type %.loc10_12, <error>
-// CHECK:STDOUT:   %a: [<error>; 1] = var
+// CHECK:STDOUT:   %a: [<error>; 1] = var "a"
 // CHECK:STDOUT: }

+ 9 - 11
toolchain/semantics/testdata/array/fail_out_of_bound.carbon

@@ -26,7 +26,7 @@ var a: [i32; 1] = (1, 2, 3);
 // CHECK:STDOUT: types: [
 // CHECK:STDOUT:   nodeIntegerType,
 // CHECK:STDOUT:   node+1,
-// CHECK:STDOUT:   node+10,
+// CHECK:STDOUT:   node+9,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT:   [
@@ -38,14 +38,13 @@ var a: [i32; 1] = (1, 2, 3);
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
 // CHECK:STDOUT:   {kind: ArrayType, arg0: node+0, arg1: type0, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+2, type: type1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+3, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+6, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int3, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block2, type: type2},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: nodeError},
@@ -66,19 +65,18 @@ var a: [i32; 1] = (1, 2, 3);
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
-// CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+9,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
 // CHECK:STDOUT: package {
 // CHECK:STDOUT:   %.loc10_14: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc10_15: type = array_type %.loc10_14, i32
-// CHECK:STDOUT:   %a: [i32; 1] = var
+// CHECK:STDOUT:   %a: [i32; 1] = var "a"
 // CHECK:STDOUT:   %.loc10_20.1: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc10_20.2: i32 = stub_reference %.loc10_20.1
 // CHECK:STDOUT:   %.loc10_23.1: i32 = int_literal 2

+ 7 - 9
toolchain/semantics/testdata/array/fail_type_mismatch.carbon

@@ -26,7 +26,7 @@ var a: [i32; 2] = (1, 2.5);
 // CHECK:STDOUT:   nodeIntegerType,
 // CHECK:STDOUT:   node+1,
 // CHECK:STDOUT:   nodeFloatingPointType,
-// CHECK:STDOUT:   node+8,
+// CHECK:STDOUT:   node+7,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT:   [
@@ -37,12 +37,11 @@ var a: [i32; 2] = (1, 2.5);
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
 // CHECK:STDOUT:   {kind: ArrayType, arg0: node+0, arg1: type0, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+2, type: type1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+3, type: type0},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: type2},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+6, type: type2},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: type2},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block2, type: type3},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: nodeError},
@@ -61,18 +60,17 @@ var a: [i32; 2] = (1, 2.5);
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
-// CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
-// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
 // CHECK:STDOUT: package {
 // CHECK:STDOUT:   %.loc10_14: i32 = int_literal 2
 // CHECK:STDOUT:   %.loc10_15: type = array_type %.loc10_14, i32
-// CHECK:STDOUT:   %a: [i32; 2] = var
+// CHECK:STDOUT:   %a: [i32; 2] = var "a"
 // CHECK:STDOUT:   %.loc10_20.1: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc10_20.2: i32 = stub_reference %.loc10_20.1
 // CHECK:STDOUT:   %.loc10_23.1: f64 = real_literal 25e-1

+ 12 - 20
toolchain/semantics/testdata/basics/builtin_types.carbon

@@ -33,21 +33,17 @@ var test_type: type = i32;
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+0, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+0, arg1: node+2},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+4, type: type1},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+0, arg1: node+1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type1},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: type1},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+4, arg1: node+6},
-// CHECK:STDOUT:   {kind: VarStorage, type: type2},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+8, type: type2},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+3, arg1: node+4},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type2},
 // CHECK:STDOUT:   {kind: StringLiteral, arg0: str3, type: type2},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+8, arg1: node+10},
-// CHECK:STDOUT:   {kind: VarStorage, type: typeTypeType},
-// CHECK:STDOUT:   {kind: BindName, arg0: str4, arg1: node+12, type: typeTypeType},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+12, arg1: nodeIntegerType},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+6, arg1: node+7},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str4, type: typeTypeType},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+9, arg1: nodeIntegerType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -64,23 +60,19 @@ var test_type: type = i32;
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
-// CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:     node+12,
-// CHECK:STDOUT:     node+13,
-// CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
 // CHECK:STDOUT: package {
-// CHECK:STDOUT:   %test_i32: i32 = var
+// CHECK:STDOUT:   %test_i32: i32 = var "test_i32"
 // CHECK:STDOUT:   %.loc7: i32 = int_literal 0
 // CHECK:STDOUT:   assign %test_i32, %.loc7
-// CHECK:STDOUT:   %test_f64: f64 = var
+// CHECK:STDOUT:   %test_f64: f64 = var "test_f64"
 // CHECK:STDOUT:   %.loc8: f64 = real_literal 1e-1
 // CHECK:STDOUT:   assign %test_f64, %.loc8
-// CHECK:STDOUT:   %test_str: String = var
+// CHECK:STDOUT:   %test_str: String = var "test_str"
 // CHECK:STDOUT:   %.loc9: String = string_literal "Test"
 // CHECK:STDOUT:   assign %test_str, %.loc9
-// CHECK:STDOUT:   %test_type: type = var
+// CHECK:STDOUT:   %test_type: type = var "test_type"
 // CHECK:STDOUT:   assign %test_type, i32
 // CHECK:STDOUT: }

+ 1 - 1
toolchain/semantics/testdata/basics/fail_name_lookup.carbon

@@ -13,7 +13,7 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, body: {block2}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, body: [block2]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 2 - 4
toolchain/semantics/testdata/basics/fail_non_type_as_type.carbon

@@ -26,8 +26,7 @@ var x: type = 42;
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: typeTypeType},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+0, type: typeTypeType},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+0, arg1: nodeError},
 // CHECK:STDOUT: ]
@@ -38,12 +37,11 @@ var x: type = 42;
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
 // CHECK:STDOUT: package {
-// CHECK:STDOUT:   %x: type = var
+// CHECK:STDOUT:   %x: type = var "x"
 // CHECK:STDOUT:   %.loc10: i32 = int_literal 42
 // CHECK:STDOUT:   assign %x, <error>
 // CHECK:STDOUT: }

+ 5 - 9
toolchain/semantics/testdata/basics/fail_qualifier_unsupported.carbon

@@ -28,11 +28,9 @@ var y: i32 = x.b;
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+0, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: nodeError},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+1, arg1: nodeError},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -41,13 +39,11 @@ var y: i32 = x.b;
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+3,
-// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
 // CHECK:STDOUT: package {
-// CHECK:STDOUT:   %x: i32 = var
-// CHECK:STDOUT:   %y: i32 = var
+// CHECK:STDOUT:   %x: i32 = var "x"
+// CHECK:STDOUT:   %y: i32 = var "y"
 // CHECK:STDOUT:   assign %y, <error>
 // CHECK:STDOUT: }

+ 4 - 6
toolchain/semantics/testdata/basics/parens.carbon

@@ -24,12 +24,11 @@ var test_i32: i32 = ((1) + (2));
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+0, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
-// CHECK:STDOUT:   {kind: BinaryOperatorAdd, arg0: node+2, arg1: node+3, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+0, arg1: node+4},
+// CHECK:STDOUT:   {kind: BinaryOperatorAdd, arg0: node+1, arg1: node+2, type: type0},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+0, arg1: node+3},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -40,12 +39,11 @@ var test_i32: i32 = ((1) + (2));
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
 // CHECK:STDOUT: package {
-// CHECK:STDOUT:   %test_i32: i32 = var
+// CHECK:STDOUT:   %test_i32: i32 = var "test_i32"
 // CHECK:STDOUT:   %.loc7_23: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc7_29: i32 = int_literal 2
 // CHECK:STDOUT:   %.loc7_26: i32 = add %.loc7_23, %.loc7_29

+ 5 - 7
toolchain/semantics/testdata/const/collapse.carbon

@@ -14,7 +14,7 @@ fn F(p: const i32**) -> const (const i32)** {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type3, body: {block4}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type3, body: [block4]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -36,8 +36,7 @@ fn F(p: const i32**) -> const (const i32)** {
 // CHECK:STDOUT:   {kind: ConstType, arg0: type0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: PointerType, arg0: type1, type: typeTypeType},
 // CHECK:STDOUT:   {kind: PointerType, arg0: type2, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type3},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+3, type: type3},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type3},
 // CHECK:STDOUT:   {kind: ConstType, arg0: type0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: ConstType, arg0: type1, type: typeTypeType},
 // CHECK:STDOUT:   {kind: PointerType, arg0: type1, type: typeTypeType},
@@ -53,20 +52,19 @@ fn F(p: const i32**) -> const (const i32)** {
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
-// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 6 - 8
toolchain/semantics/testdata/const/fail_collapse.carbon

@@ -16,7 +16,7 @@ fn G(p: const (const i32)**) -> i32** {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type5, body: {block4}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type5, body: [block4]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -31,8 +31,8 @@ fn G(p: const (const i32)**) -> i32** {
 // CHECK:STDOUT:   node+0,
 // CHECK:STDOUT:   node+2,
 // CHECK:STDOUT:   node+3,
+// CHECK:STDOUT:   node+5,
 // CHECK:STDOUT:   node+6,
-// CHECK:STDOUT:   node+7,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
@@ -41,8 +41,7 @@ fn G(p: const (const i32)**) -> i32** {
 // CHECK:STDOUT:   {kind: ConstType, arg0: type1, type: typeTypeType},
 // CHECK:STDOUT:   {kind: PointerType, arg0: type1, type: typeTypeType},
 // CHECK:STDOUT:   {kind: PointerType, arg0: type2, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type3},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+4, type: type3},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type3},
 // CHECK:STDOUT:   {kind: PointerType, arg0: type0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: PointerType, arg0: type4, type: typeTypeType},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
@@ -57,18 +56,17 @@ fn G(p: const (const i32)**) -> i32** {
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+9,
+// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 10 - 12
toolchain/semantics/testdata/function/call/empty_struct.carbon

@@ -14,8 +14,8 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type0, body: {block4}}},
-// CHECK:STDOUT:   {name: str2, param_refs: block0, body: {block5}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type0, body: [block4]},
+// CHECK:STDOUT:   {name: str2, param_refs: block0, body: [block5]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -34,14 +34,13 @@ fn Main() {
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructType, arg0: block0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: StructValue, arg0: block0, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: StructValue, arg0: block0, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+2},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
 // CHECK:STDOUT:   {kind: StructValue, arg0: block0, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: type0},
 // CHECK:STDOUT:   {kind: Call, arg0: block6, arg1: function0, type: type0},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
@@ -52,27 +51,26 @@ fn Main() {
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+5,
-// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
-// CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+9,
+// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 10 - 12
toolchain/semantics/testdata/function/call/empty_tuple.carbon

@@ -14,8 +14,8 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type0, body: {block4}}},
-// CHECK:STDOUT:   {name: str2, param_refs: block0, body: {block5}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type0, body: [block4]},
+// CHECK:STDOUT:   {name: str2, param_refs: block0, body: [block5]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -36,14 +36,13 @@ fn Main() {
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block0, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block0, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+2},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block0, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: type0},
 // CHECK:STDOUT:   {kind: Call, arg0: block6, arg1: function0, type: type0},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
@@ -54,27 +53,26 @@ fn Main() {
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+5,
-// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
-// CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+9,
+// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 31 - 37
toolchain/semantics/testdata/function/call/fail_param_count.carbon

@@ -57,10 +57,10 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, body: {block2}}},
-// CHECK:STDOUT:   {name: str1, param_refs: block4, body: {block5}}},
-// CHECK:STDOUT:   {name: str3, param_refs: block7, body: {block8}}},
-// CHECK:STDOUT:   {name: str5, param_refs: block0, body: {block9}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, body: [block2]},
+// CHECK:STDOUT:   {name: str1, param_refs: block4, body: [block5]},
+// CHECK:STDOUT:   {name: str3, param_refs: block7, body: [block8]},
+// CHECK:STDOUT:   {name: str5, param_refs: block0, body: [block9]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -88,29 +88,26 @@ fn Main() {
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: Return},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+2, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
 // CHECK:STDOUT:   {kind: Return},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+6, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str4, arg1: node+8, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str4, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function2},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function3},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+13, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+10, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+15, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+12, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+17, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+14, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int3, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+19, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+16, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int4, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+21, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+18, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int5, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+23, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+20, type: type0},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
@@ -118,37 +115,37 @@ fn Main() {
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+10,
-// CHECK:STDOUT:     node+12,
+// CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+9,
+// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+11,
+// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+11,
+// CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+15,
@@ -159,23 +156,20 @@ fn Main() {
 // CHECK:STDOUT:     node+20,
 // CHECK:STDOUT:     node+21,
 // CHECK:STDOUT:     node+22,
-// CHECK:STDOUT:     node+23,
-// CHECK:STDOUT:     node+24,
-// CHECK:STDOUT:     node+25,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+14,
+// CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+16,
-// CHECK:STDOUT:     node+18,
+// CHECK:STDOUT:     node+13,
+// CHECK:STDOUT:     node+15,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+20,
-// CHECK:STDOUT:     node+22,
+// CHECK:STDOUT:     node+17,
+// CHECK:STDOUT:     node+19,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+24,
+// CHECK:STDOUT:     node+21,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 10 - 12
toolchain/semantics/testdata/function/call/fail_param_type.carbon

@@ -18,8 +18,8 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, body: {block4}}},
-// CHECK:STDOUT:   {name: str2, param_refs: block0, body: {block5}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, body: [block4]},
+// CHECK:STDOUT:   {name: str2, param_refs: block0, body: [block5]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -38,13 +38,12 @@ fn Main() {
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: type1},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: type1},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: type1},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
@@ -52,25 +51,24 @@ fn Main() {
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 4 - 6
toolchain/semantics/testdata/function/call/fail_return_type_mismatch.carbon

@@ -15,8 +15,8 @@ fn Run() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, return_type: type0, body: {block2}}},
-// CHECK:STDOUT:   {name: str1, param_refs: block0, body: {block3}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, return_type: type0, body: [block2]},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, body: [block3]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -39,8 +39,7 @@ fn Run() {
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: type0},
 // CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+1},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+4, type: type1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type1},
 // CHECK:STDOUT:   {kind: Call, arg0: block0, arg1: function0, type: type0},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+4, arg1: nodeError},
 // CHECK:STDOUT:   {kind: Return},
@@ -61,7 +60,6 @@ fn Run() {
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
@@ -78,7 +76,7 @@ fn Run() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Run() {
 // CHECK:STDOUT: !entry:
-// CHECK:STDOUT:   %x: i32 = var
+// CHECK:STDOUT:   %x: i32 = var "x"
 // CHECK:STDOUT:   %.loc13: f64 = call @Foo()
 // CHECK:STDOUT:   assign %x, <error>
 // CHECK:STDOUT:   return

+ 13 - 17
toolchain/semantics/testdata/function/call/i32.carbon

@@ -14,8 +14,8 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type0, body: {block4}}},
-// CHECK:STDOUT:   {name: str2, param_refs: block0, body: {block5}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type0, body: [block4]},
+// CHECK:STDOUT:   {name: str2, param_refs: block0, body: [block5]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -34,17 +34,15 @@ fn Main() {
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+5, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str3, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: type0},
 // CHECK:STDOUT:   {kind: Call, arg0: block6, arg1: function0, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+5, arg1: node+9},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+4, arg1: node+7},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
@@ -52,29 +50,27 @@ fn Main() {
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
-// CHECK:STDOUT:     node+10,
-// CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+8,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
@@ -90,7 +86,7 @@ fn Main() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Main() {
 // CHECK:STDOUT: !entry:
-// CHECK:STDOUT:   %b: i32 = var
+// CHECK:STDOUT:   %b: i32 = var "b"
 // CHECK:STDOUT:   %.loc12_21.1: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc12_21.2: i32 = stub_reference %.loc12_21.1
 // CHECK:STDOUT:   %.loc12_20: i32 = call @Echo(%.loc12_21.2)

+ 22 - 28
toolchain/semantics/testdata/function/call/more_param_ir.carbon

@@ -13,8 +13,8 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, body: {block4}}},
-// CHECK:STDOUT:   {name: str4, param_refs: block0, body: {block5}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, body: [block4]},
+// CHECK:STDOUT:   {name: str4, param_refs: block0, body: [block5]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -35,34 +35,31 @@ fn Main() {
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: types: [
 // CHECK:STDOUT:   nodeIntegerType,
-// CHECK:STDOUT:   node+21,
+// CHECK:STDOUT:   node+18,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+2, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+4, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str3, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
-// CHECK:STDOUT:   {kind: BinaryOperatorAdd, arg0: node+9, arg1: node+10, type: type0},
+// CHECK:STDOUT:   {kind: BinaryOperatorAdd, arg0: node+6, arg1: node+7, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: type0},
-// CHECK:STDOUT:   {kind: BinaryOperatorAdd, arg0: node+11, arg1: node+12, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+13, type: type0},
+// CHECK:STDOUT:   {kind: BinaryOperatorAdd, arg0: node+8, arg1: node+9, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+10, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int3, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int4, type: type0},
-// CHECK:STDOUT:   {kind: BinaryOperatorAdd, arg0: node+15, arg1: node+16, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+17, type: type0},
+// CHECK:STDOUT:   {kind: BinaryOperatorAdd, arg0: node+12, arg1: node+13, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+14, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int5, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+19, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+16, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: Call, arg0: block6, arg1: function0, type: type1},
 // CHECK:STDOUT:   {kind: Return},
@@ -74,23 +71,23 @@ fn Main() {
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+3,
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+2,
+// CHECK:STDOUT:   ],
+// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:     node+8,
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+11,
@@ -103,14 +100,11 @@ fn Main() {
 // CHECK:STDOUT:     node+18,
 // CHECK:STDOUT:     node+19,
 // CHECK:STDOUT:     node+20,
-// CHECK:STDOUT:     node+21,
-// CHECK:STDOUT:     node+22,
-// CHECK:STDOUT:     node+23,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+14,
-// CHECK:STDOUT:     node+18,
-// CHECK:STDOUT:     node+20,
+// CHECK:STDOUT:     node+11,
+// CHECK:STDOUT:     node+15,
+// CHECK:STDOUT:     node+17,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 11 - 13
toolchain/semantics/testdata/function/call/params_one.carbon

@@ -12,8 +12,8 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, body: {block4}}},
-// CHECK:STDOUT:   {name: str2, param_refs: block0, body: {block5}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, body: [block4]},
+// CHECK:STDOUT:   {name: str2, param_refs: block0, body: [block5]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -27,20 +27,19 @@ fn Main() {
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: types: [
 // CHECK:STDOUT:   nodeIntegerType,
-// CHECK:STDOUT:   node+7,
+// CHECK:STDOUT:   node+6,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: Call, arg0: block6, arg1: function0, type: type1},
 // CHECK:STDOUT:   {kind: Return},
@@ -50,27 +49,26 @@ fn Main() {
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 13 - 15
toolchain/semantics/testdata/function/call/params_one_comma.carbon

@@ -13,8 +13,8 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, body: {block4}}},
-// CHECK:STDOUT:   {name: str2, param_refs: block0, body: {block5}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, body: [block4]},
+// CHECK:STDOUT:   {name: str2, param_refs: block0, body: [block5]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -29,24 +29,23 @@ fn Main() {
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: types: [
 // CHECK:STDOUT:   nodeIntegerType,
-// CHECK:STDOUT:   node+7,
+// CHECK:STDOUT:   node+6,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: Call, arg0: block6, arg1: function0, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: type0},
 // CHECK:STDOUT:   {kind: Call, arg0: block7, arg1: function0, type: type1},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
@@ -55,19 +54,19 @@ fn Main() {
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
@@ -75,13 +74,12 @@ fn Main() {
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 13 - 17
toolchain/semantics/testdata/function/call/params_two.carbon

@@ -12,8 +12,8 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, body: {block4}}},
-// CHECK:STDOUT:   {name: str3, param_refs: block0, body: {block5}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, body: [block4]},
+// CHECK:STDOUT:   {name: str3, param_refs: block0, body: [block5]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -29,24 +29,22 @@ fn Main() {
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: types: [
 // CHECK:STDOUT:   nodeIntegerType,
-// CHECK:STDOUT:   node+11,
+// CHECK:STDOUT:   node+9,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+2, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: Call, arg0: block6, arg1: function0, type: type1},
 // CHECK:STDOUT:   {kind: Return},
@@ -57,32 +55,30 @@ fn Main() {
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:     node+12,
-// CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 16 - 20
toolchain/semantics/testdata/function/call/params_two_comma.carbon

@@ -13,8 +13,8 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, body: {block4}}},
-// CHECK:STDOUT:   {name: str3, param_refs: block0, body: {block5}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, body: [block4]},
+// CHECK:STDOUT:   {name: str3, param_refs: block0, body: [block5]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -32,30 +32,28 @@ fn Main() {
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: types: [
 // CHECK:STDOUT:   nodeIntegerType,
-// CHECK:STDOUT:   node+11,
+// CHECK:STDOUT:   node+9,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+2, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: Call, arg0: block6, arg1: function0, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+13, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+11, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int3, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+15, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+13, type: type0},
 // CHECK:STDOUT:   {kind: Call, arg0: block7, arg1: function0, type: type1},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
@@ -65,21 +63,21 @@ fn Main() {
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
@@ -90,16 +88,14 @@ fn Main() {
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+15,
 // CHECK:STDOUT:     node+16,
-// CHECK:STDOUT:     node+17,
-// CHECK:STDOUT:     node+18,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+14,
-// CHECK:STDOUT:     node+16,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 2 - 2
toolchain/semantics/testdata/function/call/params_zero.carbon

@@ -12,8 +12,8 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, body: {block2}}},
-// CHECK:STDOUT:   {name: str1, param_refs: block0, body: {block3}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, body: [block2]},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, body: [block3]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 5 - 7
toolchain/semantics/testdata/function/call/return_implicit.carbon

@@ -13,8 +13,8 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, body: {block2}}},
-// CHECK:STDOUT:   {name: str1, param_refs: block0, body: {block3}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, body: [block2]},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, body: [block3]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -38,10 +38,9 @@ fn Main() {
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block0, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+5, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type0},
 // CHECK:STDOUT:   {kind: Call, arg0: block0, arg1: function0, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+5, arg1: node+7},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+5, arg1: node+6},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
@@ -61,7 +60,6 @@ fn Main() {
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
@@ -79,7 +77,7 @@ fn Main() {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %.loc11_11.1: type = tuple_type ()
 // CHECK:STDOUT:   %.loc11_11.2: () = tuple_value ()
-// CHECK:STDOUT:   %b: () = var
+// CHECK:STDOUT:   %b: () = var "b"
 // CHECK:STDOUT:   %.loc11_37: () = call @MakeImplicitEmptyTuple()
 // CHECK:STDOUT:   assign %b, %.loc11_37
 // CHECK:STDOUT:   return

+ 1 - 1
toolchain/semantics/testdata/function/declaration/simple.carbon

@@ -11,7 +11,7 @@ fn G() { F(); }
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
 // CHECK:STDOUT:   {name: str0, param_refs: block0},
-// CHECK:STDOUT:   {name: str1, param_refs: block0, body: {block2}}},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, body: [block2]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 6 - 10
toolchain/semantics/testdata/function/definition/fail_param_name_conflict.carbon

@@ -14,7 +14,7 @@ fn Bar(a: i32, a: i32) {}
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, body: {block4}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, body: [block4]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -30,10 +30,8 @@ fn Bar(a: i32, a: i32) {}
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
@@ -43,18 +41,16 @@ fn Bar(a: i32, a: i32) {}
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 3 - 3
toolchain/semantics/testdata/function/definition/order.carbon

@@ -10,9 +10,9 @@ fn Baz() {}
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, body: {block2}}},
-// CHECK:STDOUT:   {name: str1, param_refs: block0, body: {block3}}},
-// CHECK:STDOUT:   {name: str2, param_refs: block0, body: {block4}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, body: [block2]},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, body: [block3]},
+// CHECK:STDOUT:   {name: str2, param_refs: block0, body: [block4]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 5 - 7
toolchain/semantics/testdata/function/definition/params_one.carbon

@@ -8,7 +8,7 @@ fn Foo(a: i32) {}
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, body: {block4}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, body: [block4]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -24,8 +24,7 @@ fn Foo(a: i32) {}
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
@@ -34,16 +33,15 @@ fn Foo(a: i32) {}
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+2,
+// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 5 - 7
toolchain/semantics/testdata/function/definition/params_one_comma.carbon

@@ -8,7 +8,7 @@ fn Foo(a: i32,) {}
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, body: {block4}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, body: [block4]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -24,8 +24,7 @@ fn Foo(a: i32,) {}
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
@@ -34,16 +33,15 @@ fn Foo(a: i32,) {}
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+2,
+// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 6 - 10
toolchain/semantics/testdata/function/definition/params_two.carbon

@@ -8,7 +8,7 @@ fn Foo(a: i32, b: i32) {}
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, body: {block4}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, body: [block4]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -25,10 +25,8 @@ fn Foo(a: i32, b: i32) {}
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+2, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
@@ -38,18 +36,16 @@ fn Foo(a: i32, b: i32) {}
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 6 - 10
toolchain/semantics/testdata/function/definition/params_two_comma.carbon

@@ -8,7 +8,7 @@ fn Foo(a: i32, b: i32,) {}
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, body: {block4}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, body: [block4]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -25,10 +25,8 @@ fn Foo(a: i32, b: i32,) {}
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+2, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
@@ -38,18 +36,16 @@ fn Foo(a: i32, b: i32,) {}
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 1 - 1
toolchain/semantics/testdata/function/definition/params_zero.carbon

@@ -8,7 +8,7 @@ fn Foo() {}
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, body: {block2}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, body: [block2]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 9 - 13
toolchain/semantics/testdata/function/definition/same_param_name.carbon

@@ -9,8 +9,8 @@ fn Bar(a: i32) {}
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, body: {block4}}},
-// CHECK:STDOUT:   {name: str2, param_refs: block6, body: {block7}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, body: [block4]},
+// CHECK:STDOUT:   {name: str2, param_refs: block6, body: [block7]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -27,12 +27,10 @@ fn Bar(a: i32) {}
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: Return},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+4, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
@@ -41,28 +39,26 @@ fn Bar(a: i32) {}
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:   ],
+// CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
 // CHECK:STDOUT: package {

+ 13 - 15
toolchain/semantics/testdata/if/else.carbon

@@ -19,10 +19,10 @@ fn If(b: bool) {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, body: {block2}}},
-// CHECK:STDOUT:   {name: str1, param_refs: block0, body: {block3}}},
-// CHECK:STDOUT:   {name: str2, param_refs: block0, body: {block4}}},
-// CHECK:STDOUT:   {name: str3, param_refs: block6, body: {block7, block8, block9, block10}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, body: [block2]},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, body: [block3]},
+// CHECK:STDOUT:   {name: str2, param_refs: block0, body: [block4]},
+// CHECK:STDOUT:   {name: str3, param_refs: block6, body: [block7, block8, block9, block10]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -37,7 +37,7 @@ fn If(b: bool) {
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: types: [
 // CHECK:STDOUT:   nodeBoolType,
-// CHECK:STDOUT:   node+11,
+// CHECK:STDOUT:   node+10,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT:   [
@@ -50,8 +50,7 @@ fn If(b: bool) {
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function2},
 // CHECK:STDOUT:   {kind: Return},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str4, arg1: node+6, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str4, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function3},
 // CHECK:STDOUT:   {kind: BranchIf, arg0: block8, arg1: node+6},
 // CHECK:STDOUT:   {kind: Branch, arg0: block9},
@@ -70,7 +69,7 @@ fn If(b: bool) {
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+8,
+// CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
@@ -83,27 +82,26 @@ fn If(b: bool) {
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
-// CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+11,
+// CHECK:STDOUT:     node+13,
+// CHECK:STDOUT:   ],
+// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+15,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+16,
-// CHECK:STDOUT:     node+17,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 25 - 31
toolchain/semantics/testdata/if/fail_reachable_fallthrough.carbon

@@ -35,9 +35,9 @@ fn If3(b: bool) -> i32 {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type1, body: {block4, block5, block6, block7}}},
-// CHECK:STDOUT:   {name: str2, param_refs: block9, return_type: type1, body: {block10, block11, block12, block13}}},
-// CHECK:STDOUT:   {name: str3, param_refs: block15, return_type: type1, body: {block16, block17, block18}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type1, body: [block4, block5, block6, block7]},
+// CHECK:STDOUT:   {name: str2, param_refs: block9, return_type: type1, body: [block10, block11, block12, block13]},
+// CHECK:STDOUT:   {name: str3, param_refs: block15, return_type: type1, body: [block16, block17, block18]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -59,29 +59,26 @@ fn If3(b: bool) -> i32 {
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: BranchIf, arg0: block5, arg1: node+0},
 // CHECK:STDOUT:   {kind: Branch, arg0: block6},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type1},
-// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+5},
+// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+4},
 // CHECK:STDOUT:   {kind: Branch, arg0: block7},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+8, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
-// CHECK:STDOUT:   {kind: BranchIf, arg0: block11, arg1: node+8},
+// CHECK:STDOUT:   {kind: BranchIf, arg0: block11, arg1: node+7},
 // CHECK:STDOUT:   {kind: Branch, arg0: block12},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type1},
-// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+13},
+// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+11},
 // CHECK:STDOUT:   {kind: Branch, arg0: block13},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+16, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function2},
-// CHECK:STDOUT:   {kind: BranchIf, arg0: block17, arg1: node+16},
+// CHECK:STDOUT:   {kind: BranchIf, arg0: block17, arg1: node+14},
 // CHECK:STDOUT:   {kind: Branch, arg0: block18},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: type1},
-// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+21},
+// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+18},
 // CHECK:STDOUT:   {kind: Branch, arg0: block18},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
@@ -89,63 +86,60 @@ fn If3(b: bool) -> i32 {
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:   ],
+// CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+8,
+// CHECK:STDOUT:     node+15,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+10,
-// CHECK:STDOUT:     node+18,
+// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:   ],
+// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
+// CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+9,
+// CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+15,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+16,
 // CHECK:STDOUT:     node+17,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+17,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+18,
 // CHECK:STDOUT:     node+19,
-// CHECK:STDOUT:     node+20,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+21,
-// CHECK:STDOUT:     node+22,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   ],

+ 11 - 15
toolchain/semantics/testdata/if/fail_scope.carbon

@@ -17,7 +17,7 @@ fn VarScope(b: bool) -> i32 {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type1, body: {block4, block5, block6}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type1, body: [block4, block5, block6]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   2,
@@ -36,16 +36,14 @@ fn VarScope(b: bool) -> i32 {
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: BranchIf, arg0: block5, arg1: node+0},
 // CHECK:STDOUT:   {kind: Branch, arg0: block6},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+5, type: type1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type1},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+5, arg1: node+7},
-// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+5},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+4, arg1: node+5},
+// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+4},
 // CHECK:STDOUT:   {kind: Branch, arg0: block6},
 // CHECK:STDOUT:   {kind: ReturnExpression, arg0: nodeError},
 // CHECK:STDOUT: ]
@@ -54,27 +52,25 @@ fn VarScope(b: bool) -> i32 {
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+2,
+// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
-// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+11,
+// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
@@ -87,7 +83,7 @@ fn VarScope(b: bool) -> i32 {
 // CHECK:STDOUT:   if %b br !if.then else br !if.else
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.then:
-// CHECK:STDOUT:   %n: i32 = var
+// CHECK:STDOUT:   %n: i32 = var "n"
 // CHECK:STDOUT:   %.loc9: i32 = int_literal 2
 // CHECK:STDOUT:   assign %n, %.loc9
 // CHECK:STDOUT:   return %n

+ 10 - 12
toolchain/semantics/testdata/if/no_else.carbon

@@ -16,9 +16,9 @@ fn If(b: bool) {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, body: {block2}}},
-// CHECK:STDOUT:   {name: str1, param_refs: block0, body: {block3}}},
-// CHECK:STDOUT:   {name: str2, param_refs: block5, body: {block6, block7, block8}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, body: [block2]},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, body: [block3]},
+// CHECK:STDOUT:   {name: str2, param_refs: block5, body: [block6, block7, block8]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -32,7 +32,7 @@ fn If(b: bool) {
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: types: [
 // CHECK:STDOUT:   nodeBoolType,
-// CHECK:STDOUT:   node+9,
+// CHECK:STDOUT:   node+8,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT:   [
@@ -43,8 +43,7 @@ fn If(b: bool) {
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
 // CHECK:STDOUT:   {kind: Return},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+4, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str3, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function2},
 // CHECK:STDOUT:   {kind: BranchIf, arg0: block7, arg1: node+4},
 // CHECK:STDOUT:   {kind: Branch, arg0: block8},
@@ -60,7 +59,7 @@ fn If(b: bool) {
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
@@ -70,23 +69,22 @@ fn If(b: bool) {
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
-// CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:     node+12,
-// CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 9 - 11
toolchain/semantics/testdata/if/unreachable_fallthrough.carbon

@@ -15,7 +15,7 @@ fn If(b: bool) -> i32 {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type1, body: {block4, block5, block6}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type1, body: [block4, block5, block6]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -34,40 +34,38 @@ fn If(b: bool) -> i32 {
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: BranchIf, arg0: block5, arg1: node+0},
 // CHECK:STDOUT:   {kind: Branch, arg0: block6},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type1},
-// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+5},
+// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+4},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type1},
-// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+7},
+// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+6},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+2,
+// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
-// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+5,
-// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 18 - 24
toolchain/semantics/testdata/if_expression/basic.carbon

@@ -10,7 +10,7 @@ fn F(b: bool, n: i32, m: i32) -> i32 {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type1, body: {block4, block5, block6, block7}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type1, body: [block4, block5, block6, block7]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -29,21 +29,18 @@ fn F(b: bool, n: i32, m: i32) -> i32 {
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+2, type: type1},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+4, type: type1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str3, type: type1},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: BranchIf, arg0: block5, arg1: node+0},
 // CHECK:STDOUT:   {kind: Branch, arg0: block6},
-// CHECK:STDOUT:   {kind: BinaryOperatorAdd, arg0: node+2, arg1: node+4, type: type1},
-// CHECK:STDOUT:   {kind: BinaryOperatorAdd, arg0: node+4, arg1: node+2, type: type1},
-// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block7, arg1: node+9},
-// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block7, arg1: node+10},
+// CHECK:STDOUT:   {kind: BinaryOperatorAdd, arg0: node+1, arg1: node+2, type: type1},
+// CHECK:STDOUT:   {kind: BinaryOperatorAdd, arg0: node+2, arg1: node+1, type: type1},
+// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block7, arg1: node+6},
+// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block7, arg1: node+7},
 // CHECK:STDOUT:   {kind: BlockArg, arg0: block7, type: type1},
-// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+13},
+// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+10},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -52,33 +49,30 @@ fn F(b: bool, n: i32, m: i32) -> i32 {
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+3,
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+2,
+// CHECK:STDOUT:   ],
+// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+3,
-// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+9,
-// CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+10,
-// CHECK:STDOUT:     node+12,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+13,
-// CHECK:STDOUT:     node+14,
+// CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 4 - 4
toolchain/semantics/testdata/if_expression/constant_condition.carbon

@@ -17,10 +17,10 @@ fn G() -> i32 {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, return_type: type0, body: {block2}}},
-// CHECK:STDOUT:   {name: str1, param_refs: block0, return_type: type0, body: {block3}}},
-// CHECK:STDOUT:   {name: str2, param_refs: block0, return_type: type0, body: {block4, block5, block6, block7}}},
-// CHECK:STDOUT:   {name: str3, param_refs: block0, return_type: type0, body: {block8, block9, block10, block11}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, return_type: type0, body: [block2]},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, return_type: type0, body: [block3]},
+// CHECK:STDOUT:   {name: str2, param_refs: block0, return_type: type0, body: [block4, block5, block6, block7]},
+// CHECK:STDOUT:   {name: str3, param_refs: block0, return_type: type0, body: [block8, block9, block10, block11]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,

+ 12 - 14
toolchain/semantics/testdata/if_expression/control_flow.carbon

@@ -13,9 +13,9 @@ fn F(b: bool) -> i32 {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, return_type: type0, body: {block2}}},
-// CHECK:STDOUT:   {name: str1, param_refs: block0, return_type: type0, body: {block3}}},
-// CHECK:STDOUT:   {name: str2, param_refs: block5, return_type: type0, body: {block6, block7, block8, block9}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, return_type: type0, body: [block2]},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, return_type: type0, body: [block3]},
+// CHECK:STDOUT:   {name: str2, param_refs: block5, return_type: type0, body: [block6, block7, block8, block9]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -42,17 +42,16 @@ fn F(b: bool) -> i32 {
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
 // CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+4},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+6, type: type1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str3, type: type1},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function2},
 // CHECK:STDOUT:   {kind: BranchIf, arg0: block7, arg1: node+6},
 // CHECK:STDOUT:   {kind: Branch, arg0: block8},
 // CHECK:STDOUT:   {kind: Call, arg0: block0, arg1: function0, type: type0},
 // CHECK:STDOUT:   {kind: Call, arg0: block0, arg1: function1, type: type0},
+// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block9, arg1: node+10},
 // CHECK:STDOUT:   {kind: BranchWithArg, arg0: block9, arg1: node+11},
-// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block9, arg1: node+12},
 // CHECK:STDOUT:   {kind: BlockArg, arg0: block9, type: type0},
-// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+15},
+// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+14},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -60,7 +59,7 @@ fn F(b: bool) -> i32 {
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+3,
-// CHECK:STDOUT:     node+8,
+// CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
@@ -72,26 +71,25 @@ fn F(b: bool) -> i32 {
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
+// CHECK:STDOUT:   ],
+// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+14,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+15,
-// CHECK:STDOUT:     node+16,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 29 - 35
toolchain/semantics/testdata/if_expression/nested.carbon

@@ -10,7 +10,7 @@ fn F(a: bool, b: bool, c: bool) -> i32 {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type1, body: {block4, block5, block7, block8, block9, block6, block10, block11, block12, block13}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block2, return_type: type1, body: [block4, block5, block7, block8, block9, block6, block10, block11, block12, block13]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -33,33 +33,30 @@ fn F(a: bool, b: bool, c: bool) -> i32 {
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+0, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+2, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+4, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str3, type: type0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
 // CHECK:STDOUT:   {kind: BranchIf, arg0: block5, arg1: node+0},
 // CHECK:STDOUT:   {kind: Branch, arg0: block6},
-// CHECK:STDOUT:   {kind: BranchIf, arg0: block7, arg1: node+2},
+// CHECK:STDOUT:   {kind: BranchIf, arg0: block7, arg1: node+1},
 // CHECK:STDOUT:   {kind: Branch, arg0: block8},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type1},
-// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block9, arg1: node+11},
-// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block9, arg1: node+12},
+// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block9, arg1: node+8},
+// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block9, arg1: node+9},
 // CHECK:STDOUT:   {kind: BlockArg, arg0: block9, type: type1},
-// CHECK:STDOUT:   {kind: BranchIf, arg0: block10, arg1: node+4},
+// CHECK:STDOUT:   {kind: BranchIf, arg0: block10, arg1: node+2},
 // CHECK:STDOUT:   {kind: Branch, arg0: block11},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int3, type: type1},
-// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block12, arg1: node+18},
-// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block12, arg1: node+19},
+// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block12, arg1: node+15},
+// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block12, arg1: node+16},
 // CHECK:STDOUT:   {kind: BlockArg, arg0: block12, type: type1},
-// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block13, arg1: node+15},
-// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block13, arg1: node+22},
+// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block13, arg1: node+12},
+// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block13, arg1: node+19},
 // CHECK:STDOUT:   {kind: BlockArg, arg0: block13, type: type1},
-// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+25},
+// CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+22},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -68,45 +65,46 @@ fn F(a: bool, b: bool, c: bool) -> i32 {
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+3,
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+2,
+// CHECK:STDOUT:   ],
+// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+3,
-// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+9,
-// CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+13,
+// CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+16,
-// CHECK:STDOUT:     node+17,
+// CHECK:STDOUT:     node+8,
+// CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+12,
-// CHECK:STDOUT:     node+14,
+// CHECK:STDOUT:     node+20,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+15,
-// CHECK:STDOUT:     node+23,
+// CHECK:STDOUT:     node+17,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+16,
 // CHECK:STDOUT:     node+18,
-// CHECK:STDOUT:     node+20,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+19,
@@ -114,11 +112,7 @@ fn F(a: bool, b: bool, c: bool) -> i32 {
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+22,
-// CHECK:STDOUT:     node+24,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+25,
-// CHECK:STDOUT:     node+26,
+// CHECK:STDOUT:     node+23,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 20 - 28
toolchain/semantics/testdata/index/array_element_access.carbon

@@ -30,7 +30,7 @@ var d: i32 = a[b];
 // CHECK:STDOUT: types: [
 // CHECK:STDOUT:   nodeIntegerType,
 // CHECK:STDOUT:   node+1,
-// CHECK:STDOUT:   node+8,
+// CHECK:STDOUT:   node+7,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT:   [
@@ -41,29 +41,25 @@ var d: i32 = a[b];
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
 // CHECK:STDOUT:   {kind: ArrayType, arg0: node+0, arg1: type0, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+2, type: type1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+3, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+6, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block2, type: type2},
-// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+9, type: type1},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+10},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+12, type: type0},
+// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+8, type: type1},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+9},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int3, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+12, arg1: node+14},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+16, type: type0},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+11, arg1: node+12},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int4, type: type0},
-// CHECK:STDOUT:   {kind: ArrayIndex, arg0: node+2, arg1: node+18, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+16, arg1: node+19},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+21, type: type0},
-// CHECK:STDOUT:   {kind: ArrayIndex, arg0: node+2, arg1: node+12, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+21, arg1: node+23},
+// CHECK:STDOUT:   {kind: ArrayIndex, arg0: node+2, arg1: node+15, type: type0},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+14, arg1: node+16},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str3, type: type0},
+// CHECK:STDOUT:   {kind: ArrayIndex, arg0: node+2, arg1: node+11, type: type0},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+18, arg1: node+19},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -90,21 +86,17 @@ var d: i32 = a[b];
 // CHECK:STDOUT:     node+18,
 // CHECK:STDOUT:     node+19,
 // CHECK:STDOUT:     node+20,
-// CHECK:STDOUT:     node+21,
-// CHECK:STDOUT:     node+22,
-// CHECK:STDOUT:     node+23,
-// CHECK:STDOUT:     node+24,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
-// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
 // CHECK:STDOUT: package {
 // CHECK:STDOUT:   %.loc7_14: i32 = int_literal 2
 // CHECK:STDOUT:   %.loc7_15: type = array_type %.loc7_14, i32
-// CHECK:STDOUT:   %a: [i32; 2] = var
+// CHECK:STDOUT:   %a: [i32; 2] = var "a"
 // CHECK:STDOUT:   %.loc7_20.1: i32 = int_literal 12
 // CHECK:STDOUT:   %.loc7_20.2: i32 = stub_reference %.loc7_20.1
 // CHECK:STDOUT:   %.loc7_24.1: i32 = int_literal 24
@@ -113,14 +105,14 @@ var d: i32 = a[b];
 // CHECK:STDOUT:   %.loc7_26.2: (i32, i32) = tuple_value (%.loc7_20.2, %.loc7_24.2)
 // CHECK:STDOUT:   %.loc7_26.3: [i32; 2] = array_value %.loc7_26.2
 // CHECK:STDOUT:   assign %a, %.loc7_26.3
-// CHECK:STDOUT:   %b: i32 = var
+// CHECK:STDOUT:   %b: i32 = var "b"
 // CHECK:STDOUT:   %.loc8: i32 = int_literal 1
 // CHECK:STDOUT:   assign %b, %.loc8
-// CHECK:STDOUT:   %c: i32 = var
+// CHECK:STDOUT:   %c: i32 = var "c"
 // CHECK:STDOUT:   %.loc9_16: i32 = int_literal 0
 // CHECK:STDOUT:   %.loc9_17: i32 = array_index %a, %.loc9_16
 // CHECK:STDOUT:   assign %c, %.loc9_17
-// CHECK:STDOUT:   %d: i32 = var
+// CHECK:STDOUT:   %d: i32 = var "d"
 // CHECK:STDOUT:   %.loc10: i32 = array_index %a, %b
 // CHECK:STDOUT:   assign %d, %.loc10
 // CHECK:STDOUT: }

+ 10 - 14
toolchain/semantics/testdata/index/fail_array_large_index.carbon

@@ -27,7 +27,7 @@ var b: i32 = a[0xFFFFFFFFFFFFFFFFF];
 // CHECK:STDOUT: types: [
 // CHECK:STDOUT:   nodeIntegerType,
 // CHECK:STDOUT:   node+1,
-// CHECK:STDOUT:   node+6,
+// CHECK:STDOUT:   node+5,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT:   [
@@ -37,18 +37,16 @@ var b: i32 = a[0xFFFFFFFFFFFFFFFFF];
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
 // CHECK:STDOUT:   {kind: ArrayType, arg0: node+0, arg1: type0, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+2, type: type1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+3, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block2, type: type2},
-// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+7, type: type1},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+8},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+10, type: type0},
+// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+6, type: type1},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+7},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+10, arg1: nodeError},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+9, arg1: nodeError},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -66,25 +64,23 @@ var b: i32 = a[0xFFFFFFFFFFFFFFFFF];
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:     node+12,
-// CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
 // CHECK:STDOUT: package {
 // CHECK:STDOUT:   %.loc7_14: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc7_15: type = array_type %.loc7_14, i32
-// CHECK:STDOUT:   %a: [i32; 1] = var
+// CHECK:STDOUT:   %a: [i32; 1] = var "a"
 // CHECK:STDOUT:   %.loc7_20.1: i32 = int_literal 12
 // CHECK:STDOUT:   %.loc7_20.2: i32 = stub_reference %.loc7_20.1
 // CHECK:STDOUT:   %.loc7_23.1: type = tuple_type (i32)
 // CHECK:STDOUT:   %.loc7_23.2: (i32,) = tuple_value (%.loc7_20.2)
 // CHECK:STDOUT:   %.loc7_23.3: [i32; 1] = array_value %.loc7_23.2
 // CHECK:STDOUT:   assign %a, %.loc7_23.3
-// CHECK:STDOUT:   %b: i32 = var
+// CHECK:STDOUT:   %b: i32 = var "b"
 // CHECK:STDOUT:   %.loc11: i32 = int_literal -1
 // CHECK:STDOUT:   assign %b, <error>
 // CHECK:STDOUT: }

+ 10 - 14
toolchain/semantics/testdata/index/fail_array_non_int_indexing.carbon

@@ -27,7 +27,7 @@ var b: i32 = a[2.6];
 // CHECK:STDOUT: types: [
 // CHECK:STDOUT:   nodeIntegerType,
 // CHECK:STDOUT:   node+1,
-// CHECK:STDOUT:   node+6,
+// CHECK:STDOUT:   node+5,
 // CHECK:STDOUT:   nodeFloatingPointType,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
@@ -38,18 +38,16 @@ var b: i32 = a[2.6];
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
 // CHECK:STDOUT:   {kind: ArrayType, arg0: node+0, arg1: type0, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+2, type: type1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+3, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block2, type: type2},
-// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+7, type: type1},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+8},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+10, type: type0},
+// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+6, type: type1},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+7},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: type3},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+10, arg1: nodeError},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+9, arg1: nodeError},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -67,25 +65,23 @@ var b: i32 = a[2.6];
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:     node+12,
-// CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
 // CHECK:STDOUT: package {
 // CHECK:STDOUT:   %.loc7_14: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc7_15: type = array_type %.loc7_14, i32
-// CHECK:STDOUT:   %a: [i32; 1] = var
+// CHECK:STDOUT:   %a: [i32; 1] = var "a"
 // CHECK:STDOUT:   %.loc7_20.1: i32 = int_literal 12
 // CHECK:STDOUT:   %.loc7_20.2: i32 = stub_reference %.loc7_20.1
 // CHECK:STDOUT:   %.loc7_23.1: type = tuple_type (i32)
 // CHECK:STDOUT:   %.loc7_23.2: (i32,) = tuple_value (%.loc7_20.2)
 // CHECK:STDOUT:   %.loc7_23.3: [i32; 1] = array_value %.loc7_23.2
 // CHECK:STDOUT:   assign %a, %.loc7_23.3
-// CHECK:STDOUT:   %b: i32 = var
+// CHECK:STDOUT:   %b: i32 = var "b"
 // CHECK:STDOUT:   %.loc11: f64 = real_literal 26e-1
 // CHECK:STDOUT:   assign %b, <error>
 // CHECK:STDOUT: }

+ 10 - 14
toolchain/semantics/testdata/index/fail_array_out_of_bound_access.carbon

@@ -27,7 +27,7 @@ var b: i32 = a[2];
 // CHECK:STDOUT: types: [
 // CHECK:STDOUT:   nodeIntegerType,
 // CHECK:STDOUT:   node+1,
-// CHECK:STDOUT:   node+6,
+// CHECK:STDOUT:   node+5,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
 // CHECK:STDOUT:   [
@@ -37,18 +37,16 @@ var b: i32 = a[2];
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
 // CHECK:STDOUT:   {kind: ArrayType, arg0: node+0, arg1: type0, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+2, type: type1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+3, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block2, type: type2},
-// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+7, type: type1},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+8},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+10, type: type0},
+// CHECK:STDOUT:   {kind: ArrayValue, arg0: node+6, type: type1},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+7},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+10, arg1: nodeError},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+9, arg1: nodeError},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -66,25 +64,23 @@ var b: i32 = a[2];
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:     node+12,
-// CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
 // CHECK:STDOUT: package {
 // CHECK:STDOUT:   %.loc7_14: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc7_15: type = array_type %.loc7_14, i32
-// CHECK:STDOUT:   %a: [i32; 1] = var
+// CHECK:STDOUT:   %a: [i32; 1] = var "a"
 // CHECK:STDOUT:   %.loc7_20.1: i32 = int_literal 12
 // CHECK:STDOUT:   %.loc7_20.2: i32 = stub_reference %.loc7_20.1
 // CHECK:STDOUT:   %.loc7_23.1: type = tuple_type (i32)
 // CHECK:STDOUT:   %.loc7_23.2: (i32,) = tuple_value (%.loc7_20.2)
 // CHECK:STDOUT:   %.loc7_23.3: [i32; 1] = array_value %.loc7_23.2
 // CHECK:STDOUT:   assign %a, %.loc7_23.3
-// CHECK:STDOUT:   %b: i32 = var
+// CHECK:STDOUT:   %b: i32 = var "b"
 // CHECK:STDOUT:   %.loc11: i32 = int_literal 2
 // CHECK:STDOUT:   assign %b, <error>
 // CHECK:STDOUT: }

+ 2 - 2
toolchain/semantics/testdata/index/fail_empty_tuple_access.carbon

@@ -15,8 +15,8 @@ fn Run() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, body: {block2}}},
-// CHECK:STDOUT:   {name: str1, param_refs: block0, body: {block3}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, body: [block2]},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, body: [block3]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,

+ 3 - 5
toolchain/semantics/testdata/index/fail_name_not_found.carbon

@@ -13,7 +13,7 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, body: {block2}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, body: [block2]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,
@@ -32,8 +32,7 @@ fn Main() {
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+1, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+1, arg1: nodeError},
 // CHECK:STDOUT:   {kind: Return},
@@ -49,7 +48,6 @@ fn Main() {
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
@@ -59,7 +57,7 @@ fn Main() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Main() {
 // CHECK:STDOUT: !entry:
-// CHECK:STDOUT:   %b: i32 = var
+// CHECK:STDOUT:   %b: i32 = var "b"
 // CHECK:STDOUT:   %.loc11: i32 = int_literal 0
 // CHECK:STDOUT:   assign %b, <error>
 // CHECK:STDOUT:   return

+ 7 - 11
toolchain/semantics/testdata/index/fail_negative_indexing.carbon

@@ -45,16 +45,14 @@ var b: i32 = a[-10];
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block2, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock1, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type2},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+5, type: type2},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type2},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type1},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: type1},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+6, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type1},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: type1},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: type1},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block3, type: type2},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+5, arg1: node+11},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+13, type: type1},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+5, arg1: node+10},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: type1},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
@@ -75,16 +73,14 @@ var b: i32 = a[-10];
 // CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+13,
-// CHECK:STDOUT:     node+14,
-// CHECK:STDOUT:     node+15,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:

+ 13 - 19
toolchain/semantics/testdata/index/fail_non_deterministic_type.carbon

@@ -47,21 +47,18 @@ var c: i32 = a[b];
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block2, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock1, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type2},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+5, type: type2},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type2},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type1},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: type1},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+6, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type1},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: type1},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: type1},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block3, type: type2},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+5, arg1: node+11},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+13, type: type1},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+5, arg1: node+10},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: type1},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+13, arg1: node+15},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+17, type: type1},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+17, arg1: nodeError},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+12, arg1: node+13},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type1},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+15, arg1: nodeError},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -84,17 +81,14 @@ var c: i32 = a[b];
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+15,
 // CHECK:STDOUT:     node+16,
-// CHECK:STDOUT:     node+17,
-// CHECK:STDOUT:     node+18,
-// CHECK:STDOUT:     node+19,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
@@ -104,16 +98,16 @@ var c: i32 = a[b];
 // CHECK:STDOUT:   %.loc7_17.1: type = tuple_type (type, type)
 // CHECK:STDOUT:   %.loc7_17.2: (type, type) = tuple_value (%.loc7_9, %.loc7_14)
 // CHECK:STDOUT:   %.loc7_17.3: type = tuple_type (i32, i32)
-// CHECK:STDOUT:   %a: (i32, i32) = var
+// CHECK:STDOUT:   %a: (i32, i32) = var "a"
 // CHECK:STDOUT:   %.loc7_22.1: i32 = int_literal 2
 // CHECK:STDOUT:   %.loc7_22.2: i32 = stub_reference %.loc7_22.1
 // CHECK:STDOUT:   %.loc7_25.1: i32 = int_literal 3
 // CHECK:STDOUT:   %.loc7_25.2: i32 = stub_reference %.loc7_25.1
 // CHECK:STDOUT:   %.loc7_26: (i32, i32) = tuple_value (%.loc7_22.2, %.loc7_25.2)
 // CHECK:STDOUT:   assign %a, %.loc7_26
-// CHECK:STDOUT:   %b: i32 = var
+// CHECK:STDOUT:   %b: i32 = var "b"
 // CHECK:STDOUT:   %.loc8: i32 = int_literal 0
 // CHECK:STDOUT:   assign %b, %.loc8
-// CHECK:STDOUT:   %c: i32 = var
+// CHECK:STDOUT:   %c: i32 = var "c"
 // CHECK:STDOUT:   assign %c, <error>
 // CHECK:STDOUT: }

+ 1 - 1
toolchain/semantics/testdata/index/fail_non_tuple_access.carbon

@@ -13,7 +13,7 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, body: {block2}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, body: [block2]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,

+ 12 - 18
toolchain/semantics/testdata/index/fail_tuple_large_index.carbon

@@ -43,21 +43,18 @@ var c: i32 = b[0xFFFFFFFFFFFFFFFFF];
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block2, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock1, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type2},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+4, type: type2},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type2},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type1},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+6, type: type1},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: type1},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block3, type: type2},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+4, arg1: node+8},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+4, arg1: node+7},
 // CHECK:STDOUT:   {kind: StubReference, arg0: nodeIntegerType, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block4, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type2},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+12, type: type2},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+12, arg1: node+4},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+15, type: type1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type2},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+11, arg1: node+4},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type1},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+15, arg1: nodeError},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+13, arg1: nodeError},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -79,18 +76,15 @@ var c: i32 = b[0xFFFFFFFFFFFFFFFFF];
 // CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+15,
-// CHECK:STDOUT:     node+16,
-// CHECK:STDOUT:     node+17,
-// CHECK:STDOUT:     node+18,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
@@ -99,16 +93,16 @@ var c: i32 = b[0xFFFFFFFFFFFFFFFFF];
 // CHECK:STDOUT:   %.loc7_13.1: type = tuple_type (type)
 // CHECK:STDOUT:   %.loc7_13.2: (type,) = tuple_value (%.loc7_9)
 // CHECK:STDOUT:   %.loc7_13.3: type = tuple_type (i32)
-// CHECK:STDOUT:   %a: (i32,) = var
+// CHECK:STDOUT:   %a: (i32,) = var "a"
 // CHECK:STDOUT:   %.loc7_18.1: i32 = int_literal 12
 // CHECK:STDOUT:   %.loc7_18.2: i32 = stub_reference %.loc7_18.1
 // CHECK:STDOUT:   %.loc7_21: (i32,) = tuple_value (%.loc7_18.2)
 // CHECK:STDOUT:   assign %a, %.loc7_21
 // CHECK:STDOUT:   %.loc8_9: type = stub_reference i32
 // CHECK:STDOUT:   %.loc8_13: (type,) = tuple_value (%.loc8_9)
-// CHECK:STDOUT:   %b: (i32,) = var
+// CHECK:STDOUT:   %b: (i32,) = var "b"
 // CHECK:STDOUT:   assign %b, %a
-// CHECK:STDOUT:   %c: i32 = var
+// CHECK:STDOUT:   %c: i32 = var "c"
 // CHECK:STDOUT:   %.loc12: i32 = int_literal -1
 // CHECK:STDOUT:   assign %c, <error>
 // CHECK:STDOUT: }

+ 10 - 14
toolchain/semantics/testdata/index/fail_tuple_non_int_indexing.carbon

@@ -46,18 +46,16 @@ var b: i32 = a[2.6];
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block2, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock1, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type2},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+5, type: type2},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type2},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type1},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: type1},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+6, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type1},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: type1},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: type1},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block3, type: type2},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+5, arg1: node+11},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+13, type: type1},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+5, arg1: node+10},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type1},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: type3},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+13, arg1: nodeError},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+12, arg1: nodeError},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -78,16 +76,14 @@ var b: i32 = a[2.6];
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+14,
-// CHECK:STDOUT:     node+15,
-// CHECK:STDOUT:     node+16,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
@@ -97,14 +93,14 @@ var b: i32 = a[2.6];
 // CHECK:STDOUT:   %.loc7_17.1: type = tuple_type (type, type)
 // CHECK:STDOUT:   %.loc7_17.2: (type, type) = tuple_value (%.loc7_9, %.loc7_14)
 // CHECK:STDOUT:   %.loc7_17.3: type = tuple_type (i32, i32)
-// CHECK:STDOUT:   %a: (i32, i32) = var
+// CHECK:STDOUT:   %a: (i32, i32) = var "a"
 // CHECK:STDOUT:   %.loc7_22.1: i32 = int_literal 12
 // CHECK:STDOUT:   %.loc7_22.2: i32 = stub_reference %.loc7_22.1
 // CHECK:STDOUT:   %.loc7_26.1: i32 = int_literal 6
 // CHECK:STDOUT:   %.loc7_26.2: i32 = stub_reference %.loc7_26.1
 // CHECK:STDOUT:   %.loc7_27: (i32, i32) = tuple_value (%.loc7_22.2, %.loc7_26.2)
 // CHECK:STDOUT:   assign %a, %.loc7_27
-// CHECK:STDOUT:   %b: i32 = var
+// CHECK:STDOUT:   %b: i32 = var "b"
 // CHECK:STDOUT:   %.loc11: f64 = real_literal 26e-1
 // CHECK:STDOUT:   assign %b, <error>
 // CHECK:STDOUT: }

+ 10 - 14
toolchain/semantics/testdata/index/fail_tuple_out_of_bound_access.carbon

@@ -45,18 +45,16 @@ var b: i32 = a[2];
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block2, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock1, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type2},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+5, type: type2},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type2},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type1},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: type1},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+6, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type1},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: type1},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: type1},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block3, type: type2},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+5, arg1: node+11},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+13, type: type1},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+5, arg1: node+10},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: type1},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+13, arg1: nodeError},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+12, arg1: nodeError},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -77,16 +75,14 @@ var b: i32 = a[2];
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+14,
-// CHECK:STDOUT:     node+15,
-// CHECK:STDOUT:     node+16,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
@@ -96,14 +92,14 @@ var b: i32 = a[2];
 // CHECK:STDOUT:   %.loc7_17.1: type = tuple_type (type, type)
 // CHECK:STDOUT:   %.loc7_17.2: (type, type) = tuple_value (%.loc7_9, %.loc7_14)
 // CHECK:STDOUT:   %.loc7_17.3: type = tuple_type (i32, i32)
-// CHECK:STDOUT:   %a: (i32, i32) = var
+// CHECK:STDOUT:   %a: (i32, i32) = var "a"
 // CHECK:STDOUT:   %.loc7_22.1: i32 = int_literal 12
 // CHECK:STDOUT:   %.loc7_22.2: i32 = stub_reference %.loc7_22.1
 // CHECK:STDOUT:   %.loc7_26.1: i32 = int_literal 6
 // CHECK:STDOUT:   %.loc7_26.2: i32 = stub_reference %.loc7_26.1
 // CHECK:STDOUT:   %.loc7_27: (i32, i32) = tuple_value (%.loc7_22.2, %.loc7_26.2)
 // CHECK:STDOUT:   assign %a, %.loc7_27
-// CHECK:STDOUT:   %b: i32 = var
+// CHECK:STDOUT:   %b: i32 = var "b"
 // CHECK:STDOUT:   %.loc11: i32 = int_literal 2
 // CHECK:STDOUT:   assign %b, <error>
 // CHECK:STDOUT: }

+ 13 - 19
toolchain/semantics/testdata/index/tuple_element_access.carbon

@@ -40,22 +40,19 @@ var c: i32 = b[0];
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block2, type: type0},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock1, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type2},
-// CHECK:STDOUT:   {kind: BindName, arg0: str0, arg1: node+4, type: type2},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str0, type: type2},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type1},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+6, type: type1},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: type1},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block3, type: type2},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+4, arg1: node+8},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+4, arg1: node+7},
 // CHECK:STDOUT:   {kind: StubReference, arg0: nodeIntegerType, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block4, type: type0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type2},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+12, type: type2},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+12, arg1: node+4},
-// CHECK:STDOUT:   {kind: VarStorage, type: type1},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+15, type: type1},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type2},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+11, arg1: node+4},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type1},
-// CHECK:STDOUT:   {kind: TupleIndex, arg0: node+12, arg1: node+17, type: type1},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+15, arg1: node+18},
+// CHECK:STDOUT:   {kind: TupleIndex, arg0: node+11, arg1: node+14, type: type1},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+13, arg1: node+15},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -78,18 +75,15 @@ var c: i32 = b[0];
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+15,
 // CHECK:STDOUT:     node+16,
-// CHECK:STDOUT:     node+17,
-// CHECK:STDOUT:     node+18,
-// CHECK:STDOUT:     node+19,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
@@ -98,16 +92,16 @@ var c: i32 = b[0];
 // CHECK:STDOUT:   %.loc7_13.1: type = tuple_type (type)
 // CHECK:STDOUT:   %.loc7_13.2: (type,) = tuple_value (%.loc7_9)
 // CHECK:STDOUT:   %.loc7_13.3: type = tuple_type (i32)
-// CHECK:STDOUT:   %a: (i32,) = var
+// CHECK:STDOUT:   %a: (i32,) = var "a"
 // CHECK:STDOUT:   %.loc7_18.1: i32 = int_literal 12
 // CHECK:STDOUT:   %.loc7_18.2: i32 = stub_reference %.loc7_18.1
 // CHECK:STDOUT:   %.loc7_21: (i32,) = tuple_value (%.loc7_18.2)
 // CHECK:STDOUT:   assign %a, %.loc7_21
 // CHECK:STDOUT:   %.loc8_9: type = stub_reference i32
 // CHECK:STDOUT:   %.loc8_13: (type,) = tuple_value (%.loc8_9)
-// CHECK:STDOUT:   %b: (i32,) = var
+// CHECK:STDOUT:   %b: (i32,) = var "b"
 // CHECK:STDOUT:   assign %b, %a
-// CHECK:STDOUT:   %c: i32 = var
+// CHECK:STDOUT:   %c: i32 = var "c"
 // CHECK:STDOUT:   %.loc9_16: i32 = int_literal 0
 // CHECK:STDOUT:   %.loc9_17: i32 = tuple_index %b, %.loc9_16
 // CHECK:STDOUT:   assign %c, %.loc9_17

+ 2 - 2
toolchain/semantics/testdata/index/tuple_return_value_access.carbon

@@ -12,8 +12,8 @@ fn Run() -> i32 {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, return_type: type2, body: {block3}}},
-// CHECK:STDOUT:   {name: str1, param_refs: block0, return_type: type1, body: {block5}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, return_type: type2, body: [block3]},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, return_type: type1, body: [block5]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,

+ 10 - 14
toolchain/semantics/testdata/ir/duplicate_name_same_line.carbon

@@ -8,7 +8,7 @@ fn A() { var n: i32 = 1; if (true) { var n: i32 = 2; } }
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, body: {block2, block3, block4}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, body: [block2, block3, block4]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -28,17 +28,15 @@ fn A() { var n: i32 = 1; if (true) { var n: i32 = 2; } }
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+1, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+1, arg1: node+3},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+1, arg1: node+2},
 // CHECK:STDOUT:   {kind: BoolLiteral, arg0: true, type: type1},
-// CHECK:STDOUT:   {kind: BranchIf, arg0: block3, arg1: node+5},
+// CHECK:STDOUT:   {kind: BranchIf, arg0: block3, arg1: node+4},
 // CHECK:STDOUT:   {kind: Branch, arg0: block4},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+8, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+8, arg1: node+10},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+7, arg1: node+8},
 // CHECK:STDOUT:   {kind: Branch, arg0: block4},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
@@ -55,17 +53,15 @@ fn A() { var n: i32 = 1; if (true) { var n: i32 = 2; } }
 // CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
-// CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+13,
+// CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
@@ -75,14 +71,14 @@ fn A() { var n: i32 = 1; if (true) { var n: i32 = 2; } }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @A() {
 // CHECK:STDOUT: !entry:
-// CHECK:STDOUT:   %n.loc7_14: i32 = var
+// CHECK:STDOUT:   %n.loc7_14: i32 = var "n"
 // CHECK:STDOUT:   %.loc7_23: i32 = int_literal 1
 // CHECK:STDOUT:   assign %n.loc7_14, %.loc7_23
 // CHECK:STDOUT:   %.loc7_30: bool = bool_literal true
 // CHECK:STDOUT:   if %.loc7_30 br !if.then else br !if.else
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.then:
-// CHECK:STDOUT:   %n.loc7_42: i32 = var
+// CHECK:STDOUT:   %n.loc7_42: i32 = var "n"
 // CHECK:STDOUT:   %.loc7_51: i32 = int_literal 2
 // CHECK:STDOUT:   assign %n.loc7_42, %.loc7_51
 // CHECK:STDOUT:   br !if.else

+ 2 - 2
toolchain/semantics/testdata/namespace/fail_duplicate.carbon

@@ -20,8 +20,8 @@ fn Foo.Baz() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str1, param_refs: block0, body: {block2}}},
-// CHECK:STDOUT:   {name: str<invalid>, param_refs: block0, body: {block3}}},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, body: [block2]},
+// CHECK:STDOUT:   {name: str<invalid>, param_refs: block0, body: [block3]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 1 - 1
toolchain/semantics/testdata/namespace/fail_unresolved_scope.carbon

@@ -12,7 +12,7 @@ fn Foo.Baz() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str<invalid>, param_refs: block0, body: {block2}}},
+// CHECK:STDOUT:   {name: str<invalid>, param_refs: block0, body: [block2]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 3 - 3
toolchain/semantics/testdata/namespace/function.carbon

@@ -19,9 +19,9 @@ fn Bar() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str1, param_refs: block0, body: {block2}}},
-// CHECK:STDOUT:   {name: str1, param_refs: block0, body: {block3}}},
-// CHECK:STDOUT:   {name: str2, param_refs: block0, body: {block4}}},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, body: [block2]},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, body: [block3]},
+// CHECK:STDOUT:   {name: str2, param_refs: block0, body: [block4]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 2 - 2
toolchain/semantics/testdata/namespace/nested.carbon

@@ -16,8 +16,8 @@ fn Foo.Bar.Baz() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str2, param_refs: block0, body: {block2}}},
-// CHECK:STDOUT:   {name: str3, param_refs: block0, body: {block3}}},
+// CHECK:STDOUT:   {name: str2, param_refs: block0, body: [block2]},
+// CHECK:STDOUT:   {name: str3, param_refs: block0, body: [block3]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 3 - 3
toolchain/semantics/testdata/operators/and.carbon

@@ -13,9 +13,9 @@ fn And() -> bool {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, return_type: type0, body: {block2}}},
-// CHECK:STDOUT:   {name: str1, param_refs: block0, return_type: type0, body: {block3}}},
-// CHECK:STDOUT:   {name: str2, param_refs: block0, return_type: type0, body: {block4, block5, block6}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, return_type: type0, body: [block2]},
+// CHECK:STDOUT:   {name: str1, param_refs: block0, return_type: type0, body: [block3]},
+// CHECK:STDOUT:   {name: str2, param_refs: block0, return_type: type0, body: [block4, block5, block6]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 51 - 59
toolchain/semantics/testdata/operators/assignment.carbon

@@ -24,7 +24,7 @@ fn Main() {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, body: {block2, block8, block9, block10}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, body: [block2, block8, block9, block10]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   12,
@@ -53,10 +53,10 @@ fn Main() {
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: types: [
 // CHECK:STDOUT:   nodeIntegerType,
-// CHECK:STDOUT:   node+9,
-// CHECK:STDOUT:   node+11,
-// CHECK:STDOUT:   node+30,
-// CHECK:STDOUT:   node+47,
+// CHECK:STDOUT:   node+8,
+// CHECK:STDOUT:   node+10,
+// CHECK:STDOUT:   node+28,
+// CHECK:STDOUT:   node+44,
 // CHECK:STDOUT:   nodeBoolType,
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: type_blocks: [
@@ -71,70 +71,66 @@ fn Main() {
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: function0},
-// CHECK:STDOUT:   {kind: VarStorage, type: type0},
-// CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+1, type: type0},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str1, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+1, arg1: node+3},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+1, arg1: node+2},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+1, arg1: node+5},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+1, arg1: node+4},
 // CHECK:STDOUT:   {kind: StubReference, arg0: nodeIntegerType, type: typeTypeType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: nodeIntegerType, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock0, type: typeTypeType},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block3, type: type1},
 // CHECK:STDOUT:   {kind: TupleType, arg0: typeBlock1, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type2},
-// CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+12, type: type2},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str2, type: type2},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+14, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+12, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int3, type: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+16, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+14, type: type0},
 // CHECK:STDOUT:   {kind: TupleValue, arg0: block4, type: type2},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+12, arg1: node+18},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+11, arg1: node+16},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int4, type: type0},
-// CHECK:STDOUT:   {kind: TupleIndex, arg0: node+12, arg1: node+20, type: type0},
+// CHECK:STDOUT:   {kind: TupleIndex, arg0: node+11, arg1: node+18, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int5, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+21, arg1: node+22},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+19, arg1: node+20},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int6, type: type0},
-// CHECK:STDOUT:   {kind: TupleIndex, arg0: node+12, arg1: node+24, type: type0},
+// CHECK:STDOUT:   {kind: TupleIndex, arg0: node+11, arg1: node+22, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int7, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+25, arg1: node+26},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+23, arg1: node+24},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, arg1: type0},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str2, arg1: type0},
 // CHECK:STDOUT:   {kind: StructType, arg0: block5, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type3},
-// CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+31, type: type3},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str3, type: type3},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int8, type: type0},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, arg1: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+33, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+30, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int9, type: type0},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str2, arg1: type0},
-// CHECK:STDOUT:   {kind: StubReference, arg0: node+36, type: type0},
+// CHECK:STDOUT:   {kind: StubReference, arg0: node+33, type: type0},
 // CHECK:STDOUT:   {kind: StructValue, arg0: block7, type: type3},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+31, arg1: node+39},
-// CHECK:STDOUT:   {kind: StructAccess, arg0: node+31, arg1: member0, type: type0},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+29, arg1: node+36},
+// CHECK:STDOUT:   {kind: StructAccess, arg0: node+29, arg1: member0, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int10, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+41, arg1: node+42},
-// CHECK:STDOUT:   {kind: StructAccess, arg0: node+31, arg1: member1, type: type0},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+38, arg1: node+39},
+// CHECK:STDOUT:   {kind: StructAccess, arg0: node+29, arg1: member1, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int11, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+44, arg1: node+45},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+41, arg1: node+42},
 // CHECK:STDOUT:   {kind: PointerType, arg0: type0, type: typeTypeType},
-// CHECK:STDOUT:   {kind: VarStorage, type: type4},
-// CHECK:STDOUT:   {kind: BindName, arg0: str4, arg1: node+48, type: type4},
+// CHECK:STDOUT:   {kind: VarStorage, arg0: str4, type: type4},
 // CHECK:STDOUT:   {kind: AddressOf, arg0: node+1, type: type4},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+48, arg1: node+50},
-// CHECK:STDOUT:   {kind: Dereference, arg0: node+48, type: type0},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+45, arg1: node+46},
+// CHECK:STDOUT:   {kind: Dereference, arg0: node+45, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int12, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+52, arg1: node+53},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+48, arg1: node+49},
 // CHECK:STDOUT:   {kind: BoolLiteral, arg0: true, type: type5},
-// CHECK:STDOUT:   {kind: BranchIf, arg0: block8, arg1: node+55},
+// CHECK:STDOUT:   {kind: BranchIf, arg0: block8, arg1: node+51},
 // CHECK:STDOUT:   {kind: Branch, arg0: block9},
 // CHECK:STDOUT:   {kind: AddressOf, arg0: node+1, type: type4},
-// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block10, arg1: node+48},
-// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block10, arg1: node+58},
+// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block10, arg1: node+45},
+// CHECK:STDOUT:   {kind: BranchWithArg, arg0: block10, arg1: node+54},
 // CHECK:STDOUT:   {kind: BlockArg, arg0: block10, type: type4},
-// CHECK:STDOUT:   {kind: Dereference, arg0: node+61, type: type0},
+// CHECK:STDOUT:   {kind: Dereference, arg0: node+57, type: type0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int13, type: type0},
-// CHECK:STDOUT:   {kind: Assign, arg0: node+62, arg1: node+63},
+// CHECK:STDOUT:   {kind: Assign, arg0: node+58, arg1: node+59},
 // CHECK:STDOUT:   {kind: Return},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
@@ -174,11 +170,11 @@ fn Main() {
 // CHECK:STDOUT:     node+28,
 // CHECK:STDOUT:     node+29,
 // CHECK:STDOUT:     node+30,
-// CHECK:STDOUT:     node+31,
 // CHECK:STDOUT:     node+32,
 // CHECK:STDOUT:     node+33,
 // CHECK:STDOUT:     node+35,
 // CHECK:STDOUT:     node+36,
+// CHECK:STDOUT:     node+37,
 // CHECK:STDOUT:     node+38,
 // CHECK:STDOUT:     node+39,
 // CHECK:STDOUT:     node+40,
@@ -195,44 +191,40 @@ fn Main() {
 // CHECK:STDOUT:     node+51,
 // CHECK:STDOUT:     node+52,
 // CHECK:STDOUT:     node+53,
-// CHECK:STDOUT:     node+54,
-// CHECK:STDOUT:     node+55,
-// CHECK:STDOUT:     node+56,
-// CHECK:STDOUT:     node+57,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+15,
-// CHECK:STDOUT:     node+17,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+28,
-// CHECK:STDOUT:     node+29,
+// CHECK:STDOUT:     node+26,
+// CHECK:STDOUT:     node+27,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+31,
 // CHECK:STDOUT:     node+34,
-// CHECK:STDOUT:     node+37,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+32,
 // CHECK:STDOUT:     node+35,
-// CHECK:STDOUT:     node+38,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+59,
+// CHECK:STDOUT:     node+55,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+58,
-// CHECK:STDOUT:     node+60,
+// CHECK:STDOUT:     node+54,
+// CHECK:STDOUT:     node+56,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+57,
+// CHECK:STDOUT:     node+58,
+// CHECK:STDOUT:     node+59,
+// CHECK:STDOUT:     node+60,
 // CHECK:STDOUT:     node+61,
-// CHECK:STDOUT:     node+62,
-// CHECK:STDOUT:     node+63,
-// CHECK:STDOUT:     node+64,
-// CHECK:STDOUT:     node+65,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT:
@@ -242,7 +234,7 @@ fn Main() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Main() {
 // CHECK:STDOUT: !entry:
-// CHECK:STDOUT:   %a: i32 = var
+// CHECK:STDOUT:   %a: i32 = var "a"
 // CHECK:STDOUT:   %.loc8: i32 = int_literal 12
 // CHECK:STDOUT:   assign %a, %.loc8
 // CHECK:STDOUT:   %.loc9: i32 = int_literal -7
@@ -252,7 +244,7 @@ fn Main() {
 // CHECK:STDOUT:   %.loc11_19.1: type = tuple_type (type, type)
 // CHECK:STDOUT:   %.loc11_19.2: (type, type) = tuple_value (%.loc11_11, %.loc11_16)
 // CHECK:STDOUT:   %.loc11_19.3: type = tuple_type (i32, i32)
-// CHECK:STDOUT:   %b: (i32, i32) = var
+// CHECK:STDOUT:   %b: (i32, i32) = var "b"
 // CHECK:STDOUT:   %.loc11_24.1: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc11_24.2: i32 = stub_reference %.loc11_24.1
 // CHECK:STDOUT:   %.loc11_27.1: i32 = int_literal 2
@@ -268,7 +260,7 @@ fn Main() {
 // CHECK:STDOUT:   %.loc13_10: i32 = int_literal 4
 // CHECK:STDOUT:   assign %.loc13_6, %.loc13_10
 // CHECK:STDOUT:   %.loc15_27: type = struct_type {.a: i32, .b: i32}
-// CHECK:STDOUT:   %c: {.a: i32, .b: i32} = var
+// CHECK:STDOUT:   %c: {.a: i32, .b: i32} = var "c"
 // CHECK:STDOUT:   %.loc15_37: i32 = int_literal 1
 // CHECK:STDOUT:   %.loc15_35: i32 = stub_reference %.loc15_37
 // CHECK:STDOUT:   %.loc15_45: i32 = int_literal 2
@@ -282,7 +274,7 @@ fn Main() {
 // CHECK:STDOUT:   %.loc17_9: i32 = int_literal 4
 // CHECK:STDOUT:   assign %.loc17_4, %.loc17_9
 // CHECK:STDOUT:   %.loc19_13: type = ptr_type i32
-// CHECK:STDOUT:   %p: i32* = var
+// CHECK:STDOUT:   %p: i32* = var "p"
 // CHECK:STDOUT:   %.loc19_17: i32* = address_of %a
 // CHECK:STDOUT:   assign %p, %.loc19_17
 // CHECK:STDOUT:   %.loc20_3: i32 = dereference %p

+ 1 - 1
toolchain/semantics/testdata/operators/binary_op.carbon

@@ -10,7 +10,7 @@ fn Main() -> i32 {
 
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: functions: [
-// CHECK:STDOUT:   {name: str0, param_refs: block0, return_type: type0, body: {block2}}},
+// CHECK:STDOUT:   {name: str0, param_refs: block0, return_type: type0, body: [block2]},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   12,

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff