brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.3 KiB · fd4144e Raw
118 lines · plain
1! RUN: bbc -emit-fir -o - %s | FileCheck %s2 3! CHECK-LABEL: c.func @_QPout4subroutine out(x)5  use ieee_arithmetic6  integer, parameter :: k = 87 8  ! CHECK:     %[[V_60:[0-9]+]] = fir.alloca !fir.logical<4> {bindc_name = "l", uniq_name = "_QFoutEl"}9  ! CHECK:     %[[V_61:[0-9]+]] = fir.declare %[[V_60]] {uniq_name = "_QFoutEl"} : (!fir.ref<!fir.logical<4>>) -> !fir.ref<!fir.logical<4>>10  ! CHECK:     %[[V_62:[0-9]+]] = fir.alloca f64 {bindc_name = "r", uniq_name = "_QFoutEr"}11  ! CHECK:     %[[V_63:[0-9]+]] = fir.declare %[[V_62]] {uniq_name = "_QFoutEr"} : (!fir.ref<f64>) -> !fir.ref<f64>12  ! CHECK:     %[[V_64:[0-9]+]] = fir.declare %arg0 dummy_scope %{{[0-9]+}} arg {{[0-9]+}} {uniq_name = "_QFoutEx"} : (!fir.ref<f64>, !fir.dscope) -> !fir.ref<f64>13  real(k) :: x, r14  logical :: L15 16  ! CHECK:     %[[V_65:[0-9]+]] = fir.address_of(@_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.0) : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_flag_type{_QM__fortran_builtinsT__builtin_ieee_flag_type.flag:i8}>>17  ! CHECK:     %[[V_66:[0-9]+]] = fir.declare %[[V_65]] {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_flag_type{_QM__fortran_builtinsT__builtin_ieee_flag_type.flag:i8}>>) -> !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_flag_type{_QM__fortran_builtinsT__builtin_ieee_flag_type.flag:i8}>>18  ! CHECK:     %[[V_68:[0-9]+]] = fir.coordinate_of %[[V_66]], _QM__fortran_builtinsT__builtin_ieee_flag_type.flag : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_flag_type{_QM__fortran_builtinsT__builtin_ieee_flag_type.flag:i8}>>) -> !fir.ref<i8>19  ! CHECK:     %[[V_69:[0-9]+]] = fir.load %[[V_68]] : !fir.ref<i8>20  ! CHECK:     %[[V_70:[0-9]+]] = fir.convert %[[V_69]] : (i8) -> i3221  ! CHECK:     %[[V_71:[0-9]+]] = fir.call @_FortranAMapException(%[[V_70]]) fastmath<contract> : (i32) -> i3222  ! CHECK:     fir.if %false{{[_0-9]*}} {23  ! CHECK:       fir.call {{.*}}feraiseexcept(%[[V_71]]) fastmath<contract> : (i32)24  ! CHECK:     } else {25  ! CHECK:       fir.call {{.*}}feclearexcept(%[[V_71]]) fastmath<contract> : (i32)26  ! CHECK:     }27  call ieee_set_flag(ieee_divide_by_zero, .false.)28 29  ! CHECK:     %[[V_72:[0-9]+]] = fir.load %[[V_64]] : !fir.ref<f64>30  ! CHECK:     %[[V_73:[0-9]+]] = arith.bitcast %[[V_72]] : f64 to i6431  ! CHECK:     %[[V_74:[0-9]+]] = arith.cmpf oeq, %[[V_72]], %cst{{[_0-9]*}} {{.*}} : f6432  ! CHECK:     %[[V_75:[0-9]+]] = fir.if %[[V_74]] -> (f64) {33  ! CHECK:       %[[V_101:[0-9]+]] = fir.call @_FortranAMapException(%c4{{.*}}) fastmath<contract> : (i32) -> i3234  ! CHECK:       fir.call {{.*}}feraiseexcept(%[[V_101]]) fastmath<contract> : (i32)35  ! CHECK:       fir.result %cst{{[_0-9]*}} : f6436  ! CHECK:     } else {37  ! CHECK:       %[[V_101:[0-9]+]] = arith.shli %[[V_73]], %c1{{.*}} : i6438  ! CHECK:       %[[V_102:[0-9]+]] = "llvm.intr.is.fpclass"(%[[V_72]]) <{bit = 504 : i32}> : (f64) -> i139  ! CHECK:       %[[V_103:[0-9]+]] = fir.if %[[V_102]] -> (f64) {40  ! CHECK:         %[[V_104:[0-9]+]] = arith.shrui %[[V_101]], %c53{{.*}} : i6441  ! CHECK:         %[[V_105:[0-9]+]] = arith.subi %[[V_104]], %c1023{{.*}} : i6442  ! CHECK:         %[[V_106:[0-9]+]] = fir.convert %[[V_105]] : (i64) -> f6443  ! CHECK:         fir.result %[[V_106]] : f6444  ! CHECK:       } else {45  ! CHECK:         %[[V_104:[0-9]+]] = arith.shrui %[[V_101]], %c1{{.*}} : i6446  ! CHECK:         %[[V_105:[0-9]+]] = arith.bitcast %[[V_104]] : i64 to f6447  ! CHECK:         fir.result %[[V_105]] : f6448  ! CHECK:       }49  ! CHECK:       fir.result %[[V_103]] : f6450  ! CHECK:     }51  ! CHECK:     fir.store %[[V_75]] to %[[V_63]] : !fir.ref<f64>52  r = ieee_logb(x)53 54  ! CHECK:     %[[V_76:[0-9]+]] = fir.declare %[[V_65]] {fortran_attrs = #fir.var_attrs<parameter>, uniq_name = "_QQro._QM__fortran_builtinsT__builtin_ieee_flag_type.0"} : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_flag_type{_QM__fortran_builtinsT__builtin_ieee_flag_type.flag:i8}>>) -> !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_flag_type{_QM__fortran_builtinsT__builtin_ieee_flag_type.flag:i8}>>55  ! CHECK:     %[[V_77:[0-9]+]] = fir.coordinate_of %[[V_76]], _QM__fortran_builtinsT__builtin_ieee_flag_type.flag : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_flag_type{_QM__fortran_builtinsT__builtin_ieee_flag_type.flag:i8}>>) -> !fir.ref<i8>56  ! CHECK:     %[[V_78:[0-9]+]] = fir.load %[[V_77]] : !fir.ref<i8>57  ! CHECK:     %[[V_79:[0-9]+]] = fir.convert %[[V_78]] : (i8) -> i3258  ! CHECK:     %[[V_80:[0-9]+]] = fir.call @_FortranAMapException(%[[V_79]]) fastmath<contract> : (i32) -> i3259  ! CHECK:     %[[V_81:[0-9]+]] = fir.call {{.*}}fetestexcept(%[[V_80]]) fastmath<contract> : (i32) -> i3260  ! CHECK:     %[[V_82:[0-9]+]] = arith.cmpi ne, %[[V_81]], %c0{{.*}} : i3261  ! CHECK:     %[[V_83:[0-9]+]] = fir.convert %[[V_82]] : (i1) -> !fir.logical<4>62  ! CHECK:     fir.store %[[V_83]] to %[[V_61]] : !fir.ref<!fir.logical<4>>63  call ieee_get_flag(ieee_divide_by_zero, L)64 65  8 format ('  kind=8  ', f12.2, z18.16, f9.1, l3, '  ')66  write(*, 8) x, x, r, L67end68 69  use ieee_arithmetic70  integer, parameter :: k = 871  real(k) :: x, r72 73  call out(ieee_value(x, ieee_signaling_nan))74  call out(ieee_value(x, ieee_quiet_nan))75  call out(ieee_value(x, ieee_negative_inf))76  call out( -huge(x))77  call out( -huge(x)/2)78  call out(-sqrt(huge(x)))79  call out(-2000.0_k)80  call out(   -9.9_k)81  call out(   -9.0_k)82  call out(   -8.0_k)83  call out(   -7.0_k)84  call out(   -6.0_k)85  call out(   -5.0_k)86  call out(   -4.0_k)87  call out(   -3.9_k)88  call out(   -3.0_k)89  call out(   -2.0_k)90  call out(   -1.1_k)91  call out(ieee_value(x, ieee_negative_normal))92  call out( -.0001_k)93  call out( -tiny(x))94  call out(ieee_value(x, ieee_negative_subnormal))95  call out(ieee_value(x, ieee_negative_zero))96  call out(ieee_value(x, ieee_positive_zero))97  call out(ieee_value(x, ieee_positive_subnormal))98  call out(tiny(x))99  call out(.0001_k)100  call out(ieee_value(x, ieee_positive_normal))101  call out(   1.1_k)102  call out(   2.0_k)103  call out(   3.0_k)104  call out(   3.9_k)105  call out(   4.0_k)106  call out(   5.0_k)107  call out(   6.0_k)108  call out(   7.0_k)109  call out(   8.0_k)110  call out(   9.0_k)111  call out(   9.9_k)112  call out(2000.0_k)113  call out( sqrt(huge(x)))114  call out( huge(x)/2)115  call out( huge(x))116  call out(ieee_value(x, ieee_positive_inf))117end118