@@ -243,20 +243,27 @@ void foo(int a){
243
243
C c;
244
244
c.a = a;
245
245
246
- // CK0-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null, i8** [[MPRGEP:%.+]])
247
- // CK0-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0
248
- // CK0-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0
249
- // CK0-DAG: [[MPRGEP]] = bitcast [1 x i8*]* [[MPR:%[^,]+]] to i8**
250
- // CK0-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0
251
- // CK0-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0
252
- // CK0-DAG: [[MPR1:%.+]] = getelementptr inbounds {{.+}}[[MPR]], i[[sz]] 0, i[[sz]] 0
253
- // CK0-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to %class.C**
254
- // CK0-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to %class.C**
255
- // CK0-DAG: store %class.C* [[VAL:%[^,]+]], %class.C** [[CBP1]]
256
- // CK0-DAG: store %class.C* [[VAL]], %class.C** [[CP1]]
257
- // CK0-DAG: store i8* bitcast (void (i8*, i8*, i8*, i64, i64, i8*)* [[MPRFUNC]] to i8*), i8** [[MPR1]]
258
- // CK0: call void [[KERNEL_1:@.+]](%class.C* [[VAL]])
259
- #pragma omp target map(mapper(id),tofrom: c)
246
+ // CK0-DAG: call i32 @__tgt_target_kernel(%struct.ident_t* @{{.+}}, i64 -1, i32 -1, i32 0, i8* @.{{.+}}.region_id, %struct.__tgt_kernel_arguments* [[ARGS:%.+]])
247
+ // CK0-DAG: [[BPARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 2
248
+ // CK0-DAG: store i8** [[BPGEP:%.+]], i8*** [[BPARG]]
249
+ // CK0-DAG: [[PARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 3
250
+ // CK0-DAG: store i8** [[PGEP:%.+]], i8*** [[PARG]]
251
+ // CK0-DAG: [[MARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 7
252
+ // CK0-DAG: store i8** [[MPRGEP:%.+]], i8*** [[MARG]]
253
+ // CK0-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0
254
+ // CK0-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0
255
+ // CK0-DAG: [[MPRGEP]] = bitcast [1 x i8*]* [[MPR:%[^,]+]] to i8**
256
+ // CK0-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0
257
+ // CK0-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0
258
+ // CK0-DAG: [[MPR1:%.+]] = getelementptr inbounds {{.+}}[[MPR]], i[[sz]] 0, i[[sz]] 0
259
+ // CK0-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to %class.C**
260
+ // CK0-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to %class.C**
261
+ // CK0-DAG: store %class.C* [[VAL:%[^,]+]], %class.C** [[CBP1]]
262
+ // CK0-DAG: store %class.C* [[VAL]], %class.C** [[CP1]]
263
+ // CK0-DAG: store i8* bitcast (void (i8*, i8*, i8*, i64, i64, i8*)* [[MPRFUNC]] to i8*), i8** [[MPR1]]
264
+ // CK0: call void [[KERNEL_1:@.+]](%class.C* [[VAL]])
265
+ #pragma omp target map(mapper(id), tofrom \
266
+ : c)
260
267
{
261
268
++c.a ;
262
269
}
@@ -282,20 +289,27 @@ void foo(int a){
282
289
++c.a ;
283
290
}
284
291
285
- // CK0-DAG: call i32 @__tgt_target_teams_mapper(%struct.ident_t* @{{.+}}, i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[TEAMSIZES]]{{.+}}, {{.+}}[[TEAMTYPES]]{{.+}}, i8** null, i8** [[MPRGEP:%.+]], i32 0, i32 0)
286
- // CK0-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0
287
- // CK0-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0
288
- // CK0-DAG: [[MPRGEP]] = bitcast [1 x i8*]* [[MPR:%[^,]+]] to i8**
289
- // CK0-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0
290
- // CK0-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0
291
- // CK0-DAG: [[MPR1:%.+]] = getelementptr inbounds {{.+}}[[MPR]], i[[sz]] 0, i[[sz]] 0
292
- // CK0-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to %class.C**
293
- // CK0-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to %class.C**
294
- // CK0-DAG: store %class.C* [[VAL:%[^,]+]], %class.C** [[CBP1]]
295
- // CK0-DAG: store %class.C* [[VAL]], %class.C** [[CP1]]
296
- // CK0-DAG: store i8* bitcast (void (i8*, i8*, i8*, i64, i64, i8*)* [[MPRFUNC]] to i8*), i8** [[MPR1]]
297
- // CK0: call void [[KERNEL_3:@.+]](%class.C* [[VAL]])
298
- #pragma omp target teams map(mapper(id),to: c)
292
+ // CK0-DAG: call i32 @__tgt_target_kernel(%struct.ident_t* @{{.+}}, i64 -1, i32 0, i32 0, i8* @.{{.+}}.region_id, %struct.__tgt_kernel_arguments* [[ARGS:%.+]])
293
+ // CK0-DAG: [[BPARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 2
294
+ // CK0-DAG: store i8** [[BPGEP:%.+]], i8*** [[BPARG]]
295
+ // CK0-DAG: [[PARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 3
296
+ // CK0-DAG: store i8** [[PGEP:%.+]], i8*** [[PARG]]
297
+ // CK0-DAG: [[MARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 7
298
+ // CK0-DAG: store i8** [[MPRGEP:%.+]], i8*** [[MARG]]
299
+ // CK0-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0
300
+ // CK0-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0
301
+ // CK0-DAG: [[MPRGEP]] = bitcast [1 x i8*]* [[MPR:%[^,]+]] to i8**
302
+ // CK0-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0
303
+ // CK0-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0
304
+ // CK0-DAG: [[MPR1:%.+]] = getelementptr inbounds {{.+}}[[MPR]], i[[sz]] 0, i[[sz]] 0
305
+ // CK0-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to %class.C**
306
+ // CK0-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to %class.C**
307
+ // CK0-DAG: store %class.C* [[VAL:%[^,]+]], %class.C** [[CBP1]]
308
+ // CK0-DAG: store %class.C* [[VAL]], %class.C** [[CP1]]
309
+ // CK0-DAG: store i8* bitcast (void (i8*, i8*, i8*, i64, i64, i8*)* [[MPRFUNC]] to i8*), i8** [[MPR1]]
310
+ // CK0: call void [[KERNEL_3:@.+]](%class.C* [[VAL]])
311
+ #pragma omp target teams map(mapper(id), to \
312
+ : c)
299
313
{
300
314
++c.a ;
301
315
}
@@ -493,7 +507,15 @@ void foo(int a){
493
507
// CK0: }
494
508
495
509
// CK0: define internal void [[OUTLINED:@.+]](i32 {{.*}}{{[^,]+}}, [[ANON_T]]* noalias noundef [[CTXARG:%.+]])
496
- // CK0-DAG: call i32 @__tgt_target_nowait_mapper(%struct.ident_t* @{{.+}}, i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZEGEP:%[0-9]+]], {{.+}}[[NWTYPES]]{{.+}}, i8** null, i8** [[MPRGEP:%.+]], i32 0, i8* null, i32 0, i8* null)
510
+ // CK0-DAG: call i32 @__tgt_target_kernel_nowait(%struct.ident_t* @{{.+}}, i64 -1, i32 -1, i32 0, i8* @.{{.+}}.region_id, %struct.__tgt_kernel_arguments* [[ARGS:%.+]], i32 0, i8* null, i32 0, i8* null)
511
+ // CK0-DAG: [[BPARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 2
512
+ // CK0-DAG: store i8** [[BPGEP:%.+]], i8*** [[BPARG]]
513
+ // CK0-DAG: [[PARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 3
514
+ // CK0-DAG: store i8** [[PGEP:%.+]], i8*** [[PARG]]
515
+ // CK0-DAG: [[SARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 4
516
+ // CK0-DAG: store i64* [[SIZEGEP:%.+]], i64** [[SARG]]
517
+ // CK0-DAG: [[MARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 7
518
+ // CK0-DAG: store i8** [[MPRGEP:%.+]], i8*** [[MARG]]
497
519
// CK0-DAG: [[BPGEP]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[BPFPADDR:%.+]], i[[SZ]] 0, i[[SZ]] 0
498
520
// CK0-DAG: [[PGEP]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[PFPADDR:%.+]], i[[SZ]] 0, i[[SZ]] 0
499
521
// CK0-DAG: [[SIZEGEP]] = getelementptr inbounds [1 x i64], [1 x i64]* [[SIZEFPADDR:%.+]], i[[SZ]] 0, i[[SZ]] 0
@@ -525,7 +547,15 @@ void foo(int a){
525
547
// CK0: }
526
548
527
549
// CK0: define internal void [[OUTLINE_1:@.+]](i32 {{.*}}%.global_tid.{{.+}}, [[ANON_T_0]]* noalias noundef [[CTXARG:%.+]])
528
- // CK0-DAG: call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @{{.+}}, i64 {{.+}}, i8* {{.+}}, i32 1, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], i64* [[SIZEGEP:%[0-9]+]], {{.+}}[[TEAMNWTYPES]]{{.+}}, i8** null, i8** [[MPRGEP:%.+]], i32 0, i32 0, i32 0, i8* null, i32 0, i8* null)
550
+ // CK0-DAG: call i32 @__tgt_target_kernel_nowait(%struct.ident_t* @{{.+}}, i64 -1, i32 0, i32 0, i8* @.{{.+}}.region_id, %struct.__tgt_kernel_arguments* [[ARGS:%.+]], i32 0, i8* null, i32 0, i8* null)
551
+ // CK0-DAG: [[BPARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 2
552
+ // CK0-DAG: store i8** [[BPGEP:%.+]], i8*** [[BPARG]]
553
+ // CK0-DAG: [[PARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 3
554
+ // CK0-DAG: store i8** [[PGEP:%.+]], i8*** [[PARG]]
555
+ // CK0-DAG: [[SARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 4
556
+ // CK0-DAG: store i64* [[SIZEGEP:%.+]], i64** [[SARG]]
557
+ // CK0-DAG: [[MARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 7
558
+ // CK0-DAG: store i8** [[MPRGEP:%.+]], i8*** [[MARG]]
529
559
// CK0-DAG: [[BPGEP]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[BPFPADDR:%.+]], i[[SZ]] 0, i[[SZ]] 0
530
560
// CK0-DAG: [[PGEP]] = getelementptr inbounds [1 x i8*], [1 x i8*]* [[PFPADDR:%.+]], i[[SZ]] 0, i[[SZ]] 0
531
561
// CK0-DAG: [[SIZEGEP]] = getelementptr inbounds [1 x i64], [1 x i64]* [[SIZEFPADDR:%.+]], i[[SZ]] 0, i[[SZ]] 0
@@ -902,29 +932,36 @@ void foo(int a){
902
932
903
933
// CK3-DAG: [[BC:%.+]] = getelementptr inbounds %class.B, %class.B* [[BVAL]], i32 0, i32 0
904
934
905
- // CK3-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{.+}}, i8* {{.+}}, i32 2, i8** [[BPGEP:%[0-9]+]], i8** [[PGEP:%[0-9]+]], {{.+}}[[SIZES]]{{.+}}, {{.+}}[[TYPES]]{{.+}}, i8** null, i8** [[MPRGEP:%.+]])
906
- // CK3-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0
907
- // CK3-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0
908
- // CK3-DAG: [[MPRGEP]] = bitcast [2 x i8*]* [[MPR:%[^,]+]] to i8**
909
- // CK3-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0
910
- // CK3-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0
911
- // CK3-DAG: [[MPR1:%.+]] = getelementptr inbounds {{.+}}[[MPR]], i{{64|32}} 0, i{{64|32}} 0
912
- // CK3-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to %class.B**
913
- // CK3-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to %class.C**
914
- // CK3-DAG: store %class.B* [[BVAL]], %class.B** [[CBP1]]
915
- // CK3-DAG: store %class.C* [[BC]], %class.C** [[CP1]]
916
- // CK3-DAG: store i8* bitcast (void (i8*, i8*, i8*, i64, i64, i8*)* [[MPRFUNC]] to i8*), i8** [[MPR1]]
917
- // CK3-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 1
918
- // CK3-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 1
919
- // CK3-DAG: [[MPR2:%.+]] = getelementptr inbounds {{.+}}[[MPR]], i{{64|32}} 0, i{{64|32}} 1
920
- // CK3-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [10 x %class.C]**
921
- // CK3-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to %class.C**
922
- // CK3-DAG: store [10 x %class.C]* [[CVAL]], [10 x %class.C]** [[CBP2]]
923
- // CK3-DAG: [[CVALGEP:%.+]] = getelementptr inbounds {{.+}}[[CVAL]], i{{64|32}} 0, i{{64|32}} 0
924
- // CK3-DAG: store %class.C* [[CVALGEP]], %class.C** [[CP2]]
925
- // CK3-DAG: store i8* bitcast (void (i8*, i8*, i8*, i64, i64, i8*)* [[MPRFUNC]] to i8*), i8** [[MPR2]]
926
- // CK3: call void [[KERNEL:@.+]](%class.B* [[BVAL]], [10 x %class.C]* [[CVAL]])
927
- #pragma omp target map(mapper(id),tofrom: c[0:10], b.c)
935
+ // CK3-DAG: call i32 @__tgt_target_kernel(%struct.ident_t* @{{.+}}, i64 -1, i32 -1, i32 0, i8* @.{{.+}}.region_id, %struct.__tgt_kernel_arguments* [[ARGS:%.+]])
936
+ // CK3-DAG: [[BPARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 2
937
+ // CK3-DAG: store i8** [[BPGEP:%.+]], i8*** [[BPARG]]
938
+ // CK3-DAG: [[PARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 3
939
+ // CK3-DAG: store i8** [[PGEP:%.+]], i8*** [[PARG]]
940
+ // CK3-DAG: [[MARG:%.+]] = getelementptr inbounds {{.+}}[[ARGS]], i32 0, i32 7
941
+ // CK3-DAG: store i8** [[MPRGEP:%.+]], i8*** [[MARG]]
942
+ // CK3-DAG: [[BPGEP]] = getelementptr inbounds {{.+}}[[BPS:%[^,]+]], i32 0, i32 0
943
+ // CK3-DAG: [[PGEP]] = getelementptr inbounds {{.+}}[[PS:%[^,]+]], i32 0, i32 0
944
+ // CK3-DAG: [[MPRGEP]] = bitcast [2 x i8*]* [[MPR:%[^,]+]] to i8**
945
+ // CK3-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 0
946
+ // CK3-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 0
947
+ // CK3-DAG: [[MPR1:%.+]] = getelementptr inbounds {{.+}}[[MPR]], i{{64|32}} 0, i{{64|32}} 0
948
+ // CK3-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to %class.B**
949
+ // CK3-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to %class.C**
950
+ // CK3-DAG: store %class.B* [[BVAL]], %class.B** [[CBP1]]
951
+ // CK3-DAG: store %class.C* [[BC]], %class.C** [[CP1]]
952
+ // CK3-DAG: store i8* bitcast (void (i8*, i8*, i8*, i64, i64, i8*)* [[MPRFUNC]] to i8*), i8** [[MPR1]]
953
+ // CK3-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BPS]], i32 0, i32 1
954
+ // CK3-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[PS]], i32 0, i32 1
955
+ // CK3-DAG: [[MPR2:%.+]] = getelementptr inbounds {{.+}}[[MPR]], i{{64|32}} 0, i{{64|32}} 1
956
+ // CK3-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [10 x %class.C]**
957
+ // CK3-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to %class.C**
958
+ // CK3-DAG: store [10 x %class.C]* [[CVAL]], [10 x %class.C]** [[CBP2]]
959
+ // CK3-DAG: [[CVALGEP:%.+]] = getelementptr inbounds {{.+}}[[CVAL]], i{{64|32}} 0, i{{64|32}} 0
960
+ // CK3-DAG: store %class.C* [[CVALGEP]], %class.C** [[CP2]]
961
+ // CK3-DAG: store i8* bitcast (void (i8*, i8*, i8*, i64, i64, i8*)* [[MPRFUNC]] to i8*), i8** [[MPR2]]
962
+ // CK3: call void [[KERNEL:@.+]](%class.B* [[BVAL]], [10 x %class.C]* [[CVAL]])
963
+ #pragma omp target map(mapper(id), tofrom \
964
+ : c [0 :10 ], b.c )
928
965
for (int i = 0 ; i < 10 ; i++) {
929
966
b.c .a += ++c[i].a ;
930
967
}
0 commit comments