Просмотр исходного кода

Adjust handling of values in calls and structs (#2824)

Previously, IR for arguments in calls and struct values was separated out. This merges it back in. Additionally, parameters for functions and struct types had their own IR; the block is still there, but there's a TODO to decide what to do with it.

In the LLVM IR, this has the consequence of emitting expressions that are inputs to a call or struct value within the scope of the function, which is pretty much where it should be. Importantly it happens before the call is encountered.

This change also tinkers with the int and real literal lowering. I'm pretty sure both are still wrong, but was having trouble figuring out a "better" way to do it, and this seems like it'll work for now.
Jon Ross-Perkins 3 лет назад
Родитель
Сommit
e73207429f
76 измененных файлов с 303 добавлено и 517 удалено
  1. 0 2
      toolchain/driver/testdata/semantics_builtin_nodes.carbon
  2. 1 1
      toolchain/lowering/lowering_context.cpp
  3. 35 26
      toolchain/lowering/lowering_handle.cpp
  4. 8 4
      toolchain/lowering/testdata/struct/member_access.carbon
  5. 4 2
      toolchain/lowering/testdata/struct/one_entry.carbon
  6. 6 2
      toolchain/lowering/testdata/struct/two_entries.carbon
  7. 6 9
      toolchain/semantics/semantics_context.cpp
  8. 4 15
      toolchain/semantics/semantics_context.h
  9. 11 5
      toolchain/semantics/semantics_handle.cpp
  10. 4 5
      toolchain/semantics/semantics_handle_call_expression.cpp
  11. 4 7
      toolchain/semantics/semantics_handle_function.cpp
  12. 8 9
      toolchain/semantics/semantics_handle_struct.cpp
  13. 1 2
      toolchain/semantics/semantics_ir.cpp
  14. 1 25
      toolchain/semantics/semantics_ir.h
  15. 0 1
      toolchain/semantics/semantics_ir_test.cpp
  16. 7 16
      toolchain/semantics/semantics_node.h
  17. 7 0
      toolchain/semantics/semantics_node_stack.cpp
  18. 12 1
      toolchain/semantics/semantics_node_stack.h
  19. 0 2
      toolchain/semantics/testdata/basics/builtin_types.carbon
  20. 0 2
      toolchain/semantics/testdata/basics/empty.carbon
  21. 0 2
      toolchain/semantics/testdata/basics/empty_decl.carbon
  22. 1 3
      toolchain/semantics/testdata/basics/fail_name_lookup.carbon
  23. 0 2
      toolchain/semantics/testdata/designators/fail_unsupported.carbon
  24. 5 10
      toolchain/semantics/testdata/function/call/empty_struct.carbon
  25. 14 22
      toolchain/semantics/testdata/function/call/fail_param_count.carbon
  26. 3 5
      toolchain/semantics/testdata/function/call/fail_param_type.carbon
  27. 3 6
      toolchain/semantics/testdata/function/call/fail_return_type_mismatch.carbon
  28. 5 10
      toolchain/semantics/testdata/function/call/i32.carbon
  29. 5 10
      toolchain/semantics/testdata/function/call/more_param_ir.carbon
  30. 5 10
      toolchain/semantics/testdata/function/call/params_one.carbon
  31. 8 16
      toolchain/semantics/testdata/function/call/params_one_comma.carbon
  32. 5 10
      toolchain/semantics/testdata/function/call/params_two.carbon
  33. 10 18
      toolchain/semantics/testdata/function/call/params_two_comma.carbon
  34. 3 6
      toolchain/semantics/testdata/function/call/params_zero.carbon
  35. 1 3
      toolchain/semantics/testdata/function/definition/fail_param_name_conflict.carbon
  36. 3 5
      toolchain/semantics/testdata/function/definition/order.carbon
  37. 1 3
      toolchain/semantics/testdata/function/definition/params_one.carbon
  38. 1 3
      toolchain/semantics/testdata/function/definition/params_one_comma.carbon
  39. 1 3
      toolchain/semantics/testdata/function/definition/params_two.carbon
  40. 1 3
      toolchain/semantics/testdata/function/definition/params_two_comma.carbon
  41. 1 3
      toolchain/semantics/testdata/function/definition/params_zero.carbon
  42. 2 4
      toolchain/semantics/testdata/function/definition/same_param_name.carbon
  43. 1 3
      toolchain/semantics/testdata/operators/binary_op.carbon
  44. 1 3
      toolchain/semantics/testdata/operators/fail_type_mismatch.carbon
  45. 1 3
      toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon
  46. 1 3
      toolchain/semantics/testdata/return/fail_type_mismatch.carbon
  47. 1 3
      toolchain/semantics/testdata/return/fail_value_disallowed.carbon
  48. 1 3
      toolchain/semantics/testdata/return/fail_value_missing.carbon
  49. 1 3
      toolchain/semantics/testdata/return/no_value.carbon
  50. 11 17
      toolchain/semantics/testdata/return/struct.carbon
  51. 1 3
      toolchain/semantics/testdata/return/value.carbon
  52. 0 2
      toolchain/semantics/testdata/struct/empty.carbon
  53. 4 8
      toolchain/semantics/testdata/struct/fail_assign_empty.carbon
  54. 4 8
      toolchain/semantics/testdata/struct/fail_assign_to_empty.carbon
  55. 6 12
      toolchain/semantics/testdata/struct/fail_field_name_mismatch.carbon
  56. 6 12
      toolchain/semantics/testdata/struct/fail_field_type_mismatch.carbon
  57. 6 12
      toolchain/semantics/testdata/struct/fail_member_access_type.carbon
  58. 6 12
      toolchain/semantics/testdata/struct/fail_non_member_access.carbon
  59. 7 13
      toolchain/semantics/testdata/struct/fail_too_few_values.carbon
  60. 4 10
      toolchain/semantics/testdata/struct/fail_type_assign.carbon
  61. 6 10
      toolchain/semantics/testdata/struct/fail_value_as_type.carbon
  62. 9 15
      toolchain/semantics/testdata/struct/member_access.carbon
  63. 8 16
      toolchain/semantics/testdata/struct/one_entry.carbon
  64. 12 20
      toolchain/semantics/testdata/struct/two_entries.carbon
  65. 1 3
      toolchain/semantics/testdata/var/decl.carbon
  66. 1 3
      toolchain/semantics/testdata/var/decl_with_init.carbon
  67. 1 3
      toolchain/semantics/testdata/var/fail_duplicate_decl.carbon
  68. 1 3
      toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon
  69. 1 3
      toolchain/semantics/testdata/var/fail_init_with_self.carbon
  70. 1 3
      toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon
  71. 1 3
      toolchain/semantics/testdata/var/fail_storage_is_literal.carbon
  72. 0 2
      toolchain/semantics/testdata/var/global_decl.carbon
  73. 0 2
      toolchain/semantics/testdata/var/global_decl_with_init.carbon
  74. 0 2
      toolchain/semantics/testdata/var/global_lookup.carbon
  75. 1 3
      toolchain/semantics/testdata/var/global_lookup_in_scope.carbon
  76. 1 3
      toolchain/semantics/testdata/var/lookup.carbon

+ 0 - 2
toolchain/driver/testdata/semantics_builtin_nodes.carbon

@@ -5,8 +5,6 @@
 // RUN: %{carbon} dump semantics-ir --include_builtins %s | \
 // RUN:   %{FileCheck-strict}
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [

+ 1 - 1
toolchain/lowering/lowering_context.cpp

@@ -78,7 +78,7 @@ auto LoweringContext::BuildLoweredNodeAsType(SemanticsNodeId node_id)
   auto node = semantics_ir_->GetNode(node_id);
   switch (node.kind()) {
     case SemanticsNodeKind::StructType: {
-      auto refs = semantics_ir_->GetNodeBlock(node.GetAsStructType().second);
+      auto refs = semantics_ir_->GetNodeBlock(node.GetAsStructType());
       llvm::SmallVector<llvm::Type*> subtypes;
       subtypes.reserve(refs.size());
       for (auto ref_id : refs) {

+ 35 - 26
toolchain/lowering/lowering_handle.cpp

@@ -113,16 +113,27 @@ auto LoweringHandleFunctionDefinition(LoweringContext& context,
 auto LoweringHandleIntegerLiteral(LoweringContext& context,
                                   SemanticsNodeId node_id, SemanticsNode node)
     -> void {
-  SemanticsIntegerLiteralId int_id = node.GetAsIntegerLiteral();
-  llvm::APInt i = context.semantics_ir().GetIntegerLiteral(int_id);
-  llvm::Value* v = context.builder().getInt32(i.getLimitedValue());
+  llvm::APInt i =
+      context.semantics_ir().GetIntegerLiteral(node.GetAsIntegerLiteral());
+  // TODO: This won't offer correct semantics, but seems close enough for now.
+  llvm::Value* v =
+      llvm::ConstantInt::get(context.builder().getInt32Ty(), i.getSExtValue());
   context.SetLoweredNodeAsValue(node_id, v);
 }
 
-auto LoweringHandleRealLiteral(LoweringContext& /*context*/,
-                               SemanticsNodeId /*node_id*/, SemanticsNode node)
+auto LoweringHandleRealLiteral(LoweringContext& context,
+                               SemanticsNodeId node_id, SemanticsNode node)
     -> void {
-  CARBON_FATAL() << "TODO: Add support: " << node;
+  SemanticsRealLiteral real =
+      context.semantics_ir().GetRealLiteral(node.GetAsRealLiteral());
+  // TODO: This will probably have overflow issues, and should be fixed.
+  double val =
+      real.mantissa.getSExtValue() *
+      std::pow((real.is_decimal ? 10 : 2), real.exponent.getSExtValue());
+  llvm::APFloat llvm_val(val);
+  context.SetLoweredNodeAsValue(
+      node_id,
+      llvm::ConstantFP::get(context.builder().getDoubleTy(), llvm_val));
 }
 
 auto LoweringHandleReturn(LoweringContext& context, SemanticsNodeId /*node_id*/,
@@ -163,8 +174,8 @@ auto LoweringHandleStructType(LoweringContext& /*context*/,
 
 auto LoweringHandleStructTypeField(LoweringContext& /*context*/,
                                    SemanticsNodeId /*node_id*/,
-                                   SemanticsNode node) -> void {
-  CARBON_FATAL() << "TODO: Add support: " << node;
+                                   SemanticsNode /*node*/) -> void {
+  // No action to take.
 }
 
 auto LoweringHandleStructValue(LoweringContext& context,
@@ -174,30 +185,28 @@ auto LoweringHandleStructValue(LoweringContext& context,
   auto* alloca = context.builder().CreateAlloca(type);
   context.SetLoweredNodeAsValue(node_id, alloca);
 
-  // TODO: Figure out changes to flow so that values are calculated for store.
-  // Right now, the struct value IR is unevaluated.
-  // auto refs =
-  //     context.semantics_ir().GetNodeBlock(node.GetAsStructValue().second);
-  // for (int i = 0; i < static_cast<int>(refs.size()); ++i) {
-  //   auto* gep = context.builder().CreateStructGEP(type, alloca, i);
-  //   context.builder().CreateStore(context.GetLoweredNodeAsValue(refs[i]),
-  //                                 gep);
-  // }
+  auto refs = context.semantics_ir().GetNodeBlock(node.GetAsStructValue());
+  for (int i = 0; i < static_cast<int>(refs.size()); ++i) {
+    auto* gep = context.builder().CreateStructGEP(type, alloca, i);
+    context.builder().CreateStore(context.GetLoweredNodeAsValue(refs[i]), gep);
+  }
 }
 
-auto LoweringHandleStubReference(LoweringContext& /*context*/,
-                                 SemanticsNodeId /*node_id*/,
-                                 SemanticsNode node) -> void {
-  CARBON_FATAL() << "TODO: Add support: " << node;
+auto LoweringHandleStubReference(LoweringContext& context,
+                                 SemanticsNodeId node_id, SemanticsNode node)
+    -> void {
+  context.SetLoweredNodeAsValue(
+      node_id, context.GetLoweredNodeAsValue(node.GetAsStubReference()));
 }
 
 auto LoweringHandleVarStorage(LoweringContext& context, SemanticsNodeId node_id,
                               SemanticsNode node) -> void {
-  // TODO: This doesn't handle globals. 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: This doesn't handle globals. 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?
   auto* alloca = context.builder().CreateAlloca(
       context.GetLoweredNodeAsType(node.type_id()));
   context.SetLoweredNodeAsValue(node_id, alloca);

+ 8 - 4
toolchain/lowering/testdata/struct/member_access.carbon

@@ -13,12 +13,16 @@
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT:   %0 = alloca %0, align 8
 // CHECK:STDOUT:   %1 = alloca %1, align 8
+// CHECK:STDOUT:   %2 = getelementptr inbounds %1, ptr %1, i32 0, i32 0
+// CHECK:STDOUT:   store double 0.000000e+00, ptr %2, align 8
+// CHECK:STDOUT:   %3 = getelementptr inbounds %1, ptr %1, i32 0, i32 1
+// CHECK:STDOUT:   store i32 1, ptr %3, align 4
 // CHECK:STDOUT:   store ptr %1, ptr %0, align 8
-// CHECK:STDOUT:   %2 = alloca i32, align 4
-// CHECK:STDOUT:   %3 = getelementptr inbounds %0, ptr %0, i32 0, i32 1
-// CHECK:STDOUT:   store ptr %3, ptr %2, align 8
 // CHECK:STDOUT:   %4 = alloca i32, align 4
-// CHECK:STDOUT:   store ptr %2, ptr %4, align 8
+// CHECK:STDOUT:   %5 = getelementptr inbounds %0, ptr %0, i32 0, i32 1
+// CHECK:STDOUT:   store ptr %5, ptr %4, align 8
+// CHECK:STDOUT:   %6 = alloca i32, align 4
+// CHECK:STDOUT:   store ptr %4, ptr %6, align 8
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT: }
 

+ 4 - 2
toolchain/lowering/testdata/struct/one_entry.carbon

@@ -14,9 +14,11 @@
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT:   %0 = alloca %0, align 8
 // CHECK:STDOUT:   %1 = alloca %1, align 8
+// CHECK:STDOUT:   %2 = getelementptr inbounds %1, ptr %1, i32 0, i32 0
+// CHECK:STDOUT:   store i32 4, ptr %2, align 4
 // CHECK:STDOUT:   store ptr %1, ptr %0, align 8
-// CHECK:STDOUT:   %2 = alloca %2, align 8
-// CHECK:STDOUT:   store ptr %0, ptr %2, align 8
+// CHECK:STDOUT:   %3 = alloca %2, align 8
+// CHECK:STDOUT:   store ptr %0, ptr %3, align 8
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT: }
 

+ 6 - 2
toolchain/lowering/testdata/struct/two_entries.carbon

@@ -14,9 +14,13 @@
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT:   %0 = alloca %0, align 8
 // CHECK:STDOUT:   %1 = alloca %1, align 8
+// CHECK:STDOUT:   %2 = getelementptr inbounds %1, ptr %1, i32 0, i32 0
+// CHECK:STDOUT:   store i32 1, ptr %2, align 4
+// CHECK:STDOUT:   %3 = getelementptr inbounds %1, ptr %1, i32 0, i32 1
+// CHECK:STDOUT:   store i32 2, ptr %3, align 4
 // CHECK:STDOUT:   store ptr %1, ptr %0, align 8
-// CHECK:STDOUT:   %2 = alloca %2, align 8
-// CHECK:STDOUT:   store ptr %0, ptr %2, align 8
+// CHECK:STDOUT:   %4 = alloca %2, align 8
+// CHECK:STDOUT:   store ptr %0, ptr %4, align 8
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT: }
 

+ 6 - 9
toolchain/semantics/semantics_context.cpp

@@ -154,8 +154,8 @@ auto SemanticsContext::PopScope() -> void {
 }
 
 auto SemanticsContext::ImplicitAsForArgs(
-    SemanticsNodeBlockId /*arg_ir_id*/, SemanticsNodeBlockId arg_refs_id,
-    ParseTree::Node param_parse_node, SemanticsNodeBlockId param_refs_id,
+    SemanticsNodeBlockId arg_refs_id, ParseTree::Node param_parse_node,
+    SemanticsNodeBlockId param_refs_id,
     DiagnosticEmitter<ParseTree::Node>::DiagnosticBuilder* diagnostic) -> bool {
   // If both arguments and parameters are empty, return quickly. Otherwise,
   // we'll fetch both so that errors are consistent.
@@ -292,10 +292,8 @@ auto SemanticsContext::CanImplicitAsStruct(SemanticsNode value_type,
       as_type.kind() != SemanticsNodeKind::StructType) {
     return false;
   }
-  auto value_type_refs =
-      semantics_->GetNodeBlock(value_type.GetAsStructType().second);
-  auto as_type_refs =
-      semantics_->GetNodeBlock(as_type.GetAsStructType().second);
+  auto value_type_refs = semantics_->GetNodeBlock(value_type.GetAsStructType());
+  auto as_type_refs = semantics_->GetNodeBlock(as_type.GetAsStructType());
   if (value_type_refs.size() != as_type_refs.size()) {
     return false;
   }
@@ -314,7 +312,6 @@ auto SemanticsContext::CanImplicitAsStruct(SemanticsNode value_type,
 
 auto SemanticsContext::ParamOrArgStart() -> void {
   params_or_args_stack_.Push();
-  node_block_stack_.Push();
 }
 
 auto SemanticsContext::ParamOrArgComma(bool for_args) -> void {
@@ -322,11 +319,11 @@ auto SemanticsContext::ParamOrArgComma(bool for_args) -> void {
 }
 
 auto SemanticsContext::ParamOrArgEnd(bool for_args, ParseNodeKind start_kind)
-    -> std::pair<SemanticsNodeBlockId, SemanticsNodeBlockId> {
+    -> SemanticsNodeBlockId {
   if (parse_tree_->node_kind(node_stack_.PeekParseNode()) != start_kind) {
     ParamOrArgSave(for_args);
   }
-  return {node_block_stack_.Pop(), params_or_args_stack_.Pop()};
+  return params_or_args_stack_.Pop();
 }
 
 auto SemanticsContext::ParamOrArgSave(bool for_args) -> void {

+ 4 - 15
toolchain/semantics/semantics_context.h

@@ -75,8 +75,8 @@ class SemanticsContext {
   // future we may want to remember the right implicit conversions to do for
   // valid cases in order to efficiently handle generics.
   auto ImplicitAsForArgs(
-      SemanticsNodeBlockId arg_ir_id, SemanticsNodeBlockId arg_refs_id,
-      ParseTree::Node param_parse_node, SemanticsNodeBlockId param_refs_id,
+      SemanticsNodeBlockId arg_refs_id, ParseTree::Node param_parse_node,
+      SemanticsNodeBlockId param_refs_id,
       DiagnosticEmitter<ParseTree::Node>::DiagnosticBuilder* diagnostic)
       -> bool;
 
@@ -95,9 +95,9 @@ class SemanticsContext {
 
   // Detects whether there's an entry to push. On return, the top of
   // node_stack_ will be start_kind, and the caller should do type-specific
-  // processing. Returns a pair of {ir_id, refs_id}.
+  // processing. Returns refs_id.
   auto ParamOrArgEnd(bool for_args, ParseNodeKind start_kind)
-      -> std::pair<SemanticsNodeBlockId, SemanticsNodeBlockId>;
+      -> SemanticsNodeBlockId;
 
   // Saves a parameter from the top block in node_stack_ to the top block in
   // params_or_args_stack_. If for_args, adds a StubReference of the previous
@@ -127,11 +127,6 @@ class SemanticsContext {
     return args_type_info_stack_;
   }
 
-  auto finished_params_stack() -> llvm::SmallVector<
-      std::pair<SemanticsNodeBlockId, SemanticsNodeBlockId>>& {
-    return finished_params_stack_;
-  }
-
   auto return_scope_stack() -> llvm::SmallVector<SemanticsNodeId>& {
     return return_scope_stack_;
   }
@@ -226,12 +221,6 @@ class SemanticsContext {
   // for a type separate from the literal arguments.
   SemanticsNodeBlockStack args_type_info_stack_;
 
-  // Completed parameters that are held temporarily on a side-channel for a
-  // function. This can't use node_stack_ because it has space for only one
-  // value, whereas parameters return two values.
-  llvm::SmallVector<std::pair<SemanticsNodeBlockId, SemanticsNodeBlockId>>
-      finished_params_stack_;
-
   // A stack of return scopes; i.e., targets for `return`. Inside a function,
   // this will be a FunctionDeclaration.
   llvm::SmallVector<SemanticsNodeId> return_scope_stack_;

+ 11 - 5
toolchain/semantics/semantics_handle.cpp

@@ -79,8 +79,7 @@ auto SemanticsHandleDesignatorExpression(SemanticsContext& context,
 
   switch (base_type.kind()) {
     case SemanticsNodeKind::StructType: {
-      auto refs =
-          context.semantics().GetNodeBlock(base_type.GetAsStructType().second);
+      auto refs = context.semantics().GetNodeBlock(base_type.GetAsStructType());
       // TODO: Do we need to optimize this with a lookup table for O(1)?
       for (int i = 0; i < static_cast<int>(refs.size()); ++i) {
         auto ref = context.semantics().GetNode(refs[i]);
@@ -307,14 +306,20 @@ auto SemanticsHandleNamedConstraintIntroducer(SemanticsContext& context,
 
 auto SemanticsHandleParameterList(SemanticsContext& context,
                                   ParseTree::Node parse_node) -> bool {
-  auto [ir_id, refs_id] = context.ParamOrArgEnd(
+  auto refs_id = context.ParamOrArgEnd(
       /*for_args=*/false, ParseNodeKind::ParameterListStart);
+  // TODO: This contains the IR block for parameters. At present, it's just
+  // loose, but it's not strictly required for parameter refs; we should either
+  // stop constructing it completely or, if it turns out to be needed, store it.
+  // Note, the underlying issue is that the LLVM IR has nowhere clear to emit,
+  // so changing storage would require addressing that problem. For comparison
+  // with function calls, the IR needs to be emitted prior to the call.
+  context.node_block_stack().Pop();
 
   context.PopScope();
   context.node_stack().PopAndDiscardSoloParseNode(
       ParseNodeKind::ParameterListStart);
-  context.finished_params_stack().push_back({ir_id, refs_id});
-  context.node_stack().Push(parse_node);
+  context.node_stack().Push(parse_node, refs_id);
   return true;
 }
 
@@ -328,6 +333,7 @@ auto SemanticsHandleParameterListStart(SemanticsContext& context,
                                        ParseTree::Node parse_node) -> bool {
   context.PushScope();
   context.node_stack().Push(parse_node);
+  context.node_block_stack().Push();
   context.ParamOrArgStart();
   return true;
 }

+ 4 - 5
toolchain/semantics/semantics_handle_call_expression.cpp

@@ -8,7 +8,7 @@ namespace Carbon {
 
 auto SemanticsHandleCallExpression(SemanticsContext& context,
                                    ParseTree::Node parse_node) -> bool {
-  auto [ir_id, refs_id] = context.ParamOrArgEnd(
+  auto refs_id = context.ParamOrArgEnd(
       /*for_args=*/true, ParseNodeKind::CallExpressionStart);
 
   // TODO: Convert to call expression.
@@ -29,21 +29,20 @@ auto SemanticsHandleCallExpression(SemanticsContext& context,
   CARBON_DIAGNOSTIC(NoMatchingCall, Error, "No matching callable was found.");
   auto diagnostic =
       context.emitter().Build(call_expr_parse_node, NoMatchingCall);
-  if (!context.ImplicitAsForArgs(ir_id, refs_id, name_node.parse_node(),
+  if (!context.ImplicitAsForArgs(refs_id, name_node.parse_node(),
                                  callable.param_refs_id, &diagnostic)) {
     diagnostic.Emit();
     context.node_stack().Push(parse_node, SemanticsNodeId::BuiltinInvalidType);
     return true;
   }
 
-  CARBON_CHECK(context.ImplicitAsForArgs(ir_id, refs_id, name_node.parse_node(),
+  CARBON_CHECK(context.ImplicitAsForArgs(refs_id, name_node.parse_node(),
                                          callable.param_refs_id,
                                          /*diagnostic=*/nullptr));
 
-  auto call_id = context.semantics().AddCall({ir_id, refs_id});
   // TODO: Propagate return types from callable.
   auto call_node_id = context.AddNode(SemanticsNode::Call::Make(
-      call_expr_parse_node, callable.return_type_id, call_id, callable_id));
+      call_expr_parse_node, callable.return_type_id, refs_id, callable_id));
 
   context.node_stack().Push(parse_node, call_node_id);
   return true;

+ 4 - 7
toolchain/semantics/semantics_handle_function.cpp

@@ -40,9 +40,8 @@ auto SemanticsHandleFunctionDefinitionStart(SemanticsContext& context,
     return_type_id =
         context.node_stack().PopForNodeId(ParseNodeKind::ReturnType);
   }
-  context.node_stack().PopForSoloParseNode(ParseNodeKind::ParameterList);
-  auto [param_ir_id, param_refs_id] =
-      context.finished_params_stack().pop_back_val();
+  auto param_refs_id =
+      context.node_stack().PopForNodeBlockId(ParseNodeKind::ParameterList);
   auto name_node =
       context.node_stack().PopForSoloParseNode(ParseNodeKind::DeclaredName);
   auto fn_node = context.node_stack().PopForSoloParseNode(
@@ -51,10 +50,8 @@ auto SemanticsHandleFunctionDefinitionStart(SemanticsContext& context,
   auto name_str = context.parse_tree().GetNodeText(name_node);
   auto name_id = context.semantics().AddString(name_str);
 
-  auto callable_id =
-      context.semantics().AddCallable({.param_ir_id = param_ir_id,
-                                       .param_refs_id = param_refs_id,
-                                       .return_type_id = return_type_id});
+  auto callable_id = context.semantics().AddCallable(
+      {.param_refs_id = param_refs_id, .return_type_id = return_type_id});
   auto decl_id = context.AddNode(
       SemanticsNode::FunctionDeclaration::Make(fn_node, name_id, callable_id));
   context.AddNameToLookup(name_node, name_id, decl_id);

+ 8 - 9
toolchain/semantics/semantics_handle_struct.cpp

@@ -67,7 +67,7 @@ auto SemanticsHandleStructFieldValue(SemanticsContext& context,
 
 auto SemanticsHandleStructLiteral(SemanticsContext& context,
                                   ParseTree::Node parse_node) -> bool {
-  auto [ir_id, refs_id] = context.ParamOrArgEnd(
+  auto refs_id = context.ParamOrArgEnd(
       /*for_args=*/true, ParseNodeKind::StructLiteralOrStructTypeLiteralStart);
 
   context.PopScope();
@@ -81,14 +81,13 @@ auto SemanticsHandleStructLiteral(SemanticsContext& context,
     return true;
   }
 
-  // Construct a type for the literal. Each field is one node, so ir_id and
-  // refs_id match.
+  // Construct a type for the literal.
   auto refs = context.semantics().GetNodeBlock(refs_id);
-  auto type_id = context.AddNode(SemanticsNode::StructType::Make(
-      parse_node, type_block_id, type_block_id));
+  auto type_id = context.AddNode(
+      SemanticsNode::StructType::Make(parse_node, type_block_id));
 
   auto value_id = context.AddNode(
-      SemanticsNode::StructValue::Make(parse_node, type_id, ir_id, refs_id));
+      SemanticsNode::StructValue::Make(parse_node, type_id, refs_id));
   context.node_stack().Push(parse_node, value_id);
   return true;
 }
@@ -107,7 +106,7 @@ auto SemanticsHandleStructLiteralOrStructTypeLiteralStart(
 
 auto SemanticsHandleStructTypeLiteral(SemanticsContext& context,
                                       ParseTree::Node parse_node) -> bool {
-  auto [ir_id, refs_id] = context.ParamOrArgEnd(
+  auto refs_id = context.ParamOrArgEnd(
       /*for_args=*/false, ParseNodeKind::StructLiteralOrStructTypeLiteralStart);
 
   context.PopScope();
@@ -119,8 +118,8 @@ auto SemanticsHandleStructTypeLiteral(SemanticsContext& context,
   CARBON_CHECK(refs_id != SemanticsNodeBlockId::Empty)
       << "{} is handled by StructLiteral.";
 
-  auto type_id = context.AddNode(
-      SemanticsNode::StructType::Make(parse_node, ir_id, refs_id));
+  auto type_id =
+      context.AddNode(SemanticsNode::StructType::Make(parse_node, refs_id));
   context.node_stack().Push(parse_node, type_id);
   return true;
 }

+ 1 - 2
toolchain/semantics/semantics_ir.cpp

@@ -105,7 +105,6 @@ auto SemanticsIR::Print(llvm::raw_ostream& out, bool include_builtins) const
     -> void {
   out << "cross_reference_irs_size: " << cross_reference_irs_.size() << "\n";
 
-  PrintList(out, "calls", calls_);
   PrintList(out, "callables", callables_);
   PrintList(out, "integer_literals", integer_literals_);
   PrintList(out, "real_literals", real_literals_);
@@ -165,7 +164,7 @@ auto SemanticsIR::StringifyNode(SemanticsNodeId node_id) -> std::string {
     auto node = GetNode(step.node_id);
     switch (node.kind()) {
       case SemanticsNodeKind::StructType: {
-        auto refs = GetNodeBlock(node.GetAsStructType().second);
+        auto refs = GetNodeBlock(node.GetAsStructType());
         if (step.index == 0) {
           out << "{";
         } else if (step.index < static_cast<int>(refs.size())) {

+ 1 - 25
toolchain/semantics/semantics_ir.h

@@ -12,30 +12,16 @@
 
 namespace Carbon {
 
-// A call.
-struct SemanticsCall {
-  auto Print(llvm::raw_ostream& out) const -> void {
-    out << "{arg_ir: " << arg_ir_id << ", arg_refs: " << arg_refs_id << "}";
-  }
-
-  // The full IR for arguments.
-  SemanticsNodeBlockId arg_ir_id;
-  // A block containing a single reference node per argument.
-  SemanticsNodeBlockId arg_refs_id;
-};
-
 // A callable object.
 struct SemanticsCallable {
   auto Print(llvm::raw_ostream& out) const -> void {
-    out << "{param_ir: " << param_ir_id << ", param_refs: " << param_refs_id;
+    out << "{param_refs: " << param_refs_id;
     if (return_type_id.is_valid()) {
       out << ", return_type: " << return_type_id;
     }
     out << "}";
   }
 
-  // The full IR for parameters.
-  SemanticsNodeBlockId param_ir_id;
   // A block containing a single reference node per parameter.
   SemanticsNodeBlockId param_refs_id;
   // The return type. This will be invalid if the return type wasn't specified.
@@ -80,13 +66,6 @@ class SemanticsIR {
   }
   auto Print(llvm::raw_ostream& out, bool include_builtins) const -> void;
 
-  // Adds a call, returning an ID to reference it.
-  auto AddCall(SemanticsCall call) -> SemanticsCallId {
-    SemanticsCallId id(calls_.size());
-    calls_.push_back(call);
-    return id;
-  }
-
   // Adds a callable, returning an ID to reference it.
   auto AddCallable(SemanticsCallable callable) -> SemanticsCallableId {
     SemanticsCallableId id(callables_.size());
@@ -207,9 +186,6 @@ class SemanticsIR {
 
   bool has_errors_ = false;
 
-  // Storage for call objects.
-  llvm::SmallVector<SemanticsCall> calls_;
-
   // Storage for callable objects.
   llvm::SmallVector<SemanticsCallable> callables_;
 

+ 0 - 1
toolchain/semantics/semantics_ir_test.cpp

@@ -50,7 +50,6 @@ TEST(SemanticsIRTest, YAML) {
       Yaml::Value::FromText(print_output),
       ElementsAre(Yaml::Mapping(ElementsAre(
           Pair("cross_reference_irs_size", "1"),
-          Pair("calls", Yaml::Sequence(IsEmpty())),
           Pair("callables", Yaml::Sequence(IsEmpty())),
           Pair("integer_literals", Yaml::Sequence(ElementsAre("0"))),
           Pair("real_literals", Yaml::Sequence(IsEmpty())),

+ 7 - 16
toolchain/semantics/semantics_node.h

@@ -50,15 +50,6 @@ constexpr SemanticsNodeId SemanticsNodeId::Invalid =
       SemanticsNodeId(SemanticsBuiltinKind::Name.AsInt());
 #include "toolchain/semantics/semantics_builtin_kind.def"
 
-// The ID of a call.
-struct SemanticsCallId : public IndexBase {
-  using IndexBase::IndexBase;
-  auto Print(llvm::raw_ostream& out) const -> void {
-    out << "call";
-    IndexBase::Print(out);
-  }
-};
-
 // The ID of a callable, such as a function.
 struct SemanticsCallableId : public IndexBase {
   using IndexBase::IndexBase;
@@ -256,8 +247,9 @@ class SemanticsNode {
     }
   };
 
-  using Call = Factory<SemanticsNodeKind::Call, SemanticsCallId /*call_id*/,
-                       SemanticsCallableId /*callable_id*/>;
+  using Call =
+      Factory<SemanticsNodeKind::Call, SemanticsNodeBlockId /*refs_id*/,
+              SemanticsCallableId /*callable_id*/>;
 
   using CodeBlock = FactoryPreTyped<SemanticsNodeKind::CodeBlock,
                                     SemanticsNodeId::InvalidIndex,
@@ -312,16 +304,15 @@ class SemanticsNode {
                                      SemanticsNodeId /*struct_id*/,
                                      SemanticsMemberIndex /*ref_index*/>;
 
-  using StructType = FactoryPreTyped<
-      SemanticsNodeKind::StructType, SemanticsBuiltinKind::TypeType.AsInt(),
-      SemanticsNodeBlockId /*ir_id*/, SemanticsNodeBlockId /*refs_id*/>;
+  using StructType = FactoryPreTyped<SemanticsNodeKind::StructType,
+                                     SemanticsBuiltinKind::TypeType.AsInt(),
+                                     SemanticsNodeBlockId /*refs_id*/>;
 
   using StructTypeField = Factory<SemanticsNodeKind::StructTypeField,
                                   SemanticsStringId /*name_id*/>;
 
   using StructValue =
-      Factory<SemanticsNodeKind::StructValue, SemanticsNodeBlockId /*ir_id*/,
-              SemanticsNodeBlockId /*refs_id*/>;
+      Factory<SemanticsNodeKind::StructValue, SemanticsNodeBlockId /*refs_id*/>;
 
   using StubReference =
       Factory<SemanticsNodeKind::StubReference, SemanticsNodeId /*node_id*/>;

+ 7 - 0
toolchain/semantics/semantics_node_stack.cpp

@@ -130,6 +130,13 @@ auto SemanticsNodeStack::PopForParseNodeAndNodeId(ParseNodeKind pop_parse_kind)
   return {back.parse_node, back.node_id};
 }
 
+auto SemanticsNodeStack::PopForNodeBlockId(ParseNodeKind pop_parse_kind)
+    -> SemanticsNodeBlockId {
+  auto back = PopEntry(pop_parse_kind);
+  RequireValidId(back);
+  return back.node_block_id;
+}
+
 auto SemanticsNodeStack::PopForParseNodeAndNameId(ParseNodeKind pop_parse_kind)
     -> std::pair<ParseTree::Node, SemanticsStringId> {
   auto back = PopEntry(pop_parse_kind);

+ 12 - 1
toolchain/semantics/semantics_node_stack.h

@@ -40,11 +40,18 @@ class SemanticsNodeStack {
               DebugLog::None);
   }
 
-  // Pushes a parse tree node onto the stack.
+  // Pushes a parse tree node onto the stack with a semantics node.
   auto Push(ParseTree::Node parse_node, SemanticsNodeId node_id) -> void {
     PushEntry({.parse_node = parse_node, .node_id = node_id}, DebugLog::NodeId);
   }
 
+  // Pushes a parse tree node onto the stack with a semantics node block.
+  auto Push(ParseTree::Node parse_node, SemanticsNodeBlockId node_block_id)
+      -> void {
+    PushEntry({.parse_node = parse_node, .node_block_id = node_block_id},
+              DebugLog::NodeId);
+  }
+
   // Pushes a parse tree node onto the stack with its name.
   auto Push(ParseTree::Node parse_node, SemanticsStringId name_id) -> void {
     PushEntry({.parse_node = parse_node, .name_id = name_id}, DebugLog::NameId);
@@ -82,6 +89,9 @@ class SemanticsNodeStack {
   // Pops the top of the stack and returns the node_id.
   auto PopForNodeId() -> SemanticsNodeId;
 
+  // Pops the top of the stack and returns the node_block_id.
+  auto PopForNodeBlockId(ParseNodeKind pop_parse_kind) -> SemanticsNodeBlockId;
+
   // Pops the top of the stack and returns the parse_node and name_id.
   auto PopForParseNodeAndNameId(ParseNodeKind pop_parse_kind)
       -> std::pair<ParseTree::Node, SemanticsStringId>;
@@ -112,6 +122,7 @@ class SemanticsNodeStack {
     union {
       SemanticsNodeId node_id;
       SemanticsStringId name_id;
+      SemanticsNodeBlockId node_block_id;
     };
   };
   static_assert(sizeof(Entry) == 8, "Unexpected Entry size");

+ 0 - 2
toolchain/semantics/testdata/basics/builtin_types.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [

+ 0 - 2
toolchain/semantics/testdata/basics/empty.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [

+ 0 - 2
toolchain/semantics/testdata/basics/empty_decl.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [

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

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 0 - 2
toolchain/semantics/testdata/designators/fail_unsupported.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [

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

@@ -4,12 +4,9 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block4, arg_refs: block5},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -27,8 +24,8 @@
 // CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+2, arg1: block0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
 // CHECK:STDOUT:   {kind: StubReference, arg0: nodeEmptyStruct, type: nodeEmptyStructType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block6},
+// CHECK:STDOUT:   {kind: Call, arg0: block5, arg1: callable0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block4},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -48,13 +45,11 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 
 fn Echo(a: {}) {

+ 14 - 22
toolchain/semantics/testdata/function/call/fail_param_count.carbon

@@ -4,13 +4,11 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
-// CHECK:STDOUT:   {param_ir: block2, param_refs: block3},
-// CHECK:STDOUT:   {param_ir: block4, param_refs: block5},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block3},
+// CHECK:STDOUT:   {param_refs: block5},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -56,7 +54,7 @@
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+21, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int5, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+23, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+12, arg1: block0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+12, arg1: block6},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -91,33 +89,27 @@
 // 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+15,
 // CHECK:STDOUT:     node+16,
 // CHECK:STDOUT:     node+17,
 // CHECK:STDOUT:     node+18,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+16,
-// CHECK:STDOUT:     node+18,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // 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+20,
-// CHECK:STDOUT:     node+22,
+// CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+23,
-// CHECK:STDOUT:     node+24,
+// CHECK:STDOUT:     node+16,
+// CHECK:STDOUT:     node+18,
+// CHECK:STDOUT:   ],
+// CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+20,
+// CHECK:STDOUT:     node+22,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+24,

+ 3 - 5
toolchain/semantics/testdata/function/call/fail_param_type.carbon

@@ -4,11 +4,9 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -28,7 +26,7 @@
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: nodeFloatingPointType},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block4},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [

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

@@ -4,12 +4,9 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block0, arg_refs: block0},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: nodeFloatingPointType},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0, return_type: nodeFloatingPointType},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -29,7 +26,7 @@
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str1, arg1: callable1},
 // CHECK:STDOUT:   {kind: VarStorage, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+5, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0, type: nodeFloatingPointType},
+// CHECK:STDOUT:   {kind: Call, arg0: block0, arg1: callable0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+5, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block3},
 // CHECK:STDOUT: ]

+ 5 - 10
toolchain/semantics/testdata/function/call/i32.carbon

@@ -4,12 +4,9 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block6, arg_refs: block7},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2, return_type: nodeIntegerType},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2, return_type: nodeIntegerType},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -35,7 +32,7 @@
 // CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+7, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0, type: nodeIntegerType},
+// CHECK:STDOUT:   {kind: Call, arg0: block6, arg1: callable0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+7, arg1: node+11, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+6, arg1: block5},
 // CHECK:STDOUT: ]
@@ -62,12 +59,10 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:     node+12,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+11,
+// CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+10,

+ 5 - 10
toolchain/semantics/testdata/function/call/more_param_ir.carbon

@@ -4,12 +4,9 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block4, arg_refs: block5},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -50,8 +47,8 @@
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+17, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int5, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+19, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+8, arg1: block6},
+// CHECK:STDOUT:   {kind: Call, arg0: block5, arg1: callable0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+8, arg1: block4},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -88,15 +85,13 @@
 // CHECK:STDOUT:     node+18,
 // CHECK:STDOUT:     node+19,
 // CHECK:STDOUT:     node+20,
+// CHECK:STDOUT:     node+21,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+18,
 // CHECK:STDOUT:     node+20,
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+21,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 
 fn Foo(a: i32, b: i32, c: i32) {}

+ 5 - 10
toolchain/semantics/testdata/function/call/params_one.carbon

@@ -4,12 +4,9 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block4, arg_refs: block5},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -29,8 +26,8 @@
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block6},
+// CHECK:STDOUT:   {kind: Call, arg0: block5, arg1: callable0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block4},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -51,13 +48,11 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 
 fn Foo(a: i32) {}

+ 8 - 16
toolchain/semantics/testdata/function/call/params_one_comma.carbon

@@ -4,13 +4,9 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block4, arg_refs: block5},
-// CHECK:STDOUT:   {arg_ir: block7, arg_refs: block8},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -31,11 +27,11 @@
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0},
+// CHECK:STDOUT:   {kind: Call, arg0: block5, arg1: callable0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call1, arg1: callable0},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block6},
+// CHECK:STDOUT:   {kind: Call, arg0: block6, arg1: callable0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block4},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -56,17 +52,13 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+8,
+// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+9,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+9,

+ 5 - 10
toolchain/semantics/testdata/function/call/params_two.carbon

@@ -4,12 +4,9 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block4, arg_refs: block5},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -35,8 +32,8 @@
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+6, arg1: block6},
+// CHECK:STDOUT:   {kind: Call, arg0: block5, arg1: callable0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+6, arg1: block4},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -62,14 +59,12 @@
 // 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+10,
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 
 fn Foo(a: i32, b: i32) {}

+ 10 - 18
toolchain/semantics/testdata/function/call/params_two_comma.carbon

@@ -4,13 +4,9 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block4, arg_refs: block5},
-// CHECK:STDOUT:   {arg_ir: block7, arg_refs: block8},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
@@ -38,13 +34,13 @@
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0},
+// CHECK:STDOUT:   {kind: Call, arg0: block5, arg1: callable0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+12, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int3, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+14, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call1, arg1: callable0},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+6, arg1: block6},
+// CHECK:STDOUT:   {kind: Call, arg0: block6, arg1: callable0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+6, arg1: block4},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
@@ -70,20 +66,16 @@
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+10,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:     node+16,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // 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+8,
+// CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+13,

+ 3 - 6
toolchain/semantics/testdata/function/call/params_zero.carbon

@@ -4,12 +4,9 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block0, arg_refs: block0},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
@@ -23,7 +20,7 @@
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str0, arg1: callable0},
 // CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+0, arg1: block0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str1, arg1: callable1},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0},
+// CHECK:STDOUT:   {kind: Call, arg0: block0, arg1: callable0},
 // CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+2, arg1: block2},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [

+ 1 - 3
toolchain/semantics/testdata/function/definition/fail_param_name_conflict.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block2},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

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

@@ -4,12 +4,10 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/function/definition/params_one.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block2},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/function/definition/params_one_comma.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block2},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/function/definition/params_two.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block2},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/function/definition/params_two_comma.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block2},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

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

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 2 - 4
toolchain/semantics/testdata/function/definition/same_param_name.carbon

@@ -4,11 +4,9 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block4, param_refs: block5},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block5},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

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

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: nodeIntegerType},
+// CHECK:STDOUT:   {param_refs: block0, return_type: nodeIntegerType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   12,

+ 1 - 3
toolchain/semantics/testdata/operators/fail_type_mismatch.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: nodeIntegerType},
+// CHECK:STDOUT:   {param_refs: block0, return_type: nodeIntegerType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   12,

+ 1 - 3
toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: nodeIntegerType},
+// CHECK:STDOUT:   {param_refs: block0, return_type: nodeIntegerType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   12,

+ 1 - 3
toolchain/semantics/testdata/return/fail_type_mismatch.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: nodeIntegerType},
+// CHECK:STDOUT:   {param_refs: block0, return_type: nodeIntegerType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/return/fail_value_disallowed.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,

+ 1 - 3
toolchain/semantics/testdata/return/fail_value_missing.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: nodeIntegerType},
+// CHECK:STDOUT:   {param_refs: block0, return_type: nodeIntegerType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/return/no_value.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 11 - 17
toolchain/semantics/testdata/return/struct.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: node+1},
+// CHECK:STDOUT:   {param_refs: block0, return_type: node+1},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   3,
@@ -20,33 +18,34 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+3, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+6},
+// CHECK:STDOUT:   {kind: StructType, arg0: block4, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block5, type: node+6},
 // CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+7, type: node+6},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+2, arg1: block7},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+2, arg1: block3},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+0,
+// CHECK:STDOUT:   ],
+// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+4,
@@ -54,11 +53,6 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 
 fn Main() -> {.a: i32} {

+ 1 - 3
toolchain/semantics/testdata/return/value.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: nodeIntegerType},
+// CHECK:STDOUT:   {param_refs: block0, return_type: nodeIntegerType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,

+ 0 - 2
toolchain/semantics/testdata/struct/empty.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [

+ 4 - 8
toolchain/semantics/testdata/struct/fail_assign_empty.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
@@ -18,7 +16,7 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: nodeInvalidType, type: nodeInvalidType},
@@ -28,16 +26,14 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
+// CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+0,
+// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 
 // CHECK:STDERR: fail_assign_empty.carbon:[[@LINE+1]]:22: Cannot implicitly convert from `{} as Type` to `{.a: i32}`.

+ 4 - 8
toolchain/semantics/testdata/struct/fail_assign_to_empty.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
@@ -23,8 +21,8 @@
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+2, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block3, arg1: block3, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block2, arg1: block4, type: node+5},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block3, type: node+5},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+0, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
@@ -33,15 +31,13 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+2,
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [

+ 6 - 12
toolchain/semantics/testdata/struct/fail_field_name_mismatch.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
@@ -20,14 +18,14 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str2, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+7},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+7},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
@@ -35,21 +33,17 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,

+ 6 - 12
toolchain/semantics/testdata/struct/fail_field_type_mismatch.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
@@ -20,14 +18,14 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str2, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: nodeFloatingPointType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+7},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+7},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
@@ -35,21 +33,17 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,

+ 6 - 12
toolchain/semantics/testdata/struct/fail_member_access_type.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
@@ -21,14 +19,14 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeFloatingPointType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: nodeFloatingPointType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+7},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+7},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+8, type: node+7},
 // CHECK:STDOUT:   {kind: VarStorage, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+10, type: nodeIntegerType},
@@ -39,14 +37,11 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
@@ -55,8 +50,7 @@
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,

+ 6 - 12
toolchain/semantics/testdata/struct/fail_non_member_access.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
@@ -21,14 +19,14 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+7},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+7},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+8, type: node+7},
 // CHECK:STDOUT:   {kind: VarStorage, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+10, type: nodeIntegerType},
@@ -39,14 +37,11 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
@@ -55,8 +50,7 @@
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,

+ 7 - 13
toolchain/semantics/testdata/struct/fail_too_few_values.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
@@ -21,14 +19,14 @@
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+2},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+3, type: node+2},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+8},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+8},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+3, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
@@ -37,22 +35,18 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+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+0,
+// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+6,

+ 4 - 10
toolchain/semantics/testdata/struct/fail_type_assign.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
@@ -18,11 +16,11 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block4, arg1: block5, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
@@ -30,19 +28,15 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+4,

+ 6 - 10
toolchain/semantics/testdata/struct/fail_value_as_type.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
@@ -21,8 +19,8 @@
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block2, arg1: block2, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block1, arg1: block3, type: node+3},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block3, type: node+3},
 // CHECK:STDOUT:   {kind: VarStorage, type: nodeInvalidType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+5, type: nodeInvalidType},
 // CHECK:STDOUT: ]
@@ -32,6 +30,10 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+2,
+// CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
@@ -39,12 +41,6 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+3,
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+5,
-// CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 
 // CHECK:STDERR: fail_value_as_type.carbon:[[@LINE+1]]:15: Cannot implicitly convert from `{.a: i32}` to `Type`.

+ 9 - 15
toolchain/semantics/testdata/struct/member_access.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
@@ -24,7 +22,7 @@
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+2},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+3, type: node+2},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: nodeFloatingPointType},
@@ -33,8 +31,8 @@
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+11},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+11},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+3, arg1: node+12, type: node+11},
 // CHECK:STDOUT:   {kind: VarStorage, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+14, type: nodeIntegerType},
