Skip to content

Commit 9b1336c

Browse files
committed
Fix member-of field update, update some more tests.
1 parent 502dbb4 commit 9b1336c

11 files changed

+822
-709
lines changed

clang/lib/CodeGen/CGOpenMPRuntime.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9113,7 +9113,8 @@ class MappableExprsHandler {
91139113
emitCombinedEntry(
91149114
CurInfo, AttachCombinedInfo, GroupCurInfo.Types, PartialStruct,
91159115
/*IsMapThis*/ !VD, OMPBuilder, VD,
9116-
/*OffsetForMemberOfFlag=*/0, /*NotTargetParam=*/true);
9116+
/*OffsetForMemberOfFlag=*/CombinedInfo.BasePointers.size(),
9117+
/*NotTargetParam=*/true);
91179118
}
91189119

91199120
// Append this group's results to the overall CurInfo in the correct

clang/test/OpenMP/map_struct_ordering.cpp

Lines changed: 89 additions & 85 deletions
Large diffs are not rendered by default.

clang/test/OpenMP/target_enter_data_codegen.cpp

Lines changed: 41 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ double gc[100];
4444

4545
// CK1: [[MTYPE03:@.+]] = {{.+}}constant [1 x i64] [i64 5]
4646

47-
// CK1: [[SIZE04:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 24]
48-
// CK1: [[MTYPE04:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710673]
47+
// CK1: [[SIZE04:@.+]] = {{.+}}constant [2 x i64] [i64 24, i64 {{4|8}}]
48+
// CK1: [[MTYPE04:@.+]] = {{.+}}constant [2 x i64] [i64 1, i64 [[#0x4000]]]
4949

5050
// CK1: [[MTYPE05:@.+]] = {{.+}}constant [1 x i64] [i64 1025]
5151

@@ -134,26 +134,26 @@ void foo(int arg) {
134134
{++arg;}
135135

136136
// Region 04
137-
// CK1-DAG: call void @__tgt_target_data_begin_mapper(ptr @{{.+}}, i64 -1, i32 2, ptr [[GEPBP:%.+]], ptr [[GEPP:%.+]], ptr [[GEPS:%.+]], ptr [[MTYPE04]]{{.+}}, ptr null)
137+
138+
// &gb.b[0], &gb.b[0], 3 * sizeof(gb.b[0]), TO
139+
// &gb.b, &gb.b[0], sizeof(void*), ATTACH
140+
141+
// CK1-DAG: call void @__tgt_target_data_begin_mapper(ptr @{{.+}}, i64 -1, i32 2, ptr [[GEPBP:%.+]], ptr [[GEPP:%.+]], ptr [[SIZE04]], ptr [[MTYPE04]]{{.*}}, ptr null)
138142
// CK1-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
139143
// CK1-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
140-
// CK1-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]]
141144

142145
// CK1-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
143146
// CK1-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
144-
// CK1-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i{{.+}} 0, i{{.+}} 0
145-
// CK1-DAG: store ptr @gb, ptr [[BP0]]
146-
// CK1-DAG: store ptr getelementptr inbounds nuw ([[ST]], ptr @gb, i32 0, i32 1), ptr [[P0]]
147-
// CK1-DAG: [[DIV:%.+]] = sdiv exact i64 sub (i64 ptrtoint (ptr getelementptr (ptr, ptr getelementptr inbounds nuw (%struct.ST, ptr @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (ptr getelementptr inbounds nuw (%struct.ST, ptr @gb, i32 0, i32 1) to i64)), ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
148-
// CK1-DAG: store i64 [[DIV]], ptr [[S0]],
149-
147+
// CK1-DAG: store ptr [[VAR0:%.+]], ptr [[BP0]]
148+
// CK1-DAG: store ptr [[SEC0:%.+]], ptr [[P0]]
149+
// CK1-DAG: [[VAR0]] = load ptr, ptr getelementptr inbounds nuw ([[ST]], ptr @gb, i{{.*}} 0, i{{.*}} 1)
150+
// CK1-DAG: [[SEC0]] = getelementptr inbounds nuw double, ptr [[SEC00:%.+]], i{{.*}} 0
151+
// CK1-DAG: [[SEC00]] = load ptr, ptr getelementptr inbounds nuw ([[ST]], ptr @gb, i{{.*}} 0, i{{.*}} 1)
150152

151153
// CK1-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
152154
// CK1-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
153155
// CK1-DAG: store ptr getelementptr inbounds nuw ([[ST]], ptr @gb, i32 0, i32 1), ptr [[BP1]]
154-
// CK1-DAG: store ptr [[SEC1:%.+]], ptr [[P1]]
155-
// CK1-DAG: [[SEC1]] = getelementptr inbounds {{.+}}ptr [[SEC11:%[^,]+]], i{{.+}} 0
156-
// CK1-DAG: [[SEC11]] = load ptr, ptr getelementptr inbounds nuw ([[ST]], ptr @gb, i32 0, i32 1),
156+
// CK1-DAG: store ptr [[SEC0]], ptr [[P1]]
157157

158158
// CK1: %{{.+}} = add nsw i32 %{{[^,]+}}, 1
159159
// CK1-NOT: __tgt_target_data_end
@@ -331,8 +331,8 @@ struct ST {
331331
}
332332
};
333333

