mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-06 09:34:42 +01:00
Deduplicate and canonicalize all constants. (#3611)
Rather than producing multiple constants with the same value, fold all instances of a given constant to the same constant instruction. A future PR will use this to replace the current type canonicalization system.
This commit is contained in:
+8
-6
@@ -25,14 +25,16 @@ fn Run() -> i32 {
|
||||
// CHECK:STDOUT: --- basic.carbon
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: constants {
|
||||
// CHECK:STDOUT: %.1: type = struct_type {.k: i32} [template]
|
||||
// CHECK:STDOUT: %.2: i32 = int_literal 4 [template]
|
||||
// CHECK:STDOUT: %Class: type = class_type @Class [template]
|
||||
// CHECK:STDOUT: %.1: type = unbound_element_type Class, i32 [template]
|
||||
// CHECK:STDOUT: %.2: type = struct_type {.k: i32} [template]
|
||||
// CHECK:STDOUT: %.3: i32 = int_literal 4 [template]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: file {
|
||||
// CHECK:STDOUT: package: <namespace> = namespace package, {.Class = %Class.decl, .Run = %Run} [template]
|
||||
// CHECK:STDOUT: %Class.decl = class_decl @Class, ()
|
||||
// CHECK:STDOUT: %Class: type = class_type @Class [template]
|
||||
// CHECK:STDOUT: %Class: type = class_type @Class [template = constants.%Class]
|
||||
// CHECK:STDOUT: %G: <function> = fn_decl @G [template]
|
||||
// CHECK:STDOUT: %Run: <function> = fn_decl @Run [template]
|
||||
// CHECK:STDOUT: }
|
||||
@@ -40,7 +42,7 @@ fn Run() -> i32 {
|
||||
// CHECK:STDOUT: class @Class {
|
||||
// CHECK:STDOUT: %F: <function> = fn_decl @F [template]
|
||||
// CHECK:STDOUT: %G: <function> = fn_decl @G [template]
|
||||
// CHECK:STDOUT: %.loc14_8.1: type = unbound_element_type Class, i32 [template]
|
||||
// CHECK:STDOUT: %.loc14_8.1: type = unbound_element_type Class, i32 [template = constants.%.1]
|
||||
// CHECK:STDOUT: %.loc14_8.2: <unbound element of class Class> = field_decl k, element0 [template]
|
||||
// CHECK:STDOUT: %k: <unbound element of class Class> = bind_name k, %.loc14_8.2 [template = %.loc14_8.2]
|
||||
// CHECK:STDOUT:
|
||||
@@ -64,9 +66,9 @@ fn Run() -> i32 {
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @Run() -> i32 {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class [template = file.%Class]
|
||||
// CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class [template = constants.%Class]
|
||||
// CHECK:STDOUT: %F.ref: <function> = name_ref F, @Class.%F [template = @Class.%F]
|
||||
// CHECK:STDOUT: %.loc22_18: i32 = int_literal 4 [template = constants.%.2]
|
||||
// CHECK:STDOUT: %.loc22_18: i32 = int_literal 4 [template = constants.%.3]
|
||||
// CHECK:STDOUT: %.loc22_17.1: init i32 = call %F.ref(%.loc22_18)
|
||||
// CHECK:STDOUT: %.loc22_20: i32 = value_of_initializer %.loc22_17.1
|
||||
// CHECK:STDOUT: %.loc22_17.2: i32 = converted %.loc22_17.1, %.loc22_20
|
||||
|
||||
Reference in New Issue
Block a user