From cf406cb0bfdffec9542a4640b520cbd301ebde30 Mon Sep 17 00:00:00 2001 From: Andrew Macleod Date: Fri, 27 Apr 2018 13:34:59 +0000 Subject: [PATCH] Add regression tests and adjust min/max vrp testcases From-SVN: r259708 --- gcc/testsuite/gcc.dg/tree-ssa/pr23744.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/pr49039.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/pr61839_2.c | 2 +- gcc/testsuite/gcc.dg/tree-ssa/rvrp-minmax-1.c | 27 +++++++++++++++++ gcc/testsuite/gcc.dg/tree-ssa/rvrp01.c | 16 ++++++++++ gcc/testsuite/gcc.dg/tree-ssa/rvrp02.c | 16 ++++++++++ gcc/testsuite/gcc.dg/tree-ssa/rvrp03.c | 19 ++++++++++++ gcc/testsuite/gcc.dg/tree-ssa/rvrp04.c | 17 +++++++++++ gcc/testsuite/gcc.dg/tree-ssa/rvrp05.c | 15 ++++++++++ gcc/testsuite/gcc.dg/tree-ssa/rvrp06.c | 22 ++++++++++++++ gcc/testsuite/gcc.dg/tree-ssa/rvrp07.c | 28 +++++++++++++++++ gcc/testsuite/gcc.dg/tree-ssa/rvrp08.c | 18 +++++++++++ gcc/testsuite/gcc.dg/tree-ssa/rvrp09.c | 30 +++++++++++++++++++ gcc/testsuite/gcc.dg/tree-ssa/rvrp10.c | 8 +++++ 14 files changed, 219 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/rvrp-minmax-1.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/rvrp01.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/rvrp02.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/rvrp03.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/rvrp04.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/rvrp05.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/rvrp06.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/rvrp07.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/rvrp08.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/rvrp09.c create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/rvrp10.c diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr23744.c b/gcc/testsuite/gcc.dg/tree-ssa/pr23744.c index 3385aa1e4248..07d158aced5e 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr23744.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr23744.c @@ -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); diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr49039.c b/gcc/testsuite/gcc.dg/tree-ssa/pr49039.c index 4bc0a8175a0f..0b13d3ea4620 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr49039.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr49039.c @@ -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); diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr61839_2.c b/gcc/testsuite/gcc.dg/tree-ssa/pr61839_2.c index 638189e66e56..94076a66fd9c 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/pr61839_2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr61839_2.c @@ -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)) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/rvrp-minmax-1.c b/gcc/testsuite/gcc.dg/tree-ssa/rvrp-minmax-1.c new file mode 100644 index 000000000000..8c994a069c83 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/rvrp-minmax-1.c @@ -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"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/rvrp01.c b/gcc/testsuite/gcc.dg/tree-ssa/rvrp01.c new file mode 100644 index 000000000000..1fb99a2cb2c5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/rvrp01.c @@ -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"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/rvrp02.c b/gcc/testsuite/gcc.dg/tree-ssa/rvrp02.c new file mode 100644 index 000000000000..8786453ec82c --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/rvrp02.c @@ -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"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/rvrp03.c b/gcc/testsuite/gcc.dg/tree-ssa/rvrp03.c new file mode 100644 index 000000000000..15b0980aff20 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/rvrp03.c @@ -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" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/rvrp04.c b/gcc/testsuite/gcc.dg/tree-ssa/rvrp04.c new file mode 100644 index 000000000000..4de84c27c9cb --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/rvrp04.c @@ -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" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/rvrp05.c b/gcc/testsuite/gcc.dg/tree-ssa/rvrp05.c new file mode 100644 index 000000000000..94479ef740b2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/rvrp05.c @@ -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" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/rvrp06.c b/gcc/testsuite/gcc.dg/tree-ssa/rvrp06.c new file mode 100644 index 000000000000..dee32807c69f --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/rvrp06.c @@ -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" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/rvrp07.c b/gcc/testsuite/gcc.dg/tree-ssa/rvrp07.c new file mode 100644 index 000000000000..7c3d26546371 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/rvrp07.c @@ -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" } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/rvrp08.c b/gcc/testsuite/gcc.dg/tree-ssa/rvrp08.c new file mode 100644 index 000000000000..17d5395de7ec --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/rvrp08.c @@ -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"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/rvrp09.c b/gcc/testsuite/gcc.dg/tree-ssa/rvrp09.c new file mode 100644 index 000000000000..872962816475 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/rvrp09.c @@ -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"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/rvrp10.c b/gcc/testsuite/gcc.dg/tree-ssa/rvrp10.c new file mode 100644 index 000000000000..a659274d652f --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/rvrp10.c @@ -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" } } */