334-
// CK2: [[SIZES:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 24]
335-
// CK2: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710677]
334+
// CK2: [[SIZES:@.+]] = {{.+}}constant [2 x i64] [i64 24, i64 {{4|8}}]
335+
// CK2: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 5, i64 [[#0x4000]]]
336336

337337
// CK2-LABEL: _Z3bari
338338
int bar(int arg){
@@ -341,30 +341,32 @@ int bar(int arg){
341341
}
342342

343343
// Region 00
344+
345+
// &b[0], &b[1], 3 * sizeof(b[0]), TO | ALWAYS
346+
// &b, &b[1], sizeof(void*), ATTACH
347+
344348
// CK2: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]]
345349
// CK2: [[IFTHEN]]
346-
// CK2-DAG: call void @__tgt_target_data_begin_mapper(ptr @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, ptr [[GEPBP:%.+]], ptr [[GEPP:%.+]], ptr [[GEPS:%.+]], ptr [[MTYPE00]]{{.+}}, ptr null)
350+
// CK2-DAG: call void @__tgt_target_data_begin_mapper(ptr @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, ptr [[GEPBP:%.+]], ptr [[GEPP:%.+]], ptr [[SIZES]], ptr [[MTYPE00]]{{.+}}, ptr null)
347351
// CK2-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64
348352
// CK2-DAG: [[DEVi32]] = load i32, ptr %{{[^,]+}},
349353
// CK2-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
350354
// CK2-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
351-
// CK2-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]]
352355

353356
// CK2-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
354357
// CK2-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
355-
// CK2-DAG: [[PS0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i{{.+}} 0, i{{.+}} 0
356358
// CK2-DAG: store ptr [[VAR0:%.+]], ptr [[BP0]]
357359
// CK2-DAG: store ptr [[SEC0:%.+]], ptr [[P0]]
358-
// CK2-DAG: store i64 {{%.+}}, ptr [[PS0]],
359-
// CK2-DAG: [[SEC0]] = getelementptr inbounds {{.*}}ptr [[VAR0]], i32 0, i32 1
360+
// CK2-DAG: [[VAR0]] = load ptr, ptr [[VAR00:%[^,]+]]
361+
// CK2-DAG: [[VAR00]] = getelementptr inbounds nuw [[ST]], ptr %{{.*}}, i32 0, i32 1
362+
// CK2-DAG: [[SEC0]] = getelementptr inbounds nuw double, ptr [[SEC00:%.+]], i{{.+}} 1
363+
// CK2-DAG: [[SEC00]] = load ptr, ptr [[SEC000:%[^,]+]]
364+
// CK2-DAG: [[SEC000]] = getelementptr inbounds nuw [[ST]], ptr %{{.*}}, i32 0, i32 1
360365

361366
// CK2-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
362367
// CK2-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
363-
// CK2-DAG: store ptr [[SEC0]], ptr [[BP1]]
364-
// CK2-DAG: store ptr [[SEC1:%.+]], ptr [[P1]]
365-
// CK2-DAG: [[SEC1]] = getelementptr inbounds {{.*}}ptr [[SEC11:%[^,]+]], i{{.+}} 1
366-
// CK2-DAG: [[SEC11]] = load ptr, ptr [[SEC111:%[^,]+]],
367-
// CK2-DAG: [[SEC111]] = getelementptr inbounds {{.*}}ptr [[VAR0]], i32 0, i32 1
368+
// CK2-DAG: store ptr [[VAR00]], ptr [[BP1]]
369+
// CK2-DAG: store ptr [[SEC0]], ptr [[P1]]
368370

369371
// CK2: br label %[[IFEND:[^,]+]]
370372

@@ -478,8 +480,8 @@ struct STT {
478480
}
479481
};
480482

