34
34
// code, only 6 will have mapped arguments, and only 4 have all-constant map
35
35
// sizes.
36
36
37
- // CHECK-DAG: [[SIZET2:@.+]] = private unnamed_addr constant [1 x i{{32|64}}] [i[[SZ:32|64]] 2]
37
+ // CHECK-DAG: [[SIZET:@.+]] = private unnamed_addr constant [2 x i[[SZ]]] [i[[SZ]] 0, i[[SZ]] 4]
38
+ // CHECK-DAG: [[MAPT:@.+]] = private unnamed_addr constant [2 x i32] [i32 32, i32 288]
39
+ // CHECK-DAG: [[SIZET2:@.+]] = private unnamed_addr constant [1 x i{{32|64}}] [i[[SZ]] 2]
38
40
// CHECK-DAG: [[MAPT2:@.+]] = private unnamed_addr constant [1 x i32] [i32 288]
39
41
// CHECK-DAG: [[SIZET3:@.+]] = private unnamed_addr constant [2 x i[[SZ]]] [i[[SZ]] 4, i[[SZ]] 2]
40
42
// CHECK-DAG: [[MAPT3:@.+]] = private unnamed_addr constant [2 x i32] [i32 288, i32 288]
59
61
// TCHECK: @{{.+}} = constant [[ENTTY]]
60
62
// TCHECK: @{{.+}} = constant [[ENTTY]]
61
63
// TCHECK: @{{.+}} = constant [[ENTTY]]
64
+ // TCHECK: @{{.+}} = {{.*}}constant [[ENTTY]]
62
65
// TCHECK-NOT: @{{.+}} = constant [[ENTTY]]
63
66
64
67
// Check if offloading descriptor is created.
@@ -91,6 +94,7 @@ int foo(int n) {
91
94
double c[5 ][10 ];
92
95
double cn[5 ][n];
93
96
TT<long long , char > d;
97
+ static long *plocal;
94
98
95
99
// CHECK: [[ADD:%.+]] = add nsw i32
96
100
// CHECK: store i32 [[ADD]], i32* [[CAPTURE:%.+]],
@@ -106,6 +110,39 @@ int foo(int n) {
106
110
{
107
111
}
108
112
113
+ // CHECK: [[ADD:%.+]] = add nsw i32
114
+ // CHECK: store i32 [[ADD]], i32* [[CAPTURE:%.+]],
115
+ // CHECK-DAG: [[LD:%.+]] = load i32, i32* [[CAPTURE]],
116
+ // CHECK-DAG: [[RET:%.+]] = call i32 @__tgt_target(i32 [[LD]], i8* @{{[^,]+}}, i32 2, i8** [[BPR:%[^,]+]], i8** [[PR:%[^,]+]], i[[SZ]]* getelementptr inbounds ([2 x i[[SZ]]], [2 x i[[SZ]]]* [[SIZET]], i32 0, i32 0), i32* getelementptr inbounds ([2 x i32], [2 x i32]* [[MAPT]], i32 0, i32 0)
117
+ // CHECK-DAG: [[BPR]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP:%[^,]+]], i32 0, i32 0
118
+ // CHECK-DAG: [[PR]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[P:%[^,]+]], i32 0, i32 0
119
+
120
+ // CHECK-DAG: [[BPADDR0:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP]], i32 0, i32 0
121
+ // CHECK-DAG: [[PADDR0:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[P]], i32 0, i32 0
122
+ // CHECK-DAG: [[CBPADDR0:%.+]] = bitcast i8** [[BPADDR0]] to i[[SZ]]**
123
+ // CHECK-DAG: [[CPADDR0:%.+]] = bitcast i8** [[PADDR0]] to i[[SZ]]**
124
+ // CHECK-DAG: store i[[SZ]]* [[BP0:%[^,]+]], i[[SZ]]** [[CBPADDR0]]
125
+ // CHECK-DAG: store i[[SZ]]* [[BP0]], i[[SZ]]** [[CPADDR0]]
126
+
127
+ // CHECK-DAG: [[BPADDR1:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[BP]], i32 0, i32 1
128
+ // CHECK-DAG: [[PADDR1:%.+]] = getelementptr inbounds [2 x i8*], [2 x i8*]* [[P]], i32 0, i32 1
129
+ // CHECK-DAG: [[CBPADDR1:%.+]] = bitcast i8** [[BPADDR1]] to i[[SZ]]*
130
+ // CHECK-DAG: [[CPADDR1:%.+]] = bitcast i8** [[PADDR1]] to i[[SZ]]*
131
+ // CHECK-DAG: store i[[SZ]] [[BP1:%[^,]+]], i[[SZ]]* [[CBPADDR1]]
132
+ // CHECK-DAG: store i[[SZ]] [[BP1]], i[[SZ]]* [[CPADDR1]]
133
+ // CHECK: [[ERROR:%.+]] = icmp ne i32 [[RET]], 0
134
+ // CHECK-NEXT: br i1 [[ERROR]], label %[[FAIL:[^,]+]], label %[[END:[^,]+]]
135
+ // CHECK: [[FAIL]]
136
+ // CHECK: call void [[HVT0_:@.+]](i[[SZ]]* [[BP0]], i[[SZ]] [[BP1]])
137
+ // CHECK-NEXT: br label %[[END]]
138
+ // CHECK: [[END]]
139
+ #pragma omp target device(global + a)
140
+ {
141
+ static int local1;
142
+ *plocal = global;
143
+ local1 = global;
144
+ }
145
+
109
146
// CHECK: call void [[HVT1:@.+]](i[[SZ]] {{[^,]+}})
110
147
#pragma omp target if(0) firstprivate(global)
111
148
{
0 commit comments