@@ -171,3 +171,90 @@ func.func @_QFPtest3(%arg0: !fir.ref<!fir.box<!fir.ptr<f32>>> {fir.bindc_name =
171
171
%13 = fir.box_addr %6 {test.ptr = "box.addr"} : (!fir.box<!fir.ptr<f32>>) -> !fir.ptr<f32>
172
172
return
173
173
}
174
+
175
+ // -----
176
+
177
+ // CHECK-LABEL: Testing : "_QFPtest4"
178
+
179
+ // Same as test3 but check that the alias analysis can follow (hl)fir.declare
180
+ // operations
181
+
182
+ // CHECK-DAG: p#0 <-> func.region0#0: MayAlias
183
+ // CHECK-DAG: p_fir#0 <-> func.region0#0: MayAlias
184
+ // CHECK-DAG: p_hlfir#0 <-> func.region0#0: MayAlias
185
+ // CHECK-DAG: p_hlfir#1 <-> func.region0#0: MayAlias
186
+
187
+ // CHECK-DAG: p#0 <-> func.region0#1: NoAlias
188
+ // CHECK-DAG: p_fir#0 <-> func.region0#1: NoAlias
189
+ // CHECK-DAG: p_hlfir#0 <-> func.region0#1: NoAlias
190
+ // CHECK-DAG: p_hlfir#1 <-> func.region0#1: NoAlias
191
+
192
+ // CHECK-DAG: var2#0 <-> p#0: NoAlias
193
+ // CHECK-DAG: var2#0 <-> p_fir#0: NoAlias
194
+ // CHECK-DAG: var2#0 <-> p_hlfir#0: NoAlias
195
+ // CHECK-DAG: var2#0 <-> p_hlfir#1: NoAlias
196
+ // CHECK-DAG: var2_fir#0 <-> p#0: NoAlias
197
+ // CHECK-DAG: var2_fir#0 <-> p_fir#0: NoAlias
198
+ // CHECK-DAG: var2_fir#0 <-> p_hlfir#0: NoAlias
199
+ // CHECK-DAG: var2_fir#0 <-> p_hlfir#1: NoAlias
200
+ // CHECK-DAG: var2_hlfir#0 <-> p#0: NoAlias
201
+ // CHECK-DAG: var2_hlfir#0 <-> p_fir#0: NoAlias
202
+ // CHECK-DAG: var2_hlfir#0 <-> p_hlfir#0: NoAlias
203
+ // CHECK-DAG: var2_hlfir#0 <-> p_hlfir#1: NoAlias
204
+ // CHECK-DAG: var2_hlfir#1 <-> p#0: NoAlias
205
+ // CHECK-DAG: var2_hlfir#1 <-> p_fir#0: NoAlias
206
+ // CHECK-DAG: var2_hlfir#1 <-> p_hlfir#0: NoAlias
207
+ // CHECK-DAG: var2_hlfir#1 <-> p_hlfir#1: NoAlias
208
+
209
+ // CHECK-DAG: var2#0 <-> func.region0#0: MayAlias
210
+ // CHECK-DAG: var2_fir#0 <-> func.region0#0: MayAlias
211
+ // CHECK-DAG: var2_hlfir#0 <-> func.region0#0: MayAlias
212
+ // CHECK-DAG: var2_hlfir#1 <-> func.region0#0: MayAlias
213
+
214
+ // CHECK-DAG: var2#0 <-> box.addr#0: MustAlias
215
+ // CHECK-DAG: var2#0 <-> box.addr_fir#0: MustAlias
216
+ // CHECK-DAG: var2#0 <-> box.addr_hlfir#0: MustAlias
217
+ // CHECK-DAG: var2#0 <-> box.addr_hlfir#1: MustAlias
218
+ // CHECK-DAG: var2_fir#0 <-> box.addr#0: MustAlias
219
+ // CHECK-DAG: var2_fir#0 <-> box.addr_fir#0: MustAlias
220
+ // CHECK-DAG: var2_fir#0 <-> box.addr_hlfir#0: MustAlias
221
+ // CHECK-DAG: var2_fir#0 <-> box.addr_hlfir#1: MustAlias
222
+ // CHECK-DAG: var2_hlfir#0 <-> box.addr#0: MustAlias
223
+ // CHECK-DAG: var2_hlfir#0 <-> box.addr_fir#0: MustAlias
224
+ // CHECK-DAG: var2_hlfir#0 <-> box.addr_hlfir#0: MustAlias
225
+ // CHECK-DAG: var2_hlfir#0 <-> box.addr_hlfir#1: MustAlias
226
+ // CHECK-DAG: var2_hlfir#1 <-> box.addr#0: MustAlias
227
+ // CHECK-DAG: var2_hlfir#1 <-> box.addr_fir#0: MustAlias
228
+ // CHECK-DAG: var2_hlfir#1 <-> box.addr_hlfir#0: MustAlias
229
+ // CHECK-DAG: var2_hlfir#1 <-> box.addr_hlfir#1: MustAlias
230
+
231
+ // CHECK-DAG: var2#0 <-> func.region0#1: NoAlias
232
+ // CHECK-DAG: var2_fir#0 <-> func.region0#1: NoAlias
233
+ // CHECK-DAG: var2_hlfir#0 <-> func.region0#1: NoAlias
234
+ // CHECK-DAG: var2_hlfir#1 <-> func.region0#1: NoAlias
235
+
236
+ // CHECK-DAG: func.region0#0 <-> func.region0#1: NoAlias
237
+
238
+ fir.global @_QMpointersEp : !fir.box<!fir.ptr<f32>> {
239
+ %0 = fir.zero_bits !fir.ptr<f32>
240
+ %1 = fir.embox %0 : (!fir.ptr<f32>) -> !fir.box<!fir.ptr<f32>>
241
+ fir.has_value %1 : !fir.box<!fir.ptr<f32>>
242
+ }
243
+
244
+ fir.global internal @_QFEvar2 target : f32 {
245
+ %cst = arith.constant 2.000000e+00 : f32
246
+ fir.has_value %cst : f32
247
+ }
248
+
249
+ func.func @_QFPtest4(%arg0: !fir.ref<!fir.box<!fir.ptr<f32>>> {fir.bindc_name = "p1"}, %arg1: !fir.ref<f32>) attributes {test.ptr = "func"} {
250
+ %4 = fir.address_of(@_QFEvar2) {test.ptr = "var2"} : !fir.ref<f32>
251
+ %fir_decl_var2 = fir.declare %4 {uniq_name = "var2_fir", test.ptr = "var2_fir"}: (!fir.ref<f32>) -> !fir.ref<f32>
252
+ %hlfir_decl_var2:2 = hlfir.declare %4 {uniq_name = "var2_hlfir", test.ptr = "var2_hlfir"}: (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)
253
+ %5 = fir.address_of(@_QMpointersEp) {test.ptr = "p"} : !fir.ref<!fir.box<!fir.ptr<f32>>>
254
+ %fir_decl_p = fir.declare %5 {uniq_name = "p_fir", test.ptr = "p_fir"}: (!fir.ref<!fir.box<!fir.ptr<f32>>>) -> !fir.ref<!fir.box<!fir.ptr<f32>>>
255
+ %hlfir_decl_p:2 = hlfir.declare %5 {uniq_name = "p_hlfir", test.ptr = "p_hlfir"}: (!fir.ref<!fir.box<!fir.ptr<f32>>>) -> (!fir.ref<!fir.box<!fir.ptr<f32>>>, !fir.ref<!fir.box<!fir.ptr<f32>>>)
256
+ %13 = fir.convert %4 {test.ptr = "box.addr"} : (!fir.ref<f32>) -> !fir.ptr<f32>
257
+ %fir_decl_convert = fir.declare %13 {uniq_name = "box_addr_fir", test.ptr = "box.addr_fir"}: (!fir.ptr<f32>) -> !fir.ptr<f32>
258
+ %hlfir_decl_convert:2 = hlfir.declare %13 {uniq_name = "box_addr_hlfir", test.ptr = "box.addr_hlfir"}: (!fir.ptr<f32>) -> (!fir.ptr<f32>, !fir.ptr<f32>)
259
+ return
260
+ }
0 commit comments