Add SemIR instruction to track that a conversion was performed. (#3363)

Instead of ad-hoc conversion tracking on some kinds of nodes that
conversion creates, consolidate tracking into a single node kind. This
frees up an operand on `Init` instructions that can be used to store the
destination.
This commit is contained in:
Richard Smith
2023-11-09 23:58:54 +00:00
committed by GitHub
parent 681fbf9da2
commit 6d5e62974c
102 changed files with 748 additions and 497 deletions
+8 -6
View File
@@ -50,10 +50,12 @@ fn G() -> i32 {
// CHECK:STDOUT: %.loc12_20.9: i32 = int_literal 2
// CHECK:STDOUT: %.loc12_20.10: ref i32 = array_index %.loc12_20.2, %.loc12_20.9
// CHECK:STDOUT: %.loc12_20.11: init i32 = initialize_from %.loc12_19 to %.loc12_20.10
// CHECK:STDOUT: %.loc12_20.12: init [i32; 3] = array_init %.loc12_20.1, (%.loc12_20.5, %.loc12_20.8, %.loc12_20.11) to %.loc12_20.2
// CHECK:STDOUT: %.loc12_20.13: ref [i32; 3] = temporary %.loc12_20.2, %.loc12_20.12
// CHECK:STDOUT: %.loc12_20.14: [i32; 3] = bind_value %.loc12_20.13
// CHECK:STDOUT: %.loc12_11: init i32 = call %F.ref(%.loc12_20.14, %.loc12_23)
// CHECK:STDOUT: %.loc12_25: i32 = value_of_initializer %.loc12_11
// CHECK:STDOUT: return %.loc12_25
// CHECK:STDOUT: %.loc12_20.12: init [i32; 3] = array_init (%.loc12_20.5, %.loc12_20.8, %.loc12_20.11) to %.loc12_20.2
// CHECK:STDOUT: %.loc12_20.13: init [i32; 3] = converted %.loc12_20.1, %.loc12_20.12
// CHECK:STDOUT: %.loc12_20.14: ref [i32; 3] = temporary %.loc12_20.2, %.loc12_20.13
// CHECK:STDOUT: %.loc12_20.15: [i32; 3] = bind_value %.loc12_20.14
// CHECK:STDOUT: %.loc12_11: init i32 = call %F.ref(%.loc12_20.15, %.loc12_23)
// CHECK:STDOUT: %.loc12_25.1: i32 = value_of_initializer %.loc12_11
// CHECK:STDOUT: %.loc12_25.2: i32 = converted %.loc12_11, %.loc12_25.1
// CHECK:STDOUT: return %.loc12_25.2
// CHECK:STDOUT: }