brintos

brintos / llvm-project-archived public Read only

0
0
Text · 21.4 KiB · 2194044 Raw
276 lines · plain
1! RUN: bbc -emit-hlfir -o - %s | FileCheck %s2 3! CHECK-LABEL: c.func @_QQmain4program p5  use ieee_arithmetic, only: ieee_int, ieee_rint6  use ieee_arithmetic, only: ieee_value, ieee_positive_inf7  use ieee_arithmetic, only: ieee_to_zero, ieee_nearest, ieee_up, ieee_away8 9  ! CHECK:     %[[V_10:[0-9]+]] = fir.alloca i32 {bindc_name = "n", uniq_name = "_QFEn"}10  ! CHECK:     %[[V_11:[0-9]+]]:2 = hlfir.declare %[[V_10]] {uniq_name = "_QFEn"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)11  ! CHECK:     %[[V_12:[0-9]+]] = fir.alloca i128 {bindc_name = "n16", uniq_name = "_QFEn16"}12  ! CHECK:     %[[V_13:[0-9]+]]:2 = hlfir.declare %[[V_12]] {uniq_name = "_QFEn16"} : (!fir.ref<i128>) -> (!fir.ref<i128>, !fir.ref<i128>)13  ! CHECK:     %[[V_14:[0-9]+]] = fir.alloca i16 {bindc_name = "n2", uniq_name = "_QFEn2"}14  ! CHECK:     %[[V_15:[0-9]+]]:2 = hlfir.declare %[[V_14]] {uniq_name = "_QFEn2"} : (!fir.ref<i16>) -> (!fir.ref<i16>, !fir.ref<i16>)15  ! CHECK:     %[[V_16:[0-9]+]] = fir.alloca i64 {bindc_name = "n8", uniq_name = "_QFEn8"}16  ! CHECK:     %[[V_17:[0-9]+]]:2 = hlfir.declare %[[V_16]] {uniq_name = "_QFEn8"} : (!fir.ref<i64>) -> (!fir.ref<i64>, !fir.ref<i64>)17  ! CHECK:     %[[V_18:[0-9]+]] = fir.alloca f32 {bindc_name = "x", uniq_name = "_QFEx"}18  ! CHECK:     %[[V_19:[0-9]+]]:2 = hlfir.declare %[[V_18]] {uniq_name = "_QFEx"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)19  ! CHECK:     %[[V_20:[0-9]+]] = fir.alloca f16 {bindc_name = "x2", uniq_name = "_QFEx2"}20  ! CHECK:     %[[V_21:[0-9]+]]:2 = hlfir.declare %[[V_20]] {uniq_name = "_QFEx2"} : (!fir.ref<f16>) -> (!fir.ref<f16>, !fir.ref<f16>)21  ! CHECK:     %[[V_22:[0-9]+]] = fir.alloca bf16 {bindc_name = "x3", uniq_name = "_QFEx3"}22  ! CHECK:     %[[V_23:[0-9]+]]:2 = hlfir.declare %[[V_22]] {uniq_name = "_QFEx3"} : (!fir.ref<bf16>) -> (!fir.ref<bf16>, !fir.ref<bf16>)23  ! CHECK:     %[[V_24:[0-9]+]] = fir.alloca f32 {bindc_name = "x8", uniq_name = "_QFEx8"}24  ! CHECK:     %[[V_25:[0-9]+]]:2 = hlfir.declare %[[V_24]] {uniq_name = "_QFEx8"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)25  ! CHECK:     %[[V_26:[0-9]+]] = fir.alloca f32 {bindc_name = "y", uniq_name = "_QFEy"}26  ! CHECK:     %[[V_27:[0-9]+]]:2 = hlfir.declare %[[V_26]] {uniq_name = "_QFEy"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)27  ! CHECK:     %[[V_28:[0-9]+]] = fir.alloca f16 {bindc_name = "y2", uniq_name = "_QFEy2"}28  ! CHECK:     %[[V_29:[0-9]+]]:2 = hlfir.declare %[[V_28]] {uniq_name = "_QFEy2"} : (!fir.ref<f16>) -> (!fir.ref<f16>, !fir.ref<f16>)29  ! CHECK:     %[[V_30:[0-9]+]] = fir.alloca bf16 {bindc_name = "y3", uniq_name = "_QFEy3"}30  ! CHECK:     %[[V_31:[0-9]+]]:2 = hlfir.declare %[[V_30]] {uniq_name = "_QFEy3"} : (!fir.ref<bf16>) -> (!fir.ref<bf16>, !fir.ref<bf16>)31  ! CHECK:     %[[V_32:[0-9]+]] = fir.alloca f32 {bindc_name = "y8", uniq_name = "_QFEy8"}32  ! CHECK:     %[[V_33:[0-9]+]]:2 = hlfir.declare %[[V_32]] {uniq_name = "_QFEy8"} : (!fir.ref<f32>) -> (!fir.ref<f32>, !fir.ref<f32>)33  integer(2) n234  integer(8) n835  integer(16) n1636  real(2) x2, y237  real(3) x3, y338 39  ! CHECK:     hlfir.assign %cst{{[_0-9]*}} to %[[V_19]]#0 : f32, !fir.ref<f32>40  x = -200.741 42  ! CHECK:     %[[V_34:[0-9]+]] = fir.address_of(@_QQro._QM__fortran_builtinsT__builtin_ieee_round_type.0) : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>43  ! CHECK:     %[[V_35:[0-9]+]]:2 = hlfir.declare %[[V_34]]44  ! CHECK:     %[[V_36:[0-9]+]] = fir.load %[[V_19]]#0 : !fir.ref<f32>45  ! CHECK:     %[[V_37:[0-9]+]] = fir.call @llvm.get.rounding() fastmath<contract> : () -> i3246  ! CHECK:     %[[V_39:[0-9]+]] = fir.coordinate_of %[[V_35]]#0, _QM__fortran_builtinsT__builtin_ieee_round_type.mode : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>) -> !fir.ref<i8>47  ! CHECK:     %[[V_40:[0-9]+]] = fir.load %[[V_39]] : !fir.ref<i8>48  ! CHECK:     %[[V_41:[0-9]+]] = arith.shli %c-1{{.*}}, %c2{{.*}} : i849  ! CHECK:     %[[V_42:[0-9]+]] = arith.andi %[[V_40]], %[[V_41]] : i850  ! CHECK:     %[[V_43:[0-9]+]] = arith.cmpi eq, %[[V_42]], %c0{{.*}} : i851  ! CHECK:     %[[V_44:[0-9]+]] = arith.select %[[V_43]], %[[V_40]], %c1{{.*}} : i852  ! CHECK:     %[[V_45:[0-9]+]] = fir.convert %[[V_44]] : (i8) -> i3253  ! CHECK:     fir.call @llvm.set.rounding(%[[V_45]]) fastmath<contract> : (i32) -> ()54  ! CHECK:     %[[V_46:[0-9]+]] = fir.call @llvm.nearbyint.f32(%[[V_36]]) fastmath<contract> : (f32) -> f3255  ! CHECK:     %[[V_47:[0-9]+]] = fir.convert %[[V_46]] : (f32) -> f3256  ! CHECK:     fir.call @llvm.set.rounding(%[[V_37]]) fastmath<contract> : (i32) -> ()57  ! CHECK:     hlfir.assign %[[V_47]] to %[[V_27]]#0 : f32, !fir.ref<f32>58  y = ieee_rint(x, ieee_nearest)59 60  ! CHECK:     %[[V_48:[0-9]+]] = fir.address_of(@_QQro._QM__fortran_builtinsT__builtin_ieee_round_type.0) : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>61  ! CHECK:     %[[V_49:[0-9]+]]:2 = hlfir.declare %[[V_48]]62  ! CHECK:     %[[V_50:[0-9]+]] = fir.load %[[V_19]]#0 : !fir.ref<f32>63  ! CHECK:     %[[V_51:[0-9]+]] = fir.call @llvm.get.rounding() fastmath<contract> : () -> i3264  ! CHECK:     %[[V_53:[0-9]+]] = fir.coordinate_of %[[V_49]]#0, _QM__fortran_builtinsT__builtin_ieee_round_type.mode : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>) -> !fir.ref<i8>65  ! CHECK:     %[[V_54:[0-9]+]] = fir.load %[[V_53]] : !fir.ref<i8>66  ! CHECK:     %[[V_55:[0-9]+]] = arith.shli %c-1{{.*}}, %c2{{.*}} : i867  ! CHECK:     %[[V_56:[0-9]+]] = arith.andi %[[V_54]], %[[V_55]] : i868  ! CHECK:     %[[V_57:[0-9]+]] = arith.cmpi eq, %[[V_56]], %c0{{.*}} : i869  ! CHECK:     %[[V_58:[0-9]+]] = arith.select %[[V_57]], %[[V_54]], %c1{{.*}} : i870  ! CHECK:     %[[V_59:[0-9]+]] = fir.convert %[[V_58]] : (i8) -> i3271  ! CHECK:     fir.call @llvm.set.rounding(%[[V_59]]) fastmath<contract> : (i32) -> ()72  ! CHECK:     %[[V_60:[0-9]+]] = fir.call @llvm.nearbyint.f32(%[[V_50]]) fastmath<contract> : (f32) -> f3273  ! CHECK:     %[[V_61:[0-9]+]] = fir.convert %[[V_60]] : (f32) -> f3274  ! CHECK:     fir.call @llvm.set.rounding(%[[V_51]]) fastmath<contract> : (i32) -> ()75  ! CHECK:     %[[V_62:[0-9]+]] = fir.convert %c-2147483648{{.*}} : (i32) -> f3276  ! CHECK:     %[[V_63:[0-9]+]] = arith.negf %[[V_62]] fastmath<contract> : f3277  ! CHECK:     %[[V_64:[0-9]+]] = arith.cmpf oge, %[[V_61]], %[[V_62]] fastmath<contract> : f3278  ! CHECK:     %[[V_65:[0-9]+]] = arith.cmpf olt, %[[V_61]], %[[V_63]] fastmath<contract> : f3279  ! CHECK:     %[[V_66:[0-9]+]] = arith.andi %[[V_64]], %[[V_65]] : i180  ! CHECK:     %[[V_67:[0-9]+]] = fir.if %[[V_66]] -> (i32) {81  ! CHECK:       %[[V_163:[0-9]+]] = arith.cmpf one, %[[V_50]], %[[V_61]] fastmath<contract> : f3282  ! CHECK:       fir.if %[[V_163]] {83  ! CHECK:         %[[V_165:[0-9]+]] = fir.call @_FortranAMapException(%c32{{.*}}) fastmath<contract> : (i32) -> i3284  ! CHECK:                             fir.call {{.*}}feraiseexcept(%[[V_165]]) fastmath<contract> : (i32)85  ! CHECK:       }86  ! CHECK:       %[[V_164:[0-9]+]] = fir.convert %[[V_61]] : (f32) -> i3287  ! CHECK:       fir.result %[[V_164]] : i3288  ! CHECK:     } else {89  ! CHECK:       %[[V_163:[0-9]+]] = fir.call @_FortranAMapException(%c1{{.*}}) fastmath<contract> : (i32) -> i3290  ! CHECK:                           fir.call {{.*}}feraiseexcept(%[[V_163]]) fastmath<contract> : (i32)91  ! CHECK:       %[[V_165:[0-9]+]] = arith.select %[[V_64]], %c2147483647{{.*}}, %c-2147483648{{.*}} : i3292  ! CHECK:       fir.result %[[V_165]] : i3293  ! CHECK:     }94  ! CHECK:     hlfir.assign %[[V_67]] to %[[V_11]]#0 : i32, !fir.ref<i32>95  n = ieee_int(x, ieee_nearest)96! print*, x, ' -> ', y, ' -> ', n97 98  ! CHECK:     hlfir.assign %cst{{[_0-9]*}} to %[[V_21]]#0 : f16, !fir.ref<f16>99  x2 = huge(x2)100 101  ! CHECK:     %[[V_68:[0-9]+]] = fir.address_of(@_QQro._QM__fortran_builtinsT__builtin_ieee_round_type.1) : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>102  ! CHECK:     %[[V_69:[0-9]+]]:2 = hlfir.declare %[[V_68]]103  ! CHECK:     %[[V_70:[0-9]+]] = fir.load %[[V_21]]#0 : !fir.ref<f16>104  ! CHECK:     %[[V_71:[0-9]+]] = fir.call @llvm.get.rounding() fastmath<contract> : () -> i32105  ! CHECK:     %[[V_73:[0-9]+]] = fir.coordinate_of %[[V_69]]#0, _QM__fortran_builtinsT__builtin_ieee_round_type.mode : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>) -> !fir.ref<i8>106  ! CHECK:     %[[V_74:[0-9]+]] = fir.load %[[V_73]] : !fir.ref<i8>107  ! CHECK:     %[[V_75:[0-9]+]] = arith.shli %c-1{{.*}}, %c2{{.*}} : i8108  ! CHECK:     %[[V_76:[0-9]+]] = arith.andi %[[V_74]], %[[V_75]] : i8109  ! CHECK:     %[[V_77:[0-9]+]] = arith.cmpi eq, %[[V_76]], %c0{{.*}} : i8110  ! CHECK:     %[[V_78:[0-9]+]] = arith.select %[[V_77]], %[[V_74]], %c1{{.*}} : i8111  ! CHECK:     %[[V_79:[0-9]+]] = fir.convert %[[V_78]] : (i8) -> i32112  ! CHECK:     fir.call @llvm.set.rounding(%[[V_79]]) fastmath<contract> : (i32) -> ()113  ! CHECK:     %[[V_80:[0-9]+]] = fir.convert %[[V_70]] : (f16) -> f32114  ! CHECK:     %[[V_81:[0-9]+]] = fir.call @llvm.nearbyint.f32(%[[V_80]]) fastmath<contract> : (f32) -> f32115  ! CHECK:     %[[V_82:[0-9]+]] = fir.convert %[[V_81]] : (f32) -> f16116  ! CHECK:     fir.call @llvm.set.rounding(%[[V_71]]) fastmath<contract> : (i32) -> ()117  ! CHECK:     hlfir.assign %[[V_82]] to %[[V_29]]#0 : f16, !fir.ref<f16>118  y2 = ieee_rint(x2, ieee_up)119 120  ! CHECK:     %[[V_83:[0-9]+]] = fir.address_of(@_QQro._QM__fortran_builtinsT__builtin_ieee_round_type.1) : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>121  ! CHECK:     %[[V_84:[0-9]+]]:2 = hlfir.declare %[[V_83]]122  ! CHECK:     %[[V_85:[0-9]+]] = fir.load %[[V_21]]#0 : !fir.ref<f16>123  ! CHECK:     %[[V_86:[0-9]+]] = fir.call @llvm.get.rounding() fastmath<contract> : () -> i32124  ! CHECK:     %[[V_88:[0-9]+]] = fir.coordinate_of %[[V_84]]#0, _QM__fortran_builtinsT__builtin_ieee_round_type.mode : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>) -> !fir.ref<i8>125  ! CHECK:     %[[V_89:[0-9]+]] = fir.load %[[V_88]] : !fir.ref<i8>126  ! CHECK:     %[[V_90:[0-9]+]] = arith.shli %c-1{{.*}}, %c2{{.*}} : i8127  ! CHECK:     %[[V_91:[0-9]+]] = arith.andi %[[V_89]], %[[V_90]] : i8128  ! CHECK:     %[[V_92:[0-9]+]] = arith.cmpi eq, %[[V_91]], %c0{{.*}} : i8129  ! CHECK:     %[[V_93:[0-9]+]] = arith.select %[[V_92]], %[[V_89]], %c1{{.*}} : i8130  ! CHECK:     %[[V_94:[0-9]+]] = fir.convert %[[V_93]] : (i8) -> i32131  ! CHECK:     fir.call @llvm.set.rounding(%[[V_94]]) fastmath<contract> : (i32) -> ()132  ! CHECK:     %[[V_95:[0-9]+]] = fir.convert %[[V_85]] : (f16) -> f32133  ! CHECK:     %[[V_96:[0-9]+]] = fir.call @llvm.nearbyint.f32(%[[V_95]]) fastmath<contract> : (f32) -> f32134  ! CHECK:     %[[V_97:[0-9]+]] = fir.convert %[[V_96]] : (f32) -> f16135  ! CHECK:     fir.call @llvm.set.rounding(%[[V_86]]) fastmath<contract> : (i32) -> ()136  ! CHECK:     %[[V_98:[0-9]+]] = fir.convert %c-9223372036854775808{{.*}} : (i64) -> f16137  ! CHECK:     %[[V_99:[0-9]+]] = arith.negf %[[V_98]] fastmath<contract> : f16138  ! CHECK:     %[[V_100:[0-9]+]] = arith.cmpf oge, %[[V_97]], %[[V_98]] fastmath<contract> : f16139  ! CHECK:     %[[V_101:[0-9]+]] = arith.cmpf olt, %[[V_97]], %[[V_99]] fastmath<contract> : f16140  ! CHECK:     %[[V_102:[0-9]+]] = arith.andi %[[V_100]], %[[V_101]] : i1141  ! CHECK:     %[[V_103:[0-9]+]] = fir.if %[[V_102]] -> (i64) {142  ! CHECK:       %[[V_163:[0-9]+]] = arith.cmpf one, %[[V_85]], %[[V_97]] fastmath<contract> : f16143  ! CHECK:       fir.if %[[V_163]] {144  ! CHECK:         %[[V_165:[0-9]+]] = fir.call @_FortranAMapException(%c32{{.*}}) fastmath<contract> : (i32) -> i32145  ! CHECK:                             fir.call {{.*}}feraiseexcept(%[[V_165]]) fastmath<contract> : (i32)146  ! CHECK:       }147  ! CHECK:       %[[V_164:[0-9]+]] = fir.convert %[[V_97]] : (f16) -> i64148  ! CHECK:       fir.result %[[V_164]] : i64149  ! CHECK:     } else {150  ! CHECK:       %[[V_163:[0-9]+]] = fir.call @_FortranAMapException(%c1{{.*}}) fastmath<contract> : (i32) -> i32151  ! CHECK:                           fir.call {{.*}}feraiseexcept(%[[V_163]]) fastmath<contract> : (i32)152  ! CHECK:       %[[V_165:[0-9]+]] = arith.select %[[V_100]], %c9223372036854775807{{.*}}, %c-9223372036854775808{{.*}} : i64153  ! CHECK:       fir.result %[[V_165]] : i64154  ! CHECK:     }155  ! CHECK:     hlfir.assign %[[V_103]] to %[[V_17]]#0 : i64, !fir.ref<i64>156  n8 = ieee_int(x2, ieee_up, 8)157 158! print*, x2, ' -> ', y2, ' -> ', n8159 160  ! CHECK:     hlfir.assign %cst{{[_0-9]*}} to %[[V_23]]#0 : bf16, !fir.ref<bf16>161  x3 = -0.162 163  ! CHECK:     %[[V_104:[0-9]+]] = fir.load %[[V_23]]#0 : !fir.ref<bf16>164  ! CHECK:     %[[V_105:[0-9]+]] = fir.convert %[[V_104]] : (bf16) -> f32165  ! CHECK:     %[[V_106:[0-9]+]] = fir.call @llvm.nearbyint.f32(%[[V_105]]) fastmath<contract> : (f32) -> f32166  ! CHECK:     %[[V_107:[0-9]+]] = fir.convert %[[V_106]] : (f32) -> bf16167  ! CHECK:     %[[V_108:[0-9]+]] = arith.cmpf one, %[[V_104]], %[[V_107]] fastmath<contract> : bf16168  ! CHECK:     fir.if %[[V_108]] {169  ! CHECK:       %[[V_163:[0-9]+]] = fir.call @_FortranAMapException(%c32{{.*}}) fastmath<contract> : (i32) -> i32170  ! CHECK:                           fir.call {{.*}}feraiseexcept(%[[V_163]]) fastmath<contract> : (i32)171  ! CHECK:     }172  ! CHECK:     hlfir.assign %[[V_107]] to %[[V_31]]#0 : bf16, !fir.ref<bf16>173  y3 = ieee_rint(x3)174 175  ! CHECK:     %[[V_109:[0-9]+]] = fir.address_of(@_QQro._QM__fortran_builtinsT__builtin_ieee_round_type.2) : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>176  ! CHECK:     %[[V_110:[0-9]+]]:2 = hlfir.declare %[[V_109]]177  ! CHECK:     %[[V_111:[0-9]+]] = fir.load %[[V_23]]#0 : !fir.ref<bf16>178  ! CHECK:     %[[V_112:[0-9]+]] = fir.call @llvm.get.rounding() fastmath<contract> : () -> i32179  ! CHECK:     %[[V_114:[0-9]+]] = fir.coordinate_of %[[V_110]]#0, _QM__fortran_builtinsT__builtin_ieee_round_type.mode : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>) -> !fir.ref<i8>180  ! CHECK:     %[[V_115:[0-9]+]] = fir.load %[[V_114]] : !fir.ref<i8>181  ! CHECK:     %[[V_116:[0-9]+]] = arith.shli %c-1{{.*}}, %c2{{.*}} : i8182  ! CHECK:     %[[V_117:[0-9]+]] = arith.andi %[[V_115]], %[[V_116]] : i8183  ! CHECK:     %[[V_118:[0-9]+]] = arith.cmpi eq, %[[V_117]], %c0{{.*}} : i8184  ! CHECK:     %[[V_119:[0-9]+]] = arith.select %[[V_118]], %[[V_115]], %c1{{.*}} : i8185  ! CHECK:     %[[V_120:[0-9]+]] = fir.convert %[[V_119]] : (i8) -> i32186  ! CHECK:     fir.call @llvm.set.rounding(%[[V_120]]) fastmath<contract> : (i32) -> ()187  ! CHECK:     %[[V_121:[0-9]+]] = fir.convert %[[V_111]] : (bf16) -> f32188  ! CHECK:     %[[V_122:[0-9]+]] = fir.call @llvm.nearbyint.f32(%[[V_121]]) fastmath<contract> : (f32) -> f32189  ! CHECK:     %[[V_123:[0-9]+]] = fir.convert %[[V_122]] : (f32) -> bf16190  ! CHECK:     fir.call @llvm.set.rounding(%[[V_112]]) fastmath<contract> : (i32) -> ()191  ! CHECK:     %[[V_124:[0-9]+]] = fir.convert %c-170141183460469231731687303715884105728{{.*}} : (i128) -> bf16192  ! CHECK:     %[[V_125:[0-9]+]] = arith.negf %[[V_124]] fastmath<contract> : bf16193  ! CHECK:     %[[V_126:[0-9]+]] = arith.cmpf oge, %[[V_123]], %[[V_124]] fastmath<contract> : bf16194  ! CHECK:     %[[V_127:[0-9]+]] = arith.cmpf olt, %[[V_123]], %[[V_125]] fastmath<contract> : bf16195  ! CHECK:     %[[V_128:[0-9]+]] = arith.andi %[[V_126]], %[[V_127]] : i1196  ! CHECK:     %[[V_129:[0-9]+]] = fir.if %[[V_128]] -> (i128) {197  ! CHECK:       %[[V_163:[0-9]+]] = arith.cmpf one, %[[V_111]], %[[V_123]] fastmath<contract> : bf16198  ! CHECK:       fir.if %[[V_163]] {199  ! CHECK:         %[[V_165:[0-9]+]] = fir.call @_FortranAMapException(%c32{{.*}}) fastmath<contract> : (i32) -> i32200  ! CHECK:                             fir.call {{.*}}feraiseexcept(%[[V_165]]) fastmath<contract> : (i32)201  ! CHECK:       }202  ! CHECK:       %[[V_164:[0-9]+]] = fir.convert %[[V_123]] : (bf16) -> i128203  ! CHECK:       fir.result %[[V_164]] : i128204  ! CHECK:     } else {205  ! CHECK:       %[[V_163:[0-9]+]] = fir.call @_FortranAMapException(%c1{{.*}}) fastmath<contract> : (i32) -> i32206  ! CHECK:                           fir.call {{.*}}feraiseexcept(%[[V_163]]) fastmath<contract> : (i32)207  ! CHECK:       %[[V_165:[0-9]+]] = arith.select %[[V_126]], %c170141183460469231731687303715884105727{{.*}}, %c-170141183460469231731687303715884105728{{.*}} : i128208  ! CHECK:       fir.result %[[V_165]] : i128209  ! CHECK:     }210  ! CHECK:     hlfir.assign %[[V_129]] to %[[V_13]]#0 : i128, !fir.ref<i128>211  n16 = ieee_int(x3, ieee_away, 16) ! ieee_away is not supported, treated as ieee_nearest212 213! print*, x3, ' -> ', y3, ' -> ', n16214 215  ! CHECK:     %[[V_130:[0-9]+]] = fir.address_of(@_QQro._QMieee_arithmeticTieee_class_type.3) : !fir.ref<!fir.type<_QMieee_arithmeticTieee_class_type{_QMieee_arithmeticTieee_class_type.which:i8}>>216  ! CHECK:     %[[V_131:[0-9]+]]:2 = hlfir.declare %[[V_130]]217  ! CHECK:     %[[V_133:[0-9]+]] = fir.coordinate_of %[[V_131]]#0, _QMieee_arithmeticTieee_class_type.which : (!fir.ref<!fir.type<_QMieee_arithmeticTieee_class_type{_QMieee_arithmeticTieee_class_type.which:i8}>>) -> !fir.ref<i8>218  ! CHECK:     %[[V_134:[0-9]+]] = fir.load %[[V_133]] : !fir.ref<i8>219  ! CHECK:     %[[V_135:[0-9]+]] = fir.address_of(@_FortranAIeeeValueTable_4) : !fir.ref<!fir.array<12xi32>>220  ! CHECK:     %[[V_136:[0-9]+]] = fir.coordinate_of %[[V_135]], %[[V_134]] : (!fir.ref<!fir.array<12xi32>>, i8) -> !fir.ref<i32>221  ! CHECK:     %[[V_137:[0-9]+]] = fir.load %[[V_136]] : !fir.ref<i32>222  ! CHECK:     %[[V_138:[0-9]+]] = arith.bitcast %[[V_137]] : i32 to f32223  ! CHECK:     hlfir.assign %[[V_138]] to %[[V_25]]#0 : f32, !fir.ref<f32>224  x8 = ieee_value(x8, ieee_positive_inf)225 226  ! CHECK:     %[[V_139:[0-9]+]] = fir.load %[[V_25]]#0 : !fir.ref<f32>227  ! CHECK:     %[[V_140:[0-9]+]] = fir.call @llvm.nearbyint.f32(%[[V_139]]) fastmath<contract> : (f32) -> f32228  ! CHECK:     %[[V_141:[0-9]+]] = fir.convert %[[V_140]] : (f32) -> f32229  ! CHECK:     %[[V_142:[0-9]+]] = arith.cmpf one, %[[V_139]], %[[V_141]] fastmath<contract> : f32230  ! CHECK:     fir.if %[[V_142]] {231  ! CHECK:       %[[V_163:[0-9]+]] = fir.call @_FortranAMapException(%c32{{.*}}) fastmath<contract> : (i32) -> i32232  ! CHECK:                           fir.call {{.*}}feraiseexcept(%[[V_163]]) fastmath<contract> : (i32)233  ! CHECK:     }234  ! CHECK:     hlfir.assign %[[V_141]] to %[[V_33]]#0 : f32, !fir.ref<f32>235  y8 = ieee_rint(x8)236 237  ! CHECK:     %[[V_143:[0-9]+]] = fir.address_of(@_QQro._QM__fortran_builtinsT__builtin_ieee_round_type.4) : !fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>238  ! CHECK:     %[[V_144:[0-9]+]]:2 = hlfir.declare %[[V_143]]239  ! CHECK:     %[[V_145:[0-9]+]] = fir.load %[[V_25]]#0 : !fir.ref<f32>240  ! CHECK:     %[[V_146:[0-9]+]] = fir.call @llvm.get.rounding() fastmath<contract> : () -> i32241  ! CHECK:     %[[V_148:[0-9]+]] = fir.coordinate_of %[[V_144]]#0, _QM__fortran_builtinsT__builtin_ieee_round_type.mode : (!fir.ref<!fir.type<_QM__fortran_builtinsT__builtin_ieee_round_type{_QM__fortran_builtinsT__builtin_ieee_round_type.mode:i8}>>) -> !fir.ref<i8>242  ! CHECK:     %[[V_149:[0-9]+]] = fir.load %[[V_148]] : !fir.ref<i8>243  ! CHECK:     %[[V_150:[0-9]+]] = arith.shli %c-1{{.*}}, %c2{{.*}} : i8244  ! CHECK:     %[[V_151:[0-9]+]] = arith.andi %[[V_149]], %[[V_150]] : i8245  ! CHECK:     %[[V_152:[0-9]+]] = arith.cmpi eq, %[[V_151]], %c0{{.*}} : i8246  ! CHECK:     %[[V_153:[0-9]+]] = arith.select %[[V_152]], %[[V_149]], %c1{{.*}} : i8247  ! CHECK:     %[[V_154:[0-9]+]] = fir.convert %[[V_153]] : (i8) -> i32248  ! CHECK:     fir.call @llvm.set.rounding(%[[V_154]]) fastmath<contract> : (i32) -> ()249  ! CHECK:     %[[V_155:[0-9]+]] = fir.call @llvm.nearbyint.f32(%[[V_145]]) fastmath<contract> : (f32) -> f32250  ! CHECK:     %[[V_156:[0-9]+]] = fir.convert %[[V_155]] : (f32) -> f32251  ! CHECK:     fir.call @llvm.set.rounding(%[[V_146]]) fastmath<contract> : (i32) -> ()252  ! CHECK:     %[[V_157:[0-9]+]] = fir.convert %c-32768{{.*}} : (i16) -> f32253  ! CHECK:     %[[V_158:[0-9]+]] = arith.negf %[[V_157]] fastmath<contract> : f32254  ! CHECK:     %[[V_159:[0-9]+]] = arith.cmpf oge, %[[V_156]], %[[V_157]] fastmath<contract> : f32255  ! CHECK:     %[[V_160:[0-9]+]] = arith.cmpf olt, %[[V_156]], %[[V_158]] fastmath<contract> : f32256  ! CHECK:     %[[V_161:[0-9]+]] = arith.andi %[[V_159]], %[[V_160]] : i1257  ! CHECK:     %[[V_162:[0-9]+]] = fir.if %[[V_161]] -> (i16) {258  ! CHECK:       %[[V_163:[0-9]+]] = arith.cmpf one, %[[V_145]], %[[V_156]] fastmath<contract> : f32259  ! CHECK:       fir.if %[[V_163]] {260  ! CHECK:         %[[V_165:[0-9]+]] = fir.call @_FortranAMapException(%c32{{.*}}) fastmath<contract> : (i32) -> i32261  ! CHECK:                             fir.call {{.*}}feraiseexcept(%[[V_165]]) fastmath<contract> : (i32)262  ! CHECK:       }263  ! CHECK:       %[[V_164:[0-9]+]] = fir.convert %[[V_156]] : (f32) -> i16264  ! CHECK:       fir.result %[[V_164]] : i16265  ! CHECK:     } else {266  ! CHECK:       %[[V_163:[0-9]+]] = fir.call @_FortranAMapException(%c1{{.*}}) fastmath<contract> : (i32) -> i32267  ! CHECK:                           fir.call {{.*}}feraiseexcept(%[[V_163]]) fastmath<contract> : (i32)268  ! CHECK:       %[[V_165:[0-9]+]] = arith.select %[[V_159]], %c32767{{.*}}, %c-32768{{.*}} : i16269  ! CHECK:       fir.result %[[V_165]] : i16270  ! CHECK:     }271  ! CHECK:     hlfir.assign %[[V_162]] to %[[V_15]]#0 : i16, !fir.ref<i16>272  n2 = ieee_int(x8, ieee_to_zero, 2)273 274! print*, x8, ' -> ', y8, ' -> ', n2275end276