@@ -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
338338int 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
485487int 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
0 commit comments