brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.3 KiB · 385b9fa Raw
94 lines · plain
1! RUN: bbc --strict-fir-volatile-verifier %s -o - | FileCheck %s2 3program p4  integer,volatile::i,arr(10)5  call not_declared_volatile_in_this_scope(i)6  call not_declared_volatile_in_this_scope(arr)7  call declared_volatile_in_this_scope(arr,10)8  print*,arr,i9contains10  elemental subroutine not_declared_volatile_in_this_scope(v)11    integer,intent(inout)::v12    v=113  end subroutine14  subroutine declared_volatile_in_this_scope(v,n)15    integer,intent(in)::n16    integer,volatile,intent(inout)::v(n)17    v=118  end subroutine19end program20 21 22! CHECK-LABEL:   func.func @_QQmain() attributes {{.+}} {23! CHECK:           %[[VAL_0:.*]] = arith.constant 0 : index24! CHECK:           %[[VAL_1:.*]] = arith.constant 8 : i3225! CHECK:           %[[VAL_2:.*]] = arith.constant 6 : i3226! CHECK:           %[[VAL_3:.*]] = arith.constant 10 : i3227! CHECK:           %[[VAL_4:.*]] = arith.constant 1 : index28! CHECK:           %[[VAL_5:.*]] = arith.constant 10 : index29! CHECK:           %[[VAL_6:.*]] = fir.address_of(@_QFEarr) : !fir.ref<!fir.array<10xi32>>30! CHECK:           %[[VAL_7:.*]] = fir.shape %[[VAL_5]] : (index) -> !fir.shape<1>31! CHECK:           %[[VAL_8:.*]] = fir.volatile_cast %[[VAL_6]] : (!fir.ref<!fir.array<10xi32>>) -> !fir.ref<!fir.array<10xi32>, volatile>32! CHECK:           %[[VAL_9:.*]]:2 = hlfir.declare %[[VAL_8]](%[[VAL_7]]) {{.+}} : (!fir.ref<!fir.array<10xi32>, volatile>, !fir.shape<1>) -> (!fir.ref<!fir.array<10xi32>, volatile>, !fir.ref<!fir.array<10xi32>, volatile>)33! CHECK:           %[[VAL_10:.*]] = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFEi"}34! CHECK:           %[[VAL_11:.*]] = fir.volatile_cast %[[VAL_10]] : (!fir.ref<i32>) -> !fir.ref<i32, volatile>35! CHECK:           %[[VAL_12:.*]]:2 = hlfir.declare %[[VAL_11]] {{.+}} : (!fir.ref<i32, volatile>) -> (!fir.ref<i32, volatile>, !fir.ref<i32, volatile>)36! CHECK:           %[[VAL_13:.*]] = fir.volatile_cast %[[VAL_12]]#0 : (!fir.ref<i32, volatile>) -> !fir.ref<i32>37! CHECK:           fir.call @_QFPnot_declared_volatile_in_this_scope(%[[VAL_13]]) proc_attrs<elemental, pure> fastmath<contract> : (!fir.ref<i32>) -> ()38! CHECK:           cf.br ^bb1(%[[VAL_4]], %[[VAL_5]] : index, index)39! CHECK:         ^bb1(%[[VAL_14:.*]]: index, %[[VAL_15:.*]]: index):40! CHECK:           %[[VAL_16:.*]] = arith.cmpi sgt, %[[VAL_15]], %[[VAL_0]] : index41! CHECK:           cf.cond_br %[[VAL_16]], ^bb2, ^bb342! CHECK:         ^bb2:43! CHECK:           %[[VAL_17:.*]] = hlfir.designate %[[VAL_9]]#0 (%[[VAL_14]])  : (!fir.ref<!fir.array<10xi32>, volatile>, index) -> !fir.ref<i32, volatile>44! CHECK:           %[[VAL_18:.*]] = fir.volatile_cast %[[VAL_17]] : (!fir.ref<i32, volatile>) -> !fir.ref<i32>45! CHECK:           fir.call @_QFPnot_declared_volatile_in_this_scope(%[[VAL_18]]) proc_attrs<elemental, pure> fastmath<contract> : (!fir.ref<i32>) -> ()46! CHECK:           %[[VAL_19:.*]] = arith.addi %[[VAL_14]], %[[VAL_4]] overflow<nsw> : index47! CHECK:           %[[VAL_20:.*]] = arith.subi %[[VAL_15]], %[[VAL_4]] : index48! CHECK:           cf.br ^bb1(%[[VAL_19]], %[[VAL_20]] : index, index)49! CHECK:         ^bb3:50! CHECK:           %[[VAL_21:.*]] = fir.volatile_cast %[[VAL_9]]#0 : (!fir.ref<!fir.array<10xi32>, volatile>) -> !fir.ref<!fir.array<10xi32>>51! CHECK:           %[[VAL_22:.*]] = fir.convert %[[VAL_21]] : (!fir.ref<!fir.array<10xi32>>) -> !fir.ref<!fir.array<?xi32>>52! CHECK:           %[[VAL_23:.*]]:3 = hlfir.associate %[[VAL_3]] {adapt.valuebyref} : (i32) -> (!fir.ref<i32>, !fir.ref<i32>, i1)53! CHECK:           fir.call @_QFPdeclared_volatile_in_this_scope(%[[VAL_22]], %[[VAL_23]]#0) fastmath<contract> : (!fir.ref<!fir.array<?xi32>>, !fir.ref<i32>) -> ()54! CHECK:           hlfir.end_associate %[[VAL_23]]#1, %[[VAL_23]]#2 : !fir.ref<i32>, i155! CHECK:           %[[VAL_24:.*]] = fir.address_of56! CHECK:           %[[VAL_25:.*]] = fir.convert %[[VAL_24]] : (!fir.ref<!fir.char<1,{{.*}}>>) -> !fir.ref<i8>57! CHECK:           %[[VAL_26:.*]] = fir.call @_FortranAioBeginExternalListOutput(%[[VAL_2]], %[[VAL_25]], %[[VAL_1]]) fastmath<contract> {{.+}} : (i32, !fir.ref<i8>, i32) -> !fir.ref<i8>58! CHECK:           %[[VAL_27:.*]] = fir.embox %[[VAL_9]]#0(%[[VAL_7]]) : (!fir.ref<!fir.array<10xi32>, volatile>, !fir.shape<1>) -> !fir.box<!fir.array<10xi32>, volatile>59! CHECK:           %[[VAL_28:.*]] = fir.volatile_cast %[[VAL_27]] : (!fir.box<!fir.array<10xi32>, volatile>) -> !fir.box<!fir.array<10xi32>>60! CHECK:           %[[VAL_29:.*]] = fir.convert %[[VAL_28]] : (!fir.box<!fir.array<10xi32>>) -> !fir.box<none>61! CHECK:           %[[VAL_30:.*]] = fir.call @_FortranAioOutputDescriptor(%[[VAL_26]], %[[VAL_29]]) fastmath<contract> {llvm.nocallback, llvm.nosync} : (!fir.ref<i8>, !fir.box<none>) -> i162! CHECK:           %[[VAL_31:.*]] = fir.load %[[VAL_12]]#0 : !fir.ref<i32, volatile>63! CHECK:           %[[VAL_32:.*]] = fir.call @_FortranAioOutputInteger32(%[[VAL_26]], %[[VAL_31]]) fastmath<contract> {{.+}} : (!fir.ref<i8>, i32) -> i164! CHECK:           %[[VAL_33:.*]] = fir.call @_FortranAioEndIoStatement(%[[VAL_26]]) fastmath<contract> {{.+}} : (!fir.ref<i8>) -> i3265! CHECK:           return66! CHECK:         }67 68! CHECK-LABEL:   func.func private @_QFPnot_declared_volatile_in_this_scope(69! CHECK-SAME:                                                               %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.ref<i32> {fir.bindc_name = "v"}) attributes {{.+}} {70! CHECK:           %[[VAL_1:.*]] = arith.constant 1 : i3271! CHECK:           %[[VAL_2:.*]] = fir.dummy_scope : !fir.dscope72! CHECK:           %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_0]] dummy_scope %[[VAL_2]] {{.+}} : (!fir.ref<i32>, !fir.dscope) -> (!fir.ref<i32>, !fir.ref<i32>)73! CHECK:           hlfir.assign %[[VAL_1]] to %[[VAL_3]]#0 : i32, !fir.ref<i32>74! CHECK:           return75! CHECK:         }76 77! CHECK-LABEL:   func.func private @_QFPdeclared_volatile_in_this_scope(78! CHECK-SAME:                                                           %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.ref<!fir.array<?xi32>> {fir.bindc_name = "v"},79! CHECK-SAME:                                                           %[[VAL_1:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.ref<i32> {fir.bindc_name = "n"}) attributes {{.+}} {80! CHECK:           %[[VAL_2:.*]] = arith.constant 1 : i3281! CHECK:           %[[VAL_3:.*]] = arith.constant 0 : index82! CHECK:           %[[VAL_4:.*]] = fir.dummy_scope : !fir.dscope83! CHECK:           %[[VAL_5:.*]]:2 = hlfir.declare %[[VAL_1]] dummy_scope %[[VAL_4]] {{.+}} : (!fir.ref<i32>, !fir.dscope) -> (!fir.ref<i32>, !fir.ref<i32>)84! CHECK:           %[[VAL_6:.*]] = fir.load %[[VAL_5]]#0 : !fir.ref<i32>85! CHECK:           %[[VAL_7:.*]] = fir.convert %[[VAL_6]] : (i32) -> index86! CHECK:           %[[VAL_8:.*]] = arith.cmpi sgt, %[[VAL_7]], %[[VAL_3]] : index87! CHECK:           %[[VAL_9:.*]] = arith.select %[[VAL_8]], %[[VAL_7]], %[[VAL_3]] : index88! CHECK:           %[[VAL_10:.*]] = fir.shape %[[VAL_9]] : (index) -> !fir.shape<1>89! CHECK:           %[[VAL_11:.*]] = fir.volatile_cast %[[VAL_0]] : (!fir.ref<!fir.array<?xi32>>) -> !fir.ref<!fir.array<?xi32>, volatile>90! CHECK:           %[[VAL_12:.*]]:2 = hlfir.declare %[[VAL_11]](%[[VAL_10]]) dummy_scope %[[VAL_4]] {{.+}} : (!fir.ref<!fir.array<?xi32>, volatile>, !fir.shape<1>, !fir.dscope) -> (!fir.box<!fir.array<?xi32>, volatile>, !fir.ref<!fir.array<?xi32>, volatile>)91! CHECK:           hlfir.assign %[[VAL_2]] to %[[VAL_12]]#0 : i32, !fir.box<!fir.array<?xi32>, volatile>92! CHECK:           return93! CHECK:         }94