@@ -50,15 +48,13 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+8,
+// CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+13,
@@ -71,10 +67,8 @@
 // CHECK:STDOUT:     node+20,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
-// CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+0,
+// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+6,

+ 8 - 16
toolchain/semantics/testdata/struct/one_entry.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
@@ -20,17 +18,17 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+7},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+7},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+8, type: node+7},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block7, arg1: block8, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block5, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+11},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+12, type: node+11},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+12, arg1: node+2, type: node+1},
@@ -40,25 +38,22 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+4,
+// 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:     node+14,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
@@ -69,9 +64,6 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+10,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 
 var x: {.a: i32} = {.a = 4};

+ 12 - 20
toolchain/semantics/testdata/struct/two_entries.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
@@ -23,7 +21,7 @@
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+2},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+3, type: node+2},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
@@ -32,12 +30,12 @@
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+11},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+11},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+3, arg1: node+12, type: node+11},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block7, arg1: block8, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block5, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+16},
 // CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+17, type: node+16},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+17, arg1: node+3, type: node+2},
@@ -48,28 +46,26 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+8,
+// CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:     node+12,
 // 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:     node+19,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
-// CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+0,
+// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+6,
@@ -83,10 +79,6 @@
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+15,
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+14,
-// CHECK:STDOUT:     node+15,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 
 var x: {.a: i32, .b: i32} = {.a = 1, .b = 2};

+ 1 - 3
toolchain/semantics/testdata/var/decl.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/var/decl_with_init.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,

+ 1 - 3
toolchain/semantics/testdata/var/fail_duplicate_decl.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,

+ 1 - 3
toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/var/fail_init_with_self.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/var/fail_storage_is_literal.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,

+ 0 - 2
toolchain/semantics/testdata/var/global_decl.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [

+ 0 - 2
toolchain/semantics/testdata/var/global_decl_with_init.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [

+ 0 - 2
toolchain/semantics/testdata/var/global_lookup.carbon

@@ -4,8 +4,6 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [

+ 1 - 3
toolchain/semantics/testdata/var/global_lookup_in_scope.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,

+ 1 - 3
toolchain/semantics/testdata/var/lookup.carbon

@@ -4,10 +4,8 @@
 //
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,