1
1
// #if directives don't work with SIL keywords, therefore please put ObjC tests
2
2
// in `enum_objc.sil`.
3
- // RUN: %target-swift-frontend %s -Xllvm -sil-disable-pass=simplification -disable-type-layout -disable-generic-metadata-prespecialization -disable-generic-metadata-prespecialization -gnone -emit-ir -disable-diagnostic-passes -enable-objc-interop
4
- // RUN: echo "TWO"
5
- // RUN: %target-swift-frontend %s -Xllvm -sil-disable-pass=simplification -disable-type-layout -disable-generic-metadata-prespecialization -gnone -emit-ir -disable-diagnostic-passes -disable-objc-interop
6
3
// RUN: %target-swift-frontend %s -Xllvm -sil-disable-pass=simplification -disable-type-layout -disable-generic-metadata-prespecialization -disable-generic-metadata-prespecialization -gnone -emit-ir -disable-diagnostic-passes -enable-objc-interop | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-objc --check-prefix=CHECK-objc-%target-ptrsize --check-prefix=CHECK-objc-%target-ptrsize-simulator-%target-is-simulator -DWORD=i%target-ptrsize
7
4
// RUN: %target-swift-frontend %s -Xllvm -sil-disable-pass=simplification -disable-type-layout -disable-generic-metadata-prespecialization -gnone -emit-ir -disable-diagnostic-passes -disable-objc-interop | %FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-%target-ptrsize --check-prefix=CHECK-native --check-prefix=CHECK-native-%target-ptrsize -DWORD=i%target-ptrsize
8
5
@@ -241,7 +238,7 @@ dest(%u2 : $(Builtin.Int64, Builtin.Int64)):
241
238
return %x : $()
242
239
}
243
240
244
- // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @singleton_switch_indirect(ptr dereferenceable({{.*}}) %0) {{.*}} {
241
+ // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @singleton_switch_indirect(ptr nocapture dereferenceable({{.*}}) %0) {{.*}} {
245
242
// CHECK: entry:
246
243
// CHECK: br label %[[DEST:[0-9]+]]
247
244
// CHECK: [[DEST]]:
@@ -277,7 +274,7 @@ entry(%0 : $Builtin.Int64, %1 : $Builtin.Int64):
277
274
return %u : $Singleton
278
275
}
279
276
280
- // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @singleton_inject_indirect(i64 %0, i64 %1, ptr dereferenceable({{.*}}) %2) {{.*}} {
277
+ // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @singleton_inject_indirect(i64 %0, i64 %1, ptr nocapture dereferenceable({{.*}}) %2) {{.*}} {
281
278
// CHECK: entry:
282
279
// CHECK: [[DATA_0_ADDR:%.*]] = getelementptr inbounds <{ i64, i64 }>, ptr %2, i32 0, i32 0
283
280
// CHECK: store i64 %0, ptr [[DATA_0_ADDR]]
352
349
return %x : $()
353
350
}
354
351
355
- // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @no_payload_switch_indirect(ptr dereferenceable({{.*}}) %0) {{.*}} {
352
+ // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @no_payload_switch_indirect(ptr nocapture dereferenceable({{.*}}) %0) {{.*}} {
356
353
sil @no_payload_switch_indirect : $@convention(thin) (@inout NoPayloads) -> () {
357
354
entry(%u : $*NoPayloads):
358
355
// CHECK: [[TAG_ADDR:%.*]] = getelementptr inbounds %T4enum10NoPayloadsO, ptr %0, i32 0, i32 0
@@ -401,7 +398,7 @@ entry:
401
398
return %u : $NoPayloads
402
399
}
403
400
404
- // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @no_payload_inject_z_indirect(ptr dereferenceable({{.*}}) %0) {{.*}} {
401
+ // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @no_payload_inject_z_indirect(ptr nocapture dereferenceable({{.*}}) %0) {{.*}} {
405
402
// CHECK: entry:
406
403
// CHECK: [[TAG_ADDR:%.*]] = getelementptr inbounds %T4enum10NoPayloadsO, ptr %0, i32 0, i32 0
407
404
// CHECK: store i8 2, ptr [[TAG_ADDR]]
@@ -632,7 +629,7 @@ entry(%0 : $Builtin.Word):
632
629
return %u : $SinglePayloadNoXI2
633
630
}
634
631
635
- // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @single_payload_no_xi_inject_x_indirect([[WORD]] %0, ptr dereferenceable({{.*}}) %1) {{.*}} {
632
+ // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @single_payload_no_xi_inject_x_indirect([[WORD]] %0, ptr nocapture dereferenceable({{.*}}) %1) {{.*}} {
636
633
// CHECK: entry:
637
634
// CHECK: store [[WORD]] %0, ptr %1
638
635
// CHECK: [[T0:%.*]] = getelementptr inbounds %T4enum18SinglePayloadNoXI2O, ptr %1, i32 0, i32 1
@@ -658,7 +655,7 @@ entry:
658
655
return %u : $SinglePayloadNoXI2
659
656
}
660
657
661
- // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @single_payload_no_xi_inject_y_indirect(ptr dereferenceable({{.*}}) %0) {{.*}} {
658
+ // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @single_payload_no_xi_inject_y_indirect(ptr nocapture dereferenceable({{.*}}) %0) {{.*}} {
662
659
// CHECK: entry:
663
660
// CHECK: store [[WORD]] 0, ptr %0
664
661
// CHECK: [[T0:%.*]] = getelementptr inbounds %T4enum18SinglePayloadNoXI2O, ptr %0, i32 0, i32 1
@@ -995,7 +992,7 @@ entry(%0 : $Builtin.Int63):
995
992
return %u : $SinglePayloadSpareBit
996
993
}
997
994
998
- // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @single_payload_spare_bit_inject_x_indirect(i64 %0, ptr dereferenceable({{.*}}) %1) {{.*}} {
995
+ // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @single_payload_spare_bit_inject_x_indirect(i64 %0, ptr nocapture dereferenceable({{.*}}) %1) {{.*}} {
999
996
// CHECK-64: entry:
1000
997
// CHECK-64: [[T:%.*]] = trunc i64 %0 to i63
1001
998
// CHECK-64: [[BYTE:%.*]] = zext i63 [[T]] to i64
@@ -1022,7 +1019,7 @@ entry:
1022
1019
return %u : $SinglePayloadSpareBit
1023
1020
}
1024
1021
1025
- // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @single_payload_spare_bit_inject_y_indirect(ptr dereferenceable({{.*}}) %0) {{.*}} {
1022
+ // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @single_payload_spare_bit_inject_y_indirect(ptr nocapture dereferenceable({{.*}}) %0) {{.*}} {
1026
1023
// CHECK-64: entry:
1027
1024
// -- 0x8000_0000_0000_0000
1028
1025
// CHECK-64: store i64 -9223372036854775808, ptr %0
@@ -1248,7 +1245,7 @@ end:
1248
1245
return %v : $()
1249
1246
}
1250
1247
1251
- // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @dynamic_single_payload_inject_x(ptr noalias sret({{.*}}) %0, ptr noalias nocapture %1, ptr %T) {{.*}} {
1248
+ // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @dynamic_single_payload_inject_x(ptr noalias sret({{.*}}) %0, ptr noalias %1, ptr %T) {{.*}} {
1252
1249
// CHECK: [[TMP2:%.*]] = getelementptr inbounds ptr, ptr %T, i{{.*}} -1
1253
1250
// CHECK: [[VWT:%.*]] = load ptr, ptr [[TMP2]]
1254
1251
// CHECK: [[ENUMADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 7
@@ -1307,7 +1304,7 @@ end(%z : $()):
1307
1304
return %z : $()
1308
1305
}
1309
1306
1310
- // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc i8 @dynamic_single_payload_empty_payload_load(ptr dereferenceable({{.*}}) %0) {{.*}} {
1307
+ // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc i8 @dynamic_single_payload_empty_payload_load(ptr nocapture dereferenceable({{.*}}) %0) {{.*}} {
1311
1308
// CHECK: entry:
1312
1309
// CHECK: %1 = load i8, ptr %0
1313
1310
// CHECK: ret i8 %1
@@ -1318,7 +1315,7 @@ entry(%p : $*DynamicSinglePayload<()>):
1318
1315
return %x : $DynamicSinglePayload<()>
1319
1316
}
1320
1317
1321
- // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @dynamic_single_payload_empty_payload_store(ptr dereferenceable({{.*}}) %0, i8 %1) {{.*}} {
1318
+ // CHECK: define{{( dllexport)?}}{{( protected)?}} swiftcc void @dynamic_single_payload_empty_payload_store(ptr nocapture dereferenceable({{.*}}) %0, i8 %1) {{.*}} {
1322
1319
// CHECK: entry:
1323
1320
// CHECK: store i8 %1, ptr %0
1324
1321
// CHECK: ret void
@@ -1443,7 +1440,7 @@ end:
1443
1440
return %v : $()
1444
1441
}
1445
1442
1446
- // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_no_spare_bits_switch_indirect(ptr dereferenceable({{.*}}) %0) {{.*}} {
1443
+ // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_no_spare_bits_switch_indirect(ptr nocapture dereferenceable({{.*}}) %0) {{.*}} {
1447
1444
sil @multi_payload_no_spare_bits_switch_indirect : $(@inout MultiPayloadNoSpareBits) -> () {
1448
1445
entry(%u : $*MultiPayloadNoSpareBits):
1449
1446
// CHECK-64: [[PAYLOAD:%.*]] = load i64, ptr %0
@@ -1497,7 +1494,7 @@ entry(%0 : $Builtin.Int64):
1497
1494
return %u : $MultiPayloadNoSpareBits
1498
1495
}
1499
1496
1500
- // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_no_spare_bit_inject_x_indirect(i64 %0, ptr dereferenceable({{.*}}) %1) {{.*}} {
1497
+ // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_no_spare_bit_inject_x_indirect(i64 %0, ptr nocapture dereferenceable({{.*}}) %1) {{.*}} {
1501
1498
// CHECK-64: entry:
1502
1499
// CHECK-64: store i64 %0, ptr %1
1503
1500
// CHECK-64: [[T0:%.*]] = getelementptr inbounds %T4enum23MultiPayloadNoSpareBitsO, ptr %1, i32 0, i32 1
@@ -1550,7 +1547,7 @@ entry:
1550
1547
return %u : $MultiPayloadNoSpareBits
1551
1548
}
1552
1549
1553
- // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_no_spare_bit_inject_a_indirect(ptr dereferenceable({{.*}}) %0) {{.*}} {
1550
+ // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_no_spare_bit_inject_a_indirect(ptr nocapture dereferenceable({{.*}}) %0) {{.*}} {
1554
1551
// CHECK-64: entry:
1555
1552
// CHECK-64: store i64 0, ptr %0
1556
1553
// CHECK-64: [[T0:%.*]] = getelementptr inbounds %T4enum23MultiPayloadNoSpareBitsO, ptr %0, i32 0, i32 1
@@ -1741,7 +1738,7 @@ entry(%0 : $Builtin.Int62):
1741
1738
return %u : $MultiPayloadOneSpareBit
1742
1739
}
1743
1740
1744
- // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_one_spare_bit_inject_x_indirect(i64 %0, ptr dereferenceable({{.*}}) %1) {{.*}} {
1741
+ // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_one_spare_bit_inject_x_indirect(i64 %0, ptr nocapture dereferenceable({{.*}}) %1) {{.*}} {
1745
1742
// CHECK-64: entry:
1746
1743
// CHECK-64: [[NATIVECC_TRUNC:%.*]] = trunc i64 %0 to i62
1747
1744
// CHECK-64: [[BYTE:%.*]] = zext i62 [[NATIVECC_TRUNC]] to i64
@@ -1779,7 +1776,7 @@ entry(%0 : $Builtin.Int63):
1779
1776
return %u : $MultiPayloadOneSpareBit
1780
1777
}
1781
1778
1782
- // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_one_spare_bit_inject_y_indirect(i64 %0, ptr dereferenceable({{.*}}) %1) {{.*}} {
1779
+ // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_one_spare_bit_inject_y_indirect(i64 %0, ptr nocapture dereferenceable({{.*}}) %1) {{.*}} {
1783
1780
// CHECK-64: entry:
1784
1781
// CHECK-64: [[NATIVECC_TRUNC:%.*]] = trunc i64 %0 to i63
1785
1782
// CHECK-64: [[BYTE:%.*]] = zext i63 [[NATIVECC_TRUNC]] to i64
@@ -1829,7 +1826,7 @@ entry:
1829
1826
return %u : $MultiPayloadOneSpareBit
1830
1827
}
1831
1828
1832
- // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_one_spare_bit_inject_a_indirect(ptr dereferenceable({{.*}}) %0) {{.*}} {
1829
+ // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_one_spare_bit_inject_a_indirect(ptr nocapture dereferenceable({{.*}}) %0) {{.*}} {
1833
1830
// CHECK-64: entry:
1834
1831
// -- 0x8000_0000_0000_0000
1835
1832
// CHECK-64: store i64 -9223372036854775808, ptr %0
@@ -1973,7 +1970,7 @@ entry(%0 : $Builtin.Int62):
1973
1970
return %u : $MultiPayloadTwoSpareBits
1974
1971
}
1975
1972
1976
- // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_two_spare_bits_inject_x_indirect(i64 %0, ptr dereferenceable({{.*}}) %1) {{.*}} {
1973
+ // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_two_spare_bits_inject_x_indirect(i64 %0, ptr nocapture dereferenceable({{.*}}) %1) {{.*}} {
1977
1974
// CHECK-64: entry:
1978
1975
// CHECK-64: [[NATIVECC_TRUNC:%.*]] = trunc i64 %0 to i62
1979
1976
// CHECK-64: [[BYTE:%.*]] = zext i62 [[NATIVECC_TRUNC]] to i64
@@ -2007,7 +2004,7 @@ entry(%0 : $Builtin.Int60):
2007
2004
return %u : $MultiPayloadTwoSpareBits
2008
2005
}
2009
2006
2010
- // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_two_spare_bits_inject_y_indirect(i64 %0, ptr dereferenceable({{.*}}) %1) {{.*}} {
2007
+ // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_two_spare_bits_inject_y_indirect(i64 %0, ptr nocapture dereferenceable({{.*}}) %1) {{.*}} {
2011
2008
// CHECK-64: entry:
2012
2009
// CHECK-64: [[NATIVECC_TRUNC:%.*]] = trunc i64 %0 to i60
2013
2010
// CHECK-64: [[BYTE:%.*]] = zext i60 [[NATIVECC_TRUNC]] to i64
@@ -2054,7 +2051,7 @@ entry:
2054
2051
return %u : $MultiPayloadTwoSpareBits
2055
2052
}
2056
2053
2057
- // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_two_spare_bits_inject_a_indirect(ptr dereferenceable({{.*}}) %0) {{.*}} {
2054
+ // CHECK-64: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_two_spare_bits_inject_a_indirect(ptr nocapture dereferenceable({{.*}}) %0) {{.*}} {
2058
2055
// CHECK-64: entry:
2059
2056
// -- 0xC000_0000_0000_0000
2060
2057
// CHECK-64: store i64 -4611686018427387904, ptr %0
@@ -2258,7 +2255,7 @@ enum MultiPayloadNestedSpareBits {
2258
2255
case B(MultiPayloadInnerSpareBits)
2259
2256
}
2260
2257
2261
- // CHECK-64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_nested_spare_bits_switch(ptr noalias dereferenceable({{.*}}) %0) {{.*}} {
2258
+ // CHECK-64-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_nested_spare_bits_switch(ptr noalias nocapture dereferenceable({{.*}}) %0) {{.*}} {
2262
2259
// CHECK-64: entry:
2263
2260
// CHECK-64: %1 = load [[WORD]], ptr %0
2264
2261
// CHECK-64: %2 = lshr [[WORD]] %1, 61
@@ -2328,7 +2325,7 @@ enum MultiPayloadAddressOnlyFixed {
2328
2325
case Y(Builtin.Int32)
2329
2326
}
2330
2327
2331
- // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_address_only_destroy(ptr noalias dereferenceable({{.*}}) %0)
2328
+ // CHECK-LABEL: define{{( dllexport)?}}{{( protected)?}} swiftcc void @multi_payload_address_only_destroy(ptr noalias nocapture dereferenceable({{.*}}) %0)
2332
2329
sil @multi_payload_address_only_destroy : $@convention(thin) (@in MultiPayloadAddressOnlyFixed) -> () {
2333
2330
entry(%m : $*MultiPayloadAddressOnlyFixed):
2334
2331
destroy_addr %m : $*MultiPayloadAddressOnlyFixed
0 commit comments