102 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: shiftr1_test5! CHECK-SAME: %[[A:.*]]: !fir.ref<i8>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i8>{{.*}}6subroutine shiftr1_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 = shiftr(a, b)14 ! CHECK: %[[C_BITS:.*]] = arith.constant 8 : i815 ! CHECK: %[[C_0:.*]] = arith.constant 0 : i816 ! CHECK: %[[B_CONV:.*]] = fir.convert %[[B_VAL]] : (i32) -> i817 ! CHECK: %[[UNDER:.*]] = arith.cmpi slt, %[[B_CONV]], %[[C_0]] : i818 ! CHECK: %[[OVER:.*]] = arith.cmpi sge, %[[B_CONV]], %[[C_BITS]] : i819 ! CHECK: %[[INVALID:.*]] = arith.ori %[[UNDER]], %[[OVER]] : i120 ! CHECK: %[[SHIFT:.*]] = arith.shrui %[[A_VAL]], %[[B_CONV]] : i821 ! CHECK: %[[RES:.*]] = arith.select %[[INVALID]], %[[C_0]], %[[SHIFT]] : i822end subroutine shiftr1_test23 24! CHECK-LABEL: shiftr2_test25! CHECK-SAME: %[[A:.*]]: !fir.ref<i16>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i16>{{.*}}26subroutine shiftr2_test(a, b, c)27 integer(kind=2) :: a28 integer :: b29 integer(kind=2) :: c30 31 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i16>32 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>33 c = shiftr(a, b)34 ! CHECK: %[[C_BITS:.*]] = arith.constant 16 : i1635 ! CHECK: %[[C_0:.*]] = arith.constant 0 : i1636 ! CHECK: %[[B_CONV:.*]] = fir.convert %[[B_VAL]] : (i32) -> i1637 ! CHECK: %[[UNDER:.*]] = arith.cmpi slt, %[[B_CONV]], %[[C_0]] : i1638 ! CHECK: %[[OVER:.*]] = arith.cmpi sge, %[[B_CONV]], %[[C_BITS]] : i1639 ! CHECK: %[[INVALID:.*]] = arith.ori %[[UNDER]], %[[OVER]] : i140 ! CHECK: %[[SHIFT:.*]] = arith.shrui %[[A_VAL]], %[[B_CONV]] : i1641 ! CHECK: %[[RES:.*]] = arith.select %[[INVALID]], %[[C_0]], %[[SHIFT]] : i1642end subroutine shiftr2_test43 44! CHECK-LABEL: shiftr4_test45! CHECK-SAME: %[[A:.*]]: !fir.ref<i32>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i32>{{.*}}46subroutine shiftr4_test(a, b, c)47 integer(kind=4) :: a48 integer :: b49 integer(kind=4) :: c50 51 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i32>52 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>53 c = shiftr(a, b)54 ! CHECK: %[[C_BITS:.*]] = arith.constant 32 : i3255 ! CHECK: %[[C_0:.*]] = arith.constant 0 : i3256 ! CHECK: %[[UNDER:.*]] = arith.cmpi slt, %[[B_VAL]], %[[C_0]] : i3257 ! CHECK: %[[OVER:.*]] = arith.cmpi sge, %[[B_VAL]], %[[C_BITS]] : i3258 ! CHECK: %[[INVALID:.*]] = arith.ori %[[UNDER]], %[[OVER]] : i159 ! CHECK: %[[SHIFT:.*]] = arith.shrui %[[A_VAL]], %[[B_VAL]] : i3260 ! CHECK: %[[RES:.*]] = arith.select %[[INVALID]], %[[C_0]], %[[SHIFT]] : i3261end subroutine shiftr4_test62 63! CHECK-LABEL: shiftr8_test64! CHECK-SAME: %[[A:.*]]: !fir.ref<i64>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i64>{{.*}}65subroutine shiftr8_test(a, b, c)66 integer(kind=8) :: a67 integer :: b68 integer(kind=8) :: c69 70 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i64>71 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>72 c = shiftr(a, b)73 ! CHECK: %[[C_BITS:.*]] = arith.constant 64 : i6474 ! CHECK: %[[C_0:.*]] = arith.constant 0 : i6475 ! CHECK: %[[B_CONV:.*]] = fir.convert %[[B_VAL]] : (i32) -> i6476 ! CHECK: %[[UNDER:.*]] = arith.cmpi slt, %[[B_CONV]], %[[C_0]] : i6477 ! CHECK: %[[OVER:.*]] = arith.cmpi sge, %[[B_CONV]], %[[C_BITS]] : i6478 ! CHECK: %[[INVALID:.*]] = arith.ori %[[UNDER]], %[[OVER]] : i179 ! CHECK: %[[SHIFT:.*]] = arith.shrui %[[A_VAL]], %[[B_CONV]] : i6480 ! CHECK: %[[RES:.*]] = arith.select %[[INVALID]], %[[C_0]], %[[SHIFT]] : i6481end subroutine shiftr8_test82 83! CHECK-LABEL: shiftr16_test84! CHECK-SAME: %[[A:.*]]: !fir.ref<i128>{{.*}}, %[[B:.*]]: !fir.ref<i32>{{.*}}, %[[C:.*]]: !fir.ref<i128>{{.*}}85subroutine shiftr16_test(a, b, c)86 integer(kind=16) :: a87 integer :: b88 integer(kind=16) :: c89 90 ! CHECK: %[[A_VAL:.*]] = fir.load %[[A]] : !fir.ref<i128>91 ! CHECK: %[[B_VAL:.*]] = fir.load %[[B]] : !fir.ref<i32>92 c = shiftr(a, b)93 ! CHECK: %[[C_BITS:.*]] = arith.constant 128 : i12894 ! CHECK: %[[C_0:.*]] = arith.constant 0 : i12895 ! CHECK: %[[B_CONV:.*]] = fir.convert %[[B_VAL]] : (i32) -> i12896 ! CHECK: %[[UNDER:.*]] = arith.cmpi slt, %[[B_CONV]], %[[C_0]] : i12897 ! CHECK: %[[OVER:.*]] = arith.cmpi sge, %[[B_CONV]], %[[C_BITS]] : i12898 ! CHECK: %[[INVALID:.*]] = arith.ori %[[UNDER]], %[[OVER]] : i199 ! CHECK: %[[SHIFT:.*]] = arith.shrui %[[A_VAL]], %[[B_CONV]] : i128100 ! CHECK: %[[RES:.*]] = arith.select %[[INVALID]], %[[C_0]], %[[SHIFT]] : i128101end subroutine shiftr16_test102