481-
// CK5: [[SIZES:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 24]
482-
// CK5: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976711701]
483+
// CK5: [[SIZES:@.+]] = {{.+}}constant [2 x i64] [i64 24, i64 {{4|8}}]
484+
// CK5: [[MTYPE00:@.+]] = {{.+}}constant [2 x i64] [i64 [[#0x405]], i64 [[#0x4000]]]
483485

484486
// CK5-LABEL: _Z3bari
485487
int bar(int arg){
@@ -488,30 +490,32 @@ int bar(int arg){
488490
}
489491

490492
// Region 00
493+
494+
// &b[0], &b[1], 3 * sizeof(b[0]), TO | ALWAYS | CLOSE
495+
// &b, &b[1], sizeof(void*), ATTACH
496+
491497
// CK5: br i1 %{{[^,]+}}, label %[[IFTHEN:[^,]+]], label %[[IFELSE:[^,]+]]
492498
// CK5: [[IFTHEN]]
493-
// CK5-DAG: call void @__tgt_target_data_begin_mapper(ptr @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, ptr [[GEPBP:%.+]], ptr [[GEPP:%.+]], ptr [[GEPS:%.+]], ptr [[MTYPE00]]{{.+}}, ptr null)
499+
// CK5-DAG: call void @__tgt_target_data_begin_mapper(ptr @{{.+}}, i64 [[DEV:%[^,]+]], i32 2, ptr [[GEPBP:%.+]], ptr [[GEPP:%.+]], ptr [[SIZES]], ptr [[MTYPE00]]{{.+}}, ptr null)
494500
// CK5-DAG: [[DEV]] = sext i32 [[DEVi32:%[^,]+]] to i64
495501
// CK5-DAG: [[DEVi32]] = load i32, ptr %{{[^,]+}},
496502
// CK5-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
497503
// CK5-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
498-
// CK5-DAG: [[GEPS]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]]
499504

500505
// CK5-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
501506
// CK5-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
502-
// CK5-DAG: [[PS0:%.+]] = getelementptr inbounds {{.+}}[[PS]], i{{.+}} 0, i{{.+}} 0
503507
// CK5-DAG: store ptr [[VAR0:%.+]], ptr [[BP0]]
504508
// CK5-DAG: store ptr [[SEC0:%.+]], ptr [[P0]]
505-
// CK5-DAG: store i64 {{%.+}}, ptr [[PS0]],
506-
// CK5-DAG: [[SEC0]] = getelementptr inbounds {{.*}}ptr [[VAR0]], i32 0, i32 1
509+
// CK5-DAG: [[VAR0]] = load ptr, ptr [[VAR00:%[^,]+]]
510+
// CK5-DAG: [[VAR00]] = getelementptr inbounds nuw [[STT]], ptr %{{.*}}, i32 0, i32 1
511+
// CK5-DAG: [[SEC0]] = getelementptr inbounds nuw double, ptr [[SEC00:%.+]], i{{.+}} 1
512+
// CK5-DAG: [[SEC00]] = load ptr, ptr [[SEC000:%[^,]+]]
513+
// CK5-DAG: [[SEC000]] = getelementptr inbounds nuw [[STT]], ptr %{{.*}}, i32 0, i32 1
507514

508515
// CK5-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
509516
// CK5-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
510-
// CK5-DAG: store ptr [[SEC0]], ptr [[BP1]]
511-
// CK5-DAG: store ptr [[SEC1:%.+]], ptr [[P1]]
512-
// CK5-DAG: [[SEC1]] = getelementptr inbounds {{.*}}ptr [[SEC11:%[^,]+]], i{{.+}} 1
513-
// CK5-DAG: [[SEC11]] = load ptr, ptr [[SEC111:%[^,]+]],
514-
// CK5-DAG: [[SEC111]] = getelementptr inbounds {{.*}}ptr [[VAR0]], i32 0, i32 1
517+
// CK5-DAG: store ptr [[VAR00]], ptr [[BP1]]
518+
// CK5-DAG: store ptr [[SEC0]], ptr [[P1]]
515519

516520
// CK5: br label %[[IFEND:[^,]+]]
517521

clang/test/OpenMP/target_enter_data_depend_codegen.cpp

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ double gc[100];
3737

3838
// CK1: [[MTYPE03:@.+]] = {{.+}}constant [1 x i64] zeroinitializer
3939

40-
// CK1: [[SIZE04:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 24]
41-
// CK1: [[MTYPE04:@.+]] = {{.+}}constant [2 x i64] [i64 0, i64 281474976710673]
40+
// CK1: [[SIZE04:@.+]] = {{.+}}constant [2 x i64] [i64 24, i64 {{4|8}}]
41+
// CK1: [[MTYPE04:@.+]] = {{.+}}constant [2 x i64] [i64 1, i64 [[#0x4000]]]
4242

4343
// CK1-LABEL: _Z3fooi
4444
void foo(int arg) {
@@ -238,20 +238,23 @@ void foo(int arg) {
238238
{++arg;}
239239

240240
// Region 04
241-
// CK1: [[DIV:%.+]] = sdiv exact i64 sub (i64 ptrtoint (ptr getelementptr (ptr, ptr getelementptr inbounds nuw (%struct.ST, ptr @gb, i32 0, i32 1), i32 1) to i64), i64 ptrtoint (ptr getelementptr inbounds nuw (%struct.ST, ptr @gb, i32 0, i32 1) to i64)), ptrtoint (ptr getelementptr (i8, ptr null, i32 1) to i64)
241+
242+
// &gb.b[0], &gb.b[0], 3 * sizeof(gb.b[0]), TO
243+
// &gb.b, &gb.b[0], sizeof(void*), ATTACH
244+
245+
// CK1: [[B:%.+]] = load ptr, ptr getelementptr inbounds nuw (%struct.ST, ptr @gb, i32 0, i32 1)
246+
// CK1: [[B1:%.+]] = load ptr, ptr getelementptr inbounds nuw (%struct.ST, ptr @gb, i32 0, i32 1)
247+
// CK1: [[BGEP0:%.+]] = getelementptr inbounds nuw double, ptr [[B1]], i[[sz]] 0
242248
// CK1: [[BP0:%.+]] = getelementptr inbounds [2 x ptr], ptr [[BP:%.+]], i32 0, i32 0
243-
// CK1: store ptr @gb, ptr [[BP0]],
249+
// CK1: store ptr [[B]], ptr [[BP0]],
244250
// CK1: [[P0:%.+]] = getelementptr inbounds [2 x ptr], ptr [[P:%.+]], i32 0, i32 0
245-
// CK1: store ptr getelementptr inbounds nuw (%struct.ST, ptr @gb, i32 0, i32 1), ptr [[P0]],
246-
// CK1: [[PS0:%.+]] = getelementptr inbounds [2 x i64], ptr [[PS:%.+]], i32 0, i32 0
247-
// CK1: store i64 [[DIV]], ptr [[PS0]],
251+
// CK1: store ptr [[BGEP0]], ptr [[P0]],
248252
// CK1: [[BP1:%.+]] = getelementptr inbounds [2 x ptr], ptr [[BP]], i32 0, i32 1
249253
// CK1: store ptr getelementptr inbounds nuw (%struct.ST, ptr @gb, i32 0, i32 1), ptr [[BP1]],
250254
// CK1: [[P1:%.+]] = getelementptr inbounds [2 x ptr], ptr [[P]], i32 0, i32 1
251-
// CK1: store ptr %{{.+}}, ptr [[P1]],
255+
// CK1: store ptr [[BGEP0]], ptr [[P1]],
252256
// CK1: [[GEPBP0:%.+]] = getelementptr inbounds [2 x ptr], ptr [[BP]], i32 0, i32 0
253257
// CK1: [[GEPP0:%.+]] = getelementptr inbounds [2 x ptr], ptr [[P]], i32 0, i32 0
254-
// CK1: [[GEPS0:%.+]] = getelementptr inbounds [2 x i64], ptr [[PS]], i32 0, i32 0
255258
// CK1: [[RES:%.+]] = call ptr @__kmpc_omp_task_alloc(ptr {{.+}}, i32 {{.+}}, i32 1, i[[sz]] {{88|52}}, i[[sz]] 1, ptr [[TASK_ENTRY4:@.+]])
256259
// CK1: [[TASK_T:%.+]] = getelementptr inbounds nuw %struct.kmp_task_t_with_privates{{.+}}, ptr [[RES]], i32 0, i32 0
257260
// CK1: [[PRIVS:%.+]] = getelementptr inbounds nuw %struct.kmp_task_t_with_privates{{.+}}, ptr [[RES]], i32 0, i32 1
@@ -260,9 +263,9 @@ void foo(int arg) {
260263
// CK1-64: [[PRIVS_PTRS:%.+]] = getelementptr inbounds nuw %struct..kmp_privates.t{{.+}}, ptr [[PRIVS]], i32 0, i32 1
261264
// CK1-64: call void @llvm.memcpy.p0.p0.i[[sz]](ptr align {{8|4}} [[PRIVS_PTRS]], ptr align {{8|4}} [[GEPP0]], i[[sz]] {{16|8}}, i1 false)
262265
// CK1-64: [[PRIVS_SIZES:%.+]] = getelementptr inbounds nuw %struct..kmp_privates.t{{.+}}, ptr [[PRIVS]], i32 0, i32 2
263-
// CK1-64: call void @llvm.memcpy.p0.p0.i[[sz]](ptr align {{8|4}} [[PRIVS_SIZES]], ptr align {{8|4}} [[GEPS0]], i[[sz]] {{16|8}}, i1 false)
266+
// CK1-64: call void @llvm.memcpy.p0.p0.i[[sz]](ptr align {{8|4}} [[PRIVS_SIZES]], ptr align {{8|4}} [[SIZE04]], i[[sz]] {{16|8}}, i1 false)
264267
// CK1-32: [[PRIVS_SIZES:%.+]] = getelementptr inbounds nuw %struct..kmp_privates.t{{.+}}, ptr [[PRIVS]], i32 0, i32 0
265-
// CK1-32: call void @llvm.memcpy.p0.p0.i[[sz]](ptr align {{8|4}} [[PRIVS_SIZES]], ptr align {{8|4}} [[GEPS0]], i[[sz]] {{16|8}}, i1 false)
268+
// CK1-32: call void @llvm.memcpy.p0.p0.i[[sz]](ptr align {{8|4}} [[PRIVS_SIZES]], ptr align {{8|4}} [[SIZE04]], i[[sz]] {{16|8}}, i1 false)
266269
// CK1-32: [[PRIVS_BASEPTRS:%.+]] = getelementptr inbounds nuw %struct..kmp_privates.t{{.+}}, ptr [[PRIVS]], i32 0, i32 1
267270
// CK1-32: call void @llvm.memcpy.p0.p0.i[[sz]](ptr align {{8|4}} [[PRIVS_BASEPTRS]], ptr align {{8|4}} [[GEPBP0]], i[[sz]] {{16|8}}, i1 false)
268271
// CK1-32: [[PRIVS_PTRS:%.+]] = getelementptr inbounds nuw %struct..kmp_privates.t{{.+}}, ptr [[PRIVS]], i32 0, i32 2

0 commit comments

Comments
 (0)