-
Notifications
You must be signed in to change notification settings - Fork 10.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[flang][NFC] Test folding of F08 shift intrinsics
Test compile-time folding of F08 shift (shiftl, shiftr, shifta) and combined shift (dshiftl, dshiftr) intrinsics. Differential Revision: https://reviews.llvm.org/D129696
- Loading branch information
Tarun Prabhu
committed
Jul 22, 2022
1 parent
ccfee46
commit 3d85879
Showing
2 changed files
with
233 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
! RUN: %python %S/test_folding.py %s %flang_fc1 | ||
|
||
! Test combined shift intrinsics | ||
|
||
module consts | ||
integer(1), parameter :: z40_1 = 64_1 | ||
|
||
end module consts | ||
|
||
module dshiftltest | ||
use consts | ||
|
||
logical, parameter :: test_lzzz = dshiftl(0, 0, 0) .EQ. 0 | ||
logical, parameter :: test_lzzn = dshiftl(0, 0, 12) .EQ. 0 | ||
logical, parameter :: test_lnzn = dshiftl(36_1, 0_1, 5) .EQ. -128_2 | ||
logical, parameter :: test_lznn = dshiftl(0, 33, 12) .EQ. 0 | ||
|
||
logical, parameter :: test_l0 = dshiftl(3, 4, 0) .EQ. 3 | ||
logical, parameter :: test_l32 = dshiftl(3, 4, 32) .EQ. 4 | ||
logical, parameter :: test_l1 = dshiftl(9, 7, 1) .EQ. 18 | ||
logical, parameter :: test_l2 = dshiftl(15_1, z40_1, 2) .EQ. 61 | ||
logical, parameter :: test_le1 = dshiftl(64_1, 4_1, 7) .EQ. 2 | ||
|
||
logical, parameter :: test_nb = dshiftl(15_1, Z'40', 2) .EQ. 61 | ||
logical, parameter :: test_nbo = dshiftl(15_1, Z'F40', 2) .EQ. 61 | ||
end module dshiftltest | ||
|
||
module dshiftrtest | ||
use consts | ||
|
||
logical, parameter :: test_rzzz = dshiftr(0, 0, 0) .EQ. 0 | ||
logical, parameter :: test_rzzn = dshiftr(0, 0, 12) .EQ. 0 | ||
logical, parameter :: test_rnzn = dshiftr(36_1, 0_1, 5) .EQ. 32_1 | ||
logical, parameter :: test_rznn = dshiftr(0, 33, 12) .EQ. 0 | ||
|
||
logical, parameter :: test_r0 = dshiftr(3, 4, 0) .EQ. 4 | ||
logical, parameter :: test_r32 = dshiftr(3, 4, 32) .EQ. 3 | ||
logical, parameter :: test_r1 = dshiftr(4, 17, 1) .EQ. 8 | ||
logical, parameter :: test_r2 = dshiftr(15_1, z40_1, 2) .EQ. -48_1 | ||
logical, parameter :: test_re1 = dshiftr(64_1, 4_1, 7) .EQ. -128_2 | ||
|
||
logical, parameter :: test_nb = dshiftr(15_1, Z'40', 2) .EQ. -48_1 | ||
logical, parameter :: test_nbo = dshiftr(15_1, Z'F40', 2) .EQ. -48_1 | ||
end module dshiftrtest |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,189 @@ | ||
! RUN: %python %S/test_folding.py %s %flang_fc1 | ||
|
||
! Test directional shift intrinsics | ||
|
||
module consts | ||
integer, parameter :: z40 = 1073741824 | ||
integer, parameter :: z60 = 1610612736 | ||
integer, parameter :: z80 = -2147483648_8 | ||
integer, parameter :: zC0 = -1073741824 | ||
integer, parameter :: zE0 = -536870912 | ||
integer, parameter :: zF0 = -268435456 | ||
|
||
integer(1), parameter :: z40_1 = 64_1 | ||
integer(1), parameter :: z60_1 = 96_1 | ||
integer(1), parameter :: z80_1 = -128_2 | ||
integer(1), parameter :: zC0_1 = -64_1 | ||
integer(1), parameter :: zE0_1 = -32_1 | ||
integer(1), parameter :: zF0_1 = -16_1 | ||
|
||
integer(2), parameter :: z40_2 = 16384_2 | ||
integer(2), parameter :: z60_2 = 24576_2 | ||
integer(2), parameter :: z80_2 = -32768_4 | ||
integer(2), parameter :: zC0_2 = -16384_2 | ||
integer(2), parameter :: zE0_2 = -8192_2 | ||
integer(2), parameter :: zF0_2 = -4096_2 | ||
|
||
integer(4), parameter :: z40_4 = 1073741824_4 | ||
integer(4), parameter :: z60_4 = 1610612736_4 | ||
integer(4), parameter :: z80_4 = -2147483648_8 | ||
integer(4), parameter :: zC0_4 = -1073741824_4 | ||
integer(4), parameter :: zE0_4 = -536870912_4 | ||
integer(4), parameter :: zF0_4 = -268435456_4 | ||
|
||
integer(8), parameter :: z40_8 = 4611686018427387904_8 | ||
integer(8), parameter :: z60_8 = 6917529027641081856_8 | ||
integer(8), parameter :: z80_8 = -9223372036854775808_16 | ||
integer(8), parameter :: zC0_8 = -4611686018427387904_8 | ||
integer(8), parameter :: zE0_8 = -2305843009213693952_8 | ||
integer(8), parameter :: ZF0_8 = -1152921504606846976_8 | ||
|
||
integer(16), parameter :: z40_16 = 85070591730234615865843651857942052864_16 | ||
integer(16), parameter :: z60_16 = 127605887595351923798765477786913079296_16 | ||
integer(16), parameter :: zC0_16 = -85070591730234615865843651857942052864_16 | ||
integer(16), parameter :: zE0_16 = -42535295865117307932921825928971026432_16 | ||
integer(16), parameter :: ZF0_16 = -21267647932558653966460912964485513216_16 | ||
|
||
end module consts | ||
|
||
module shiftltest | ||
use consts | ||
|
||
logical, parameter :: test_l0 = shiftl(1, 0) .EQ. 1 | ||
logical, parameter :: test_l1 = shiftl(1, 1) .EQ. 2 | ||
logical, parameter :: test_lm = shiftl(1, 16) .EQ. 65536 | ||
logical, parameter :: test_l3e2 = shiftl(3, 30) .EQ. zC0 | ||
logical, parameter :: test_l3e1 = shiftl(3, 31) .EQ. z80 | ||
logical, parameter :: test_le1 = shiftl(1, 31) .EQ. z80 | ||
logical, parameter :: test_le = shiftl(1, 32) .EQ. 0 | ||
|
||
logical, parameter :: test_l0_1 = shiftl(1_1, 0) .EQ. 1_1 | ||
logical, parameter :: test_l1_1 = shiftl(1_1, 1) .EQ. 2_1 | ||
logical, parameter :: test_lm_1 = shiftl(1_1, 4) .EQ. 16_1 | ||
logical, parameter :: test_l3e2_1 = shiftl(3_1, 6) .EQ. zC0_1 | ||
logical, parameter :: test_l3e1_1 = shiftl(3_1, 7) .EQ. z80_1 | ||
logical, parameter :: test_le1_1 = shiftl(1_1, 7) .EQ. z80_1 | ||
logical, parameter :: test_le_1 = shiftl(1_1, 8) .EQ. 0_1 | ||
|
||
logical, parameter :: test_l0_2 = shiftl(1_2, 0) .EQ. 1 | ||
logical, parameter :: test_l1_2 = shiftl(1_2, 1) .EQ. 2 | ||
logical, parameter :: test_lm_2 = shiftl(1_2, 8) .EQ. 256_2 | ||
logical, parameter :: test_l3e2_2 = shiftl(3_2, 14) .EQ. zC0_2 | ||
logical, parameter :: test_l3e1_2 = shiftl(3_2, 15) .EQ. z80_2 | ||
logical, parameter :: test_le1_2 = shiftl(1_2, 15) .EQ. z80_2 | ||
logical, parameter :: test_le_2 = shiftl(1_2, 16) .EQ. 0_2 | ||
|
||
logical, parameter :: test_l0_4 = shiftl(1_4, 0) .EQ. 1_4 | ||
logical, parameter :: test_l1_4 = shiftl(1_4, 1) .EQ. 2_4 | ||
logical, parameter :: test_lm_4 = shiftl(1_4, 16) .EQ. 65536_4 | ||
logical, parameter :: test_l3e2_4 = shiftl(3_4, 30) .EQ. zC0_4 | ||
logical, parameter :: test_l3e1_4 = shiftl(3_4, 31) .EQ. z80_4 | ||
logical, parameter :: test_le1_4 = shiftl(1_4, 31) .EQ. z80_4 | ||
logical, parameter :: test_le_4 = shiftl(1_4, 32) .EQ. 0_4 | ||
|
||
logical, parameter :: test_l0_8 = shiftl(1_8, 0) .EQ. 1_8 | ||
logical, parameter :: test_l1_8 = shiftl(1_8, 1) .EQ. 2_8 | ||
logical, parameter :: test_lm_8 = shiftl(1_8, 16) .EQ. 65536 | ||
logical, parameter :: test_l3e2_8 = shiftl(3_8, 62) .EQ. zC0_8 | ||
logical, parameter :: test_l3e1_8 = shiftl(3_8, 63) .EQ. z80_8 | ||
logical, parameter :: test_le1_8 = shiftl(1_8, 63) .EQ. z80_8 | ||
logical, parameter :: test_le_8 = shiftl(1_8, 64) .EQ. 0_8 | ||
|
||
logical, parameter :: test_l0_16 = shiftl(1_16, 0) .EQ. 1_16 | ||
logical, parameter :: test_l1_16 = shiftl(1_16, 1) .EQ. 2_16 | ||
logical, parameter :: test_lm_16 = shiftl(1_16, 64) .EQ. 18446744073709551616_16 | ||
logical, parameter :: test_l3e2_16 = shiftl(3_16, 126) .EQ. zC0_16 | ||
logical, parameter :: test_le_16 = shiftl(1_16, 128) .EQ. 0_16 | ||
end module shiftltest | ||
|
||
module shiftrtest | ||
use consts | ||
|
||
logical, parameter :: test_r0 = shiftr(zC0, 0) .EQ. zC0 | ||
logical, parameter :: test_r1 = shiftr(zC0, 1) .EQ. z60 | ||
logical, parameter :: test_rm = shiftr(z40, 16) .EQ. 16384 | ||
logical, parameter :: test_r3e2 = shiftr(zC0, 30) .EQ. 3 | ||
logical, parameter :: test_r3e1 = shiftr(zC0, 31) .EQ. 1 | ||
logical, parameter :: test_re = shiftr(z80, 32) .EQ. 0 | ||
|
||
logical, parameter :: test_r0_1 = shiftr(zC0_1, 0) .EQ. zC0_1 | ||
logical, parameter :: test_r1_1 = shiftr(zC0_1, 1) .EQ. z60_1 | ||
logical, parameter :: test_rm_1 = shiftr(z40_1, 4) .EQ. 4_1 | ||
logical, parameter :: test_r3e2_1 = shiftr(zC0_1, 6) .EQ. 3_1 | ||
logical, parameter :: test_r3e1_1 = shiftr(zC0_1, 7) .EQ. 1_1 | ||
logical, parameter :: test_re_1 = shiftr(z80_1, 8) .EQ. 0_1 | ||
|
||
logical, parameter :: test_r0_2 = shiftr(zC0_2, 0) .EQ. zC0_2 | ||
logical, parameter :: test_r1_2 = shiftr(zC0_2, 1) .EQ. z60_2 | ||
logical, parameter :: test_rm_2 = shiftr(z40_2, 8) .EQ. 64_1 | ||
logical, parameter :: test_r3e2_2 = shiftr(zC0_2, 14) .EQ. 3_2 | ||
logical, parameter :: test_r3e1_2 = shiftr(zC0_2, 15) .EQ. 1_2 | ||
logical, parameter :: test_re_2 = shiftr(z80_2, 16) .EQ. 0_2 | ||
|
||
logical, parameter :: test_r0_4 = shiftr(zC0_4, 0) .EQ. zC0_4 | ||
logical, parameter :: test_r1_4 = shiftr(zC0_4, 1) .EQ. z60_4 | ||
logical, parameter :: test_rm_4 = shiftr(z40_4, 16) .EQ. 16384_4 | ||
logical, parameter :: test_r3e2_4 = shiftr(zC0_4, 30) .EQ. 3_4 | ||
logical, parameter :: test_r3e1_4 = shiftr(zC0_4, 31) .EQ. 1_4 | ||
logical, parameter :: test_re_4 = shiftr(z80_4, 32) .EQ. 0_4 | ||
|
||
logical, parameter :: test_r0_8 = shiftr(zC0_8, 0) .EQ. zC0_8 | ||
logical, parameter :: test_r1_8 = shiftr(zC0_8, 1) .EQ. z60_8 | ||
logical, parameter :: test_rm_8 = shiftr(z40_8, 32) .EQ. 1073741824_8 | ||
logical, parameter :: test_r3e2_8 = shiftr(zC0_8, 62) .EQ. 3_8 | ||
logical, parameter :: test_r3e1_8 = shiftr(zC0_8, 63) .EQ. 1_8 | ||
logical, parameter :: test_re_8 = shiftr(z80_8, 64) .EQ. 0_8 | ||
|
||
logical, parameter :: test_r0_16 = shiftr(zC0_16, 0) .EQ. zC0_16 | ||
logical, parameter :: test_r1_16 = shiftr(zC0_16, 1) .EQ. z60_16 | ||
logical, parameter :: test_rm_16 = shiftr(z40_16, 64) .EQ. 4611686018427387904_16 | ||
logical, parameter :: test_r3e2_16 = shiftr(zC0_16, 126) .EQ. 3_16 | ||
logical, parameter :: test_r3e1_16 = shiftr(zC0_16, 127) .EQ. 1_16 | ||
logical, parameter :: test_re_16 = shiftr(z40_16, 128) .EQ. 0_16 | ||
end module shiftrtest | ||
|
||
module shiftatest | ||
use consts | ||
|
||
logical, parameter :: test_a0 = shifta(zC0, 0) .EQ. zC0 | ||
logical, parameter :: test_a1 = shifta(zC0, 1) .EQ. zE0 | ||
logical, parameter :: test_a2 = shifta(zC0, 2) .EQ. zF0 | ||
logical, parameter :: test_a3e2 = shifta(zC0, 29) .EQ. -2 | ||
logical, parameter :: test_a3e1 = shifta(zC0, 31) .EQ. -1 | ||
logical, parameter :: test_ae = shifta(z80, 32) .EQ. -1 | ||
|
||
logical, parameter :: test_a0_1 = shifta(zC0_1, 0) .EQ. zC0_1 | ||
logical, parameter :: test_a1_1 = shifta(zC0_1, 1) .EQ. zE0_1 | ||
logical, parameter :: test_a2_1 = shifta(zC0_1, 2) .EQ. zF0_1 | ||
logical, parameter :: test_a3e2_1 = shifta(zC0_1, 5) .EQ. -2_1 | ||
logical, parameter :: test_a3e1_1 = shifta(zC0_1, 7) .EQ. -1_1 | ||
logical, parameter :: test_ae_1 = shifta(z80_1, 8) .EQ. -1_1 | ||
|
||
logical, parameter :: test_a0_2 = shifta(zC0_2, 0) .EQ. zC0_2 | ||
logical, parameter :: test_a1_2 = shifta(zC0_2, 1) .EQ. zE0_2 | ||
logical, parameter :: test_a2_2 = shifta(zC0_2, 2) .EQ. zF0_2 | ||
logical, parameter :: test_a3e2_2 = shifta(zC0_2, 13) .EQ. -2_2 | ||
logical, parameter :: test_a3e1_2 = shifta(zC0_2, 15) .EQ. -1_2 | ||
logical, parameter :: test_ae_2 = shifta(z80_2, 16) .EQ. -1_2 | ||
|
||
logical, parameter :: test_a0_4 = shifta(zC0_4, 0) .EQ. zC0_4 | ||
logical, parameter :: test_a1_4 = shifta(zC0_4, 1) .EQ. zE0_4 | ||
logical, parameter :: test_a2_4 = shifta(zC0_4, 2) .EQ. zF0_4 | ||
logical, parameter :: test_a3e2_4 = shifta(zC0_4, 29) .EQ. -2_4 | ||
logical, parameter :: test_a3e1_4 = shifta(zC0_4, 31) .EQ. -1_4 | ||
logical, parameter :: test_ae_4 = shifta(z80_4, 32) .EQ. -1_4 | ||
|
||
logical, parameter :: test_a0_8 = shifta(zC0_8, 0) .EQ. zC0_8 | ||
logical, parameter :: test_a1_8 = shifta(zC0_8, 1) .EQ. zE0_8 | ||
logical, parameter :: test_a2_8 = shifta(zC0_8, 2) .EQ. zF0_8 | ||
logical, parameter :: test_a3e2_8 = shifta(zC0_8, 61) .EQ. -2_8 | ||
logical, parameter :: test_a3e1_8 = shifta(zC0_8, 63) .EQ. -1_8 | ||
logical, parameter :: test_ae_8 = shifta(z80_8, 64) .EQ. -1_8 | ||
|
||
logical, parameter :: test_a0_16 = shifta(zC0_16, 0) .EQ. zC0_16 | ||
logical, parameter :: test_a1_16 = shifta(zC0_16, 1) .EQ. zE0_16 | ||
logical, parameter :: test_a2_16 = shifta(zC0_16, 2) .EQ. zF0_16 | ||
logical, parameter :: test_a3e2_16 = shifta(zC0_16, 125) .EQ. -2_16 | ||
logical, parameter :: test_a3e1_16 = shifta(zC0_16, 127) .EQ. -1_16 | ||
logical, parameter :: test_ae_16 = shifta(zC0_16, 128) .EQ. -1_16 | ||
end module shiftatest |