blob: 42080f9b6bdd543c9b990ca71dc40f0b7083ebae [file] [log] [blame] [edit]
! Check that the implied-do index value is converted to proper type.
! RUN: bbc -emit-fir -o - %s | FileCheck %s
function test1(k)
integer*1 :: k
integer*1 :: test1(4)
test1 = ([(i*k, integer(8)::i=1,4)])
end function test1
! CHECK-LABEL: func.func @_QPtest1(
! CHECK-SAME: %[[ARG0:.*]]: !fir.ref<i8> {fir.bindc_name = "k"}) -> !fir.array<4xi8> {
! CHECK: %[[C1:.*]] = arith.constant 1 : index
! CHECK: %[[C4:.*]] = arith.constant 4 : index
! CHECK: %[[ARG0_D:.*]] = fir.declare %[[ARG0]]
! CHECK: %[[RES:.*]] = fir.alloca !fir.array<4xi8>
! CHECK: %[[SHAPE:.*]] = fir.shape %[[C4]]
! CHECK: %[[RES_D:.*]] = fir.declare %[[RES]](%[[SHAPE]])
! CHECK: fir.do_loop %[[IDX:.*]] = %[[C1]] to %[[C4]] step %[[C1]] unordered {
! CHECK: %[[IDX_I64:.*]] = fir.convert %[[IDX]] : (index) -> i64
! CHECK: %[[VAL_K:.*]] = fir.load %[[ARG0_D]] : !fir.ref<i8>
! CHECK: %[[VAL_K_I64:.*]] = fir.convert %[[VAL_K]] : (i8) -> i64
! CHECK: %[[PROD:.*]] = arith.muli %[[IDX_I64]], %[[VAL_K_I64]] : i64
! CHECK: %[[PROD_NO:.*]] = fir.no_reassoc %[[PROD]] : i64
! CHECK: %[[PROD_I8:.*]] = fir.convert %[[PROD_NO]] : (i64) -> i8
! CHECK: %[[ADDR:.*]] = fir.array_coor %[[RES_D]](%[[SHAPE]]) %[[IDX]]
! CHECK: fir.store %[[PROD_I8]] to %[[ADDR]] : !fir.ref<i8>
! CHECK: }
! CHECK: }
function test2(k)
integer*2 :: k
integer*2 :: test2(4)
test2 = ([(i*k, integer(8)::i=1,4)])
end function test2
! CHECK-LABEL: func.func @_QPtest2(
! CHECK-SAME: %[[ARG0:.*]]: !fir.ref<i16> {fir.bindc_name = "k"}) -> !fir.array<4xi16> {
! CHECK: %[[C1:.*]] = arith.constant 1 : index
! CHECK: %[[C4:.*]] = arith.constant 4 : index
! CHECK: %[[ARG0_D:.*]] = fir.declare %[[ARG0]]
! CHECK: %[[RES:.*]] = fir.alloca !fir.array<4xi16>
! CHECK: %[[SHAPE:.*]] = fir.shape %[[C4]]
! CHECK: %[[RES_D:.*]] = fir.declare %[[RES]](%[[SHAPE]])
! CHECK: fir.do_loop %[[IDX:.*]] = %[[C1]] to %[[C4]] step %[[C1]] unordered {
! CHECK: %[[IDX_I64:.*]] = fir.convert %[[IDX]] : (index) -> i64
! CHECK: %[[VAL_K:.*]] = fir.load %[[ARG0_D]] : !fir.ref<i16>
! CHECK: %[[VAL_K_I64:.*]] = fir.convert %[[VAL_K]] : (i16) -> i64
! CHECK: %[[PROD:.*]] = arith.muli %[[IDX_I64]], %[[VAL_K_I64]] : i64
! CHECK: %[[PROD_NO:.*]] = fir.no_reassoc %[[PROD]] : i64
! CHECK: %[[PROD_I16:.*]] = fir.convert %[[PROD_NO]] : (i64) -> i16
! CHECK: %[[ADDR:.*]] = fir.array_coor %[[RES_D]](%[[SHAPE]]) %[[IDX]]
! CHECK: fir.store %[[PROD_I16]] to %[[ADDR]] : !fir.ref<i16>
! CHECK: }
! CHECK: }
function test3(k)
integer*4 :: k
integer*4 :: test3(4)
test3 = ([(i*k, integer(8)::i=1,4)])
end function test3
! CHECK-LABEL: func.func @_QPtest3(
! CHECK-SAME: %[[ARG0:.*]]: !fir.ref<i32> {fir.bindc_name = "k"}) -> !fir.array<4xi32> {
! CHECK: %[[C1:.*]] = arith.constant 1 : index
! CHECK: %[[C4:.*]] = arith.constant 4 : index
! CHECK: %[[ARG0_D:.*]] = fir.declare %[[ARG0]]
! CHECK: %[[RES:.*]] = fir.alloca !fir.array<4xi32>
! CHECK: %[[SHAPE:.*]] = fir.shape %[[C4]]
! CHECK: %[[RES_D:.*]] = fir.declare %[[RES]](%[[SHAPE]])
! CHECK: fir.do_loop %[[IDX:.*]] = %[[C1]] to %[[C4]] step %[[C1]] unordered {
! CHECK: %[[IDX_I64:.*]] = fir.convert %[[IDX]] : (index) -> i64
! CHECK: %[[VAL_K:.*]] = fir.load %[[ARG0_D]] : !fir.ref<i32>
! CHECK: %[[VAL_K_I64:.*]] = fir.convert %[[VAL_K]] : (i32) -> i64
! CHECK: %[[PROD:.*]] = arith.muli %[[IDX_I64]], %[[VAL_K_I64]] : i64
! CHECK: %[[PROD_NO:.*]] = fir.no_reassoc %[[PROD]] : i64
! CHECK: %[[PROD_I32:.*]] = fir.convert %[[PROD_NO]] : (i64) -> i32
! CHECK: %[[ADDR:.*]] = fir.array_coor %[[RES_D]](%[[SHAPE]]) %[[IDX]]
! CHECK: fir.store %[[PROD_I32]] to %[[ADDR]] : !fir.ref<i32>
! CHECK: }
! CHECK: }
function test4(k)
integer*8 :: k
integer*8 :: test4(4)
test4 = ([(i*k, integer(8)::i=1,4)])
end function test4
! CHECK-LABEL: func.func @_QPtest4(
! CHECK-SAME: %[[ARG0:.*]]: !fir.ref<i64> {fir.bindc_name = "k"}) -> !fir.array<4xi64> {
! CHECK: %[[C1:.*]] = arith.constant 1 : index
! CHECK: %[[C4:.*]] = arith.constant 4 : index
! CHECK: %[[ARG0_D:.*]] = fir.declare %[[ARG0]]
! CHECK: %[[RES:.*]] = fir.alloca !fir.array<4xi64>
! CHECK: %[[SHAPE:.*]] = fir.shape %[[C4]]
! CHECK: %[[RES_D:.*]] = fir.declare %[[RES]](%[[SHAPE]])
! CHECK: fir.do_loop %[[IDX:.*]] = %[[C1]] to %[[C4]] step %[[C1]] unordered {
! CHECK: %[[IDX_I64:.*]] = fir.convert %[[IDX]] : (index) -> i64
! CHECK: %[[VAL_K:.*]] = fir.load %[[ARG0_D]] : !fir.ref<i64>
! CHECK: %[[PROD:.*]] = arith.muli %[[IDX_I64]], %[[VAL_K]] : i64
! CHECK: %[[PROD_NO:.*]] = fir.no_reassoc %[[PROD]] : i64
! CHECK: %[[ADDR:.*]] = fir.array_coor %[[RES_D]](%[[SHAPE]]) %[[IDX]]
! CHECK: fir.store %[[PROD_NO]] to %[[ADDR]] : !fir.ref<i64>
! CHECK: }
! CHECK: }