107 lines · plain
1! RUN: bbc -emit-fir -hlfir=false %s -o - | FileCheck %s2! RUN: %flang_fc1 -emit-fir -flang-deprecated-no-hlfir %s -o - | FileCheck %s3 4! CHECK-LABEL: shifta1_test5! CHECK-SAME: %[[A:.*]]: !fir.ref<i8>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i8>{{.*}}6subroutine shifta1_test(a, b, c)7 integer(kind=1) :: a8 integer :: b9 integer(kind=1) :: c10 11 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i8>12 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>13 c = shifta(a, b)14 ! CHECK: %[[C_BITS:.*]] = arith.constant 8 : i815 ! CHECK: %[[B_CONV:.*]] = fir.convert %[[B_VAL]] : (i32) -> i816 ! CHECK: %[[SHIFT_IS_BITWIDTH:.*]] = arith.cmpi uge, %[[B_CONV]], %[[C_BITS]] : i817 ! CHECK: %[[C0:.*]] = arith.constant 0 : i818 ! CHECK: %[[CM1:.*]] = arith.constant -1 : i819 ! CHECK: %[[IS_NEG:.*]] = arith.cmpi slt, %[[A_VAL]], %[[C0]] : i820 ! CHECK: %[[RES:.*]] = arith.select %[[IS_NEG]], %[[CM1]], %[[C0]] : i821 ! CHECK: %[[SHIFTED:.*]] = arith.shrsi %[[A_VAL]], %[[B_CONV]] : i822 ! CHECK: %{{.*}} = arith.select %[[SHIFT_IS_BITWIDTH]], %[[RES]], %[[SHIFTED]] : i823end subroutine shifta1_test24 25! CHECK-LABEL: shifta2_test26! CHECK-SAME: %[[A:.*]]: !fir.ref<i16>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i16>{{.*}}27subroutine shifta2_test(a, b, c)28 integer(kind=2) :: a29 integer :: b30 integer(kind=2) :: c31 32 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i16>33 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>34 c = shifta(a, b)35 ! CHECK: %[[C_BITS:.*]] = arith.constant 16 : i1636 ! CHECK: %[[B_CONV:.*]] = fir.convert %[[B_VAL]] : (i32) -> i1637 ! CHECK: %[[SHIFT_IS_BITWIDTH:.*]] = arith.cmpi uge, %[[B_CONV]], %[[C_BITS]] : i1638 ! CHECK: %[[C0:.*]] = arith.constant 0 : i1639 ! CHECK: %[[CM1:.*]] = arith.constant -1 : i1640 ! CHECK: %[[IS_NEG:.*]] = arith.cmpi slt, %[[A_VAL]], %[[C0]] : i1641 ! CHECK: %[[RES:.*]] = arith.select %[[IS_NEG]], %[[CM1]], %[[C0]] : i1642 ! CHECK: %[[SHIFTED:.*]] = arith.shrsi %[[A_VAL]], %[[B_CONV]] : i1643 ! CHECK: %{{.*}} = arith.select %[[SHIFT_IS_BITWIDTH]], %[[RES]], %[[SHIFTED]] : i1644end subroutine shifta2_test45 46! CHECK-LABEL: shifta4_test47! CHECK-SAME: %[[A:.*]]: !fir.ref<i32>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i32>{{.*}}48subroutine shifta4_test(a, b, c)49 integer(kind=4) :: a50 integer :: b51 integer(kind=4) :: c52 53 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i32>54 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>55 c = shifta(a, b)56 ! CHECK: %[[C_BITS:.*]] = arith.constant 32 : i3257 ! CHECK: %[[SHIFT_IS_BITWIDTH:.*]] = arith.cmpi uge, %[[B_VAL]], %[[C_BITS]] : i3258 ! CHECK: %[[C0:.*]] = arith.constant 0 : i3259 ! CHECK: %[[CM1:.*]] = arith.constant -1 : i3260 ! CHECK: %[[IS_NEG:.*]] = arith.cmpi slt, %[[A_VAL]], %[[C0]] : i3261 ! CHECK: %[[RES:.*]] = arith.select %[[IS_NEG]], %[[CM1]], %[[C0]] : i3262 ! CHECK: %[[SHIFTED:.*]] = arith.shrsi %[[A_VAL]], %[[B_VAL]] : i3263 ! CHECK: %{{.*}} = arith.select %[[SHIFT_IS_BITWIDTH]], %[[RES]], %[[SHIFTED]] : i3264end subroutine shifta4_test65 66! CHECK-LABEL: shifta8_test67! CHECK-SAME: %[[A:.*]]: !fir.ref<i64>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i64>{{.*}}68subroutine shifta8_test(a, b, c)69 integer(kind=8) :: a70 integer :: b71 integer(kind=8) :: c72 73 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i64>74 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>75 c = shifta(a, b)76 ! CHECK: %[[C_BITS:.*]] = arith.constant 64 : i6477 ! CHECK: %[[B_CONV:.*]] = fir.convert %[[B_VAL]] : (i32) -> i6478 ! CHECK: %[[SHIFT_IS_BITWIDTH:.*]] = arith.cmpi uge, %[[B_CONV]], %[[C_BITS]] : i6479 ! CHECK: %[[C0:.*]] = arith.constant 0 : i6480 ! CHECK: %[[CM1:.*]] = arith.constant -1 : i6481 ! CHECK: %[[IS_NEG:.*]] = arith.cmpi slt, %[[A_VAL]], %[[C0]] : i6482 ! CHECK: %[[RES:.*]] = arith.select %[[IS_NEG]], %[[CM1]], %[[C0]] : i6483 ! CHECK: %[[SHIFTED:.*]] = arith.shrsi %[[A_VAL]], %[[B_CONV]] : i6484 ! CHECK: %{{.*}} = arith.select %[[SHIFT_IS_BITWIDTH]], %[[RES]], %[[SHIFTED]] : i6485end subroutine shifta8_test86 87! CHECK-LABEL: shifta16_test88! CHECK-SAME: %[[A:.*]]: !fir.ref<i128>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i128>{{.*}}89subroutine shifta16_test(a, b, c)90 integer(kind=16) :: a91 integer :: b92 integer(kind=16) :: c93 94 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i128>95 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>96 c = shifta(a, b)97 ! CHECK: %[[C_BITS:.*]] = arith.constant 128 : i12898 ! CHECK: %[[B_CONV:.*]] = fir.convert %[[B_VAL]] : (i32) -> i12899 ! CHECK: %[[SHIFT_IS_BITWIDTH:.*]] = arith.cmpi uge, %[[B_CONV]], %[[C_BITS]] : i128100 ! CHECK: %[[C0:.*]] = arith.constant 0 : i128101 ! CHECK: %[[CM1:.*]] = arith.constant {{.*}} : i128102 ! CHECK: %[[IS_NEG:.*]] = arith.cmpi slt, %[[A_VAL]], %[[C0]] : i128103 ! CHECK: %[[RES:.*]] = arith.select %[[IS_NEG]], %[[CM1]], %[[C0]] : i128104 ! CHECK: %[[SHIFTED:.*]] = arith.shrsi %[[A_VAL]], %[[B_CONV]] : i128105 ! CHECK: %{{.*}} = arith.select %[[SHIFT_IS_BITWIDTH]], %[[RES]], %[[SHIFTED]] : i128106end subroutine shifta16_test107