mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Remove nearly all uses of StubReferences. (#3249)
The speculative insertion of StubReferences after elements in an argument list turned out to not be necessary, because we decided we want to insert per-argument initialization steps after all arguments are evaluated, rather than interleaving them. The StubReferences we insert are causing some minor code complexity, so remove them. We still create StubReferences when performing patch-ups of already-emitted code, but we no longer ever need to look through them when determining whether an initializer was a literal or when evaluating a type expression.
This commit is contained in:
+9
-15
@@ -25,14 +25,12 @@ fn F() {
|
||||
// CHECK:STDOUT: %.loc8_27: type = struct_type {.a: i32, .b: i32}
|
||||
// CHECK:STDOUT: %s: ref {.a: i32, .b: i32} = var "s"
|
||||
// CHECK:STDOUT: %.loc8_37: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc8_35: i32 = stub_reference %.loc8_37
|
||||
// CHECK:STDOUT: %.loc8_45: i32 = int_literal 2
|
||||
// CHECK:STDOUT: %.loc8_43: i32 = stub_reference %.loc8_45
|
||||
// CHECK:STDOUT: %.loc8_46: {.a: i32, .b: i32} = struct_literal (%.loc8_35, %.loc8_43)
|
||||
// CHECK:STDOUT: %.loc8_46: {.a: i32, .b: i32} = struct_literal (%.loc8_37, %.loc8_45)
|
||||
// CHECK:STDOUT: %.loc8_47.1: ref i32 = struct_access %s, member0
|
||||
// CHECK:STDOUT: %.loc8_47.2: init i32 = initialize_from %.loc8_35 to %.loc8_47.1
|
||||
// CHECK:STDOUT: %.loc8_47.2: init i32 = initialize_from %.loc8_37 to %.loc8_47.1
|
||||
// CHECK:STDOUT: %.loc8_47.3: ref i32 = struct_access %s, member1
|
||||
// CHECK:STDOUT: %.loc8_47.4: init i32 = initialize_from %.loc8_43 to %.loc8_47.3
|
||||
// CHECK:STDOUT: %.loc8_47.4: init i32 = initialize_from %.loc8_45 to %.loc8_47.3
|
||||
// CHECK:STDOUT: %.loc8_47.5: init {.a: i32, .b: i32} = struct_init %.loc8_46, (%.loc8_47.2, %.loc8_47.4)
|
||||
// CHECK:STDOUT: assign %s, %.loc8_47.5
|
||||
// CHECK:STDOUT: %.loc10_27: type = struct_type {.a: i32, .b: i32}
|
||||
@@ -50,23 +48,19 @@ fn F() {
|
||||
// CHECK:STDOUT: %.loc12_19: ref i32 = struct_access %s, member1
|
||||
// CHECK:STDOUT: %.loc12_17: i32* = address_of %.loc12_19
|
||||
// CHECK:STDOUT: assign %r, %.loc12_17
|
||||
// CHECK:STDOUT: %.loc14_11: type = stub_reference i32
|
||||
// CHECK:STDOUT: %.loc14_16: type = stub_reference i32
|
||||
// CHECK:STDOUT: %.loc14_19.1: type = tuple_type (type, type)
|
||||
// CHECK:STDOUT: %.loc14_19.2: (type, type) = tuple_literal (%.loc14_11, %.loc14_16)
|
||||
// CHECK:STDOUT: %.loc14_19.2: (type, type) = tuple_literal (i32, i32)
|
||||
// CHECK:STDOUT: %.loc14_19.3: type = tuple_type (i32, i32)
|
||||
// CHECK:STDOUT: %t: ref (i32, i32) = var "t"
|
||||
// CHECK:STDOUT: %.loc14_24.1: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc14_24.2: i32 = stub_reference %.loc14_24.1
|
||||
// CHECK:STDOUT: %.loc14_27.1: i32 = int_literal 2
|
||||
// CHECK:STDOUT: %.loc14_27.2: i32 = stub_reference %.loc14_27.1
|
||||
// CHECK:STDOUT: %.loc14_28: (i32, i32) = tuple_literal (%.loc14_24.2, %.loc14_27.2)
|
||||
// CHECK:STDOUT: %.loc14_24: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc14_27: i32 = int_literal 2
|
||||
// CHECK:STDOUT: %.loc14_28: (i32, i32) = tuple_literal (%.loc14_24, %.loc14_27)
|
||||
// CHECK:STDOUT: %.loc14_29.1: i32 = int_literal 0
|
||||
// CHECK:STDOUT: %.loc14_29.2: ref i32 = tuple_index %t, %.loc14_29.1
|
||||
// CHECK:STDOUT: %.loc14_29.3: init i32 = initialize_from %.loc14_24.2 to %.loc14_29.2
|
||||
// CHECK:STDOUT: %.loc14_29.3: init i32 = initialize_from %.loc14_24 to %.loc14_29.2
|
||||
// CHECK:STDOUT: %.loc14_29.4: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc14_29.5: ref i32 = tuple_index %t, %.loc14_29.4
|
||||
// CHECK:STDOUT: %.loc14_29.6: init i32 = initialize_from %.loc14_27.2 to %.loc14_29.5
|
||||
// CHECK:STDOUT: %.loc14_29.6: init i32 = initialize_from %.loc14_27 to %.loc14_29.5
|
||||
// CHECK:STDOUT: %.loc14_29.7: init (i32, i32) = tuple_init %.loc14_28, (%.loc14_29.3, %.loc14_29.6)
|
||||
// CHECK:STDOUT: assign %t, %.loc14_29.7
|
||||
// CHECK:STDOUT: %.loc15_14: type = ptr_type i32
|
||||
|
||||
@@ -111,17 +111,14 @@ fn AddressOfParameter(param: i32) {
|
||||
// CHECK:STDOUT: %.loc27_4: String = string_literal "Hello"
|
||||
// CHECK:STDOUT: %.loc27_3.1: type = ptr_type String
|
||||
// CHECK:STDOUT: %.loc27_3.2: String* = address_of %.loc27_4
|
||||
// CHECK:STDOUT: %.loc31_5.1: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc31_5.2: i32 = stub_reference %.loc31_5.1
|
||||
// CHECK:STDOUT: %.loc31_8.1: i32 = int_literal 2
|
||||
// CHECK:STDOUT: %.loc31_8.2: i32 = stub_reference %.loc31_8.1
|
||||
// CHECK:STDOUT: %.loc31_5: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc31_8: i32 = int_literal 2
|
||||
// CHECK:STDOUT: %.loc31_9.1: type = tuple_type (i32, i32)
|
||||
// CHECK:STDOUT: %.loc31_9.2: (i32, i32) = tuple_literal (%.loc31_5.2, %.loc31_8.2)
|
||||
// CHECK:STDOUT: %.loc31_9.2: (i32, i32) = tuple_literal (%.loc31_5, %.loc31_8)
|
||||
// CHECK:STDOUT: %.loc31_3.1: type = ptr_type (i32, i32)
|
||||
// CHECK:STDOUT: %.loc31_3.2: (i32, i32)* = address_of %.loc31_9.2
|
||||
// CHECK:STDOUT: %.loc35_10: i32 = int_literal 5
|
||||
// CHECK:STDOUT: %.loc35_8: i32 = stub_reference %.loc35_10
|
||||
// CHECK:STDOUT: %.loc35_11: {.a: i32} = struct_literal (%.loc35_8)
|
||||
// CHECK:STDOUT: %.loc35_11: {.a: i32} = struct_literal (%.loc35_10)
|
||||
// CHECK:STDOUT: %.loc35_3.1: type = ptr_type {.a: i32}
|
||||
// CHECK:STDOUT: %.loc35_3.2: {.a: i32}* = address_of %.loc35_11
|
||||
// CHECK:STDOUT: return
|
||||
@@ -163,13 +160,11 @@ fn AddressOfParameter(param: i32) {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @AddressOfTupleElementValue() {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %.loc75_6.1: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc75_6.2: i32 = stub_reference %.loc75_6.1
|
||||
// CHECK:STDOUT: %.loc75_9.1: i32 = int_literal 2
|
||||
// CHECK:STDOUT: %.loc75_9.2: i32 = stub_reference %.loc75_9.1
|
||||
// CHECK:STDOUT: %.loc75_10.1: (i32, i32) = tuple_literal (%.loc75_6.2, %.loc75_9.2)
|
||||
// CHECK:STDOUT: %.loc75_6: i32 = int_literal 1
|
||||
// CHECK:STDOUT: %.loc75_9: i32 = int_literal 2
|
||||
// CHECK:STDOUT: %.loc75_10.1: (i32, i32) = tuple_literal (%.loc75_6, %.loc75_9)
|
||||
// CHECK:STDOUT: %.loc75_12: i32 = int_literal 0
|
||||
// CHECK:STDOUT: %.loc75_10.2: (i32, i32) = tuple_value %.loc75_10.1, (%.loc75_6.2, %.loc75_9.2)
|
||||
// CHECK:STDOUT: %.loc75_10.2: (i32, i32) = tuple_value %.loc75_10.1, (%.loc75_6, %.loc75_9)
|
||||
// CHECK:STDOUT: %.loc75_13: i32 = tuple_index %.loc75_10.2, %.loc75_12
|
||||
// CHECK:STDOUT: %.loc75_3: i32* = address_of %.loc75_13
|
||||
// CHECK:STDOUT: return
|
||||
|
||||
Reference in New Issue
Block a user