[LLVM] Fix Maintainers.md formatting (NFC)
[llvm-project.git] / flang / test / Analysis / AliasAnalysis / alias-analysis-7.fir
blobfdf2fc4353bbb9012e1c332e9ac6af43be0af95d
1 // RUN: fir-opt %s -pass-pipeline='builtin.module(func.func(test-fir-alias-analysis))' 2>&1 | FileCheck %s
3 // leslie3d case with two allocatable module variables
4 // that cannot alias:
5 // module les3d_data
6 //   implicit real*8 (a-h,o-z)
7 //   integer imax, jmax, kmax
8 //   double precision,allocatable,dimension(:,:,:,:,:) :: q
9 //   double precision,allocatable,dimension(:,:,:,:) :: du
10 // end module les3d_data
11 // subroutine update()
12 //   use les3d_data
13 //   implicit real*8(a-h,o-z)
14 //   i2 = imax - 1
15 //   do k = 1, kmax - 1
16 //      do j = 1, jmax - 1
17 //         q(1:i2,j,k,1,m) = (q(1:i2,j,k,1,m) + du(1:i2,j,k,1))
18 //      end do
19 //   end do
20 // end subroutine update
22 // CHECK: allocatable_mod1#0 <-> allocatable_mod2#0: NoAlias
23 func.func @_QPupdate() {
24   %c1 = arith.constant 1 : index
25   %c0 = arith.constant 0 : index
26   %c1_i32 = arith.constant 1 : i32
27   %0 = fir.address_of(@_QMles3d_dataEdu) : !fir.ref<!fir.box<!fir.heap<!fir.array<?x?x?x?xf64>>>>
28   %1:2 = hlfir.declare %0 {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QMles3d_dataEdu"} : (!fir.ref<!fir.box<!fir.heap<!fir.array<?x?x?x?xf64>>>>) -> (!fir.ref<!fir.box<!fir.heap<!fir.array<?x?x?x?xf64>>>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?x?x?x?xf64>>>>)
29   %2 = fir.alloca i32 {bindc_name = "i2", uniq_name = "_QFupdateEi2"}
30   %3:2 = hlfir.declare %2 {uniq_name = "_QFupdateEi2"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
31   %4 = fir.address_of(@_QMles3d_dataEimax) : !fir.ref<i32>
32   %5:2 = hlfir.declare %4 {uniq_name = "_QMles3d_dataEimax"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
33   %6 = fir.alloca i32 {bindc_name = "j", uniq_name = "_QFupdateEj"}
34   %7:2 = hlfir.declare %6 {uniq_name = "_QFupdateEj"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
35   %8 = fir.address_of(@_QMles3d_dataEjmax) : !fir.ref<i32>
36   %9:2 = hlfir.declare %8 {uniq_name = "_QMles3d_dataEjmax"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
37   %10 = fir.alloca i32 {bindc_name = "k", uniq_name = "_QFupdateEk"}
38   %11:2 = hlfir.declare %10 {uniq_name = "_QFupdateEk"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
39   %12 = fir.address_of(@_QMles3d_dataEkmax) : !fir.ref<i32>
40   %13:2 = hlfir.declare %12 {uniq_name = "_QMles3d_dataEkmax"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
41   %14 = fir.alloca i32 {bindc_name = "m", uniq_name = "_QFupdateEm"}
42   %15:2 = hlfir.declare %14 {uniq_name = "_QFupdateEm"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
43   %16 = fir.address_of(@_QMles3d_dataEq) : !fir.ref<!fir.box<!fir.heap<!fir.array<?x?x?x?x?xf64>>>>
44   %17:2 = hlfir.declare %16 {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QMles3d_dataEq"} : (!fir.ref<!fir.box<!fir.heap<!fir.array<?x?x?x?x?xf64>>>>) -> (!fir.ref<!fir.box<!fir.heap<!fir.array<?x?x?x?x?xf64>>>>, !fir.ref<!fir.box<!fir.heap<!fir.array<?x?x?x?x?xf64>>>>)
45   %18 = fir.load %5#0 : !fir.ref<i32>
46   %19 = arith.subi %18, %c1_i32 : i32
47   hlfir.assign %19 to %3#0 : i32, !fir.ref<i32>
48   %20 = fir.load %13#0 : !fir.ref<i32>
49   %21 = arith.subi %20, %c1_i32 : i32
50   %22 = fir.convert %21 : (i32) -> index
51   %23 = fir.convert %c1 : (index) -> i32
52   %24:2 = fir.do_loop %arg0 = %c1 to %22 step %c1 iter_args(%arg1 = %23) -> (index, i32) {
53     fir.store %arg1 to %11#1 : !fir.ref<i32>
54     %25 = fir.load %9#0 : !fir.ref<i32>
55     %26 = arith.subi %25, %c1_i32 : i32
56     %27 = fir.convert %26 : (i32) -> index
57     %28:2 = fir.do_loop %arg2 = %c1 to %27 step %c1 iter_args(%arg3 = %23) -> (index, i32) {
58       fir.store %arg3 to %7#1 : !fir.ref<i32>
59       %32 = fir.load %17#0 : !fir.ref<!fir.box<!fir.heap<!fir.array<?x?x?x?x?xf64>>>>
60       %33 = fir.load %3#0 : !fir.ref<i32>
61       %34 = fir.convert %33 : (i32) -> index
62       %35 = arith.cmpi sgt, %34, %c0 : index
63       %36 = arith.select %35, %34, %c0 : index
64       %37 = fir.load %7#0 : !fir.ref<i32>
65       %38 = fir.convert %37 : (i32) -> i64
66       %39 = fir.load %11#0 : !fir.ref<i32>
67       %40 = fir.convert %39 : (i32) -> i64
68       %41 = fir.load %15#0 : !fir.ref<i32>
69       %42 = fir.convert %41 : (i32) -> i64
70       %43 = fir.shape %36 : (index) -> !fir.shape<1>
71       %44 = hlfir.designate %32 (%c1:%34:%c1, %38, %40, %c1, %42)  shape %43 {test.ptr = "allocatable_mod1"} : (!fir.box<!fir.heap<!fir.array<?x?x?x?x?xf64>>>, index, index, index, i64, i64, index, i64, !fir.shape<1>) -> !fir.box<!fir.array<?xf64>>
72       %45 = fir.load %1#0 : !fir.ref<!fir.box<!fir.heap<!fir.array<?x?x?x?xf64>>>>
73       %46 = hlfir.designate %45 (%c1:%34:%c1, %38, %40, %c1)  shape %43 {test.ptr = "allocatable_mod2"} : (!fir.box<!fir.heap<!fir.array<?x?x?x?xf64>>>, index, index, index, i64, i64, index, !fir.shape<1>) -> !fir.box<!fir.array<?xf64>>
74       %47 = hlfir.elemental %43 unordered : (!fir.shape<1>) -> !hlfir.expr<?xf64> {
75       ^bb0(%arg4: index):
76         %51 = hlfir.designate %44 (%arg4)  : (!fir.box<!fir.array<?xf64>>, index) -> !fir.ref<f64>
77         %52 = hlfir.designate %46 (%arg4)  : (!fir.box<!fir.array<?xf64>>, index) -> !fir.ref<f64>
78         %53 = fir.load %51 : !fir.ref<f64>
79         %54 = fir.load %52 : !fir.ref<f64>
80         %55 = arith.addf %53, %54 fastmath<fast> : f64
81         %56 = hlfir.no_reassoc %55 : f64
82         hlfir.yield_element %56 : f64
83       }
84       hlfir.assign %47 to %44 : !hlfir.expr<?xf64>, !fir.box<!fir.array<?xf64>>
85       hlfir.destroy %47 : !hlfir.expr<?xf64>
86       %48 = arith.addi %arg2, %c1 : index
87       %49 = fir.load %7#1 : !fir.ref<i32>
88       %50 = arith.addi %49, %23 : i32
89       fir.result %48, %50 : index, i32
90     }
91     fir.store %28#1 to %7#1 : !fir.ref<i32>
92     %29 = arith.addi %arg0, %c1 : index
93     %30 = fir.load %11#1 : !fir.ref<i32>
94     %31 = arith.addi %30, %23 : i32
95     fir.result %29, %31 : index, i32
96   }
97   fir.store %24#1 to %11#1 : !fir.ref<i32>
98   return