@@ -45,11 +45,11 @@ struct ST {
45
45
// CK31A-USE: [[MTYPE00:@.+]] = private {{.*}}constant [7 x i64] [i64 [[#0x1020]],
46
46
// CK31A-NOUSE: [[MTYPE00:@.+]] = private {{.*}}constant [7 x i64] [i64 [[#0x1000]],
47
47
//
48
- // MEMBER_OF_1=0x1000000000000 | FROM=0x2 | TO=0x1 = 0x1000000000003
49
48
// MEMBER_OF_1=0x1000000000000 | PRESENT=0x1000 | FROM=0x2 | TO=0x1 = 0x1000000001003
49
+ // MEMBER_OF_1=0x1000000000000 | FROM=0x2 | TO=0x1 = 0x1000000000003
50
50
// PRESENT=0x1000 | TARGET_PARAM=0x20 | FROM=0x2 | TO=0x1 = 0x1023
51
- // CK31A-USE-SAME: {{^}} i64 [[#0x1000000000003 ]], i64 [[#0x1000000001003 ]], i64 [[#0x1023]],
52
- // CK31A-NOUSE-SAME: {{^}} i64 [[#0x1000000000003 ]], i64 [[#0x1000000001003 ]], i64 [[#0x1003]],
51
+ // CK31A-USE-SAME: {{^}} i64 [[#0x1000000001003 ]], i64 [[#0x1000000000003 ]], i64 [[#0x1023]],
52
+ // CK31A-NOUSE-SAME: {{^}} i64 [[#0x1000000001003 ]], i64 [[#0x1000000000003 ]], i64 [[#0x1003]],
53
53
//
54
54
// PRESENT=0x1000 | TARGET_PARAM=0x20 = 0x1020
55
55
// MEMBER_OF_5=0x5000000000000 | PRESENT=0x1000 | FROM=0x2 | TO=0x1 = 0x5000000001003
@@ -77,91 +77,94 @@ void explicit_maps_single (int ii){
77
77
struct ST st1;
78
78
struct ST st2;
79
79
80
- // Make sure the struct picks up present even if another element of the struct
81
- // doesn't have present.
82
- // Region 00
83
- // CK31A: [[ST1_I:%.+]] = getelementptr inbounds [[ST]], [[ST]]* [[ST1]], i{{.+}} 0, i{{.+}} 0
84
- // CK31A: [[ST1_J:%.+]] = getelementptr inbounds [[ST]], [[ST]]* [[ST1]], i{{.+}} 0, i{{.+}} 1
85
- // CK31A: [[ST2_I:%.+]] = getelementptr inbounds [[ST]], [[ST]]* [[ST2]], i{{.+}} 0, i{{.+}} 0
86
- // CK31A: [[ST2_J:%.+]] = getelementptr inbounds [[ST]], [[ST]]* [[ST2]], i{{.+}} 0, i{{.+}} 1
87
- // CK31A-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 7, i8** [[GEPBP:%[0-9]+]], i8** [[GEPP:%[0-9]+]], i64* [[GEPS:%.+]], i64* getelementptr {{.+}}[7 x i{{.+}}]* [[MTYPE00]]{{.+}})
88
- // CK31A-DAG: [[GEPS]] = getelementptr inbounds [7 x i64], [7 x i64]* [[S:%.+]], i{{.+}} 0, i{{.+}} 0
89
- // CK31A-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
90
- // CK31A-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
91
-
92
- // st1
93
- // CK31A-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
94
- // CK31A-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
95
- // CK31A-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
96
- // CK31A-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]**
97
- // CK31A-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32**
98
- // CK31A-DAG: store [[ST]]* [[ST1]], [[ST]]** [[CBP0]]
99
- // CK31A-DAG: store i32* [[ST1_I]], i32** [[CP0]]
100
- // CK31A-DAG: store i64 %{{.+}}, i64* [[S0]]
101
-
102
- // st1.i
103
- // CK31A-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
104
- // CK31A-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
105
- // CK31A-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
106
- // CK31A-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[ST]]**
107
- // CK31A-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32**
108
- // CK31A-DAG: store [[ST]]* [[ST1]], [[ST]]** [[CBP1]]
109
- // CK31A-DAG: store i32* [[ST1_I]], i32** [[CP1]]
110
- // CK31A-DAG: store i64 4, i64* [[S1]]
111
-
112
- // st1.j
113
- // CK31A-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
114
- // CK31A-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
115
- // CK31A-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
116
- // CK31A-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [[ST]]**
117
- // CK31A-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to i32**
118
- // CK31A-DAG: store [[ST]]* [[ST1]], [[ST]]** [[CBP2]]
119
- // CK31A-DAG: store i32* [[ST1_J]], i32** [[CP2]]
120
- // CK31A-DAG: store i64 4, i64* [[S2]]
121
-
122
- // a
123
- // CK31A-DAG: [[BP3:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 3
124
- // CK31A-DAG: [[P3:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 3
125
- // CK31A-DAG: [[S3:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 3
126
- // CK31A-DAG: [[CBP3:%.+]] = bitcast i8** [[BP3]] to i32**
127
- // CK31A-DAG: [[CP3:%.+]] = bitcast i8** [[P3]] to i32**
128
- // CK31A-DAG: store i32* [[A]], i32** [[CBP3]]
129
- // CK31A-DAG: store i32* [[A]], i32** [[CP3]]
130
- // CK31A-DAG: store i64 4, i64* [[S3]]
131
-
132
- // st2
133
- // CK31A-DAG: [[BP4:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 4
134
- // CK31A-DAG: [[P4:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 4
135
- // CK31A-DAG: [[S4:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 4
136
- // CK31A-DAG: [[CBP4:%.+]] = bitcast i8** [[BP4]] to [[ST]]**
137
- // CK31A-DAG: [[CP4:%.+]] = bitcast i8** [[P4]] to i32**
138
- // CK31A-DAG: store [[ST]]* [[ST2]], [[ST]]** [[CBP4]]
139
- // CK31A-DAG: store i32* [[ST2_I]], i32** [[CP4]]
140
- // CK31A-DAG: store i64 %{{.+}}, i64* [[S4]]
141
-
142
- // st2.i
143
- // CK31A-DAG: [[BP5:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 5
144
- // CK31A-DAG: [[P5:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 5
145
- // CK31A-DAG: [[S5:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 5
146
- // CK31A-DAG: [[CBP5:%.+]] = bitcast i8** [[BP5]] to [[ST]]**
147
- // CK31A-DAG: [[CP5:%.+]] = bitcast i8** [[P5]] to i32**
148
- // CK31A-DAG: store [[ST]]* [[ST2]], [[ST]]** [[CBP5]]
149
- // CK31A-DAG: store i32* [[ST2_I]], i32** [[CP5]]
150
- // CK31A-DAG: store i64 4, i64* [[S5]]
151
-
152
- // st2.j
153
- // CK31A-DAG: [[BP6:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 6
154
- // CK31A-DAG: [[P6:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 6
155
- // CK31A-DAG: [[S6:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 6
156
- // CK31A-DAG: [[CBP6:%.+]] = bitcast i8** [[BP6]] to [[ST]]**
157
- // CK31A-DAG: [[CP6:%.+]] = bitcast i8** [[P6]] to i32**
158
- // CK31A-DAG: store [[ST]]* [[ST2]], [[ST]]** [[CBP6]]
159
- // CK31A-DAG: store i32* [[ST2_J]], i32** [[CP6]]
160
- // CK31A-DAG: store i64 4, i64* [[S6]]
161
-
162
- // CK31A-USE: call void [[CALL00:@.+]]([[ST]]* [[ST1]], i32* [[A]], [[ST]]* [[ST2]])
163
- // CK31A-NOUSE: call void [[CALL00:@.+]]()
164
- #pragma omp target map(tofrom: st1.i) map(present, tofrom: a, st1.j, st2.i) map(tofrom: st2.j)
80
+ // Make sure the struct picks up present even if another element of the struct
81
+ // doesn't have present.
82
+ // Region 00
83
+ // CK31A: [[ST1_J:%.+]] = getelementptr inbounds [[ST]], [[ST]]* [[ST1]], i{{.+}} 0, i{{.+}} 1
84
+ // CK31A: [[ST1_I:%.+]] = getelementptr inbounds [[ST]], [[ST]]* [[ST1]], i{{.+}} 0, i{{.+}} 0
85
+ // CK31A: [[ST2_I:%.+]] = getelementptr inbounds [[ST]], [[ST]]* [[ST2]], i{{.+}} 0, i{{.+}} 0
86
+ // CK31A: [[ST2_J:%.+]] = getelementptr inbounds [[ST]], [[ST]]* [[ST2]], i{{.+}} 0, i{{.+}} 1
87
+ // CK31A-DAG: call i32 @__tgt_target_mapper(%struct.ident_t* @{{.+}}, i64 {{[^,]+}}, i8* {{[^,]+}}, i32 7, i8** [[GEPBP:%[0-9]+]], i8** [[GEPP:%[0-9]+]], i64* [[GEPS:%.+]], i64* getelementptr {{.+}}[7 x i{{.+}}]* [[MTYPE00]]{{.+}})
88
+ // CK31A-DAG: [[GEPS]] = getelementptr inbounds [7 x i64], [7 x i64]* [[S:%.+]], i{{.+}} 0, i{{.+}} 0
89
+ // CK31A-DAG: [[GEPBP]] = getelementptr inbounds {{.+}}[[BP:%[^,]+]]
90
+ // CK31A-DAG: [[GEPP]] = getelementptr inbounds {{.+}}[[P:%[^,]+]]
91
+
92
+ // st1
93
+ // CK31A-DAG: [[BP0:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 0
94
+ // CK31A-DAG: [[P0:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 0
95
+ // CK31A-DAG: [[S0:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 0
96
+ // CK31A-DAG: [[CBP0:%.+]] = bitcast i8** [[BP0]] to [[ST]]**
97
+ // CK31A-DAG: [[CP0:%.+]] = bitcast i8** [[P0]] to i32**
98
+ // CK31A-DAG: store [[ST]]* [[ST1]], [[ST]]** [[CBP0]]
99
+ // CK31A-DAG: store i32* [[ST1_I]], i32** [[CP0]]
100
+ // CK31A-DAG: store i64 %{{.+}}, i64* [[S0]]
101
+
102
+ // st1.j
103
+ // CK31A-DAG: [[BP1:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 1
104
+ // CK31A-DAG: [[P1:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 1
105
+ // CK31A-DAG: [[S1:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 1
106
+ // CK31A-DAG: [[CBP1:%.+]] = bitcast i8** [[BP1]] to [[ST]]**
107
+ // CK31A-DAG: [[CP1:%.+]] = bitcast i8** [[P1]] to i32**
108
+ // CK31A-DAG: store [[ST]]* [[ST1]], [[ST]]** [[CBP1]]
109
+ // CK31A-DAG: store i32* [[ST1_J]], i32** [[CP1]]
110
+ // CK31A-DAG: store i64 4, i64* [[S1]]
111
+
112
+ // st1.i
113
+ // CK31A-DAG: [[BP2:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 2
114
+ // CK31A-DAG: [[P2:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 2
115
+ // CK31A-DAG: [[S2:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 2
116
+ // CK31A-DAG: [[CBP2:%.+]] = bitcast i8** [[BP2]] to [[ST]]**
117
+ // CK31A-DAG: [[CP2:%.+]] = bitcast i8** [[P2]] to i32**
118
+ // CK31A-DAG: store [[ST]]* [[ST1]], [[ST]]** [[CBP2]]
119
+ // CK31A-DAG: store i32* [[ST1_I]], i32** [[CP2]]
120
+ // CK31A-DAG: store i64 4, i64* [[S2]]
121
+
122
+ // a
123
+ // CK31A-DAG: [[BP3:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 3
124
+ // CK31A-DAG: [[P3:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 3
125
+ // CK31A-DAG: [[S3:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 3
126
+ // CK31A-DAG: [[CBP3:%.+]] = bitcast i8** [[BP3]] to i32**
127
+ // CK31A-DAG: [[CP3:%.+]] = bitcast i8** [[P3]] to i32**
128
+ // CK31A-DAG: store i32* [[A]], i32** [[CBP3]]
129
+ // CK31A-DAG: store i32* [[A]], i32** [[CP3]]
130
+ // CK31A-DAG: store i64 4, i64* [[S3]]
131
+
132
+ // st2
133
+ // CK31A-DAG: [[BP4:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 4
134
+ // CK31A-DAG: [[P4:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 4
135
+ // CK31A-DAG: [[S4:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 4
136
+ // CK31A-DAG: [[CBP4:%.+]] = bitcast i8** [[BP4]] to [[ST]]**
137
+ // CK31A-DAG: [[CP4:%.+]] = bitcast i8** [[P4]] to i32**
138
+ // CK31A-DAG: store [[ST]]* [[ST2]], [[ST]]** [[CBP4]]
139
+ // CK31A-DAG: store i32* [[ST2_I]], i32** [[CP4]]
140
+ // CK31A-DAG: store i64 %{{.+}}, i64* [[S4]]
141
+
142
+ // st2.i
143
+ // CK31A-DAG: [[BP5:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 5
144
+ // CK31A-DAG: [[P5:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 5
145
+ // CK31A-DAG: [[S5:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 5
146
+ // CK31A-DAG: [[CBP5:%.+]] = bitcast i8** [[BP5]] to [[ST]]**
147
+ // CK31A-DAG: [[CP5:%.+]] = bitcast i8** [[P5]] to i32**
148
+ // CK31A-DAG: store [[ST]]* [[ST2]], [[ST]]** [[CBP5]]
149
+ // CK31A-DAG: store i32* [[ST2_I]], i32** [[CP5]]
150
+ // CK31A-DAG: store i64 4, i64* [[S5]]
151
+
152
+ // st2.j
153
+ // CK31A-DAG: [[BP6:%.+]] = getelementptr inbounds {{.+}}[[BP]], i{{.+}} 0, i{{.+}} 6
154
+ // CK31A-DAG: [[P6:%.+]] = getelementptr inbounds {{.+}}[[P]], i{{.+}} 0, i{{.+}} 6
155
+ // CK31A-DAG: [[S6:%.+]] = getelementptr inbounds {{.+}}[[S]], i{{.+}} 0, i{{.+}} 6
156
+ // CK31A-DAG: [[CBP6:%.+]] = bitcast i8** [[BP6]] to [[ST]]**
157
+ // CK31A-DAG: [[CP6:%.+]] = bitcast i8** [[P6]] to i32**
158
+ // CK31A-DAG: store [[ST]]* [[ST2]], [[ST]]** [[CBP6]]
159
+ // CK31A-DAG: store i32* [[ST2_J]], i32** [[CP6]]
160
+ // CK31A-DAG: store i64 4, i64* [[S6]]
161
+
162
+ // CK31A-USE: call void [[CALL00:@.+]]([[ST]]* [[ST1]], i32* [[A]], [[ST]]* [[ST2]])
163
+ // CK31A-NOUSE: call void [[CALL00:@.+]]()
164
+ #pragma omp target map(tofrom \
165
+ : st1.i ) map (present, tofrom \
166
+ : a, st1.j , st2.i ) map (tofrom \
167
+ : st2.j )
165
168
{
166
169
#ifdef USE
167
170
st1.i ++;
0 commit comments