1
1
// RUN: %target-swift-frontend %s -emit-ir -g -o - \
2
2
// RUN: -module-name M -enable-experimental-concurrency \
3
- // RUN: -parse-as-library | %FileCheck %s
3
+ // RUN: -parse-as-library | %FileCheck %s --check-prefix=CHECK \
4
+ // RUN: --check-prefix=CHECK-%target-cpu
4
5
// REQUIRES: concurrency
5
6
6
7
func use< T> ( _ t: T ) { }
@@ -10,7 +11,7 @@ func withGenericArg<T>(_ msg: T) async {
10
11
// This odd debug info is part of a contract with CoroSplit/CoroFrame to fix
11
12
// this up after coroutine splitting.
12
13
// CHECK-LABEL: {{^define .*}} @"$s1M14withGenericArgyyxYlF"(%swift.task* %0, %swift.executor* %1, %swift.context* swiftasync %2)
13
- // CHECK: call void @llvm.dbg.declare(metadata %swift.context** %[[ALLOCA:[^,]* ]],
14
+ // CHECK: call void @llvm.dbg.declare(metadata %swift.context** %[[ALLOCA:[^,]+ ]],
14
15
// CHECK-SAME: metadata ![[TAU:[0-9]+]], metadata !DIExpression(
15
16
// CHECK-SAME: DW_OP_deref, DW_OP_plus_uconst, {{[0-9]+}}))
16
17
// CHECK: call void @llvm.dbg.declare(metadata %swift.context** %[[ALLOCA]],
@@ -20,15 +21,82 @@ func withGenericArg<T>(_ msg: T) async {
20
21
21
22
await forceSplit ( )
22
23
// CHECK-LABEL: {{^define .*}} @"$s1M14withGenericArgyyxYlF.resume.0"(i8* %0, i8* %1, i8* swiftasync %2)
23
- // CHECK: call void @llvm.dbg.declare(metadata i8** %[[ALLOCA:[^,]*]],
24
- // CHECK-SAME: metadata ![[MSG_R:[0-9]+]], metadata !DIExpression(
25
- // CHECK-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET:[0-9]+]],
26
- // CHECK-SAME: DW_OP_plus_uconst, {{[0-9]+}}, DW_OP_deref))
27
- // CHECK: call void @llvm.dbg.declare(metadata i8** %[[ALLOCA]],
28
- // CHECK-SAME: metadata ![[TAU_R:[0-9]+]], metadata !DIExpression(
29
- // CHECK-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET]],
30
- // CHECK-SAME: DW_OP_plus_uconst, {{[0-9]+}}))
31
- // CHECK: store i8* %2, i8** %[[ALLOCA]], align
24
+
25
+ // CHECK-arm64e: [[CTXT_PTR:%[0-9]+]] = bitcast i8* %2 to i8**
26
+ // CHECK-arm64e: [[SIGNED_CTXT:%[0-9]+]] = load i8*, i8** [[CTXT_PTR]]
27
+ // CHECK-arm64e: [[CTXT_PTR_INT:%[0-9]+]] = ptrtoint i8** [[CTXT_PTR]] to i64
28
+ // CHECK-arm64e: [[PTRAUTH_BLEND:%[0-9]+]] = call i64 @llvm.ptrauth.blend.i64(i64 [[CTXT_PTR_INT]], i64 48546)
29
+ // CHECK-arm64e: [[SIGNED_CTXT_INT:%[0-9]+]] = ptrtoint i8* [[SIGNED_CTXT]]
30
+ // CHECK-arm64e: [[CTXT:%[0-9]+]] = call i64 @llvm.ptrauth.auth.i64(i64 [[SIGNED_CTXT_INT]], i32 2, i64 [[PTRAUTH_BLEND]])
31
+ // CHECK-arm64e: %[[ALLOCA:[0-9+]]] = inttoptr i64 [[CTXT]] to i8*, !dbg !77
32
+ // CHECK-arm64e: call void @llvm.dbg.declare(metadata i8* %[[ALLOCA]],
33
+ // CHECK-arm64e-SAME: metadata ![[TAU_R:[0-9]+]], metadata !DIExpression(
34
+ // CHECK-arm64e-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET:[0-9]+]],
35
+ // CHECK-arm64e-SAME: DW_OP_plus_uconst, {{[0-9]+}}))
36
+ // CHECK-arm64e: call void @llvm.dbg.declare(metadata i8* %[[ALLOCA]],
37
+ // CHECK-arm64e-SAME: metadata ![[MSG_R:[0-9]+]], metadata !DIExpression(
38
+ // CHECK-arm64e-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET]],
39
+ // CHECK-arm64e-SAME: DW_OP_plus_uconst, {{[0-9]+}}, DW_OP_deref))
40
+
41
+ // CHECK-i386: call void @llvm.dbg.declare(metadata i8** %[[ALLOCA:[^,]+]],
42
+ // CHECK-i386-SAME: metadata ![[MSG_R:[0-9]+]], metadata !DIExpression(
43
+ // CHECK-i386-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET:[0-9]+]],
44
+ // CHECK-i386-SAME: DW_OP_plus_uconst, {{[0-9]+}}, DW_OP_deref))
45
+ // CHECK-i386: call void @llvm.dbg.declare(metadata i8** %[[ALLOCA]],
46
+ // CHECK-i386-SAME: metadata ![[TAU_R:[0-9]+]], metadata !DIExpression(
47
+ // CHECK-i386-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET]],
48
+ // CHECK-i386-SAME: DW_OP_plus_uconst, {{[0-9]+}}))
49
+ // CHECK-i386: store i8* %2, i8** %[[ALLOCA]], align
50
+
51
+ // CHECK-x86_64: call void @llvm.dbg.declare(metadata i8** %[[ALLOCA:[^,]+]],
52
+ // CHECK-x86_64-SAME: metadata ![[MSG_R:[0-9]+]], metadata !DIExpression(
53
+ // CHECK-x86_64-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET:[0-9]+]],
54
+ // CHECK-x86_64-SAME: DW_OP_plus_uconst, {{[0-9]+}}, DW_OP_deref))
55
+ // CHECK-x86_64: call void @llvm.dbg.declare(metadata i8** %[[ALLOCA]],
56
+ // CHECK-x86_64-SAME: metadata ![[TAU_R:[0-9]+]], metadata !DIExpression(
57
+ // CHECK-x86_64-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET]],
58
+ // CHECK-x86_64-SAME: DW_OP_plus_uconst, {{[0-9]+}}))
59
+ // CHECK-x86_64: store i8* %2, i8** %[[ALLOCA]], align
60
+
61
+ // CHECK-armv7: call void @llvm.dbg.declare(metadata i8** %[[ALLOCA:[^,]+]],
62
+ // CHECK-armv7-SAME: metadata ![[MSG_R:[0-9]+]], metadata !DIExpression(
63
+ // CHECK-armv7-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET:[0-9]+]],
64
+ // CHECK-armv7-SAME: DW_OP_plus_uconst, {{[0-9]+}}, DW_OP_deref))
65
+ // CHECK-armv7: call void @llvm.dbg.declare(metadata i8** %[[ALLOCA]],
66
+ // CHECK-armv7-SAME: metadata ![[TAU_R:[0-9]+]], metadata !DIExpression(
67
+ // CHECK-armv7-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET]],
68
+ // CHECK-armv7-SAME: DW_OP_plus_uconst, {{[0-9]+}}))
69
+ // CHECK-armv7: store i8* %2, i8** %[[ALLOCA]], align
70
+
71
+ // CHECK-arm64: call void @llvm.dbg.declare(metadata i8** %[[ALLOCA:[^,]+]],
72
+ // CHECK-arm64-SAME: metadata ![[MSG_R:[0-9]+]], metadata !DIExpression(
73
+ // CHECK-arm64-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET:[0-9]+]],
74
+ // CHECK-arm64-SAME: DW_OP_plus_uconst, {{[0-9]+}}, DW_OP_deref))
75
+ // CHECK-arm64: call void @llvm.dbg.declare(metadata i8** %[[ALLOCA]],
76
+ // CHECK-arm64-SAME: metadata ![[TAU_R:[0-9]+]], metadata !DIExpression(
77
+ // CHECK-arm64-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET]],
78
+ // CHECK-arm64-SAME: DW_OP_plus_uconst, {{[0-9]+}}))
79
+ // CHECK-arm64: store i8* %2, i8** %[[ALLOCA]], align
80
+
81
+ // CHECK-powerpc64: call void @llvm.dbg.declare(metadata i8** %[[ALLOCA:[^,]+]],
82
+ // CHECK-powerpc64-SAME: metadata ![[MSG_R:[0-9]+]], metadata !DIExpression(
83
+ // CHECK-powerpc64-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET:[0-9]+]],
84
+ // CHECK-powerpc64-SAME: DW_OP_plus_uconst, {{[0-9]+}}, DW_OP_deref))
85
+ // CHECK-powerpc64: call void @llvm.dbg.declare(metadata i8** %[[ALLOCA]],
86
+ // CHECK-powerpc64-SAME: metadata ![[TAU_R:[0-9]+]], metadata !DIExpression(
87
+ // CHECK-powerpc64-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET]],
88
+ // CHECK-powerpc64-SAME: DW_OP_plus_uconst, {{[0-9]+}}))
89
+ // CHECK-powerpc64: store i8* %2, i8** %[[ALLOCA]], align
90
+
91
+ // CHECK-powerpc64le: call void @llvm.dbg.declare(metadata i8** %[[ALLOCA:[^,]+]],
92
+ // CHECK-powerpc64le-SAME: metadata ![[MSG_R:[0-9]+]], metadata !DIExpression(
93
+ // CHECK-powerpc64le-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET:[0-9]+]],
94
+ // CHECK-powerpc64le-SAME: DW_OP_plus_uconst, {{[0-9]+}}, DW_OP_deref))
95
+ // CHECK-powerpc64le: call void @llvm.dbg.declare(metadata i8** %[[ALLOCA]],
96
+ // CHECK-powerpc64le-SAME: metadata ![[TAU_R:[0-9]+]], metadata !DIExpression(
97
+ // CHECK-powerpc64le-SAME: DW_OP_deref, DW_OP_plus_uconst, [[OFFSET]],
98
+ // CHECK-powerpc64le-SAME: DW_OP_plus_uconst, {{[0-9]+}}))
99
+ // CHECK-powerpc64le: store i8* %2, i8** %[[ALLOCA]], align
32
100
33
101
use ( msg)
34
102
}
0 commit comments