RISC-V/testsuite: Add branchless cases for generic integer cond adds
Verify, for generic integer conditional-add operations, if-conversion to trigger via `noce_try_addcc' at the respective sufficiently high `-mbranch-cost=' settings that make branchless code sequences produced by if-conversion cheaper than their original branched equivalents, and, where applicable, that extraneous instructions such as SNEZ, etc. are not present in output. Cover all integer relational operations to make sure no corner case escapes. The reason to XFAIL SImode tests for RV64 targets is the compiler thinks it has to sign-extend addends, which causes if-conversion to give up. gcc/testsuite/ * gcc.target/riscv/adddieq.c: New test. * gcc.target/riscv/adddige.c: New test. * gcc.target/riscv/adddigeu.c: New test. * gcc.target/riscv/adddigt.c: New test. * gcc.target/riscv/adddigtu.c: New test. * gcc.target/riscv/adddile.c: New test. * gcc.target/riscv/adddileu.c: New test. * gcc.target/riscv/adddilt.c: New test. * gcc.target/riscv/adddiltu.c: New test. * gcc.target/riscv/adddine.c: New test. * gcc.target/riscv/addsieq.c: New test. * gcc.target/riscv/addsige.c: New test. * gcc.target/riscv/addsigeu.c: New test. * gcc.target/riscv/addsigt.c: New test. * gcc.target/riscv/addsigtu.c: New test. * gcc.target/riscv/addsile.c: New test. * gcc.target/riscv/addsileu.c: New test. * gcc.target/riscv/addsilt.c: New test. * gcc.target/riscv/addsiltu.c: New test. * gcc.target/riscv/addsine.c: New test.
This commit is contained in:
parent
bbfe2639e1
commit
5e6903ddd3
20 changed files with 524 additions and 0 deletions
27
gcc/testsuite/gcc.target/riscv/adddieq.c
Normal file
27
gcc/testsuite/gcc.target/riscv/adddieq.c
Normal file
|
@ -0,0 +1,27 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target rv64 } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=5 -mmovcc -fdump-rtl-ce1" } */
|
||||
|
||||
typedef int __attribute__ ((mode (DI))) int_t;
|
||||
|
||||
int_t
|
||||
adddieq (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w == x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sub a1,a0,a1
|
||||
seqz a1,a1
|
||||
neg a1,a1
|
||||
and a1,a1,a3
|
||||
add a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" } } */
|
||||
/* { dg-final { scan-assembler-times "\\ssub\\s" 1 } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:seqz|snez)\\s" 1 } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */
|
26
gcc/testsuite/gcc.target/riscv/adddige.c
Normal file
26
gcc/testsuite/gcc.target/riscv/adddige.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target rv64 } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" } */
|
||||
|
||||
typedef int __attribute__ ((mode (DI))) int_t;
|
||||
|
||||
int_t
|
||||
adddige (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w >= x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
slt a1,a0,a1
|
||||
addi a1,a1,-1
|
||||
and a1,a1,a3
|
||||
add a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" } } */
|
26
gcc/testsuite/gcc.target/riscv/adddigeu.c
Normal file
26
gcc/testsuite/gcc.target/riscv/adddigeu.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target rv64 } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" } */
|
||||
|
||||
typedef unsigned int __attribute__ ((mode (DI))) int_t;
|
||||
|
||||
int_t
|
||||
adddigeu (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w >= x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sltu a1,a0,a1
|
||||
addi a1,a1,-1
|
||||
and a1,a1,a3
|
||||
add a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" } } */
|
26
gcc/testsuite/gcc.target/riscv/adddigt.c
Normal file
26
gcc/testsuite/gcc.target/riscv/adddigt.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target rv64 } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" } */
|
||||
|
||||
typedef int __attribute__ ((mode (DI))) int_t;
|
||||
|
||||
int_t
|
||||
adddigt (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w > x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sgt a1,a0,a1
|
||||
neg a1,a1
|
||||
and a1,a1,a3
|
||||
add a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" } } */
|
26
gcc/testsuite/gcc.target/riscv/adddigtu.c
Normal file
26
gcc/testsuite/gcc.target/riscv/adddigtu.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target rv64 } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" } */
|
||||
|
||||
typedef unsigned int __attribute__ ((mode (DI))) int_t;
|
||||
|
||||
int_t
|
||||
adddigtu (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w > x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sgtu a1,a0,a1
|
||||
neg a1,a1
|
||||
and a1,a1,a3
|
||||
add a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" } } */
|
26
gcc/testsuite/gcc.target/riscv/adddile.c
Normal file
26
gcc/testsuite/gcc.target/riscv/adddile.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target rv64 } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" } */
|
||||
|
||||
typedef int __attribute__ ((mode (DI))) int_t;
|
||||
|
||||
int_t
|
||||
adddile (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w <= x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sgt a1,a0,a1
|
||||
addi a1,a1,-1
|
||||
and a1,a1,a3
|
||||
add a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" } } */
|
26
gcc/testsuite/gcc.target/riscv/adddileu.c
Normal file
26
gcc/testsuite/gcc.target/riscv/adddileu.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target rv64 } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" } */
|
||||
|
||||
typedef unsigned int __attribute__ ((mode (DI))) int_t;
|
||||
|
||||
int_t
|
||||
adddileu (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w <= x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sgtu a1,a0,a1
|
||||
addi a1,a1,-1
|
||||
and a1,a1,a3
|
||||
add a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" } } */
|
26
gcc/testsuite/gcc.target/riscv/adddilt.c
Normal file
26
gcc/testsuite/gcc.target/riscv/adddilt.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target rv64 } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" } */
|
||||
|
||||
typedef int __attribute__ ((mode (DI))) int_t;
|
||||
|
||||
int_t
|
||||
adddilt (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w < x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
slt a1,a0,a1
|
||||
neg a1,a1
|
||||
and a1,a1,a3
|
||||
add a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" } } */
|
26
gcc/testsuite/gcc.target/riscv/adddiltu.c
Normal file
26
gcc/testsuite/gcc.target/riscv/adddiltu.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target rv64 } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" } */
|
||||
|
||||
typedef unsigned int __attribute__ ((mode (DI))) int_t;
|
||||
|
||||
int_t
|
||||
adddiltu (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w < x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sltu a1,a0,a1
|
||||
neg a1,a1
|
||||
and a1,a1,a3
|
||||
add a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" } } */
|
27
gcc/testsuite/gcc.target/riscv/adddine.c
Normal file
27
gcc/testsuite/gcc.target/riscv/adddine.c
Normal file
|
@ -0,0 +1,27 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target rv64 } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" } */
|
||||
|
||||
typedef int __attribute__ ((mode (DI))) int_t;
|
||||
|
||||
int_t
|
||||
adddine (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w != x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sub a1,a0,a1
|
||||
snez a1,a1
|
||||
neg a1,a1
|
||||
and a1,a1,a3
|
||||
add a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" } } */
|
||||
/* { dg-final { scan-assembler-times "\\ssub\\s" 1 } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:seqz|snez)\\s" 1 } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */
|
27
gcc/testsuite/gcc.target/riscv/addsieq.c
Normal file
27
gcc/testsuite/gcc.target/riscv/addsieq.c
Normal file
|
@ -0,0 +1,27 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv32gc -mtune=sifive-5-series -mbranch-cost=5 -mmovcc -fdump-rtl-ce1" { target { rv32 } } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=5 -mmovcc -fdump-rtl-ce1" { target { rv64 } } } */
|
||||
|
||||
typedef int __attribute__ ((mode (SI))) int_t;
|
||||
|
||||
int_t
|
||||
addsieq (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w == x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sub[w] a1,a0,a1
|
||||
seqz a1,a1
|
||||
neg[w] a1,a1
|
||||
and a1,a1,a3
|
||||
add[w] a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sub|subw)\\s" 1 { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:seqz|snez)\\s" 1 { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */
|
26
gcc/testsuite/gcc.target/riscv/addsige.c
Normal file
26
gcc/testsuite/gcc.target/riscv/addsige.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv32gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv32 } } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv64 } } } */
|
||||
|
||||
typedef int __attribute__ ((mode (SI))) int_t;
|
||||
|
||||
int_t
|
||||
addsige (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w >= x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
slt a1,a0,a1
|
||||
addi[w] a1,a1,-1
|
||||
and a1,a1,a3
|
||||
add[w] a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" { xfail rv64 } } } */
|
26
gcc/testsuite/gcc.target/riscv/addsigeu.c
Normal file
26
gcc/testsuite/gcc.target/riscv/addsigeu.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv32gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv32 } } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv64 } } } */
|
||||
|
||||
typedef unsigned int __attribute__ ((mode (SI))) int_t;
|
||||
|
||||
int_t
|
||||
addsigeu (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w >= x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sltu a1,a0,a1
|
||||
addi[w] a1,a1,-1
|
||||
and a1,a1,a3
|
||||
add[w] a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" { xfail rv64 } } } */
|
26
gcc/testsuite/gcc.target/riscv/addsigt.c
Normal file
26
gcc/testsuite/gcc.target/riscv/addsigt.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv32gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv32 } } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv64 } } } */
|
||||
|
||||
typedef int __attribute__ ((mode (SI))) int_t;
|
||||
|
||||
int_t
|
||||
addsigt (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w > x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sgt a1,a0,a1
|
||||
neg[w] a1,a1
|
||||
and a1,a1,a3
|
||||
add[w] a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" { xfail rv64 } } } */
|
26
gcc/testsuite/gcc.target/riscv/addsigtu.c
Normal file
26
gcc/testsuite/gcc.target/riscv/addsigtu.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv32gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv32 } } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv64 } } } */
|
||||
|
||||
typedef unsigned int __attribute__ ((mode (SI))) int_t;
|
||||
|
||||
int_t
|
||||
addsigtu (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w > x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sgtu a1,a0,a1
|
||||
neg[w] a1,a1
|
||||
and a1,a1,a3
|
||||
add[w] a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" { xfail rv64 } } } */
|
26
gcc/testsuite/gcc.target/riscv/addsile.c
Normal file
26
gcc/testsuite/gcc.target/riscv/addsile.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv32gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv32 } } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv64 } } } */
|
||||
|
||||
typedef int __attribute__ ((mode (SI))) int_t;
|
||||
|
||||
int_t
|
||||
addsile (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w <= x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sgt a1,a0,a1
|
||||
addi[w] a1,a1,-1
|
||||
and a1,a1,a3
|
||||
add[w] a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" { xfail rv64 } } } */
|
26
gcc/testsuite/gcc.target/riscv/addsileu.c
Normal file
26
gcc/testsuite/gcc.target/riscv/addsileu.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv32gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv32 } } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv64 } } } */
|
||||
|
||||
typedef unsigned int __attribute__ ((mode (SI))) int_t;
|
||||
|
||||
int_t
|
||||
addsileu (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w <= x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sgtu a1,a0,a1
|
||||
addi[w] a1,a1,-1
|
||||
and a1,a1,a3
|
||||
add[w] a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" { xfail rv64 } } } */
|
26
gcc/testsuite/gcc.target/riscv/addsilt.c
Normal file
26
gcc/testsuite/gcc.target/riscv/addsilt.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv32gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv32 } } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv64 } } } */
|
||||
|
||||
typedef int __attribute__ ((mode (SI))) int_t;
|
||||
|
||||
int_t
|
||||
addsilt (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w < x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
slt a1,a0,a1
|
||||
neg[w] a1,a1
|
||||
and a1,a1,a3
|
||||
add[w] a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" { xfail rv64 } } } */
|
26
gcc/testsuite/gcc.target/riscv/addsiltu.c
Normal file
26
gcc/testsuite/gcc.target/riscv/addsiltu.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv32gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv32 } } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv64 } } } */
|
||||
|
||||
typedef unsigned int __attribute__ ((mode (SI))) int_t;
|
||||
|
||||
int_t
|
||||
addsiltu (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w < x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sltu a1,a0,a1
|
||||
neg[w] a1,a1
|
||||
and a1,a1,a3
|
||||
add[w] a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" { xfail rv64 } } } */
|
27
gcc/testsuite/gcc.target/riscv/addsine.c
Normal file
27
gcc/testsuite/gcc.target/riscv/addsine.c
Normal file
|
@ -0,0 +1,27 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-Os" "-Oz" } } */
|
||||
/* { dg-options "-march=rv32gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv32 } } } */
|
||||
/* { dg-options "-march=rv64gc -mtune=sifive-5-series -mbranch-cost=4 -mmovcc -fdump-rtl-ce1" { target { rv64 } } } */
|
||||
|
||||
typedef int __attribute__ ((mode (SI))) int_t;
|
||||
|
||||
int_t
|
||||
addsine (int_t w, int_t x, int_t y, int_t z)
|
||||
{
|
||||
return w != x ? y + z : y;
|
||||
}
|
||||
|
||||
/* Expect branchless assembly like:
|
||||
|
||||
sub[w] a1,a0,a1
|
||||
snez a1,a1
|
||||
neg[w] a1,a1
|
||||
and a1,a1,a3
|
||||
add[w] a0,a1,a2
|
||||
*/
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:sub|subw)\\s" 1 { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-times "\\s(?:seqz|snez)\\s" 1 { xfail rv64 } } } */
|
||||
/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */
|
Loading…
Add table
Reference in a new issue