11// RUN: %target-swift-frontend %s -emit-ir -g -o - \
22// 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
45// REQUIRES: concurrency
56
67func use< T> ( _ t: T ) { }
@@ -10,7 +11,7 @@ func withGenericArg<T>(_ msg: T) async {
1011 // This odd debug info is part of a contract with CoroSplit/CoroFrame to fix
1112 // this up after coroutine splitting.
1213 // 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:[^,]+ ]],
1415 // CHECK-SAME: metadata ![[TAU:[0-9]+]], metadata !DIExpression(
1516 // CHECK-SAME: DW_OP_deref, DW_OP_plus_uconst, {{[0-9]+}}))
1617 // CHECK: call void @llvm.dbg.declare(metadata %swift.context** %[[ALLOCA]],
@@ -20,15 +21,82 @@ func withGenericArg<T>(_ msg: T) async {
2021
2122 await forceSplit ( )
2223 // 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
32100
33101 use ( msg)
34102}
0 commit comments