@@ -128,6 +128,22 @@ bb0(%0 : $*B, %1 : $*GS<B>):
128
128
return %9999 : $()
129
129
}
130
130
131
+ // CHECK-LABEL: sil [ossa] @store_before_load_take
132
+ // CHECK: [[STK:%[0-9]+]] = alloc_stack
133
+ // CHECK: copy_addr [take] %0 to [initialization] [[STK]]
134
+ // CHECK: store
135
+ // CHECK: load [take] [[STK]]
136
+ // CHECK: return
137
+ // CHECK: } // end sil function 'store_before_load_take'
138
+ sil [ossa] @store_before_load_take : $@convention(thin) (@inout Builtin.NativeObject, @owned Builtin.NativeObject) -> @owned Builtin.NativeObject {
139
+ bb0(%0 : $*Builtin.NativeObject, %1 : @owned $Builtin.NativeObject):
140
+ %stk = alloc_stack $Builtin.NativeObject
141
+ copy_addr [take] %0 to [initialization] %stk : $*Builtin.NativeObject
142
+ store %1 to [init] %0 : $*Builtin.NativeObject
143
+ %obj = load [take] %stk : $*Builtin.NativeObject
144
+ dealloc_stack %stk : $*Builtin.NativeObject
145
+ return %obj : $Builtin.NativeObject
146
+ }
131
147
// CHECK-LABEL: sil [ossa] @load_in_wrong_block
132
148
// CHECK: bb0(%0 : $*GS<B>):
133
149
// CHECK-NEXT: alloc_stack
@@ -693,38 +709,28 @@ bb0(%0 : @owned $GS<Builtin.NativeObject>):
693
709
return %obj : $GS<Builtin.NativeObject>
694
710
}
695
711
696
- // CHECK-LABEL: sil [ossa] @hoist_load_copy_to_src_copy_addr_site_two_takes : $@convention(thin) (@in GS<Builtin.NativeObject>) -> @owned GS<Builtin.NativeObject> {
697
- // CHECK: bb0([[ARG:%.*]] :
698
- // CHECK: [[COPY_1:%.*]] = load [copy] [[ARG]]
699
- // CHECK: [[COPY_2:%.*]] = load [copy] [[ARG]]
700
- // CHECK: destroy_addr [[ARG]]
701
- // CHECK: cond_br undef, bb1, bb2
702
- //
712
+ // CHECK-LABEL: sil [ossa] @dont_optimize_with_load_in_different_block
713
+ // CHECK: [[STK:%[0-9]+]] = alloc_stack
714
+ // CHECK: copy_addr %0 to [initialization] [[STK]]
703
715
// CHECK: bb1:
704
- // CHECK: destroy_value [[COPY_1]]
705
- // CHECK: br bb3([[COPY_2]] :
706
- //
716
+ // CHECK: load [take] [[STK]]
707
717
// CHECK: bb2:
708
- // CHECK: destroy_value [[COPY_2]]
709
- // CHECK: br bb3([[COPY_1]] :
710
- //
711
- // CHECK: bb3([[RESULT:%.*]] : @owned
712
- // CHECK: apply {{%.*}}([[RESULT]])
713
- // CHECK: return [[RESULT]]
714
- // CHECK: } // end sil function 'hoist_load_copy_to_src_copy_addr_site_two_takes'
715
- sil [ossa] @hoist_load_copy_to_src_copy_addr_site_two_takes : $@convention(thin) (@in GS<Builtin.NativeObject>) -> @owned GS<Builtin.NativeObject> {
716
- bb0(%0 : $*GS<Builtin.NativeObject>):
718
+ // CHECK: copy_addr %1 to %0
719
+ // CHECK: load [take] [[STK]]
720
+ // CHECK: } // end sil function 'dont_optimize_with_load_in_different_block'
721
+ sil [ossa] @dont_optimize_with_load_in_different_block : $@convention(thin) (@inout GS<Builtin.NativeObject>, @in_guaranteed GS<Builtin.NativeObject>) -> @owned GS<Builtin.NativeObject> {
722
+ bb0(%0 : $*GS<Builtin.NativeObject>, %1 : $*GS<Builtin.NativeObject>):
717
723
%f = function_ref @use_gsbase_builtinnativeobject : $@convention(thin) (@guaranteed GS<Builtin.NativeObject>) -> ()
718
724
%stk = alloc_stack $GS<Builtin.NativeObject>
719
725
copy_addr %0 to [initialization] %stk : $*GS<Builtin.NativeObject>
720
- destroy_addr %0 : $*GS<Builtin.NativeObject>
721
726
cond_br undef, bb1, bb2
722
727
723
728
bb1:
724
729
%obj = load [take] %stk : $*GS<Builtin.NativeObject>
725
730
br bb3(%obj : $GS<Builtin.NativeObject>)
726
731
727
732
bb2:
733
+ copy_addr %1 to %0 : $*GS<Builtin.NativeObject>
728
734
%obj2 = load [take] %stk : $*GS<Builtin.NativeObject>
729
735
br bb3(%obj2 : $GS<Builtin.NativeObject>)
730
736
0 commit comments