brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.3 KiB · 64fd376 Raw
219 lines · plain
1! Test lowering of CSHIFT intrinsic to HLFIR2! RUN: bbc -emit-hlfir -o - -I nowhere %s 2>&1 | FileCheck %s3 4module types5  type t6  end type t7end module types8 9! 1d shift by scalar10subroutine cshift1(a, s)11  integer :: a(:), s12  a = CSHIFT(a, 2)13end subroutine14! CHECK-LABEL:   func.func @_QPcshift1(15! CHECK-SAME:                          %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "a"},16! CHECK-SAME:                          %[[VAL_1:.*]]: !fir.ref<i32> {fir.bindc_name = "s"}) {17! CHECK:           %[[VAL_2:.*]] = fir.dummy_scope : !fir.dscope18! CHECK:           %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_0]]19! CHECK:           %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_1]]20! CHECK:           %[[VAL_5:.*]] = arith.constant 2 : i3221! CHECK:           %[[VAL_6:.*]] = hlfir.cshift %[[VAL_3]]#0 %[[VAL_5]] : (!fir.box<!fir.array<?xi32>>, i32) -> !hlfir.expr<?xi32>22! CHECK:           hlfir.assign %[[VAL_6]] to %[[VAL_3]]#0 : !hlfir.expr<?xi32>, !fir.box<!fir.array<?xi32>>23! CHECK:           hlfir.destroy %[[VAL_6]] : !hlfir.expr<?xi32>24! CHECK:           return25! CHECK:         }26 27! 1d shift by scalar with dim28subroutine cshift2(a, s)29  integer :: a(:), s30  a = CSHIFT(a, 2, 1)31end subroutine32! CHECK-LABEL:   func.func @_QPcshift2(33! CHECK-SAME:                          %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "a"},34! CHECK-SAME:                          %[[VAL_1:.*]]: !fir.ref<i32> {fir.bindc_name = "s"}) {35! CHECK:           %[[VAL_2:.*]] = fir.dummy_scope : !fir.dscope36! CHECK:           %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_0]]37! CHECK:           %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_1]]38! CHECK:           %[[VAL_5:.*]] = arith.constant 2 : i3239! CHECK:           %[[VAL_6:.*]] = arith.constant 1 : i3240! CHECK:           %[[VAL_7:.*]] = hlfir.cshift %[[VAL_3]]#0 %[[VAL_5]] dim %[[VAL_6]] : (!fir.box<!fir.array<?xi32>>, i32, i32) -> !hlfir.expr<?xi32>41! CHECK:           hlfir.assign %[[VAL_7]] to %[[VAL_3]]#0 : !hlfir.expr<?xi32>, !fir.box<!fir.array<?xi32>>42! CHECK:           hlfir.destroy %[[VAL_7]] : !hlfir.expr<?xi32>43! CHECK:           return44! CHECK:         }45 46! 2d shift by scalar47subroutine cshift3(a, s)48  integer :: a(:,:), s49  a = CSHIFT(a, 2)50end subroutine51! CHECK-LABEL:   func.func @_QPcshift3(52! CHECK-SAME:                          %[[VAL_0:.*]]: !fir.box<!fir.array<?x?xi32>> {fir.bindc_name = "a"},53! CHECK-SAME:                          %[[VAL_1:.*]]: !fir.ref<i32> {fir.bindc_name = "s"}) {54! CHECK:           %[[VAL_2:.*]] = fir.dummy_scope : !fir.dscope55! CHECK:           %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_0]]56! CHECK:           %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_1]]57! CHECK:           %[[VAL_5:.*]] = arith.constant 2 : i3258! CHECK:           %[[VAL_6:.*]] = hlfir.cshift %[[VAL_3]]#0 %[[VAL_5]] : (!fir.box<!fir.array<?x?xi32>>, i32) -> !hlfir.expr<?x?xi32>59! CHECK:           hlfir.assign %[[VAL_6]] to %[[VAL_3]]#0 : !hlfir.expr<?x?xi32>, !fir.box<!fir.array<?x?xi32>>60! CHECK:           hlfir.destroy %[[VAL_6]] : !hlfir.expr<?x?xi32>61! CHECK:           return62! CHECK:         }63 64! 2d shift by scalar with dim65subroutine cshift4(a, s)66  integer :: a(:,:), s67  a = CSHIFT(a, 2, 2)68end subroutine69! CHECK-LABEL:   func.func @_QPcshift4(70! CHECK-SAME:                          %[[VAL_0:.*]]: !fir.box<!fir.array<?x?xi32>> {fir.bindc_name = "a"},71! CHECK-SAME:                          %[[VAL_1:.*]]: !fir.ref<i32> {fir.bindc_name = "s"}) {72! CHECK:           %[[VAL_2:.*]] = fir.dummy_scope : !fir.dscope73! CHECK:           %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_0]]74! CHECK:           %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_1]]75! CHECK:           %[[VAL_5:.*]] = arith.constant 2 : i3276! CHECK:           %[[VAL_6:.*]] = arith.constant 2 : i3277! CHECK:           %[[VAL_7:.*]] = hlfir.cshift %[[VAL_3]]#0 %[[VAL_5]] dim %[[VAL_6]] : (!fir.box<!fir.array<?x?xi32>>, i32, i32) -> !hlfir.expr<?x?xi32>78! CHECK:           hlfir.assign %[[VAL_7]] to %[[VAL_3]]#0 : !hlfir.expr<?x?xi32>, !fir.box<!fir.array<?x?xi32>>79! CHECK:           hlfir.destroy %[[VAL_7]] : !hlfir.expr<?x?xi32>80! CHECK:           return81! CHECK:         }82 83! 2d shift by array84subroutine cshift5(a, s)85  integer :: a(:,:), s(:)86  a = CSHIFT(a, s)87end subroutine88! CHECK-LABEL:   func.func @_QPcshift5(89! CHECK-SAME:                          %[[VAL_0:.*]]: !fir.box<!fir.array<?x?xi32>> {fir.bindc_name = "a"},90! CHECK-SAME:                          %[[VAL_1:.*]]: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "s"}) {91! CHECK:           %[[VAL_2:.*]] = fir.dummy_scope : !fir.dscope92! CHECK:           %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_0]]93! CHECK:           %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_1]]94! CHECK:           %[[VAL_5:.*]] = hlfir.cshift %[[VAL_3]]#0 %[[VAL_4]]#0 : (!fir.box<!fir.array<?x?xi32>>, !fir.box<!fir.array<?xi32>>) -> !hlfir.expr<?x?xi32>95! CHECK:           hlfir.assign %[[VAL_5]] to %[[VAL_3]]#0 : !hlfir.expr<?x?xi32>, !fir.box<!fir.array<?x?xi32>>96! CHECK:           hlfir.destroy %[[VAL_5]] : !hlfir.expr<?x?xi32>97! CHECK:           return98! CHECK:         }99 100! 2d shift by array expr101subroutine cshift6(a, s)102  integer :: a(:,:), s(:)103  a = CSHIFT(a, s + 1)104end subroutine105! CHECK-LABEL:   func.func @_QPcshift6(106! CHECK-SAME:                          %[[VAL_0:.*]]: !fir.box<!fir.array<?x?xi32>> {fir.bindc_name = "a"},107! CHECK-SAME:                          %[[VAL_1:.*]]: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "s"}) {108! CHECK:           %[[VAL_2:.*]] = fir.dummy_scope : !fir.dscope109! CHECK:           %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_0]]110! CHECK:           %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_1]]111! CHECK:           %[[VAL_5:.*]] = arith.constant 1 : i32112! CHECK:           %[[VAL_6:.*]] = arith.constant 0 : index113! CHECK:           %[[VAL_7:.*]]:3 = fir.box_dims %[[VAL_4]]#0, %[[VAL_6]] : (!fir.box<!fir.array<?xi32>>, index) -> (index, index, index)114! CHECK:           %[[VAL_8:.*]] = fir.shape %[[VAL_7]]#1 : (index) -> !fir.shape<1>115! CHECK:           %[[VAL_9:.*]] = hlfir.elemental %[[VAL_8]] unordered : (!fir.shape<1>) -> !hlfir.expr<?xi32>116! CHECK:           %[[VAL_14:.*]] = hlfir.cshift %[[VAL_3]]#0 %[[VAL_9]] : (!fir.box<!fir.array<?x?xi32>>, !hlfir.expr<?xi32>) -> !hlfir.expr<?x?xi32>117! CHECK:           hlfir.assign %[[VAL_14]] to %[[VAL_3]]#0 : !hlfir.expr<?x?xi32>, !fir.box<!fir.array<?x?xi32>>118! CHECK:           hlfir.destroy %[[VAL_14]] : !hlfir.expr<?x?xi32>119! CHECK:           hlfir.destroy %[[VAL_9]] : !hlfir.expr<?xi32>120! CHECK:           return121! CHECK:         }122 123! 1d character(10,2) shift by scalar124subroutine cshift7(a, s)125  character(10,2) :: a(:)126  a = CSHIFT(a, 2)127end subroutine128! CHECK-LABEL:   func.func @_QPcshift7(129! CHECK-SAME:                          %[[VAL_0:.*]]: !fir.box<!fir.array<?x!fir.char<2,10>>> {fir.bindc_name = "a"},130! CHECK-SAME:                          %[[VAL_1:.*]]: !fir.ref<f32> {fir.bindc_name = "s"}) {131! CHECK:           %[[VAL_2:.*]] = fir.dummy_scope : !fir.dscope132! CHECK:           %[[VAL_3:.*]] = arith.constant 10 : index133! CHECK:           %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_0]]134! CHECK:           %[[VAL_5:.*]]:2 = hlfir.declare %[[VAL_1]]135! CHECK:           %[[VAL_6:.*]] = arith.constant 2 : i32136! CHECK:           %[[VAL_7:.*]] = hlfir.cshift %[[VAL_4]]#0 %[[VAL_6]] : (!fir.box<!fir.array<?x!fir.char<2,10>>>, i32) -> !hlfir.expr<?x!fir.char<2,10>>137! CHECK:           hlfir.assign %[[VAL_7]] to %[[VAL_4]]#0 : !hlfir.expr<?x!fir.char<2,10>>, !fir.box<!fir.array<?x!fir.char<2,10>>>138! CHECK:           hlfir.destroy %[[VAL_7]] : !hlfir.expr<?x!fir.char<2,10>>139! CHECK:           return140! CHECK:         }141 142! 1d character(*) shift by scalar143subroutine cshift8(a, s)144  character(*) :: a(:)145  a = CSHIFT(a, 2)146end subroutine147! CHECK-LABEL:   func.func @_QPcshift8(148! CHECK-SAME:                          %[[VAL_0:.*]]: !fir.box<!fir.array<?x!fir.char<1,?>>> {fir.bindc_name = "a"},149! CHECK-SAME:                          %[[VAL_1:.*]]: !fir.ref<f32> {fir.bindc_name = "s"}) {150! CHECK:           %[[VAL_2:.*]] = fir.dummy_scope : !fir.dscope151! CHECK:           %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_0]]152! CHECK:           %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_1]]153! CHECK:           %[[VAL_5:.*]] = arith.constant 2 : i32154! CHECK:           %[[VAL_6:.*]] = hlfir.cshift %[[VAL_3]]#0 %[[VAL_5]] : (!fir.box<!fir.array<?x!fir.char<1,?>>>, i32) -> !hlfir.expr<?x!fir.char<1,?>>155! CHECK:           hlfir.assign %[[VAL_6]] to %[[VAL_3]]#0 : !hlfir.expr<?x!fir.char<1,?>>, !fir.box<!fir.array<?x!fir.char<1,?>>>156! CHECK:           hlfir.destroy %[[VAL_6]] : !hlfir.expr<?x!fir.char<1,?>>157! CHECK:           return158! CHECK:         }159 160! 1d type(t) shift by scalar161subroutine cshift9(a, s)162  use types163  type(t) :: a(:)164  a = CSHIFT(a, 2)165end subroutine166! CHECK-LABEL:   func.func @_QPcshift9(167! CHECK-SAME:                          %[[VAL_0:.*]]: !fir.box<!fir.array<?x!fir.type<_QMtypesTt>>> {fir.bindc_name = "a"},168! CHECK-SAME:                          %[[VAL_1:.*]]: !fir.ref<f32> {fir.bindc_name = "s"}) {169! CHECK:           %[[VAL_2:.*]] = fir.dummy_scope : !fir.dscope170! CHECK:           %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_0]]171! CHECK:           %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_1]]172! CHECK:           %[[VAL_5:.*]] = arith.constant 2 : i32173! CHECK:           %[[VAL_6:.*]] = hlfir.cshift %[[VAL_3]]#0 %[[VAL_5]] : (!fir.box<!fir.array<?x!fir.type<_QMtypesTt>>>, i32) -> !hlfir.expr<?x!fir.type<_QMtypesTt>>174! CHECK:           hlfir.assign %[[VAL_6]] to %[[VAL_3]]#0 : !hlfir.expr<?x!fir.type<_QMtypesTt>>, !fir.box<!fir.array<?x!fir.type<_QMtypesTt>>>175! CHECK:           hlfir.destroy %[[VAL_6]] : !hlfir.expr<?x!fir.type<_QMtypesTt>>176! CHECK:           return177! CHECK:         }178 179! 1d class(t) shift by scalar180subroutine cshift10(a, s)181  use types182  class(t), allocatable :: a(:)183  a = CSHIFT(a, 2)184end subroutine185! CHECK-LABEL:   func.func @_QPcshift10(186! CHECK-SAME:                           %[[VAL_0:.*]]: !fir.ref<!fir.class<!fir.heap<!fir.array<?x!fir.type<_QMtypesTt>>>>> {fir.bindc_name = "a"},187! CHECK-SAME:                           %[[VAL_1:.*]]: !fir.ref<f32> {fir.bindc_name = "s"}) {188! CHECK:           %[[VAL_2:.*]] = fir.dummy_scope : !fir.dscope189! CHECK:           %[[VAL_3:.*]]:2 = hlfir.declare %[[VAL_0]]190! CHECK:           %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_1]]191! CHECK:           %[[VAL_5:.*]] = arith.constant 2 : i32192! CHECK:           %[[VAL_6:.*]] = fir.load %[[VAL_3]]#0 : !fir.ref<!fir.class<!fir.heap<!fir.array<?x!fir.type<_QMtypesTt>>>>>193! CHECK:           %[[VAL_7:.*]] = hlfir.cshift %[[VAL_6]] %[[VAL_5]] : (!fir.class<!fir.heap<!fir.array<?x!fir.type<_QMtypesTt>>>>, i32) -> !hlfir.expr<?x!fir.type<_QMtypesTt>?>194! CHECK:           hlfir.assign %[[VAL_7]] to %[[VAL_3]]#0 realloc : !hlfir.expr<?x!fir.type<_QMtypesTt>?>, !fir.ref<!fir.class<!fir.heap<!fir.array<?x!fir.type<_QMtypesTt>>>>>195! CHECK:           hlfir.destroy %[[VAL_7]] : !hlfir.expr<?x!fir.type<_QMtypesTt>?>196! CHECK:           return197! CHECK:         }198 199! 1d shift by scalar with variable dim200subroutine cshift11(a, s, d)201  integer :: a(:), s, d202  a = CSHIFT(a, 2, d)203end subroutine204! CHECK-LABEL:   func.func @_QPcshift11(205! CHECK-SAME:                           %[[VAL_0:.*]]: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "a"},206! CHECK-SAME:                           %[[VAL_1:.*]]: !fir.ref<i32> {fir.bindc_name = "s"},207! CHECK-SAME:                           %[[VAL_2:.*]]: !fir.ref<i32> {fir.bindc_name = "d"}) {208! CHECK:           %[[VAL_3:.*]] = fir.dummy_scope : !fir.dscope209! CHECK:           %[[VAL_4:.*]]:2 = hlfir.declare %[[VAL_0]] dummy_scope %[[VAL_3]] arg {{[0-9]+}} {uniq_name = "_QFcshift11Ea"} : (!fir.box<!fir.array<?xi32>>, !fir.dscope) -> (!fir.box<!fir.array<?xi32>>, !fir.box<!fir.array<?xi32>>)210! CHECK:           %[[VAL_5:.*]]:2 = hlfir.declare %[[VAL_2]] dummy_scope %[[VAL_3]] arg {{[0-9]+}} {uniq_name = "_QFcshift11Ed"} : (!fir.ref<i32>, !fir.dscope) -> (!fir.ref<i32>, !fir.ref<i32>)211! CHECK:           %[[VAL_6:.*]]:2 = hlfir.declare %[[VAL_1]] dummy_scope %[[VAL_3]] arg {{[0-9]+}} {uniq_name = "_QFcshift11Es"} : (!fir.ref<i32>, !fir.dscope) -> (!fir.ref<i32>, !fir.ref<i32>)212! CHECK:           %[[VAL_7:.*]] = arith.constant 2 : i32213! CHECK:           %[[VAL_8:.*]] = fir.load %[[VAL_5]]#0 : !fir.ref<i32>214! CHECK:           %[[VAL_9:.*]] = hlfir.cshift %[[VAL_4]]#0 %[[VAL_7]] dim %[[VAL_8]] : (!fir.box<!fir.array<?xi32>>, i32, i32) -> !hlfir.expr<?xi32>215! CHECK:           hlfir.assign %[[VAL_9]] to %[[VAL_4]]#0 : !hlfir.expr<?xi32>, !fir.box<!fir.array<?xi32>>216! CHECK:           hlfir.destroy %[[VAL_9]] : !hlfir.expr<?xi32>217! CHECK:           return218! CHECK:         }219