Tests converted: always-execute-loop-body.f90, arithmetic-goto.f90, array-constructor-1.f90, array-constructor-index.f90, array-derived.f90
101 lines
5.3 KiB
Fortran
101 lines
5.3 KiB
Fortran
! 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: }
|