mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Separate inst kind for out params (#4442)
This commit is contained in:
@@ -48,12 +48,12 @@ fn F() -> i32 {
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %return.patt: i32 = return_slot_pattern
|
||||
// CHECK:STDOUT: %return.param_patt: i32 = param_pattern %return.patt, runtime_param0
|
||||
// CHECK:STDOUT: %return.param_patt: i32 = out_param_pattern %return.patt, runtime_param0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %int.make_type_32.loc11: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc11_11.1: type = value_of_initializer %int.make_type_32.loc11 [template = i32]
|
||||
// CHECK:STDOUT: %.loc11_11.2: type = converted %int.make_type_32.loc11, %.loc11_11.1 [template = i32]
|
||||
// CHECK:STDOUT: %return.param: i32 = param runtime_param0
|
||||
// CHECK:STDOUT: %return.param: ref i32 = out_param runtime_param0
|
||||
// CHECK:STDOUT: %return: ref i32 = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
+4
-4
@@ -62,11 +62,11 @@ fn Foo(ptr: C*) {
|
||||
// CHECK:STDOUT: %C.decl: type = class_decl @C [template = constants.%C] {} {}
|
||||
// CHECK:STDOUT: %Foo.decl: %Foo.type = fn_decl @Foo [template = constants.%Foo] {
|
||||
// CHECK:STDOUT: %ptr.patt: %.2 = binding_pattern ptr
|
||||
// CHECK:STDOUT: %ptr.param_patt: %.2 = param_pattern %ptr.patt, runtime_param0
|
||||
// CHECK:STDOUT: %ptr.param_patt: %.2 = value_param_pattern %ptr.patt, runtime_param0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [template = constants.%C]
|
||||
// CHECK:STDOUT: %.loc16: type = ptr_type %C [template = constants.%.2]
|
||||
// CHECK:STDOUT: %ptr.param: %.2 = param runtime_param0
|
||||
// CHECK:STDOUT: %ptr.param: %.2 = value_param runtime_param0
|
||||
// CHECK:STDOUT: %ptr: %.2 = bind_name ptr, %ptr.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
@@ -74,10 +74,10 @@ fn Foo(ptr: C*) {
|
||||
// CHECK:STDOUT: class @C {
|
||||
// CHECK:STDOUT: %Member.decl: %Member.type = fn_decl @Member [template = constants.%Member] {
|
||||
// CHECK:STDOUT: %self.patt: %C = binding_pattern self
|
||||
// CHECK:STDOUT: %self.param_patt: %C = param_pattern %self.patt, runtime_param0
|
||||
// CHECK:STDOUT: %self.param_patt: %C = value_param_pattern %self.patt, runtime_param0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [template = constants.%C]
|
||||
// CHECK:STDOUT: %self.param: %C = param runtime_param0
|
||||
// CHECK:STDOUT: %self.param: %C = value_param runtime_param0
|
||||
// CHECK:STDOUT: %self: %C = bind_name self, %self.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [template = constants.%C]
|
||||
|
||||
+2
-2
@@ -50,12 +50,12 @@ fn F() -> i32 {
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %return.patt: i32 = return_slot_pattern
|
||||
// CHECK:STDOUT: %return.param_patt: i32 = param_pattern %return.patt, runtime_param0
|
||||
// CHECK:STDOUT: %return.param_patt: i32 = out_param_pattern %return.patt, runtime_param0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %int.make_type_32.loc11: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc11_11.1: type = value_of_initializer %int.make_type_32.loc11 [template = i32]
|
||||
// CHECK:STDOUT: %.loc11_11.2: type = converted %int.make_type_32.loc11, %.loc11_11.1 [template = i32]
|
||||
// CHECK:STDOUT: %return.param: i32 = param runtime_param0
|
||||
// CHECK:STDOUT: %return.param: ref i32 = out_param runtime_param0
|
||||
// CHECK:STDOUT: %return: ref i32 = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
@@ -173,23 +173,23 @@ fn AddressOfParam(param: i32) {
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [template = constants.%G] {
|
||||
// CHECK:STDOUT: %return.patt: i32 = return_slot_pattern
|
||||
// CHECK:STDOUT: %return.param_patt: i32 = param_pattern %return.patt, runtime_param0
|
||||
// CHECK:STDOUT: %return.param_patt: i32 = out_param_pattern %return.patt, runtime_param0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc11_11.1: type = value_of_initializer %int.make_type_32 [template = i32]
|
||||
// CHECK:STDOUT: %.loc11_11.2: type = converted %int.make_type_32, %.loc11_11.1 [template = i32]
|
||||
// CHECK:STDOUT: %return.param: i32 = param runtime_param0
|
||||
// CHECK:STDOUT: %return.param: ref i32 = out_param runtime_param0
|
||||
// CHECK:STDOUT: %return: ref i32 = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [template = constants.%H] {
|
||||
// CHECK:STDOUT: %return.patt: %.2 = return_slot_pattern
|
||||
// CHECK:STDOUT: %return.param_patt: %.2 = param_pattern %return.patt, runtime_param0
|
||||
// CHECK:STDOUT: %return.param_patt: %.2 = out_param_pattern %return.patt, runtime_param0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc13_16.1: type = value_of_initializer %int.make_type_32 [template = i32]
|
||||
// CHECK:STDOUT: %.loc13_16.2: type = converted %int.make_type_32, %.loc13_16.1 [template = i32]
|
||||
// CHECK:STDOUT: %.loc13_19: type = struct_type {.a: i32} [template = constants.%.2]
|
||||
// CHECK:STDOUT: %return.param: %.2 = param runtime_param0
|
||||
// CHECK:STDOUT: %return.param: ref %.2 = out_param runtime_param0
|
||||
// CHECK:STDOUT: %return: ref %.2 = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %AddressOfLiteral.decl: %AddressOfLiteral.type = fn_decl @AddressOfLiteral [template = constants.%AddressOfLiteral] {} {}
|
||||
@@ -199,12 +199,12 @@ fn AddressOfParam(param: i32) {
|
||||
// CHECK:STDOUT: %AddressOfTupleElementValue.decl: %AddressOfTupleElementValue.type = fn_decl @AddressOfTupleElementValue [template = constants.%AddressOfTupleElementValue] {} {}
|
||||
// CHECK:STDOUT: %AddressOfParam.decl: %AddressOfParam.type = fn_decl @AddressOfParam [template = constants.%AddressOfParam] {
|
||||
// CHECK:STDOUT: %param.patt: i32 = binding_pattern param
|
||||
// CHECK:STDOUT: %param.param_patt: i32 = param_pattern %param.patt, runtime_param0
|
||||
// CHECK:STDOUT: %param.param_patt: i32 = value_param_pattern %param.patt, runtime_param0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %int.make_type_32.loc95: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc95_26.1: type = value_of_initializer %int.make_type_32.loc95 [template = i32]
|
||||
// CHECK:STDOUT: %.loc95_26.2: type = converted %int.make_type_32.loc95, %.loc95_26.1 [template = i32]
|
||||
// CHECK:STDOUT: %param.param: i32 = param runtime_param0
|
||||
// CHECK:STDOUT: %param.param: i32 = value_param runtime_param0
|
||||
// CHECK:STDOUT: %param: i32 = bind_name param, %param.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
@@ -76,12 +76,12 @@ fn Deref(n: i32) {
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %Deref.decl: %Deref.type = fn_decl @Deref [template = constants.%Deref] {
|
||||
// CHECK:STDOUT: %n.patt: i32 = binding_pattern n
|
||||
// CHECK:STDOUT: %n.param_patt: i32 = param_pattern %n.patt, runtime_param0
|
||||
// CHECK:STDOUT: %n.param_patt: i32 = value_param_pattern %n.patt, runtime_param0
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %int.make_type_32: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc11_13.1: type = value_of_initializer %int.make_type_32 [template = i32]
|
||||
// CHECK:STDOUT: %.loc11_13.2: type = converted %int.make_type_32, %.loc11_13.1 [template = i32]
|
||||
// CHECK:STDOUT: %n.param: i32 = param runtime_param0
|
||||
// CHECK:STDOUT: %n.param: i32 = value_param runtime_param0
|
||||
// CHECK:STDOUT: %n: i32 = bind_name n, %n.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
@@ -76,9 +76,9 @@ fn ConstMismatch(p: const {}*) -> const ({}*) {
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %ConstMismatch.decl: %ConstMismatch.type = fn_decl @ConstMismatch [template = constants.%ConstMismatch] {
|
||||
// CHECK:STDOUT: %p.patt: %.3 = binding_pattern p
|
||||
// CHECK:STDOUT: %p.param_patt: %.3 = param_pattern %p.patt, runtime_param0
|
||||
// CHECK:STDOUT: %p.param_patt: %.3 = value_param_pattern %p.patt, runtime_param0
|
||||
// CHECK:STDOUT: %return.patt: %.5 = return_slot_pattern
|
||||
// CHECK:STDOUT: %return.param_patt: %.5 = param_pattern %return.patt, runtime_param1
|
||||
// CHECK:STDOUT: %return.param_patt: %.5 = out_param_pattern %return.patt, runtime_param1
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %.loc11_28: %.1 = struct_literal ()
|
||||
// CHECK:STDOUT: %.loc11_21.1: type = converted %.loc11_28, constants.%.1 [template = constants.%.1]
|
||||
@@ -88,9 +88,9 @@ fn ConstMismatch(p: const {}*) -> const ({}*) {
|
||||
// CHECK:STDOUT: %.loc11_44.1: type = converted %.loc11_43, constants.%.1 [template = constants.%.1]
|
||||
// CHECK:STDOUT: %.loc11_44.2: type = ptr_type %.1 [template = constants.%.4]
|
||||
// CHECK:STDOUT: %.loc11_35: type = const_type %.4 [template = constants.%.5]
|
||||
// CHECK:STDOUT: %p.param: %.3 = param runtime_param0
|
||||
// CHECK:STDOUT: %p.param: %.3 = value_param runtime_param0
|
||||
// CHECK:STDOUT: %p: %.3 = bind_name p, %p.param
|
||||
// CHECK:STDOUT: %return.param: %.5 = param runtime_param1
|
||||
// CHECK:STDOUT: %return.param: ref %.5 = out_param runtime_param1
|
||||
// CHECK:STDOUT: %return: ref %.5 = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
+4
-4
@@ -51,9 +51,9 @@ fn F(p: const (const (const i32*)*)) -> const i32 {
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [template = constants.%F] {
|
||||
// CHECK:STDOUT: %p.patt: %.6 = binding_pattern p
|
||||
// CHECK:STDOUT: %p.param_patt: %.6 = param_pattern %p.patt, runtime_param0
|
||||
// CHECK:STDOUT: %p.param_patt: %.6 = value_param_pattern %p.patt, runtime_param0
|
||||
// CHECK:STDOUT: %return.patt: %.2 = return_slot_pattern
|
||||
// CHECK:STDOUT: %return.param_patt: %.2 = param_pattern %return.patt, runtime_param1
|
||||
// CHECK:STDOUT: %return.param_patt: %.2 = out_param_pattern %return.patt, runtime_param1
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %int.make_type_32.loc12_29: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc12_23.1: type = value_of_initializer %int.make_type_32.loc12_29 [template = i32]
|
||||
@@ -67,9 +67,9 @@ fn F(p: const (const (const i32*)*)) -> const i32 {
|
||||
// CHECK:STDOUT: %.loc12_41.1: type = value_of_initializer %int.make_type_32.loc12_47 [template = i32]
|
||||
// CHECK:STDOUT: %.loc12_41.2: type = converted %int.make_type_32.loc12_47, %.loc12_41.1 [template = i32]
|
||||
// CHECK:STDOUT: %.loc12_41.3: type = const_type i32 [template = constants.%.2]
|
||||
// CHECK:STDOUT: %p.param: %.6 = param runtime_param0
|
||||
// CHECK:STDOUT: %p.param: %.6 = value_param runtime_param0
|
||||
// CHECK:STDOUT: %p: %.6 = bind_name p, %p.param
|
||||
// CHECK:STDOUT: %return.param: %.2 = param runtime_param1
|
||||
// CHECK:STDOUT: %return.param: ref %.2 = out_param runtime_param1
|
||||
// CHECK:STDOUT: %return: ref %.2 = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
+8
-8
@@ -55,9 +55,9 @@ fn ConstPtr(p: const i32*) -> (const i32)* {
|
||||
// CHECK:STDOUT: %Core.import = import Core
|
||||
// CHECK:STDOUT: %Ptr.decl: %Ptr.type = fn_decl @Ptr [template = constants.%Ptr] {
|
||||
// CHECK:STDOUT: %p.patt: %.2 = binding_pattern p
|
||||
// CHECK:STDOUT: %p.param_patt: %.2 = param_pattern %p.patt, runtime_param0
|
||||
// CHECK:STDOUT: %p.param_patt: %.2 = value_param_pattern %p.patt, runtime_param0
|
||||
// CHECK:STDOUT: %return.patt: %.2 = return_slot_pattern
|
||||
// CHECK:STDOUT: %return.param_patt: %.2 = param_pattern %return.patt, runtime_param1
|
||||
// CHECK:STDOUT: %return.param_patt: %.2 = out_param_pattern %return.patt, runtime_param1
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %int.make_type_32.loc11_11: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc11_14.1: type = value_of_initializer %int.make_type_32.loc11_11 [template = i32]
|
||||
@@ -67,16 +67,16 @@ fn ConstPtr(p: const i32*) -> (const i32)* {
|
||||
// CHECK:STDOUT: %.loc11_23.1: type = value_of_initializer %int.make_type_32.loc11_20 [template = i32]
|
||||
// CHECK:STDOUT: %.loc11_23.2: type = converted %int.make_type_32.loc11_20, %.loc11_23.1 [template = i32]
|
||||
// CHECK:STDOUT: %.loc11_23.3: type = ptr_type i32 [template = constants.%.2]
|
||||
// CHECK:STDOUT: %p.param: %.2 = param runtime_param0
|
||||
// CHECK:STDOUT: %p.param: %.2 = value_param runtime_param0
|
||||
// CHECK:STDOUT: %p: %.2 = bind_name p, %p.param
|
||||
// CHECK:STDOUT: %return.param: %.2 = param runtime_param1
|
||||
// CHECK:STDOUT: %return.param: ref %.2 = out_param runtime_param1
|
||||
// CHECK:STDOUT: %return: ref %.2 = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: %ConstPtr.decl: %ConstPtr.type = fn_decl @ConstPtr [template = constants.%ConstPtr] {
|
||||
// CHECK:STDOUT: %p.patt: %.4 = binding_pattern p
|
||||
// CHECK:STDOUT: %p.param_patt: %.4 = param_pattern %p.patt, runtime_param0
|
||||
// CHECK:STDOUT: %p.param_patt: %.4 = value_param_pattern %p.patt, runtime_param0
|
||||
// CHECK:STDOUT: %return.patt: %.4 = return_slot_pattern
|
||||
// CHECK:STDOUT: %return.param_patt: %.4 = param_pattern %return.patt, runtime_param1
|
||||
// CHECK:STDOUT: %return.param_patt: %.4 = out_param_pattern %return.patt, runtime_param1
|
||||
// CHECK:STDOUT: } {
|
||||
// CHECK:STDOUT: %int.make_type_32.loc15_22: init type = call constants.%Int32() [template = i32]
|
||||
// CHECK:STDOUT: %.loc15_16.1: type = value_of_initializer %int.make_type_32.loc15_22 [template = i32]
|
||||
@@ -88,9 +88,9 @@ fn ConstPtr(p: const i32*) -> (const i32)* {
|
||||
// CHECK:STDOUT: %.loc15_32.2: type = converted %int.make_type_32.loc15_38, %.loc15_32.1 [template = i32]
|
||||
// CHECK:STDOUT: %.loc15_32.3: type = const_type i32 [template = constants.%.3]
|
||||
// CHECK:STDOUT: %.loc15_42: type = ptr_type %.3 [template = constants.%.4]
|
||||
// CHECK:STDOUT: %p.param: %.4 = param runtime_param0
|
||||
// CHECK:STDOUT: %p.param: %.4 = value_param runtime_param0
|
||||
// CHECK:STDOUT: %p: %.4 = bind_name p, %p.param
|
||||
// CHECK:STDOUT: %return.param: %.4 = param runtime_param1
|
||||
// CHECK:STDOUT: %return.param: ref %.4 = out_param runtime_param1
|
||||
// CHECK:STDOUT: %return: ref %.4 = return_slot %return.param
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT: }
|
||||
|
||||
Reference in New Issue
Block a user