Add regression tests and adjust min/max vrp testcases

From-SVN: r259708
This commit is contained in:
Andrew Macleod
2018-04-27 13:34:59 +00:00
parent 3ea599ea40
commit cf406cb0bf
14 changed files with 219 additions and 3 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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))

View 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"} } */

View 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"} } */

View 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"} } */

View 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" } } */

View 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" } } */

View 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" } } */

View 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" } } */

View 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" } } */

View 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"} } */

View 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"} } */

View 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" } } */