|
1 | 1 | // RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s
|
| 2 | +// REQUIRES: objc_interop |
2 | 3 |
|
3 | 4 | import Foundation
|
4 | 5 |
|
5 | 6 | @objc protocol SR_9035_P {
|
6 | 7 | func returnUnmanagedCFArray() throws -> Unmanaged<CFArray>
|
7 | 8 | }
|
8 | 9 |
|
9 |
| -// CHECK: define hidden swiftcc %TSo10CFArrayRefa* @"$s25unmanaged_objc_throw_func9SR_9035_CC22returnUnmanagedCFArrays0G0VySo0H3RefaGyKF"(%T25unmanaged_objc_throw_func9SR_9035_CC* swiftself, %swift.error** noalias nocapture swifterror dereferenceable(8)) #0 { |
| 10 | +// CHECK-LABEL: define hidden swiftcc %TSo10CFArrayRefa* @"$s25unmanaged_objc_throw_func9SR_9035_CC22returnUnmanagedCFArrays0G0VySo0H3RefaGyKF"(%T25unmanaged_objc_throw_func9SR_9035_CC* swiftself, %swift.error** noalias nocapture swifterror dereferenceable(8)) #{{[0-9]+}} { |
10 | 11 | @objc class SR_9035_C: NSObject, SR_9035_P {
|
11 | 12 | func returnUnmanagedCFArray() throws -> Unmanaged<CFArray> {
|
12 |
| - // CHECK: %3 = call swiftcc { %swift.bridge*, i8* } @"$ss27_allocateUninitializedArrayySayxG_BptBwlF"(i64 1, %swift.type* @"$sSiN") |
13 |
| - // CHECK-NEXT: %4 = extractvalue { %swift.bridge*, i8* } %3, 0 |
14 |
| - // CHECK-NEXT: %5 = extractvalue { %swift.bridge*, i8* } %3, 1 |
15 |
| - // CHECK-NEXT: %6 = bitcast i8* %5 to %TSi* |
16 |
| - // CHECK-NEXT: %._value = getelementptr inbounds %TSi, %TSi* %6, i32 0, i32 0 |
| 13 | + // CHECK: %[[T0:.+]] = call swiftcc { %swift.bridge*, i8* } @"$ss27_allocateUninitializedArrayySayxG_BptBwlF"(i64 1, %swift.type* @"$sSiN") |
| 14 | + // CHECK-NEXT: %[[T1:.+]] = extractvalue { %swift.bridge*, i8* } %[[T0]], 0 |
| 15 | + // CHECK-NEXT: %[[T2:.+]] = extractvalue { %swift.bridge*, i8* } %[[T0]], 1 |
| 16 | + // CHECK-NEXT: %[[T3:.+]] = bitcast i8* %[[T2]] to %TSi* |
| 17 | + // CHECK-NEXT: %._value = getelementptr inbounds %TSi, %TSi* %[[T3]], i32 0, i32 0 |
17 | 18 | // CHECK-NEXT: store i64 1, i64* %._value, align 8
|
18 |
| - // CHECK-NEXT: %7 = call swiftcc %TSo7NSArrayC* @"$sSa10FoundationE19_bridgeToObjectiveCSo7NSArrayCyF"(%swift.bridge* %4, %swift.type* @"$sSiN") |
19 |
| - // CHECK-NEXT: %8 = bitcast %TSo7NSArrayC* %7 to %TSo10CFArrayRefa* |
20 |
| - // CHECK-NEXT: call void asm sideeffect "", "r"(%TSo10CFArrayRefa* %8) |
21 |
| - // CHECK-NEXT: call void @swift_bridgeObjectRelease(%swift.bridge* %4) #2 |
22 |
| - // CHECK-NEXT: %9 = bitcast %TSo10CFArrayRefa* %8 to i8* |
23 |
| - // CHECK-NEXT: call void @llvm.objc.release(i8* %9) |
24 |
| - // CHECK-NEXT: ret %TSo10CFArrayRefa* %8 |
| 19 | + // CHECK-NEXT: %[[T4:.+]] = call swiftcc %TSo7NSArrayC* @"$sSa10FoundationE19_bridgeToObjectiveCSo7NSArrayCyF"(%swift.bridge* %[[T1]], %swift.type* @"$sSiN") |
| 20 | + // CHECK-NEXT: %[[T5:.+]] = bitcast %TSo7NSArrayC* %[[T4]] to %TSo10CFArrayRefa* |
| 21 | + // CHECK-NEXT: call void asm sideeffect "", "r"(%TSo10CFArrayRefa* %[[T5]]) |
| 22 | + // CHECK-NEXT: call void @swift_bridgeObjectRelease(%swift.bridge* %[[T1]]) #{{[0-9]+}} |
| 23 | + // CHECK-NEXT: %[[T6:.+]] = bitcast %TSo10CFArrayRefa* %[[T5]] to i8* |
| 24 | + // CHECK-NEXT: call void @llvm.objc.release(i8* %[[T6]]) |
| 25 | + // CHECK-NEXT: ret %TSo10CFArrayRefa* %[[T5]] |
25 | 26 | let arr = [1] as CFArray
|
26 | 27 | return Unmanaged.passUnretained(arr)
|
27 | 28 | }
|
28 | 29 | }
|
29 | 30 |
|
30 |
| -// CHECK: %14 = call swiftcc %TSo10CFArrayRefa* @"$s25unmanaged_objc_throw_func9SR_9035_CC22returnUnmanagedCFArrays0G0VySo0H3RefaGyKF"(%T25unmanaged_objc_throw_func9SR_9035_CC* swiftself %4, %swift.error** noalias nocapture swifterror dereferenceable(8) %swifterror) #6 |
31 |
| -// CHECK-NEXT: %15 = load %swift.error*, %swift.error** %swifterror, align 8 |
32 |
| -// CHECK-NEXT: %16 = icmp ne %swift.error* %15, null |
33 |
| -// CHECK-NEXT: br i1 %16, label %20, label %17 |
| 31 | +// CHECK: %[[T0:.+]] = call swiftcc %TSo10CFArrayRefa* @"$s25unmanaged_objc_throw_func9SR_9035_CC22returnUnmanagedCFArrays0G0VySo0H3RefaGyKF"(%T25unmanaged_objc_throw_func9SR_9035_CC* swiftself %{{.+}}, %swift.error** noalias nocapture swifterror dereferenceable(8) %swifterror) #{{[0-9]+}} |
| 32 | +// CHECK-NEXT: %[[T2:.+]] = load %swift.error*, %swift.error** %swifterror, align 8 |
| 33 | +// CHECK-NEXT: %[[T3:.+]] = icmp ne %swift.error* %[[T2]], null |
| 34 | +// CHECK-NEXT: br i1 %[[T3]], label %[[L1:.+]], label %[[L2:.+]] |
34 | 35 |
|
35 |
| -// CHECK: ; <label>:17: ; preds = %entry |
36 |
| -// CHECK-NEXT: %18 = phi %TSo10CFArrayRefa* [ %14, %entry ] |
37 |
| -// CHECK-NEXT: %19 = ptrtoint %TSo10CFArrayRefa* %18 to i64 |
38 |
| -// CHECK-NEXT: br label %37 |
| 36 | +// CHECK: ; <label>:[[L2]]: ; preds = %entry |
| 37 | +// CHECK-NEXT: %[[T4:.+]] = phi %TSo10CFArrayRefa* [ %[[T0]], %entry ] |
| 38 | +// CHECK-NEXT: %[[T5:.+]] = ptrtoint %TSo10CFArrayRefa* %[[T4]] to i64 |
| 39 | +// CHECK-NEXT: br label %[[L3:.+]] |
39 | 40 |
|
40 |
| -// CHECK: ; <label>:20: ; preds = %entry |
41 |
| -// CHECK-NEXT: %21 = phi %swift.error* [ %15, %entry ] |
| 41 | +// CHECK: ; <label>:[[L1]]: ; preds = %entry |
| 42 | +// CHECK-NEXT: %[[T6:.+]] = phi %swift.error* [ %[[T2]], %entry ] |
42 | 43 | // CHECK-NEXT: store %swift.error* null, %swift.error** %swifterror, align 8
|
43 |
| -// CHECK-NEXT: %22 = icmp eq i64 %5, 0 |
44 |
| -// CHECK-NEXT: br i1 %22, label %35, label %23 |
| 44 | +// CHECK-NEXT: %[[T7:.+]] = icmp eq i64 %{{.+}}, 0 |
| 45 | +// CHECK-NEXT: br i1 %[[T7]], label %[[L4:.+]], label %[[L5:.+]] |
45 | 46 |
|
46 |
| -// CHECK: ; <label>:23: ; preds = %20 |
47 |
| -// CHECK-NEXT: %24 = inttoptr i64 %5 to i8* |
48 |
| -// CHECK-NEXT: br label %25 |
| 47 | +// CHECK: ; <label>:[[L5]]: ; preds = %[[L1]] |
| 48 | +// CHECK-NEXT: %[[T8:.+]] = inttoptr i64 %{{.+}} to i8* |
| 49 | +// CHECK-NEXT: br label %[[L6:.+]] |
49 | 50 |
|
50 |
| -// CHECK: ; <label>:25: ; preds = %23 |
51 |
| -// CHECK-NEXT: %26 = phi i8* [ %24, %23 ] |
52 |
| -// CHECK-NEXT: %27 = call swiftcc %TSo7NSErrorC* @"$s10Foundation22_convertErrorToNSErrorySo0E0Cs0C0_pF"(%swift.error* %21) #6 |
53 |
| -// CHECK: call swiftcc void @"$sSA7pointeexvs"(%swift.opaque* noalias nocapture %31, i8* %26, %swift.type* %33) #6 |
54 |
| -// CHECK-NEXT: %34 = bitcast %TSo7NSErrorCSg* %3 to i8* |
55 |
| -// CHECK: call void @swift_errorRelease(%swift.error* %21) #2 |
56 |
| -// CHECK-NEXT: br label %36 |
| 51 | +// CHECK: ; <label>:[[L6]]: ; preds = %[[L5]] |
| 52 | +// CHECK-NEXT: %[[T9:.+]] = phi i8* [ %[[T8]], %[[L5]] ] |
| 53 | +// CHECK-NEXT: %[[T10:.+]] = call swiftcc %TSo7NSErrorC* @"$s10Foundation22_convertErrorToNSErrorySo0E0Cs0C0_pF"(%swift.error* %[[T6]]) #{{[0-9]+}} |
| 54 | +// CHECK: call swiftcc void @"$sSA7pointeexvs"(%swift.opaque* noalias nocapture %31, i8* %26, %swift.type* %33) #{{[0-9]+}} |
| 55 | +// CHECK-NEXT: %[[T11:.+]] = bitcast %TSo7NSErrorCSg* %{{.+}} to i8* |
| 56 | +// CHECK: call void @swift_errorRelease(%swift.error* %[[T6]]) #{{[0-9]+}} |
| 57 | +// CHECK-NEXT: br label %[[L7:.+]] |
57 | 58 |
|
58 |
| -// CHECK: ; <label>:35: ; preds = %20 |
59 |
| -// CHECK-NEXT: call void @swift_errorRelease(%swift.error* %21) #2 |
60 |
| -// CHECK-NEXT: br label %36 |
| 59 | +// CHECK: ; <label>:[[L4]]: ; preds = %[[L1]] |
| 60 | +// CHECK-NEXT: call void @swift_errorRelease(%swift.error* %[[T6]]) #{{[0-9]+}} |
| 61 | +// CHECK-NEXT: br label %[[L7]] |
61 | 62 |
|
62 |
| -// CHECK: ; <label>:36: ; preds = %25, %35 |
63 |
| -// CHECK-NEXT: br label %37 |
| 63 | +// CHECK: ; <label>:[[L7]]: ; preds = %[[L6]], %[[L4]] |
| 64 | +// CHECK-NEXT: br label %[[L3]] |
64 | 65 |
|
65 |
| -// CHECK: ; <label>:37: ; preds = %17, %36 |
66 |
| -// CHECK-NEXT: %38 = phi i64 [ 0, %36 ], [ %19, %17 ] |
67 |
| -// CHECK-NEXT: %39 = bitcast %T25unmanaged_objc_throw_func9SR_9035_CC* %4 to i8* |
68 |
| -// CHECK-NEXT: call void @llvm.objc.release(i8* %39) |
69 |
| -// CHECK-NEXT: %40 = inttoptr i64 %38 to %struct.__CFArray** |
70 |
| -// CHECK-NEXT: ret %struct.__CFArray** %40 |
| 66 | +// CHECK: ; <label>:[[L3]]: ; preds = %[[L2]], %[[L7]] |
| 67 | +// CHECK-NEXT: %[[T12:.+]] = phi i64 [ 0, %[[L7]] ], [ %[[T5]], %[[L2]] ] |
| 68 | +// CHECK-NEXT: %[[T13:.+]] = bitcast %T25unmanaged_objc_throw_func9SR_9035_CC* %{{.+}} to i8* |
| 69 | +// CHECK-NEXT: call void @llvm.objc.release(i8* %[[T13]]) |
| 70 | +// CHECK-NEXT: %[[T14:.+]] = inttoptr i64 %[[T12]] to %struct.__CFArray** |
| 71 | +// CHECK-NEXT: ret %struct.__CFArray** %[[T14]] |
0 commit comments