Skip to content

Commit f08553a

Browse files
committed
[PMOpt] Add some more tests around geps.
This is to ensure that when I add the destructive code when ownership is enabled, the non-ownership variant doesn't break. I have to move the rest of the pipeline to -Onone at the same time. Once that is done, I will remove more code. NFC. rdar://31521023
1 parent 9b1760b commit f08553a

File tree

1 file changed

+67
-3
lines changed

1 file changed

+67
-3
lines changed

test/SILOptimizer/predictable_memopt.sil

Lines changed: 67 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,12 +148,76 @@ bb0(%0 : $Int):
148148

149149

150150
struct ContainsNativeObject {
151-
var x : Int
152-
var y : Builtin.NativeObject
151+
var x : Builtin.NativeObject
152+
var y : Int32
153+
var z : Builtin.NativeObject
153154
}
154155

155-
var int_global : Int
156+
// CHECK-LABEL: sil @multiple_level_extract_1 : $@convention(thin) (@owned ContainsNativeObject) -> Builtin.Int32 {
157+
// CHECK: bb0([[ARG:%.*]] : $ContainsNativeObject):
158+
// CHECK: [[FIELD1:%.*]] = struct_extract [[ARG]] : $ContainsNativeObject, #ContainsNativeObject.y
159+
// CHECK: [[FIELD2:%.*]] = struct_extract [[FIELD1]] : $Int32, #Int32._value
160+
// CHECK: release_value [[ARG]]
161+
// CHECK: return [[FIELD2]]
162+
// CHECK: } // end sil function 'multiple_level_extract_1'
163+
sil @multiple_level_extract_1 : $@convention(thin) (@owned ContainsNativeObject) -> Builtin.Int32 {
164+
bb0(%0 : $ContainsNativeObject):
165+
%1 = alloc_stack $ContainsNativeObject
166+
store %0 to %1 : $*ContainsNativeObject
167+
168+
%2 = struct_element_addr %1 : $*ContainsNativeObject, #ContainsNativeObject.y
169+
%3 = struct_element_addr %2 : $*Int32, #Int32._value
170+
%4 = load %3 : $*Builtin.Int32
171+
172+
destroy_addr %1 : $*ContainsNativeObject
173+
dealloc_stack %1 : $*ContainsNativeObject
174+
return %4 : $Builtin.Int32
175+
}
176+
177+
struct ComplexStruct {
178+
var f1 : Builtin.NativeObject
179+
var f2 : ContainsNativeObject
180+
var f3 : Builtin.Int32
181+
}
156182

183+
// CHECK-LABEL: sil @multiple_level_extract_2 : $@convention(thin) (@owned ComplexStruct) -> (@owned Builtin.NativeObject, @owned Builtin.NativeObject, Builtin.Int32) {
184+
// CHECK: bb0([[ARG:%.*]] : $ComplexStruct):
185+
// CHECK: [[f1:%.*]] = struct_extract [[ARG]]
186+
// CHECK: strong_retain [[f1]]
187+
// CHECK-NOT: strong_retain [[f1]]
188+
// CHECK: [[f2:%.*]] = struct_extract [[ARG]]
189+
// CHECK: [[f2_x:%.*]] = struct_extract [[f2]]
190+
// CHECK: strong_retain [[f2_x]]
191+
// CHECK-NOT: strong_retain [[f2_x]]
192+
// CHECK: [[f3:%.*]] = struct_extract [[ARG]]
193+
// CHECK: release_value [[ARG]]
194+
// CHECK: [[RESULT:%.*]] = tuple ([[f1]] : $Builtin.NativeObject, [[f2_x]] : $Builtin.NativeObject, [[f3]] : $Builtin.Int32)
195+
// CHECK: return [[RESULT]]
196+
// CHECK: } // end sil function 'multiple_level_extract_2'
197+
sil @multiple_level_extract_2 : $@convention(thin) (@owned ComplexStruct) -> (@owned Builtin.NativeObject, @owned Builtin.NativeObject, Builtin.Int32) {
198+
bb0(%0 : $ComplexStruct):
199+
%1 = alloc_stack $ComplexStruct
200+
store %0 to %1 : $*ComplexStruct
201+
202+
%2 = struct_element_addr %1 : $*ComplexStruct, #ComplexStruct.f1
203+
%3 = struct_element_addr %1 : $*ComplexStruct, #ComplexStruct.f2
204+
%4 = struct_element_addr %3 : $*ContainsNativeObject, #ContainsNativeObject.x
205+
%5 = struct_element_addr %1 : $*ComplexStruct, #ComplexStruct.f3
206+
207+
%6 = load %2 : $*Builtin.NativeObject
208+
strong_retain %6 : $Builtin.NativeObject
209+
%7 = load %4 : $*Builtin.NativeObject
210+
strong_retain %7 : $Builtin.NativeObject
211+
%8 = load %5 : $*Builtin.Int32
212+
213+
destroy_addr %1 : $*ComplexStruct
214+
dealloc_stack %1 : $*ComplexStruct
215+
216+
%9 = tuple(%6 : $Builtin.NativeObject, %7 : $Builtin.NativeObject, %8 : $Builtin.Int32)
217+
return %9 : $(Builtin.NativeObject, Builtin.NativeObject, Builtin.Int32)
218+
}
219+
220+
var int_global : Int
157221

158222
// CHECK-LABEL: sil @promote_alloc_stack
159223
sil @promote_alloc_stack : $@convention(thin) (Int32) -> Builtin.Int32 {

0 commit comments

Comments
 (0)