11
11
#ifndef HEADER
12
12
#define HEADER
13
13
14
- // CHECK-DAG: [[SIZES1:@.+]] = private unnamed_addr constant [5 x i64] zeroinitializer
14
+ // CHECK-DAG: [[SIZES1:@.+]] = private unnamed_addr constant [6 x i64] [i64 4, i64 16, i64 4, i64 4, i64 0, i64 4]
15
15
// 64 = 0x40 = OMP_MAP_RETURN_PARAM
16
- // CHECK-DAG: [[MAPTYPES1:@.+]] = private unnamed_addr constant [5 x i64] [i64 64 , i64 64 , i64 64 , i64 64 , i64 64 ]
17
- // CHECK-DAG: [[SIZES2:@.+]] = private unnamed_addr constant [5 x i64] zeroinitializer
16
+ // CHECK-DAG: [[MAPTYPES1:@.+]] = private unnamed_addr constant [6 x i64] [i64 67 , i64 67 , i64 3 , i64 67 , i64 67, i64 67 ]
17
+ // CHECK-DAG: [[SIZES2:@.+]] = private unnamed_addr constant [6 x i64] [i64 0, i64 4, i64 16, i64 4, i64 4, i64 0]
18
18
// 0 = OMP_MAP_NONE
19
19
// 281474976710720 = 0x1000000000040 = OMP_MAP_MEMBER_OF | OMP_MAP_RETURN_PARAM
20
- // CHECK-DAG: [[MAPTYPES2:@.+]] = private unnamed_addr constant [5 x i64] [i64 0, i64 281474976710720 , i64 281474976710720 , i64 281474976710720 , i64 281474976710720 ]
20
+ // CHECK-DAG: [[MAPTYPES2:@.+]] = private unnamed_addr constant [6 x i64] [i64 0, i64 281474976710723 , i64 281474976710739 , i64 281474976710739 , i64 281474976710675, i64 281474976710723 ]
21
21
struct S {
22
22
int a = 0 ;
23
23
int *ptr = &a;
24
24
int &ref = a;
25
25
int arr[4 ];
26
26
S () {}
27
27
void foo () {
28
- #pragma omp target data use_device_addr(a, ptr [3:4], ref, ptr[0], arr[:a])
28
+ #pragma omp target data map(tofrom: a, ptr [3:4], ref, ptr[0], arr[:a]) use_device_addr(a, ptr [3:4], ref, ptr[0], arr[:a])
29
29
++a, ++*ptr, ++ref, ++arr[0 ];
30
30
}
31
31
};
@@ -38,7 +38,7 @@ int main() {
38
38
float vla[(int )a];
39
39
S s;
40
40
s.foo ();
41
- #pragma omp target data use_device_addr(a, ptr [3:4], ref, ptr[0], arr[:(int)a], vla[0])
41
+ #pragma omp target data map(tofrom: a, ptr [3:4], ref, ptr[0], arr[:(int)a], vla[0]) use_device_addr(a, ptr [3:4], ref, ptr[0], arr[:(int)a], vla[0])
42
42
++a, ++*ptr, ++ref, ++arr[0 ], ++vla[0 ];
43
43
return a;
44
44
}
@@ -48,47 +48,68 @@ int main() {
48
48
// CHECK: [[PTR_ADDR:%.+]] = alloca ptr,
49
49
// CHECK: [[REF_ADDR:%.+]] = alloca ptr,
50
50
// CHECK: [[ARR_ADDR:%.+]] = alloca [4 x float],
51
- // CHECK: [[BPTRS:%.+]] = alloca [5 x ptr],
52
- // CHECK: [[PTRS:%.+]] = alloca [5 x ptr],
51
+ // CHECK: [[BPTRS:%.+]] = alloca [6 x ptr],
52
+ // CHECK: [[PTRS:%.+]] = alloca [6 x ptr],
53
+ // CHECK: [[MAP_PTRS:%.+]] = alloca [6 x ptr],
54
+ // CHECK: [[SIZES:%.+]] = alloca [6 x i64],
53
55
// CHECK: [[VLA_ADDR:%.+]] = alloca float, i64 %{{.+}},
54
56
// CHECK: [[PTR:%.+]] = load ptr, ptr [[PTR_ADDR]],
55
- // CHECK: [[REF:%.+]] = load ptr, ptr [[REF_ADDR]],
56
- // CHECK: [[ARR:%.+]] = getelementptr inbounds [4 x float], ptr [[ARR_ADDR]], i64 0, i64 0
57
- // CHECK: [[BPTR0:%.+]] = getelementptr inbounds [5 x ptr], ptr [[BPTRS]], i32 0, i32 0
57
+ // CHECK-NEXT: [[P4:%.+]] = load ptr, ptr [[PTR_ADDR]], align 8
58
+ // CHECK-NEXT: [[ARR_IDX:%.+]] = getelementptr inbounds float, ptr [[P4]], i64 3
59
+ // CHECK: [[P5:%.+]] = load ptr, ptr [[PTR_ADDR]], align 8
60
+ // CHECK-NEXT: [[P6:%.+]] = load ptr, ptr [[PTR_ADDR]], align 8
61
+ // CHECK-NEXT: [[ARR_IDX1:%.+]] = getelementptr inbounds float, ptr [[P6]], i64 0
62
+ // CHECK: [[P7:%.+]] = load ptr, ptr [[REF_ADDR]],
63
+ // CHECK-NEXT: [[REF:%.+]] = load ptr, ptr [[REF_ADDR]],
64
+ // CHECK-NEXT: [[ARR_IDX2:%.+]] = getelementptr inbounds [4 x float], ptr [[ARR_ADDR]], i64 0, i64 0
65
+ // CHECK: [[P10:%.+]] = mul nuw i64 {{.+}}, 4
66
+ // CHECK-NEXT: [[ARR_IDX5:%.+]] = getelementptr inbounds float, ptr [[VLA_ADDR]], i64 0
67
+ // CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[SIZES]], ptr align 8 [[SIZES1]], i64 48, i1 false)
68
+ // CHECK: [[BPTR0:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 0
58
69
// CHECK: store ptr [[A_ADDR]], ptr [[BPTR0]],
59
- // CHECK: [[PTR0:%.+]] = getelementptr inbounds [5 x ptr], ptr [[PTRS]], i32 0, i32 0
70
+ // CHECK: [[PTR0:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 0
60
71
// CHECK: store ptr [[A_ADDR]], ptr [[PTR0]],
61
- // CHECK: [[BPTR1:%.+]] = getelementptr inbounds [5 x ptr], ptr [[BPTRS]], i32 0, i32 1
72
+ // CHECK: [[BPTR1:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 1
62
73
// CHECK: store ptr [[PTR]], ptr [[BPTR1]],
63
- // CHECK: [[PTR1:%.+]] = getelementptr inbounds [5 x ptr], ptr [[PTRS]], i32 0, i32 1
64
- // CHECK: store ptr [[PTR]], ptr [[PTR1]],
65
- // CHECK: [[BPTR2:%.+]] = getelementptr inbounds [5 x ptr], ptr [[BPTRS]], i32 0, i32 2
66
- // CHECK: store ptr [[REF]], ptr [[BPTR2]],
67
- // CHECK: [[PTR2:%.+]] = getelementptr inbounds [5 x ptr], ptr [[PTRS]], i32 0, i32 2
68
- // CHECK: store ptr [[REF]], ptr [[PTR2]],
69
- // CHECK: [[BPTR3:%.+]] = getelementptr inbounds [5 x ptr], ptr [[BPTRS]], i32 0, i32 3
70
- // CHECK: store ptr [[ARR]], ptr [[BPTR3]],
71
- // CHECK: [[PTR3:%.+]] = getelementptr inbounds [5 x ptr], ptr [[PTRS]], i32 0, i32 3
72
- // CHECK: store ptr [[ARR]], ptr [[PTR3]],
73
- // CHECK: [[BPTR4:%.+]] = getelementptr inbounds [5 x ptr], ptr [[BPTRS]], i32 0, i32 4
74
- // CHECK: store ptr [[VLA_ADDR]], ptr [[BPTR4]],
75
- // CHECK: [[PTR4:%.+]] = getelementptr inbounds [5 x ptr], ptr [[PTRS]], i32 0, i32 4
76
- // CHECK: store ptr [[VLA_ADDR]], ptr [[PTR4]],
77
- // CHECK: [[BPTR:%.+]] = getelementptr inbounds [5 x ptr], ptr [[BPTRS]], i32 0, i32 0
78
- // CHECK: [[PTR:%.+]] = getelementptr inbounds [5 x ptr], ptr [[PTRS]], i32 0, i32 0
79
- // CHECK: call void @__tgt_target_data_begin_mapper(ptr @{{.+}}, i64 -1, i32 5, ptr [[BPTR]], ptr [[PTR]], ptr [[SIZES1]], ptr [[MAPTYPES1]], ptr null, ptr null)
74
+ // CHECK: [[PTR1:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 1
75
+ // CHECK: store ptr [[ARR_IDX]], ptr [[PTR1]],
76
+ // CHECK: [[BPTR2:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 2
77
+ // CHECK: store ptr [[P5]], ptr [[BPTR2]],
78
+ // CHECK: [[PTR2:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 2
79
+ // CHECK: store ptr [[ARR_IDX1]], ptr [[PTR2]],
80
+ // CHECK: [[BPTR3:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 3
81
+ // CHECK: store ptr [[P7]], ptr [[BPTR3]],
82
+ // CHECK: [[PTR3:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 3
83
+ // CHECK: store ptr [[REF]], ptr [[PTR3]],
84
+ // CHECK: [[BPTR4:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 4
85
+ // CHECK: store ptr [[ARR_ADDR]], ptr [[BPTR4]], align
86
+ // CHECK: [[PTR4:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 4
87
+ // CHECK: store ptr [[ARR_IDX2]], ptr [[PTR4]], align 8
88
+ // CHECK: [[SIZE_PTR:%.+]] = getelementptr inbounds [6 x i64], ptr [[SIZES]], i32 0, i32 4
89
+ // CHECK: store i64 [[P10:%.+]], ptr [[SIZE_PTR]], align 8
90
+ // CHECK: [[MAP_PTR:%.+]] = getelementptr inbounds [6 x ptr], ptr [[MAP_PTRS]], i64 0, i64 4
91
+ // CHECK: store ptr null, ptr [[MAP_PTR]], align 8
92
+ // CHECK: [[BPTR5:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 5
93
+ // CHECK: store ptr [[VLA_ADDR]], ptr [[BPTR5]],
94
+ // CHECK: [[PTR5:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 5
95
+ // CHECK: store ptr [[ARR_IDX5]], ptr [[PTR5]],
96
+
97
+ // CHECK: [[BPTR:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 0
98
+ // CHECK: [[PTR:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 0
99
+ // CHECK: [[SIZE:%.+]] = getelementptr inbounds [6 x i64], ptr [[SIZES]], i32 0, i32 0
100
+ // CHECK: call void @__tgt_target_data_begin_mapper(ptr @{{.+}}, i64 -1, i32 6, ptr [[BPTR]], ptr [[PTR]], ptr [[SIZE]], ptr [[MAPTYPES1]], ptr null, ptr null)
80
101
// CHECK: [[A_REF:%.+]] = load ptr, ptr [[BPTR0]],
81
- // CHECK: [[REF_REF:%.+]] = load ptr, ptr [[BPTR2 ]],
102
+ // CHECK: [[REF_REF:%.+]] = load ptr, ptr [[BPTR3 ]],
82
103
// CHECK: store ptr [[REF_REF]], ptr [[TMP_REF_ADDR:%.+]],
83
- // CHECK: [[ARR_REF:%.+]] = load ptr, ptr [[BPTR3 ]],
84
- // CHECK: [[VLA_REF:%.+]] = load ptr, ptr [[BPTR4 ]],
104
+ // CHECK: [[ARR_REF:%.+]] = load ptr, ptr [[BPTR4 ]],
105
+ // CHECK: [[VLA_REF:%.+]] = load ptr, ptr [[BPTR5 ]],
85
106
// CHECK: [[A:%.+]] = load float, ptr [[A_REF]],
86
107
// CHECK: [[INC:%.+]] = fadd float [[A]], 1.000000e+00
87
108
// CHECK: store float [[INC]], ptr [[A_REF]],
88
- // CHECK: [[PTR_ADDR :%.+]] = load ptr, ptr [[BPTR1]],
89
- // CHECK: [[VAL:%.+]] = load float, ptr [[PTR_ADDR ]],
109
+ // CHECK: [[PTR :%.+]] = load ptr, ptr [[BPTR1]],
110
+ // CHECK: [[VAL:%.+]] = load float, ptr [[PTR ]],
90
111
// CHECK: [[INC:%.+]] = fadd float [[VAL]], 1.000000e+00
91
- // CHECK: store float [[INC]], ptr [[PTR_ADDR ]],
112
+ // CHECK: store float [[INC]], ptr [[PTR ]],
92
113
// CHECK: [[REF_ADDR:%.+]] = load ptr, ptr [[TMP_REF_ADDR]],
93
114
// CHECK: [[REF:%.+]] = load float, ptr [[REF_ADDR]],
94
115
// CHECK: [[INC:%.+]] = fadd float [[REF]], 1.000000e+00
@@ -101,63 +122,66 @@ int main() {
101
122
// CHECK: [[VLA0:%.+]] = load float, ptr [[VLA0_ADDR]],
102
123
// CHECK: [[INC:%.+]] = fadd float [[VLA0]], 1.000000e+00
103
124
// CHECK: store float [[INC]], ptr [[VLA0_ADDR]],
104
- // CHECK: [[BPTR:%.+]] = getelementptr inbounds [5 x ptr], ptr [[BPTRS]], i32 0, i32 0
105
- // CHECK: [[PTR:%.+]] = getelementptr inbounds [5 x ptr], ptr [[PTRS]], i32 0, i32 0
106
- // CHECK: call void @__tgt_target_data_end_mapper(ptr @{{.+}}, i64 -1, i32 5, ptr [[BPTR]], ptr [[PTR]], ptr [[SIZES1]], ptr [[MAPTYPES1]], ptr null, ptr null)
125
+ // CHECK: [[BPTR:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 0
126
+ // CHECK: [[PTR:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 0
127
+ // CHECK: [[SIZE:%.+]] = getelementptr inbounds [6 x i64], ptr [[SIZES]], i32 0, i32 0
128
+ // CHECK: call void @__tgt_target_data_end_mapper(ptr @{{.+}}, i64 -1, i32 6, ptr [[BPTR]], ptr [[PTR]], ptr [[SIZE]], ptr [[MAPTYPES1]], ptr null, ptr null)
107
129
108
130
// CHECK: foo
109
- // %this.addr = alloca ptr, align 8
110
- // CHECK: [[BPTRS:%.+]] = alloca [5 x ptr],
111
- // CHECK: [[PTRS:%.+]] = alloca [5 x ptr],
112
- // CHECK: [[SIZES:%.+]] = alloca [5 x i64],
113
- // %tmp = alloca ptr, align 8
114
- // %tmp6 = alloca ptr, align 8
115
- // %tmp7 = alloca ptr, align 8
116
- // %tmp8 = alloca ptr, align 8
117
- // %tmp9 = alloca ptr, align 8
118
- // store ptr %this, ptr %this.addr, align 8
119
- // %this1 = load ptr, ptr %this.addr, align 8
131
+ // CHECK: [[BPTRS:%.+]] = alloca [6 x ptr],
132
+ // CHECK: [[PTRS:%.+]] = alloca [6 x ptr],
133
+ // CHECK: [[MAP_PTRS:%.+]] = alloca [6 x ptr],
134
+ // CHECK: [[SIZES:%.+]] = alloca [6 x i64],
120
135
// CHECK: [[A_ADDR:%.+]] = getelementptr inbounds %struct.S, ptr [[THIS:%.+]], i32 0, i32 0
121
- // %ptr = getelementptr inbounds %struct.S, ptr %this1, i32 0, i32 1
122
- // %ref = getelementptr inbounds %struct.S, ptr %this1, i32 0, i32 2
123
- // %0 = load ptr, ptr %ref, align 8
124
- // CHECK: [[ARR_ADDR:%.+]] = getelementptr inbounds %struct.S, ptr [[THIS]], i32 0, i32 3
125
- // CHECK: [[A_ADDR2:%.+]] = getelementptr inbounds %struct.S, ptr [[THIS]], i32 0, i32 0
126
136
// CHECK: [[PTR_ADDR:%.+]] = getelementptr inbounds %struct.S, ptr [[THIS]], i32 0, i32 1
137
+ // CHECK: [[ARR_IDX:%.+]] = getelementptr inbounds i32, ptr %{{.+}}, i64 3
127
138
// CHECK: [[REF_REF:%.+]] = getelementptr inbounds %struct.S, ptr [[THIS]], i32 0, i32 2
128
139
// CHECK: [[REF_PTR:%.+]] = load ptr, ptr [[REF_REF]],
129
- // CHECK: [[ARR_ADDR2:%.+]] = getelementptr inbounds %struct.S, ptr [[THIS]], i32 0, i32 3
130
- // CHECK: [[ARR_END:%.+]] = getelementptr [4 x i32], ptr [[ARR_ADDR]], i32 1
140
+ // CHECK-NEXT: [[P3:%.+]] = getelementptr inbounds %struct.S, ptr [[THIS]], i32 0, i32 1
141
+ // CHECK: [[ARR_IDX5:%.+]] = getelementptr inbounds i32, ptr {{.+}}, i64 0
142
+ // CHECK: [[ARR_ADDR:%.+]] = getelementptr inbounds %struct.S, ptr [[THIS]], i32 0, i32 3
143
+
144
+ // CHECK: [[ARR_IDX6:%.+]] = getelementptr inbounds [4 x i32], ptr [[ARR_ADDR]], i64 0, i64 0
145
+ // CHECK: [[A_ADDR2:%.+]] = getelementptr inbounds %struct.S, ptr [[THIS]], i32 0, i32 0
146
+ // CHECK: [[P4:%.+]] = mul nuw i64 [[CONV:%.+]], 4
147
+ // CHECK: [[ARR_END:%.+]] = getelementptr i32, ptr [[ARR_IDX6]], i32 1
131
148
// CHECK: [[E:%.+]] = ptrtoint ptr [[ARR_END]] to i64
132
149
// CHECK: [[B:%.+]] = ptrtoint ptr [[A_ADDR]] to i64
133
150
// CHECK: [[DIFF:%.+]] = sub i64 [[E]], [[B]]
134
151
// CHECK: [[SZ:%.+]] = sdiv exact i64 [[DIFF]], ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
135
- // CHECK: [[BPTR0:%.+]] = getelementptr inbounds [5 x ptr], ptr [[BPTRS]], i32 0, i32 0
152
+ // CHECK: [[BPTR0:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 0
136
153
// CHECK: store ptr [[THIS]], ptr [[BPTR0]],
137
- // CHECK: [[PTR0:%.+]] = getelementptr inbounds [5 x ptr], ptr [[PTRS]], i32 0, i32 0
154
+ // CHECK: [[PTR0:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 0
138
155
// CHECK: store ptr [[A_ADDR]], ptr [[PTR0]],
139
- // CHECK: [[SIZE0:%.+]] = getelementptr inbounds [5 x i64], ptr [[SIZES]], i32 0, i32 0
156
+ // CHECK: [[SIZE0:%.+]] = getelementptr inbounds [6 x i64], ptr [[SIZES]], i32 0, i32 0
140
157
// CHECK: store i64 [[SZ]], ptr [[SIZE0]],
141
- // CHECK: [[BPTR1:%.+]] = getelementptr inbounds [5 x ptr], ptr [[BPTRS]], i32 0, i32 1
142
- // CHECK: store ptr [[A_ADDR2 ]], ptr [[BPTR1]],
143
- // CHECK: [[PTR1:%.+]] = getelementptr inbounds [5 x ptr], ptr [[PTRS]], i32 0, i32 1
144
- // CHECK: store ptr [[A_ADDR2 ]], ptr [[PTR1]],
145
- // CHECK: [[BPTR2:%.+]] = getelementptr inbounds [5 x ptr], ptr [[BPTRS]], i32 0, i32 2
158
+ // CHECK: [[BPTR1:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 1
159
+ // CHECK: store ptr [[THIS ]], ptr [[BPTR1]]
160
+ // CHECK: [[PTR1:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 1
161
+ // CHECK: store ptr [[A_ADDR ]], ptr [[PTR1]],
162
+ // CHECK: [[BPTR2:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 2
146
163
// CHECK: store ptr [[PTR_ADDR]], ptr [[BPTR2]],
147
- // CHECK: [[PTR2:%.+]] = getelementptr inbounds [5 x ptr], ptr [[PTRS]], i32 0, i32 2
148
- // CHECK: store ptr [[PTR_ADDR ]], ptr [[PTR2]],
149
- // CHECK: [[BPTR3:%.+]] = getelementptr inbounds [5 x ptr], ptr [[BPTRS]], i32 0, i32 3
150
- // CHECK: store ptr [[REF_PTR ]], ptr [[BPTR3]],
151
- // CHECK: [[PTR3:%.+]] = getelementptr inbounds [5 x ptr], ptr [[PTRS]], i32 0, i32 3
164
+ // CHECK: [[PTR2:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 2
165
+ // CHECK: store ptr [[ARR_IDX ]], ptr [[PTR2]],
166
+ // CHECK: [[BPTR3:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 3
167
+ // CHECK: store ptr [[THIS ]], ptr [[BPTR3]]
168
+ // CHECK: [[PTR3:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 3
152
169
// CHECK: store ptr [[REF_PTR]], ptr [[PTR3]],
153
- // CHECK: [[BPTR4:%.+]] = getelementptr inbounds [5 x ptr], ptr [[BPTRS]], i32 0, i32 4
154
- // CHECK: store ptr [[ARR_ADDR2]], ptr [[BPTR4]],
155
- // CHECK: [[PTR4:%.+]] = getelementptr inbounds [5 x ptr], ptr [[PTRS]], i32 0, i32 4
156
- // CHECK: store ptr [[ARR_ADDR2]], ptr [[PTR4]],
157
- // CHECK: [[BPTR:%.+]] = getelementptr inbounds [5 x ptr], ptr [[BPTRS]], i32 0, i32 0
158
- // CHECK: [[PTR:%.+]] = getelementptr inbounds [5 x ptr], ptr [[PTRS]], i32 0, i32 0
159
- // CHECK: [[SIZE:%.+]] = getelementptr inbounds [5 x i64], ptr [[SIZES]], i32 0, i32 0
160
- // CHECK: call void @__tgt_target_data_begin_mapper(ptr @{{.+}}, i64 -1, i32 5, ptr [[BPTR]], ptr [[PTR]], ptr [[SIZE]], ptr [[MAPTYPES2]], ptr null, ptr null)
170
+ // CHECK: [[BPTR4:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 4
171
+ // CHECK: store ptr [[P3]], ptr [[BPTR4]],
172
+ // CHECK: [[PTR4:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 4
173
+ // CHECK: store ptr [[ARR_IDX5]], ptr [[PTR4]]
174
+
175
+ // CHECK: [[BPTR5:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 5
176
+ // CHECK: store ptr [[THIS]], ptr [[BPTR5]], align 8
177
+ // CHECK: [[PTR5:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 5
178
+ // CHECK: store ptr [[ARR_IDX6]], ptr [[PTR5]], align 8
179
+ // CHECK: [[SIZE1:%.+]] = getelementptr inbounds [6 x i64], ptr [[SIZES]], i32 0, i32 5
180
+ // CHECK: store i64 [[P4]], ptr [[SIZE1]], align 8
181
+ // CHECK: [[BPTR:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 0
182
+ // CHECK: [[PTR:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 0
183
+ // CHECK: [[SIZE:%.+]] = getelementptr inbounds [6 x i64], ptr [[SIZES]], i32 0, i32 0
184
+ // CHECK: call void @__tgt_target_data_begin_mapper(ptr @{{.+}}, i64 -1, i32 6, ptr [[BPTR]], ptr [[PTR]], ptr [[SIZE]], ptr [[MAPTYPES2]], ptr null, ptr null)
161
185
// CHECK: [[A_ADDR:%.+]] = load ptr, ptr [[BPTR1]],
162
186
// CHECK: store ptr [[A_ADDR]], ptr [[A_REF:%.+]],
163
187
// CHECK: [[PTR_ADDR:%.+]] = load ptr, ptr [[BPTR2]],
@@ -166,7 +190,7 @@ int main() {
166
190
// CHECK: store ptr [[REF_PTR]], ptr [[REF_REF:%.+]],
167
191
// CHECK: [[PTR_ADDR:%.+]] = load ptr, ptr [[BPTR2]],
168
192
// CHECK: store ptr [[PTR_ADDR]], ptr [[PTR_REF2:%.+]],
169
- // CHECK: [[ARR_ADDR:%.+]] = load ptr, ptr [[BPTR4 ]],
193
+ // CHECK: [[ARR_ADDR:%.+]] = load ptr, ptr [[BPTR5 ]],
170
194
// CHECK: store ptr [[ARR_ADDR]], ptr [[ARR_REF:%.+]],
171
195
// CHECK: [[A_ADDR:%.+]] = load ptr, ptr [[A_REF]],
172
196
// CHECK: [[A:%.+]] = load i32, ptr [[A_ADDR]],
@@ -186,9 +210,9 @@ int main() {
186
210
// CHECK: [[VAL:%.+]] = load i32, ptr [[ARR0_ADDR]],
187
211
// CHECK: [[INC:%.+]] = add nsw i32 [[VAL]], 1
188
212
// CHECK: store i32 [[INC]], ptr [[ARR0_ADDR]],
189
- // CHECK: [[BPTR:%.+]] = getelementptr inbounds [5 x ptr], ptr [[BPTRS]], i32 0, i32 0
190
- // CHECK: [[PTR:%.+]] = getelementptr inbounds [5 x ptr], ptr [[PTRS]], i32 0, i32 0
191
- // CHECK: [[SIZE:%.+]] = getelementptr inbounds [5 x i64], ptr [[SIZES]], i32 0, i32 0
192
- // CHECK: call void @__tgt_target_data_end_mapper(ptr @{{.+}}, i64 -1, i32 5 , ptr [[BPTR]], ptr [[PTR]], ptr [[SIZE]], ptr [[MAPTYPES2]], ptr null, ptr null)
213
+ // CHECK: [[BPTR:%.+]] = getelementptr inbounds [6 x ptr], ptr [[BPTRS]], i32 0, i32 0
214
+ // CHECK: [[PTR:%.+]] = getelementptr inbounds [6 x ptr], ptr [[PTRS]], i32 0, i32 0
215
+ // CHECK: [[SIZE:%.+]] = getelementptr inbounds [6 x i64], ptr [[SIZES]], i32 0, i32 0
216
+ // CHECK: call void @__tgt_target_data_end_mapper(ptr @{{.+}}, i64 -1, i32 6 , ptr [[BPTR]], ptr [[PTR]], ptr [[SIZE]], ptr [[MAPTYPES2]], ptr null, ptr null)
193
217
194
218
#endif
0 commit comments