174 lines · plain
1! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s2 3! CHECK-LABEL: func.func @_QPselected_real_kind_test1(4! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i8> {fir.bindc_name = "p"},5! CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<i8> {fir.bindc_name = "r"},6! CHECK-SAME: %[[VAL_2:.*]]: !fir.ref<i8> {fir.bindc_name = "d"}) {7! CHECK: %[[VAL_3:.*]] = fir.alloca i8 {bindc_name = "res", uniq_name = "_QFselected_real_kind_test1Eres"}8! CHECK: %[[VAL_6:.*]] = arith.constant 1 : i329! CHECK: %[[VAL_7:.*]] = arith.constant 1 : i3210! CHECK: %[[VAL_8:.*]] = arith.constant 1 : i3211! CHECK: %[[VAL_10:.*]] = fir.convert %[[VAL_0]] : (!fir.ref<i8>) -> !fir.llvm_ptr<i8>12! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<i8>) -> !fir.llvm_ptr<i8>13! CHECK: %[[VAL_12:.*]] = fir.convert %[[VAL_2]] : (!fir.ref<i8>) -> !fir.llvm_ptr<i8>14! CHECK: %[[VAL_13:.*]] = fir.call @_FortranASelectedRealKind(%{{.*}}, %{{.*}}, %[[VAL_10]], %[[VAL_6]], %[[VAL_11]], %[[VAL_7]], %[[VAL_12]], %[[VAL_8]]) {{.*}}: (!fir.ref<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32) -> i3215! CHECK: %[[VAL_14:.*]] = fir.convert %[[VAL_13]] : (i32) -> i816! CHECK: fir.store %[[VAL_14]] to %[[VAL_3]] : !fir.ref<i8>17! CHECK: return18! CHECK: }19 20subroutine selected_real_kind_test1(p, r, d)21 integer(1) :: p, r, d, res22 res = selected_real_kind(P=p, R=r, RADIX=d)23end24 25! CHECK-LABEL: func.func @_QPselected_real_kind_test2(26! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i16> {fir.bindc_name = "p"},27! CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<i16> {fir.bindc_name = "r"},28! CHECK-SAME: %[[VAL_2:.*]]: !fir.ref<i16> {fir.bindc_name = "d"}) {29! CHECK: %[[VAL_3:.*]] = fir.alloca i16 {bindc_name = "res", uniq_name = "_QFselected_real_kind_test2Eres"}30! CHECK: %[[VAL_6:.*]] = arith.constant 2 : i3231! CHECK: %[[VAL_7:.*]] = arith.constant 2 : i3232! CHECK: %[[VAL_8:.*]] = arith.constant 2 : i3233! CHECK: %[[VAL_10:.*]] = fir.convert %[[VAL_0]] : (!fir.ref<i16>) -> !fir.llvm_ptr<i8>34! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<i16>) -> !fir.llvm_ptr<i8>35! CHECK: %[[VAL_12:.*]] = fir.convert %[[VAL_2]] : (!fir.ref<i16>) -> !fir.llvm_ptr<i8>36! CHECK: %[[VAL_13:.*]] = fir.call @_FortranASelectedRealKind(%{{.*}}, %{{.*}}, %[[VAL_10]], %[[VAL_6]], %[[VAL_11]], %[[VAL_7]], %[[VAL_12]], %[[VAL_8]]) {{.*}}: (!fir.ref<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32) -> i3237! CHECK: %[[VAL_14:.*]] = fir.convert %[[VAL_13]] : (i32) -> i1638! CHECK: fir.store %[[VAL_14]] to %[[VAL_3]] : !fir.ref<i16>39! CHECK: return40! CHECK: }41 42subroutine selected_real_kind_test2(p, r, d)43 integer(2) :: p, r, d, res44 res = selected_real_kind(P=p, R=r, RADIX=d)45end46 47! CHECK-LABEL: func.func @_QPselected_real_kind_test4(48! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i32> {fir.bindc_name = "p"},49! CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<i32> {fir.bindc_name = "r"},50! CHECK-SAME: %[[VAL_2:.*]]: !fir.ref<i32> {fir.bindc_name = "d"}) {51! CHECK: %[[VAL_3:.*]] = fir.alloca i32 {bindc_name = "res", uniq_name = "_QFselected_real_kind_test4Eres"}52! CHECK: %[[VAL_6:.*]] = arith.constant 4 : i3253! CHECK: %[[VAL_7:.*]] = arith.constant 4 : i3254! CHECK: %[[VAL_8:.*]] = arith.constant 4 : i3255! CHECK: %[[VAL_10:.*]] = fir.convert %[[VAL_0]] : (!fir.ref<i32>) -> !fir.llvm_ptr<i8>56! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<i32>) -> !fir.llvm_ptr<i8>57! CHECK: %[[VAL_12:.*]] = fir.convert %[[VAL_2]] : (!fir.ref<i32>) -> !fir.llvm_ptr<i8>58! CHECK: %[[VAL_13:.*]] = fir.call @_FortranASelectedRealKind(%{{.*}}, %{{.*}}, %[[VAL_10]], %[[VAL_6]], %[[VAL_11]], %[[VAL_7]], %[[VAL_12]], %[[VAL_8]]) {{.*}}: (!fir.ref<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32) -> i3259! CHECK: fir.store %[[VAL_13]] to %[[VAL_3]] : !fir.ref<i32>60! CHECK: return61! CHECK: }62 63subroutine selected_real_kind_test4(p, r, d)64 integer(4) :: p, r, d, res65 res = selected_real_kind(P=p, R=r, RADIX=d)66end67 68! CHECK-LABEL: func.func @_QPselected_real_kind_test8(69! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i64> {fir.bindc_name = "p"},70! CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<i64> {fir.bindc_name = "r"},71! CHECK-SAME: %[[VAL_2:.*]]: !fir.ref<i64> {fir.bindc_name = "d"}) {72! CHECK: %[[VAL_3:.*]] = fir.alloca i64 {bindc_name = "res", uniq_name = "_QFselected_real_kind_test8Eres"}73! CHECK: %[[VAL_6:.*]] = arith.constant 8 : i3274! CHECK: %[[VAL_7:.*]] = arith.constant 8 : i3275! CHECK: %[[VAL_8:.*]] = arith.constant 8 : i3276! CHECK: %[[VAL_10:.*]] = fir.convert %[[VAL_0]] : (!fir.ref<i64>) -> !fir.llvm_ptr<i8>77! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<i64>) -> !fir.llvm_ptr<i8>78! CHECK: %[[VAL_12:.*]] = fir.convert %[[VAL_2]] : (!fir.ref<i64>) -> !fir.llvm_ptr<i8>79! CHECK: %[[VAL_13:.*]] = fir.call @_FortranASelectedRealKind(%{{.*}}, %{{.*}}, %[[VAL_10]], %[[VAL_6]], %[[VAL_11]], %[[VAL_7]], %[[VAL_12]], %[[VAL_8]]) {{.*}}: (!fir.ref<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32) -> i3280! CHECK: %[[VAL_14:.*]] = fir.convert %[[VAL_13]] : (i32) -> i6481! CHECK: fir.store %[[VAL_14]] to %[[VAL_3]] : !fir.ref<i64>82! CHECK: return83! CHECK: }84 85subroutine selected_real_kind_test8(p, r, d)86 integer(8) :: p, r, d, res87 res = selected_real_kind(P=p, R=r, RADIX=d)88end89 90! CHECK-LABEL: func.func @_QPselected_real_kind_test16(91! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i128> {fir.bindc_name = "p"},92! CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<i128> {fir.bindc_name = "r"},93! CHECK-SAME: %[[VAL_2:.*]]: !fir.ref<i128> {fir.bindc_name = "d"}) {94! CHECK: %[[VAL_3:.*]] = fir.alloca i128 {bindc_name = "res", uniq_name = "_QFselected_real_kind_test16Eres"}95! CHECK: %[[VAL_6:.*]] = arith.constant 16 : i3296! CHECK: %[[VAL_7:.*]] = arith.constant 16 : i3297! CHECK: %[[VAL_8:.*]] = arith.constant 16 : i3298! CHECK: %[[VAL_10:.*]] = fir.convert %[[VAL_0]] : (!fir.ref<i128>) -> !fir.llvm_ptr<i8>99! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<i128>) -> !fir.llvm_ptr<i8>100! CHECK: %[[VAL_12:.*]] = fir.convert %[[VAL_2]] : (!fir.ref<i128>) -> !fir.llvm_ptr<i8>101! CHECK: %[[VAL_13:.*]] = fir.call @_FortranASelectedRealKind(%{{.*}}, %{{.*}}, %[[VAL_10]], %[[VAL_6]], %[[VAL_11]], %[[VAL_7]], %[[VAL_12]], %[[VAL_8]]) {{.*}}: (!fir.ref<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32) -> i32102! CHECK: %[[VAL_14:.*]] = fir.convert %[[VAL_13]] : (i32) -> i128103! CHECK: fir.store %[[VAL_14]] to %[[VAL_3]] : !fir.ref<i128>104! CHECK: return105! CHECK: }106 107subroutine selected_real_kind_test16(p, r, d)108 integer(16) :: p, r, d, res109 res = selected_real_kind(P=p, R=r, RADIX=d)110end111 112! CHECK-LABEL: func.func @_QPselected_real_kind_test_rd(113! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i32> {fir.bindc_name = "r"},114! CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<i32> {fir.bindc_name = "d"}) {115! CHECK: %[[VAL_2:.*]] = fir.alloca i32 {bindc_name = "res", uniq_name = "_QFselected_real_kind_test_rdEres"}116! CHECK: %[[VAL_3:.*]] = fir.absent !fir.ref<i1>117! CHECK: %[[VAL_6:.*]] = arith.constant 0 : i32118! CHECK: %[[VAL_7:.*]] = arith.constant 4 : i32119! CHECK: %[[VAL_8:.*]] = arith.constant 4 : i32120! CHECK: %[[VAL_10:.*]] = fir.convert %[[VAL_3]] : (!fir.ref<i1>) -> !fir.llvm_ptr<i8>121! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_0]] : (!fir.ref<i32>) -> !fir.llvm_ptr<i8>122! CHECK: %[[VAL_12:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<i32>) -> !fir.llvm_ptr<i8>123! CHECK: %[[VAL_13:.*]] = fir.call @_FortranASelectedRealKind(%{{.*}}, %{{.*}}, %[[VAL_10]], %[[VAL_6]], %[[VAL_11]], %[[VAL_7]], %[[VAL_12]], %[[VAL_8]]) {{.*}}: (!fir.ref<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32) -> i32124! CHECK: fir.store %[[VAL_13]] to %[[VAL_2]] : !fir.ref<i32>125! CHECK: return126! CHECK: }127 128subroutine selected_real_kind_test_rd(r, d)129 integer :: r, d, res130 res = selected_real_kind(R=r, RADIX=d)131end132 133! CHECK-LABEL: func.func @_QPselected_real_kind_test_pd(134! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i32> {fir.bindc_name = "p"},135! CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<i32> {fir.bindc_name = "d"}) {136! CHECK: %[[VAL_2:.*]] = fir.alloca i32 {bindc_name = "res", uniq_name = "_QFselected_real_kind_test_pdEres"}137! CHECK: %[[VAL_3:.*]] = fir.absent !fir.ref<i1>138! CHECK: %[[VAL_6:.*]] = arith.constant 4 : i32139! CHECK: %[[VAL_7:.*]] = arith.constant 0 : i32140! CHECK: %[[VAL_8:.*]] = arith.constant 4 : i32141! CHECK: %[[VAL_10:.*]] = fir.convert %[[VAL_0]] : (!fir.ref<i32>) -> !fir.llvm_ptr<i8>142! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_3]] : (!fir.ref<i1>) -> !fir.llvm_ptr<i8>143! CHECK: %[[VAL_12:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<i32>) -> !fir.llvm_ptr<i8>144! CHECK: %[[VAL_13:.*]] = fir.call @_FortranASelectedRealKind(%{{.*}}, %{{.*}}, %[[VAL_10]], %[[VAL_6]], %[[VAL_11]], %[[VAL_7]], %[[VAL_12]], %[[VAL_8]]) {{.*}}: (!fir.ref<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32) -> i32145! CHECK: fir.store %[[VAL_13]] to %[[VAL_2]] : !fir.ref<i32>146! CHECK: return147! CHECK: }148 149subroutine selected_real_kind_test_pd(p, d)150 integer :: p, d, res151 res = selected_real_kind(P=p, RADIX=d)152end153 154! CHECK-LABEL: func.func @_QPselected_real_kind_test_pr(155! CHECK-SAME: %[[VAL_0:.*]]: !fir.ref<i32> {fir.bindc_name = "p"},156! CHECK-SAME: %[[VAL_1:.*]]: !fir.ref<i32> {fir.bindc_name = "r"}) {157! CHECK: %[[VAL_2:.*]] = fir.alloca i32 {bindc_name = "res", uniq_name = "_QFselected_real_kind_test_prEres"}158! CHECK: %[[VAL_3:.*]] = fir.absent !fir.ref<i1>159! CHECK: %[[VAL_6:.*]] = arith.constant 4 : i32160! CHECK: %[[VAL_7:.*]] = arith.constant 4 : i32161! CHECK: %[[VAL_8:.*]] = arith.constant 0 : i32162! CHECK: %[[VAL_10:.*]] = fir.convert %[[VAL_0]] : (!fir.ref<i32>) -> !fir.llvm_ptr<i8>163! CHECK: %[[VAL_11:.*]] = fir.convert %[[VAL_1]] : (!fir.ref<i32>) -> !fir.llvm_ptr<i8>164! CHECK: %[[VAL_12:.*]] = fir.convert %[[VAL_3]] : (!fir.ref<i1>) -> !fir.llvm_ptr<i8>165! CHECK: %[[VAL_13:.*]] = fir.call @_FortranASelectedRealKind(%{{.*}}, %{{.*}}, %[[VAL_10]], %[[VAL_6]], %[[VAL_11]], %[[VAL_7]], %[[VAL_12]], %[[VAL_8]]) {{.*}}: (!fir.ref<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32, !fir.llvm_ptr<i8>, i32) -> i32166! CHECK: fir.store %[[VAL_13]] to %[[VAL_2]] : !fir.ref<i32>167! CHECK: return168! CHECK: }169 170subroutine selected_real_kind_test_pr(p, r)171 integer :: p, r, res172 res = selected_real_kind(P=p, R=r)173end174