1! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s 2! RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir %s -o - | FileCheck %s 3 4! CHECK-LABEL: bge_test 5! CHECK-SAME: %[[A:.*]]: !fir.ref<i32>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<!fir.logical<4>>{{.*}} 6subroutine bge_test(a, b, c) 7 integer :: a, b 8 logical :: c 9 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i32> 10 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32> 11 c = bge(a, b) 12 ! CHECK: %[[C_CMP:.*]] = arith.cmpi uge, %[[A_VAL]], %[[B_VAL]] : i32 13 ! CHECK: %[[C_VAL:.*]] = fir.convert %[[C_CMP]] : (i1) -> !fir.logical<4> 14 ! CHECK: fir.store %[[C_VAL]] to %[[C]] : !fir.ref<!fir.logical<4>> 15end subroutine bge_test 16 17! CHECK-LABEL: bge_test1 18! CHECK-SAME: %[[A:.*]]: !fir.ref<i8>{{.*}}, %[[B:.*]]: !fir.ref<i8>{{.*}}, %[[C:.*]]: !fir.ref<!fir.logical<4>>{{.*}} 19subroutine bge_test1(a, b, c) 20 integer(kind=1) :: a, b 21 logical :: c 22 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i8> 23 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i8> 24 c = bge(a, b) 25 ! CHECK: %[[C_CMP:.*]] = arith.cmpi uge, %[[A_VAL]], %[[B_VAL]] : i8 26 ! CHECK: %[[C_VAL:.*]] = fir.convert %[[C_CMP]] : (i1) -> !fir.logical<4> 27 ! CHECK: fir.store %[[C_VAL]] to %[[C]] : !fir.ref<!fir.logical<4>> 28end subroutine bge_test1 29 30! CHECK-LABEL: bge_test2 31! CHECK-SAME: %[[A:.*]]: !fir.ref<i16>{{.*}}, %[[B:.*]]: !fir.ref<i16>{{.*}}, %[[C:.*]]: !fir.ref<!fir.logical<4>>{{.*}} 32subroutine bge_test2(a, b, c) 33 integer(kind=2) :: a, b 34 logical :: c 35 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i16> 36 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i16> 37 c = bge(a, b) 38 ! CHECK: %[[C_CMP:.*]] = arith.cmpi uge, %[[A_VAL]], %[[B_VAL]] : i16 39 ! CHECK: %[[C_VAL:.*]] = fir.convert %[[C_CMP]] : (i1) -> !fir.logical<4> 40 ! CHECK: fir.store %[[C_VAL]] to %[[C]] : !fir.ref<!fir.logical<4>> 41end subroutine bge_test2 42 43! CHECK-LABEL: bge_test3 44! CHECK-SAME: %[[A:.*]]: !fir.ref<i32>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<!fir.logical<4>>{{.*}} 45subroutine bge_test3(a, b, c) 46 integer(kind=4) :: a, b 47 logical :: c 48 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i32> 49 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32> 50 c = bge(a, b) 51 ! CHECK: %[[C_CMP:.*]] = arith.cmpi uge, %[[A_VAL]], %[[B_VAL]] : i32 52 ! CHECK: %[[C_VAL:.*]] = fir.convert %[[C_CMP]] : (i1) -> !fir.logical<4> 53 ! CHECK: fir.store %[[C_VAL]] to %[[C]] : !fir.ref<!fir.logical<4>> 54end subroutine bge_test3 55 56! CHECK-LABEL: bge_test4 57! CHECK-SAME: %[[A:.*]]: !fir.ref<i64>{{.*}}, %[[B:.*]]: !fir.ref<i64>{{.*}}, %[[C:.*]]: !fir.ref<!fir.logical<4>>{{.*}} 58subroutine bge_test4(a, b, c) 59 integer(kind=8) :: a, b 60 logical :: c 61 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i64> 62 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i64> 63 c = bge(a, b) 64 ! CHECK: %[[C_CMP:.*]] = arith.cmpi uge, %[[A_VAL]], %[[B_VAL]] : i64 65 ! CHECK: %[[C_VAL:.*]] = fir.convert %[[C_CMP]] : (i1) -> !fir.logical<4> 66 ! CHECK: fir.store %[[C_VAL]] to %[[C]] : !fir.ref<!fir.logical<4>> 67end subroutine bge_test4 68 69! CHECK-LABEL: bge_test5 70! CHECK-SAME: %[[A:.*]]: !fir.ref<i128>{{.*}}, %[[B:.*]]: !fir.ref<i128>{{.*}}, %[[C:.*]]: !fir.ref<!fir.logical<4>>{{.*}} 71subroutine bge_test5(a, b, c) 72 integer(kind=16) :: a, b 73 logical :: c 74 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i128> 75 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i128> 76 c = bge(a, b) 77 ! CHECK: %[[C_CMP:.*]] = arith.cmpi uge, %[[A_VAL]], %[[B_VAL]] : i128 78 ! CHECK: %[[C_VAL:.*]] = fir.convert %[[C_CMP]] : (i1) -> !fir.logical<4> 79 ! CHECK: fir.store %[[C_VAL]] to %[[C]] : !fir.ref<!fir.logical<4>> 80end subroutine bge_test5 81 82! CHECK-LABEL: bge_test6 83! CHECK-SAME: %[[A:.*]]: !fir.ref<i16>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<!fir.logical<4>>{{.*}} 84subroutine bge_test6(a, b, c) 85 integer(kind=2) :: a 86 integer(kind=4) :: b 87 logical :: c 88 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i16> 89 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32> 90 c = bge(a, b) 91 ! CHECK: %[[A_EXT:.*]] = arith.extui %[[A_VAL]] : i16 to i32 92 ! CHECK: %[[C_CMP:.*]] = arith.cmpi uge, %[[A_EXT]], %[[B_VAL]] : i32 93 ! CHECK: %[[C_VAL:.*]] = fir.convert %[[C_CMP]] : (i1) -> !fir.logical<4> 94 ! CHECK: fir.store %[[C_VAL]] to %[[C]] : !fir.ref<!fir.logical<4>> 95end subroutine bge_test6 96 97! CHECK-LABEL: bge_test7 98! CHECK-SAME: %[[A:.*]]: !fir.ref<i32>{{.*}}, %[[B:.*]]: !fir.ref<i16>{{.*}}, %[[C:.*]]: !fir.ref<!fir.logical<4>>{{.*}} 99subroutine bge_test7(a, b, c) 100 integer(kind=4) :: a 101 integer(kind=2) :: b 102 logical :: c 103 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i32> 104 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i16> 105 c = bge(a, b) 106 ! CHECK: %[[B_EXT:.*]] = arith.extui %[[B_VAL]] : i16 to i32 107 ! CHECK: %[[C_CMP:.*]] = arith.cmpi uge, %[[A_VAL]], %[[B_EXT]] : i32 108 ! CHECK: %[[C_VAL:.*]] = fir.convert %[[C_CMP]] : (i1) -> !fir.logical<4> 109 ! CHECK: fir.store %[[C_VAL]] to %[[C]] : !fir.ref<!fir.logical<4>> 110end subroutine bge_test7 111 112! CHECK-LABEL: bge_test8 113! CHECK-SAME: %[[A:.*]]: !fir.ref<i16>{{.*}}, %[[C:.*]]: !fir.ref<!fir.logical<4>>{{.*}} 114subroutine bge_test8(a, c) 115 integer(kind=2) :: a 116 logical :: c 117 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i16> 118 ! CHECK: %[[B_VAL:.*]] = arith.constant 42 : i32 119 c = bge(a, 42_4) 120 ! CHECK: %[[A_EXT:.*]] = arith.extui %[[A_VAL]] : i16 to i32 121 ! CHECK: %[[C_CMP:.*]] = arith.cmpi uge, %[[A_EXT]], %[[B_VAL]] : i32 122 ! CHECK: %[[C_VAL:.*]] = fir.convert %[[C_CMP]] : (i1) -> !fir.logical<4> 123 ! CHECK: fir.store %[[C_VAL]] to %[[C]] : !fir.ref<!fir.logical<4>> 124end subroutine bge_test8 125 126! CHECK-LABEL: bge_test9 127! CHECK-SAME: %[[A:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<!fir.logical<4>>{{.*}} 128subroutine bge_test9(a, c) 129 integer(kind=4) :: a 130 logical :: c 131 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i32> 132 ! CHECK: %[[B_VAL:.*]] = arith.constant 42 : i16 133 c = bge(a, 42_2) 134 ! CHECK: %[[B_EXT:.*]] = arith.extui %[[B_VAL]] : i16 to i32 135 ! CHECK: %[[C_CMP:.*]] = arith.cmpi uge, %[[A_VAL]], %[[B_EXT]] : i32 136 ! CHECK: %[[C_VAL:.*]] = fir.convert %[[C_CMP]] : (i1) -> !fir.logical<4> 137 ! CHECK: fir.store %[[C_VAL]] to %[[C]] : !fir.ref<!fir.logical<4>> 138end subroutine bge_test9 139 140! CHECK-LABEL: bge_test10 141! CHECK-SAME: %[[C:.*]]: !fir.ref<!fir.logical<4>>{{.*}} 142subroutine bge_test10(c) 143 logical :: c 144 c = bge(-1_2, -1_4) 145 ! CHECK: %[[R:.*]] = arith.constant false 146 ! CHECK: %[[V:.*]] = fir.convert %[[R]] : (i1) -> !fir.logical<4> 147 ! CHECK: fir.store %[[V]] to %[[C]] : !fir.ref<!fir.logical<4>> 148end subroutine bge_test10 149 150! CHECK-LABEL: bge_test11 151! CHECK-SAME: %[[C:.*]]: !fir.ref<!fir.logical<4>>{{.*}} 152subroutine bge_test11(c) 153 logical :: c 154 c = bge(-1_4, -1_2) 155 ! CHECK: %[[R:.*]] = arith.constant true 156 ! CHECK: %[[V:.*]] = fir.convert %[[R]] : (i1) -> !fir.logical<4> 157 ! CHECK: fir.store %[[V]] to %[[C]] : !fir.ref<!fir.logical<4>> 158end subroutine bge_test11 159