| /* { dg-do compile } */ |
| /* { dg-options "-march=rv32gc" { target { rv32 } } } */ |
| /* { dg-options "-march=rv64gc" { target { rv64 } } } */ |
| /* { dg-skip-if "" { *-*-* } {"-O0" "-Os" "-Og" "-Oz" "-flto" } } */ |
| |
| // Tests for merging rshifts into zero-extensions. |
| // u8-casts are skipped as they can be done with one instruction (andi 0xff). |
| |
| #include "extend-shift-helpers.h" |
| |
| // Below "slli (16-N); srli 16" for rv32 |
| // Below "slli ((32+16)-N); srli (32+16)" for rv64 |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(1) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(7) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(8) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(9) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(15) |
| // Below "srli 16" for rv32 |
| // Below "srliw 16" for rv64 |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(16) |
| // Below "srli N" for rv32 |
| // Below "slli ((32+16)-N); srli (32+16)" for rv64 |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(17) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(23) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(24) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(25) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(31) |
| // Below compiler warning for rv32 |
| #if __riscv_xlen == 64 |
| // Below "slli ((32+16)-N); srli (32+16)" for rv64 |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(32) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(33) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(39) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(40) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(41) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(47) |
| // Below "srli N" for rv64 |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(48) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(49) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(55) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(56) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(57) |
| ULONG_EXT_USHORT_RSHIFT_N_ULONG(63) |
| #endif /* __riscv_xlen == 64 */ |
| |
| |
| |
| // Below "srli N" for rv32 |
| // Below "slli (32-N); srli 32" for rv64 |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(1) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(7) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(8) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(9) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(15) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(16) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(17) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(23) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(24) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(25) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(31) |
| // Below compiler warning for rv32 |
| #if __riscv_xlen == 64 |
| // Below "srli N" for rv64 |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(32) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(33) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(39) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(40) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(41) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(47) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(48) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(49) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(55) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(56) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(57) |
| ULONG_EXT_UINT_RSHIFT_N_ULONG(63) |
| #endif /* __riscv_xlen == 64 */ |
| |
| |
| |
| #if __riscv_xlen == 64 |
| // Below "slli ((32+16)-N); srli (32+16)" for rv64 |
| UINT_EXT_USHORT_RSHIFT_N_UINT(1) |
| UINT_EXT_USHORT_RSHIFT_N_UINT(7) |
| UINT_EXT_USHORT_RSHIFT_N_UINT(8) |
| UINT_EXT_USHORT_RSHIFT_N_UINT(9) |
| UINT_EXT_USHORT_RSHIFT_N_UINT(15) |
| // Below "srliw N" for rv64 |
| UINT_EXT_USHORT_RSHIFT_N_UINT(16) |
| UINT_EXT_USHORT_RSHIFT_N_UINT(17) |
| UINT_EXT_USHORT_RSHIFT_N_UINT(23) |
| UINT_EXT_USHORT_RSHIFT_N_UINT(24) |
| UINT_EXT_USHORT_RSHIFT_N_UINT(25) |
| UINT_EXT_USHORT_RSHIFT_N_UINT(31) |
| #endif /* __riscv_xlen == 64 */ |
| |
| |
| |
| // Below "slli (16-N); srli 16" for rv32 |
| // Below "slli ((32+16)-N); srli (32+16)" for rv64 |
| UINT_EXT_USHORT_RSHIFT_N_ULONG(9) |
| UINT_EXT_USHORT_RSHIFT_N_ULONG(15) |
| |
| |
| |
| // Below "slli (16-N); srli 16" for rv32 |
| // Below "slli ((32+16)-N); srli (32+16)" for rv64 |
| ULONG_EXT_USHORT_RSHIFT_N_UINT(9) |
| ULONG_EXT_USHORT_RSHIFT_N_UINT(15) |
| |
| /* { dg-final { scan-assembler-times "slli\t" 9 { target { rv32 } } } } */ |
| /* { dg-final { scan-assembler-times "srli\t" 26 { target { rv32 } } } } */ |
| |
| /* { dg-final { scan-assembler-times "slli\t" 36 { target { rv64 } } } } */ |
| /* { dg-final { scan-assembler-times "srli\t" 54 { target { rv64 } } } } */ |
| /* { dg-final { scan-assembler-times "srliw\t" 7 { target { rv64 } } } } */ |