111 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: merge_bits1_test5! CHECK-SAME: %[[IREF:.*]]: !fir.ref<i8>{{.*}}, %[[JREF:.*]]: !fir.ref<i8>{{.*}}, %[[MREF:.*]]: !fir.ref<i8>{{.*}}, %[[RREF:.*]]: !fir.ref<i8>{{.*}}6subroutine merge_bits1_test(i, j, m, r)7 integer(1) :: i, j, m8 integer(1) :: r9 10 ! CHECK: %[[I:.*]] = fir.load %[[IREF]] : !fir.ref<i8>11 ! CHECK: %[[J:.*]] = fir.load %[[JREF]] : !fir.ref<i8>12 ! CHECK: %[[M:.*]] = fir.load %[[MREF]] : !fir.ref<i8>13 r = merge_bits(i, j, m)14 ! CHECK: %[[C__1:.*]] = arith.constant -1 : i815 ! CHECK: %[[NM:.*]] = arith.xori %[[M]], %[[C__1]] : i816 ! CHECK: %[[LFT:.*]] = arith.andi %[[I]], %[[M]] : i817 ! CHECK: %[[RGT:.*]] = arith.andi %[[J]], %[[NM]] : i818 ! CHECK: %[[RES:.*]] = arith.ori %[[LFT]], %[[RGT]] : i819 ! CHECK: fir.store %[[RES]] to %[[RREF]] : !fir.ref<i8>20end subroutine merge_bits1_test21 22! CHECK-LABEL: merge_bits2_test23! CHECK-SAME: %[[IREF:.*]]: !fir.ref<i16>{{.*}}, %[[JREF:.*]]: !fir.ref<i16>{{.*}}, %[[MREF:.*]]: !fir.ref<i16>{{.*}}, %[[RREF:.*]]: !fir.ref<i16>{{.*}}24subroutine merge_bits2_test(i, j, m, r)25 integer(2) :: i, j, m26 integer(2) :: r27 28 ! CHECK: %[[I:.*]] = fir.load %[[IREF]] : !fir.ref<i16>29 ! CHECK: %[[J:.*]] = fir.load %[[JREF]] : !fir.ref<i16>30 ! CHECK: %[[M:.*]] = fir.load %[[MREF]] : !fir.ref<i16>31 r = merge_bits(i, j, m)32 ! CHECK: %[[C__1:.*]] = arith.constant -1 : i1633 ! CHECK: %[[NM:.*]] = arith.xori %[[M]], %[[C__1]] : i1634 ! CHECK: %[[LFT:.*]] = arith.andi %[[I]], %[[M]] : i1635 ! CHECK: %[[RGT:.*]] = arith.andi %[[J]], %[[NM]] : i1636 ! CHECK: %[[RES:.*]] = arith.ori %[[LFT]], %[[RGT]] : i1637 ! CHECK: fir.store %[[RES]] to %[[RREF]] : !fir.ref<i16>38end subroutine merge_bits2_test39 40! CHECK-LABEL: merge_bits4_test41! CHECK-SAME: %[[IREF:.*]]: !fir.ref<i32>{{.*}}, %[[JREF:.*]]: !fir.ref<i32>{{.*}}, %[[MREF:.*]]: !fir.ref<i32>{{.*}}, %[[RREF:.*]]: !fir.ref<i32>{{.*}}42subroutine merge_bits4_test(i, j, m, r)43 integer(4) :: i, j, m44 integer(4) :: r45 46 ! CHECK: %[[I:.*]] = fir.load %[[IREF]] : !fir.ref<i32>47 ! CHECK: %[[J:.*]] = fir.load %[[JREF]] : !fir.ref<i32>48 ! CHECK: %[[M:.*]] = fir.load %[[MREF]] : !fir.ref<i32>49 r = merge_bits(i, j, m)50 ! CHECK: %[[C__1:.*]] = arith.constant -1 : i3251 ! CHECK: %[[NM:.*]] = arith.xori %[[M]], %[[C__1]] : i3252 ! CHECK: %[[LFT:.*]] = arith.andi %[[I]], %[[M]] : i3253 ! CHECK: %[[RGT:.*]] = arith.andi %[[J]], %[[NM]] : i3254 ! CHECK: %[[RES:.*]] = arith.ori %[[LFT]], %[[RGT]] : i3255 ! CHECK: fir.store %[[RES]] to %[[RREF]] : !fir.ref<i32>56end subroutine merge_bits4_test57 58! CHECK-LABEL: merge_bits8_test59! CHECK-SAME: %[[IREF:.*]]: !fir.ref<i64>{{.*}}, %[[JREF:.*]]: !fir.ref<i64>{{.*}}, %[[MREF:.*]]: !fir.ref<i64>{{.*}}, %[[RREF:.*]]: !fir.ref<i64>{{.*}}60subroutine merge_bits8_test(i, j, m, r)61 integer(8) :: i, j, m62 integer(8) :: r63 64 ! CHECK: %[[I:.*]] = fir.load %[[IREF]] : !fir.ref<i64>65 ! CHECK: %[[J:.*]] = fir.load %[[JREF]] : !fir.ref<i64>66 ! CHECK: %[[M:.*]] = fir.load %[[MREF]] : !fir.ref<i64>67 r = merge_bits(i, j, m)68 ! CHECK: %[[C__1:.*]] = arith.constant -1 : i6469 ! CHECK: %[[NM:.*]] = arith.xori %[[M]], %[[C__1]] : i6470 ! CHECK: %[[LFT:.*]] = arith.andi %[[I]], %[[M]] : i6471 ! CHECK: %[[RGT:.*]] = arith.andi %[[J]], %[[NM]] : i6472 ! CHECK: %[[RES:.*]] = arith.ori %[[LFT]], %[[RGT]] : i6473 ! CHECK: fir.store %[[RES]] to %[[RREF]] : !fir.ref<i64>74end subroutine merge_bits8_test75 76! CHECK-LABEL: merge_bitsz0_test77! CHECK-SAME: %[[JREF:.*]]: !fir.ref<i32>{{.*}}, %[[MREF:.*]]: !fir.ref<i32>{{.*}}, %[[RREF:.*]]: !fir.ref<i32>{{.*}}78subroutine merge_bitsz0_test(j, m, r)79 integer :: j, m80 integer :: r81 82 ! CHECK: %[[I:.*]] = arith.constant 13 : i3283 ! CHECK: %[[J:.*]] = fir.load %[[JREF]] : !fir.ref<i32>84 ! CHECK: %[[M:.*]] = fir.load %[[MREF]] : !fir.ref<i32>85 r = merge_bits(B'1101', j, m)86 ! CHECK: %[[C__1:.*]] = arith.constant -1 : i3287 ! CHECK: %[[NM:.*]] = arith.xori %[[M]], %[[C__1]] : i3288 ! CHECK: %[[LFT:.*]] = arith.andi %[[I]], %[[M]] : i3289 ! CHECK: %[[RGT:.*]] = arith.andi %[[J]], %[[NM]] : i3290 ! CHECK: %[[RES:.*]] = arith.ori %[[LFT]], %[[RGT]] : i3291 ! CHECK: fir.store %[[RES]] to %[[RREF]] : !fir.ref<i32>92end subroutine merge_bitsz0_test93 94! CHECK-LABEL: merge_bitsz1_test95! CHECK-SAME: %[[IREF:.*]]: !fir.ref<i32>{{.*}}, %[[MREF:.*]]: !fir.ref<i32>{{.*}}, %[[RREF:.*]]: !fir.ref<i32>{{.*}}96subroutine merge_bitsz1_test(i, m, r)97 integer :: i, m98 integer :: r99 100 ! CHECK: %[[I:.*]] = fir.load %[[IREF]] : !fir.ref<i32>101 ! CHECK: %[[J:.*]] = arith.constant 13 : i32102 ! CHECK: %[[M:.*]] = fir.load %[[MREF]] : !fir.ref<i32>103 r = merge_bits(i, Z'0D', m)104 ! CHECK: %[[C__1:.*]] = arith.constant -1 : i32105 ! CHECK: %[[NM:.*]] = arith.xori %[[M]], %[[C__1]] : i32106 ! CHECK: %[[LFT:.*]] = arith.andi %[[I]], %[[M]] : i32107 ! CHECK: %[[RGT:.*]] = arith.andi %[[J]], %[[NM]] : i32108 ! CHECK: %[[RES:.*]] = arith.ori %[[LFT]], %[[RGT]] : i32109 ! CHECK: fir.store %[[RES]] to %[[RREF]] : !fir.ref<i32>110end subroutine merge_bitsz1_test111