diff --git a/flang/test/Analysis/AliasAnalysis/alias-analysis-9.fir b/flang/test/Analysis/AliasAnalysis/alias-analysis-9.fir index df24a6d32aa59..ae53113f15d33 100644 --- a/flang/test/Analysis/AliasAnalysis/alias-analysis-9.fir +++ b/flang/test/Analysis/AliasAnalysis/alias-analysis-9.fir @@ -1,5 +1,6 @@ -// RUN: fir-opt %s -pass-pipeline='builtin.module(func.func(test-fir-alias-analysis))' 2>&1 | FileCheck %s +// RUN: fir-opt %s -pass-pipeline='builtin.module(func.func(test-fir-alias-analysis))' -split-input-file 2>&1 | FileCheck %s +// ----- // module m // type t @@ -57,3 +58,54 @@ func.func @_QMmPfoo(%arg0: !fir.ref return } + +// ----- + +// Same test as above focusing on aliasing between x%next and y%next data +// CHECK-LABEL: Testing : "_QMmPfoo2" +// CHECK-DAG: xnext#0 <-> ynext#0: MayAlias + +func.func @_QMmPfoo2(%arg0: !fir.ref>>,i:i32}>> {fir.bindc_name = "x"}, %arg1: !fir.ref>>,i:i32}>> {fir.bindc_name = "y"}) { + %4:2 = hlfir.declare %arg0 {uniq_name = "_QMmFfooEx"} : (!fir.ref>>,i:i32}>>) -> (!fir.ref>>,i:i32}>>, !fir.ref>>,i:i32}>>) + %5:2 = hlfir.declare %arg1 {uniq_name = "_QMmFfooEy"} : (!fir.ref>>,i:i32}>>) -> (!fir.ref>>,i:i32}>>, !fir.ref>>,i:i32}>>) + %6 = hlfir.designate %4#0{"next"} {fortran_attrs = #fir.var_attrs} : (!fir.ref>>,i:i32}>>) -> !fir.ref>>,i:i32}>>>> + %7 = fir.load %6 : !fir.ref>>,i:i32}>>>> + %8 = fir.box_addr %7 {test.ptr = "xnext"} : (!fir.box>>,i:i32}>>>) -> !fir.ptr>>,i:i32}>> + + %9 = hlfir.designate %5#0{"next"} {fortran_attrs = #fir.var_attrs} : (!fir.ref>>,i:i32}>>) -> !fir.ref>>,i:i32}>>>> + %10 = fir.load %9 : !fir.ref>>,i:i32}>>>> + %11 = fir.box_addr %10 {test.ptr = "ynext"} : (!fir.box>>,i:i32}>>>) -> !fir.ptr>>,i:i32}>> + return +} + +// ----- + +// module m +// type ta +// integer, pointer :: array(:) +// end type +// contains +// subroutine foo3(x, y) +// type(t) :: x, y +// x%array(1) = y%array(1) +// end subroutine +// end module + +// CHECK-LABEL: Testing : "_QMmPfoo3" +// CHECK-DAG: yarray#0 <-> xarray#0: MayAlias + +func.func @_QMmPfoo3(%arg0: !fir.ref>>}>> {fir.bindc_name = "x"}, %arg1: !fir.ref>>}>> {fir.bindc_name = "y"}) { + %0:2 = hlfir.declare %arg0 {uniq_name = "_QMmFfooEx"} : (!fir.ref>>}>>) -> (!fir.ref>>}>>, !fir.ref>>}>>) + %1:2 = hlfir.declare %arg1 {uniq_name = "_QMmFfooEy"} : (!fir.ref>>}>>) -> (!fir.ref>>}>>, !fir.ref>>}>>) + %2 = hlfir.designate %1#0{"array"} {fortran_attrs = #fir.var_attrs} : (!fir.ref>>}>>) -> !fir.ref>>> + %3 = fir.load %2 : !fir.ref>>> + %c1 = arith.constant 1 : index + %4 = hlfir.designate %3 (%c1) {test.ptr = "yarray"} : (!fir.box>>, index) -> !fir.ref + %5 = fir.load %4 : !fir.ref + %6 = hlfir.designate %0#0{"array"} {fortran_attrs = #fir.var_attrs} : (!fir.ref>>}>>) -> !fir.ref>>> + %7 = fir.load %6 : !fir.ref>>> + %c1_0 = arith.constant 1 : index + %8 = hlfir.designate %7 (%c1_0) {test.ptr = "xarray"} : (!fir.box>>, index) -> !fir.ref + hlfir.assign %5 to %8 : i32, !fir.ref + return +}