mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-22 03:46:53 -05:00
Add regression tests and adjust min/max vrp testcases
From-SVN: r259708
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fno-tree-ccp -fdisable-tree-evrp -fdump-tree-vrp1" } */
|
||||
/* { dg-options "-O2 -fno-tree-ccp -fdisable-tree-rvrp -fdisable-tree-evrp -fdump-tree-vrp1" } */
|
||||
|
||||
void h (void);
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* PR tree-optimization/49039 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1" } */
|
||||
/* { dg-options "-O2 -fdisable-tree-ethread -fdisable-tree-thread1 -fdisable-tree-thread2 -fdisable-tree-thread3 -fdisable-tree-thread4 -fdisable-tree-rvrp -fdisable-tree-evrp -fdump-tree-vrp1" } */
|
||||
|
||||
extern void bar (void);
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* PR tree-optimization/61839. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-evrp" } */
|
||||
/* { dg-options "-O2 -fdisable-tree-rvrp -fdump-tree-evrp" } */
|
||||
/* { dg-require-effective-target int32plus } */
|
||||
|
||||
__attribute__ ((noinline))
|
||||
|
||||
27
gcc/testsuite/gcc.dg/tree-ssa/rvrp-minmax-1.c
Normal file
27
gcc/testsuite/gcc.dg/tree-ssa/rvrp-minmax-1.c
Normal file
@@ -0,0 +1,27 @@
|
||||
/* rvrp min-max test adapted from PR tree-optimization/49039 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdisable-tree-evrp -fdisable-tree-ethread -fdump-tree-rvrp" } */
|
||||
|
||||
extern void bar (void);
|
||||
|
||||
void
|
||||
foo (unsigned int x, unsigned int y)
|
||||
{
|
||||
unsigned int minv, maxv;
|
||||
if (x >= 3 && x <= 6)
|
||||
return;
|
||||
if (y >= 5 && y <= 8)
|
||||
return;
|
||||
minv = x < y ? x : y;
|
||||
maxv = x > y ? x : y;
|
||||
if (minv == 5)
|
||||
bar ();
|
||||
if (minv == 6)
|
||||
bar ();
|
||||
if (maxv == 5)
|
||||
bar ();
|
||||
if (maxv == 6)
|
||||
bar ();
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "Branch rewritten" 4 "rvrp"} } */
|
||||
16
gcc/testsuite/gcc.dg/tree-ssa/rvrp01.c
Normal file
16
gcc/testsuite/gcc.dg/tree-ssa/rvrp01.c
Normal file
@@ -0,0 +1,16 @@
|
||||
/* Copy of pr21001.c for testing VRP adjusted for RVRP
|
||||
*
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fno-tree-fre -fdisable-tree-ethread -fdump-tree-rvrp-details" } */
|
||||
|
||||
int
|
||||
foo (int a)
|
||||
{
|
||||
int b = a != 0;
|
||||
if (b)
|
||||
if (a != 0)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "Branch rewritten" 1 "rvrp"} } */
|
||||
16
gcc/testsuite/gcc.dg/tree-ssa/rvrp02.c
Normal file
16
gcc/testsuite/gcc.dg/tree-ssa/rvrp02.c
Normal file
@@ -0,0 +1,16 @@
|
||||
/* Copy of pr21563 adjusted for rvrp.
|
||||
Make sure VRP folds the second "if" statement. */
|
||||
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fno-tree-dominator-opts -fdisable-tree-ethread -fdisable-tree-thread1 -fdisable-tree-evrp -fdump-tree-rvrp-details" } */
|
||||
|
||||
int
|
||||
foo (int a)
|
||||
{
|
||||
if (a > 1)
|
||||
if (a == 0)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "Branch rewritten" 1 "rvrp"} } */
|
||||
19
gcc/testsuite/gcc.dg/tree-ssa/rvrp03.c
Normal file
19
gcc/testsuite/gcc.dg/tree-ssa/rvrp03.c
Normal file
@@ -0,0 +1,19 @@
|
||||
/* Copied from pr25382 and adjusted for rvrp.
|
||||
PR tree-optimization/25382
|
||||
VRP used to ignore BIT_AND_EXPRs for the purpose of distilling ranges.
|
||||
Check that VRP now gets ranges from BIT_AND_EXPRs. */
|
||||
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fno-tree-ccp -fdisable-tree-evrp -fdump-tree-rvrp" } */
|
||||
|
||||
int
|
||||
foo (int a)
|
||||
{
|
||||
int b = a & 0xff;
|
||||
if (b > 300)
|
||||
return 2;
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "Branch rewritten" 1 "rvrp" } } */
|
||||
17
gcc/testsuite/gcc.dg/tree-ssa/rvrp04.c
Normal file
17
gcc/testsuite/gcc.dg/tree-ssa/rvrp04.c
Normal file
@@ -0,0 +1,17 @@
|
||||
/* copied from pr68431.c and adjusted for rvrp.
|
||||
PR tree-optimization/68431 */
|
||||
/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-rvrp-details" } */
|
||||
|
||||
unsigned int x = 1;
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
long long int a = -2LL;
|
||||
int t = 1 <= (a / x);
|
||||
if (t != 0)
|
||||
__builtin_abort ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "Branch rewritten" 1 "rvrp" } } */
|
||||
15
gcc/testsuite/gcc.dg/tree-ssa/rvrp05.c
Normal file
15
gcc/testsuite/gcc.dg/tree-ssa/rvrp05.c
Normal file
@@ -0,0 +1,15 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-rvrp-details" } */
|
||||
|
||||
int test1(int i, int k)
|
||||
{
|
||||
if (i > 0 && i <= 5 && k >= 10 && k < 42)
|
||||
{
|
||||
int j = i + 1 + k;
|
||||
if (j == 10)
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump "Branch rewritten" "rvrp" } } */
|
||||
22
gcc/testsuite/gcc.dg/tree-ssa/rvrp06.c
Normal file
22
gcc/testsuite/gcc.dg/tree-ssa/rvrp06.c
Normal file
@@ -0,0 +1,22 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-rvrp" } */
|
||||
|
||||
void f(unsigned);
|
||||
|
||||
void
|
||||
f4 (unsigned a, unsigned b)
|
||||
{
|
||||
if (a <= 5 && b <= 2)
|
||||
{
|
||||
int x = a * b * 4;
|
||||
if (x > 40)
|
||||
f (a);
|
||||
if (x >= 0)
|
||||
f (b);
|
||||
else
|
||||
f (a + b);
|
||||
}
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump "Branch rewritten.*1 !=" "rvrp" } } */
|
||||
/* { dg-final { scan-tree-dump "Branch rewritten.*0 !=" "rvrp" } } */
|
||||
28
gcc/testsuite/gcc.dg/tree-ssa/rvrp07.c
Normal file
28
gcc/testsuite/gcc.dg/tree-ssa/rvrp07.c
Normal file
@@ -0,0 +1,28 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-rvrp-details" } */
|
||||
|
||||
extern void abort ();
|
||||
extern void drink ();
|
||||
|
||||
void beer (int x)
|
||||
{
|
||||
if (x >= 12 && x <= 15)
|
||||
{
|
||||
// must be true
|
||||
if (x & 0x4)
|
||||
{
|
||||
drink ();
|
||||
}
|
||||
else
|
||||
abort();
|
||||
return;
|
||||
}
|
||||
abort();
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
beer (3);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump "Branch rewritten" "rvrp" } } */
|
||||
18
gcc/testsuite/gcc.dg/tree-ssa/rvrp08.c
Normal file
18
gcc/testsuite/gcc.dg/tree-ssa/rvrp08.c
Normal file
@@ -0,0 +1,18 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdisable-tree-evrp -fdisable-tree-ethread -fdump-tree-rvrp-details" } */
|
||||
|
||||
extern int global;
|
||||
extern int global2;
|
||||
extern int global3;
|
||||
|
||||
void foo (int base)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
// rvrp should be able to remove the (i > 123) comparison
|
||||
for (i = base; i < 10; i++)
|
||||
if (i > 123)
|
||||
return;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "Branch rewritten" 1 "rvrp"} } */
|
||||
30
gcc/testsuite/gcc.dg/tree-ssa/rvrp09.c
Normal file
30
gcc/testsuite/gcc.dg/tree-ssa/rvrp09.c
Normal file
@@ -0,0 +1,30 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-rvrp-details -fdisable-tree-ethread -fdisable-tree-forwprop1 -fdisable-tree-ccp1 -fdisable-tree-fre1 " } */
|
||||
|
||||
extern void exit (int);
|
||||
extern void abort (void);
|
||||
|
||||
|
||||
void
|
||||
signed_foo (char x)
|
||||
{
|
||||
|
||||
char a = x & 0x00;
|
||||
if (a > 0) /* This should fold */
|
||||
abort();
|
||||
|
||||
char b = x & 0x0f;
|
||||
if (b > 0x0f)
|
||||
abort ();
|
||||
|
||||
char c = x & 0x3c;
|
||||
if (c > 0x3c)
|
||||
abort ();
|
||||
|
||||
char d = x & 0xf0;
|
||||
if (d > 0)
|
||||
if (d < 16)
|
||||
abort();
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "Branch rewritten" 4 "rvrp"} } */
|
||||
8
gcc/testsuite/gcc.dg/tree-ssa/rvrp10.c
Normal file
8
gcc/testsuite/gcc.dg/tree-ssa/rvrp10.c
Normal file
@@ -0,0 +1,8 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdisable-tree-ethread -fdisable-tree-thread1 -fdump-tree-rvrp -fno-tree-fre" } */
|
||||
|
||||
/* This is from PR14052. */
|
||||
|
||||
int f2(int x) { return x == 1 || x == 3 || x == 1; }
|
||||
|
||||
/* { dg-final { scan-tree-dump "Branch rewritten" "rvrp" } } */
|
||||
Reference in New Issue
Block a user