brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 8e88b50 Raw
83 lines · plain
1// RUN: fir-opt %s -pass-pipeline='builtin.module(func.func(test-fir-alias-analysis))'  2>&1 | FileCheck %s2 3// The test was obtained from 4// bbc test.f90 -emit-fir5// module mod6//   real, pointer :: p07//   real, allocatable :: alloc8//   real, allocatable, target :: t_alloc9//   real, target :: t10//   real :: v11// end module12// 13// subroutine test(n)14//   use mod15//   integer :: n16//   real r117//   p0 => t_alloc18//   v = alloc19//   r1 = p020// end subroutine test21 22// Checking that aliasing can only happen with an entity with the target attribute23// 24// CHECK-DAG: r1#0 <-> t_alloc#0: NoAlias25// CHECK-DAG: r1#0 <-> alloc#0: NoAlias26// CHECK-DAG: t_alloc#0 <-> alloc#0: NoAlias27// CHECK-DAG: r1#0 <-> p0.ptr#0: NoAlias28// CHECK-DAG: t_alloc#0 <-> p0.ptr#0: MayAlias29// CHECK-DAG: alloc#0 <-> p0.ptr#0: NoAlias30 31fir.global @_QMmodEalloc : !fir.box<!fir.heap<f32>> {32  %0 = fir.zero_bits !fir.heap<f32>33  %1 = fir.embox %0 : (!fir.heap<f32>) -> !fir.box<!fir.heap<f32>>34  fir.has_value %1 : !fir.box<!fir.heap<f32>>35}36fir.global @_QMmodEp0 : !fir.box<!fir.ptr<f32>> {37  %0 = fir.zero_bits !fir.ptr<f32>38  %1 = fir.embox %0 : (!fir.ptr<f32>) -> !fir.box<!fir.ptr<f32>>39  fir.has_value %1 : !fir.box<!fir.ptr<f32>>40}41fir.global @_QMmodEt target : f32 {42  %0 = fir.zero_bits f3243  fir.has_value %0 : f3244}45fir.global @_QMmodEt_alloc target : !fir.box<!fir.heap<f32>> {46  %0 = fir.zero_bits !fir.heap<f32>47  %1 = fir.embox %0 : (!fir.heap<f32>) -> !fir.box<!fir.heap<f32>>48  fir.has_value %1 : !fir.box<!fir.heap<f32>>49}50fir.global @_QMmodEv : f32 {51  %0 = fir.zero_bits f3252  fir.has_value %0 : f3253}54func.func @_QPtest(%arg0: !fir.ref<i32> {fir.bindc_name = "n"}) {55  %0 = fir.dummy_scope : !fir.dscope56  %1 = fir.address_of(@_QMmodEalloc) : !fir.ref<!fir.box<!fir.heap<f32>>>57  %2 = fir.declare %1 {fortran_attrs = #fir.var_attrs<allocatable>, uniq_name = "_QMmodEalloc"} : (!fir.ref<!fir.box<!fir.heap<f32>>>) -> !fir.ref<!fir.box<!fir.heap<f32>>>58  %3 = fir.declare %arg0 dummy_scope %0 {uniq_name = "_QFtestEn"} : (!fir.ref<i32>, !fir.dscope) -> !fir.ref<i32>59  %4 = fir.address_of(@_QMmodEp0) : !fir.ref<!fir.box<!fir.ptr<f32>>>60  %5 = fir.declare %4 {fortran_attrs = #fir.var_attrs<pointer>, uniq_name = "_QMmodEp0"} : (!fir.ref<!fir.box<!fir.ptr<f32>>>) -> !fir.ref<!fir.box<!fir.ptr<f32>>>61  %6 = fir.alloca f32 {bindc_name = "r1", uniq_name = "_QFtestEr1"}62  %7 = fir.declare %6 {test.ptr="r1", uniq_name = "_QFtestEr1"} : (!fir.ref<f32>) -> !fir.ref<f32>63  %8 = fir.address_of(@_QMmodEt) : !fir.ref<f32>64  %9 = fir.declare %8 {fortran_attrs = #fir.var_attrs<target>, uniq_name = "_QMmodEt"} : (!fir.ref<f32>) -> !fir.ref<f32>65  %10 = fir.address_of(@_QMmodEt_alloc) : !fir.ref<!fir.box<!fir.heap<f32>>>66  %11 = fir.declare %10 {fortran_attrs = #fir.var_attrs<allocatable, target>, uniq_name = "_QMmodEt_alloc"} : (!fir.ref<!fir.box<!fir.heap<f32>>>) -> !fir.ref<!fir.box<!fir.heap<f32>>>67  %12 = fir.address_of(@_QMmodEv) : !fir.ref<f32>68  %13 = fir.declare %12 {uniq_name = "_QMmodEv"} : (!fir.ref<f32>) -> !fir.ref<f32>69  %14 = fir.load %11 : !fir.ref<!fir.box<!fir.heap<f32>>>70  %15 = fir.box_addr %14 {test.ptr="t_alloc"}: (!fir.box<!fir.heap<f32>>) -> !fir.heap<f32>71  %16 = fir.embox %15 : (!fir.heap<f32>) -> !fir.box<!fir.ptr<f32>>72  fir.store %16 to %5 : !fir.ref<!fir.box<!fir.ptr<f32>>>73  %17 = fir.load %2 : !fir.ref<!fir.box<!fir.heap<f32>>>74  %18 = fir.box_addr %17 {test.ptr="alloc"} : (!fir.box<!fir.heap<f32>>) -> !fir.heap<f32>75  %19 = fir.load %18 : !fir.heap<f32>76  fir.store %19 to %13 : !fir.ref<f32>77  %20 = fir.load %5 : !fir.ref<!fir.box<!fir.ptr<f32>>>78  %21 = fir.box_addr %20 {test.ptr="p0.ptr"} : (!fir.box<!fir.ptr<f32>>) -> !fir.ptr<f32>79  %22 = fir.load %21 : !fir.ptr<f32>80  fir.store %22 to %7 : !fir.ref<f32>81  return82}83