* [EVRP] Fold stmts with vrp_fold_stmt
@ 2016-10-03 19:14 kugan
2016-10-04 8:56 ` Richard Biener
0 siblings, 1 reply; 4+ messages in thread
From: kugan @ 2016-10-03 19:14 UTC (permalink / raw)
To: gcc-patches; +Cc: Richard Biener
[-- Attachment #1: Type: text/plain, Size: 1652 bytes --]
Hi,
This patch improves Early VRP by folding stmts using vrp_fold_stmt as it
is done in ssa_propagate for VRP.
I have also changed EVRP to handle POINTER_TYPE_P. I will send follow up
patches to use this in IPA-VRP.
Bootstrapped and regression testd on x86_64-linux-gnu with no new
regressions. Is this OK for trunk?
Thanks,
Kugan
gcc/testsuite/ChangeLog:
2016-10-03 Kugan Vivekanandarajah <kuganv@linaro.org>
* gcc.dg/pr68217.c: Adjust testcase as more cases are now handled in
evrp.
* gcc.dg/predict-1.c: Likewise.
* gcc.dg/predict-9.c: Likewise.
* gcc.dg/tree-ssa/pr20318.c: Likewise.
* gcc.dg/tree-ssa/pr21001.c: Likewise.
* gcc.dg/tree-ssa/pr21090.c: Likewise.
* gcc.dg/tree-ssa/pr21294.c: Likewise.
* gcc.dg/tree-ssa/pr21559.c: Likewise.
* gcc.dg/tree-ssa/pr21563.c: Likewise.
* gcc.dg/tree-ssa/pr23744.c: Likewise.
* gcc.dg/tree-ssa/pr25382.c: Likewise.
* gcc.dg/tree-ssa/pr61839_1.c: Likewise.
* gcc.dg/tree-ssa/pr68431.c: Likewise.
* gcc.dg/tree-ssa/vrp03.c: Likewise.
* gcc.dg/tree-ssa/vrp07.c: Likewise.
* gcc.dg/tree-ssa/vrp09.c: Likewise.
* gcc.dg/tree-ssa/vrp17.c: Likewise.
* gcc.dg/tree-ssa/vrp18.c: Likewise.
* gcc.dg/tree-ssa/vrp19.c: Likewise.
* gcc.dg/tree-ssa/vrp20.c: Likewise.
* gcc.dg/tree-ssa/vrp23.c: Likewise.
* gcc.dg/tree-ssa/vrp24.c: Likewise.
* gcc.dg/tree-ssa/vrp58.c: Likewise.
* gcc.dg/tree-ssa/vrp92.c: Likewise.
* gcc.dg/tree-ssa/vrp98.c: Likewise.
* gcc.dg/vrp-min-max-1.c: Likewise.
gcc/ChangeLog:
2016-10-03 Kugan Vivekanandarajah <kuganv@linaro.org>
* tree-vrp.c (evrp_dom_walker::before_dom_children): Handle
POINTER_TYPE_P. Also fold stmts with vrp_fold_stmt.
[-- Attachment #2: 0001-Fold-stmts-using-vrp_fold-in-evrp.patch --]
[-- Type: text/x-patch, Size: 18507 bytes --]
From 4bb16e7d01674461a47e6b6488b04fb1907234ea Mon Sep 17 00:00:00 2001
From: Kugan Vivekanandarajah <kugan.vivekanandarajah@linaro.org>
Date: Mon, 3 Oct 2016 06:12:05 +1100
Subject: [PATCH 1/5] Fold stmts using vrp_fold in evrp
---
gcc/testsuite/gcc.dg/pr68217.c | 4 ++--
gcc/testsuite/gcc.dg/predict-1.c | 2 +-
gcc/testsuite/gcc.dg/predict-9.c | 2 +-
gcc/testsuite/gcc.dg/tree-ssa/pr20318.c | 4 ++--
gcc/testsuite/gcc.dg/tree-ssa/pr21001.c | 2 +-
gcc/testsuite/gcc.dg/tree-ssa/pr21090.c | 4 ++--
gcc/testsuite/gcc.dg/tree-ssa/pr21294.c | 4 ++--
gcc/testsuite/gcc.dg/tree-ssa/pr21559.c | 2 +-
gcc/testsuite/gcc.dg/tree-ssa/pr21563.c | 2 +-
gcc/testsuite/gcc.dg/tree-ssa/pr23744.c | 4 ++--
gcc/testsuite/gcc.dg/tree-ssa/pr25382.c | 4 ++--
gcc/testsuite/gcc.dg/tree-ssa/pr61839_1.c | 6 +++---
gcc/testsuite/gcc.dg/tree-ssa/pr68431.c | 2 +-
gcc/testsuite/gcc.dg/tree-ssa/vrp03.c | 4 ++--
gcc/testsuite/gcc.dg/tree-ssa/vrp07.c | 2 +-
gcc/testsuite/gcc.dg/tree-ssa/vrp09.c | 4 ++--
gcc/testsuite/gcc.dg/tree-ssa/vrp17.c | 4 ++--
gcc/testsuite/gcc.dg/tree-ssa/vrp18.c | 4 ++--
gcc/testsuite/gcc.dg/tree-ssa/vrp19.c | 6 +++---
gcc/testsuite/gcc.dg/tree-ssa/vrp20.c | 6 +++---
gcc/testsuite/gcc.dg/tree-ssa/vrp23.c | 2 +-
gcc/testsuite/gcc.dg/tree-ssa/vrp24.c | 2 +-
gcc/testsuite/gcc.dg/tree-ssa/vrp58.c | 2 +-
gcc/testsuite/gcc.dg/tree-ssa/vrp92.c | 2 +-
gcc/testsuite/gcc.dg/tree-ssa/vrp98.c | 2 +-
gcc/testsuite/gcc.dg/vrp-min-max-1.c | 2 +-
gcc/tree-vrp.c | 27 ++++++++++++++++++++-------
27 files changed, 62 insertions(+), 49 deletions(-)
diff --git a/gcc/testsuite/gcc.dg/pr68217.c b/gcc/testsuite/gcc.dg/pr68217.c
index 426a99a..fbe4627 100644
--- a/gcc/testsuite/gcc.dg/pr68217.c
+++ b/gcc/testsuite/gcc.dg/pr68217.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-vrp1" } */
+/* { dg-options "-O2 -fdump-tree-evrp" } */
int foo (void)
{
@@ -11,4 +11,4 @@ int foo (void)
return 0;
}
-/* { dg-final { scan-tree-dump "\\\[-INF, 0\\\]" "vrp1" } } */
+/* { dg-final { scan-tree-dump "\\\[-INF, 0\\\]" "evrp" } } */
diff --git a/gcc/testsuite/gcc.dg/predict-1.c b/gcc/testsuite/gcc.dg/predict-1.c
index 10d62ba..0d14802 100644
--- a/gcc/testsuite/gcc.dg/predict-1.c
+++ b/gcc/testsuite/gcc.dg/predict-1.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-profile_estimate" } */
+/* { dg-options "-O2 -fno-tree-vrp -fdump-tree-profile_estimate" } */
extern int global;
diff --git a/gcc/testsuite/gcc.dg/predict-9.c b/gcc/testsuite/gcc.dg/predict-9.c
index 196e31c..8833cb3 100644
--- a/gcc/testsuite/gcc.dg/predict-9.c
+++ b/gcc/testsuite/gcc.dg/predict-9.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-profile_estimate" } */
+/* { dg-options "-O2 -fno-tree-vrp -fdump-tree-profile_estimate" } */
extern int global;
extern int global2;
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr20318.c b/gcc/testsuite/gcc.dg/tree-ssa/pr20318.c
index 41f569e..11d4f0d 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr20318.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr20318.c
@@ -1,5 +1,5 @@
/* { dg-do compile { target { ! keeps_null_pointer_checks } } } */
-/* { dg-options "-O2 -fdump-tree-original -fdump-tree-vrp1 -fdelete-null-pointer-checks" } */
+/* { dg-options "-O2 -fdump-tree-original -fdump-tree-evrp -fdelete-null-pointer-checks" } */
extern int* f(int) __attribute__((returns_nonnull));
extern void eliminate ();
@@ -14,4 +14,4 @@ void h () {
}
/* { dg-final { scan-tree-dump-times "== 0" 1 "original" } } */
-/* { dg-final { scan-tree-dump-times "Folding predicate\[^\\n\]*to 0" 1 "vrp1" } } */
+/* { dg-final { scan-tree-dump-times "Folding predicate\[^\\n\]*to 0" 1 "evrp" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr21001.c b/gcc/testsuite/gcc.dg/tree-ssa/pr21001.c
index 482d530..719360a 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr21001.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr21001.c
@@ -5,7 +5,7 @@
range information out of the conditional. */
/* { dg-do compile } */
-/* { dg-options "-O2 -fno-tree-dominator-opts -fno-tree-fre -fdump-tree-vrp1-details" } */
+/* { dg-options "-O2 -fno-tree-dominator-opts -fno-tree-fre -fdisable-tree-evrp -fdump-tree-vrp1-details" } */
int
foo (int a)
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr21090.c b/gcc/testsuite/gcc.dg/tree-ssa/pr21090.c
index 26d0d55..12e0104 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr21090.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr21090.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-vrp1 -fdelete-null-pointer-checks" } */
+/* { dg-options "-O2 -fdump-tree-evrp -fdelete-null-pointer-checks" } */
int g, h;
@@ -19,4 +19,4 @@ foo (int a)
return 0;
}
-/* { dg-final { scan-tree-dump-times "Folding predicate.*to 1" 1 "vrp1" { target { ! keeps_null_pointer_checks } } } } */
+/* { dg-final { scan-tree-dump-times "Folding predicate.*to 1" 1 "evrp" { target { ! keeps_null_pointer_checks } } } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr21294.c b/gcc/testsuite/gcc.dg/tree-ssa/pr21294.c
index f694fb2..91b36e6 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr21294.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr21294.c
@@ -4,7 +4,7 @@
allows us to eliminate the second "if" statement. */
/* { dg-do compile } */
-/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-vrp1-details" } */
+/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-evrp" } */
struct f {
int i;
@@ -19,4 +19,4 @@ foo (struct f *p)
return 0;
}
-/* { dg-final { scan-tree-dump-times "Folding predicate" 1 "vrp1"} } */
+/* { dg-final { scan-tree-dump-times "if" 1 "evrp"} } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr21559.c b/gcc/testsuite/gcc.dg/tree-ssa/pr21559.c
index 0906351..d73b587 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr21559.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr21559.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-vrp1-details" } */
+/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1-details" } */
static int blocksize = 4096;
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr21563.c b/gcc/testsuite/gcc.dg/tree-ssa/pr21563.c
index 2cc2599..9c67a3a 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr21563.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr21563.c
@@ -2,7 +2,7 @@
Make sure VRP folds the second "if" statement. */
/* { dg-do compile } */
-/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-vrp1-details" } */
+/* { dg-options "-O2 -fno-tree-dominator-opts -fdisable-tree-evrp -fdump-tree-vrp1-details" } */
int
foo (int a)
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr23744.c b/gcc/testsuite/gcc.dg/tree-ssa/pr23744.c
index 9d662f2..5f7d0b8 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 -fdump-tree-vrp1" } */
+/* { dg-options "-O2 -fno-tree-ccp -fdump-tree-evrp" } */
void h (void);
@@ -17,4 +17,4 @@ int g (int i, int j)
return 1;
}
-/* { dg-final { scan-tree-dump-times "Folding predicate.*to 1" 1 "vrp1" } } */
+/* { dg-final { scan-tree-dump-times "Folding predicate.*to 1" 1 "evrp" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr25382.c b/gcc/testsuite/gcc.dg/tree-ssa/pr25382.c
index dcf9148..0d19d0d 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr25382.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr25382.c
@@ -3,7 +3,7 @@
Check that VRP now gets ranges from BIT_AND_EXPRs. */
/* { dg-do compile } */
-/* { dg-options "-O2 -fno-tree-ccp -fdump-tree-vrp1" } */
+/* { dg-options "-O2 -fno-tree-ccp -fdump-tree-evrp" } */
int
foo (int a)
@@ -15,4 +15,4 @@ foo (int a)
return 1;
}
-/* { dg-final { scan-tree-dump-times "Folding predicate b_.* > 300 to 0" 1 "vrp1" } } */
+/* { dg-final { scan-tree-dump-times "Folding predicate b_.* > 300 to 0" 1 "evrp" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr61839_1.c b/gcc/testsuite/gcc.dg/tree-ssa/pr61839_1.c
index 9f8168a..9fcc35b 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr61839_1.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr61839_1.c
@@ -1,6 +1,6 @@
/* PR tree-optimization/61839. */
/* { dg-do run } */
-/* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-optimized" } */
+/* { dg-options "-O2 -fdump-tree-evrp -fdump-tree-optimized" } */
/* { dg-require-effective-target int32plus } */
__attribute__ ((noinline))
@@ -38,7 +38,7 @@ int main ()
}
/* Scan for c = 972195717) >> [0, 1] in function foo. */
-/* { dg-final { scan-tree-dump-times "486097858 : 972195717" 1 "vrp1" } } */
+/* { dg-final { scan-tree-dump-times "486097858 : 972195717" 1 "evrp" } } */
/* Scan for c = 972195717) >> [2, 3] in function bar. */
-/* { dg-final { scan-tree-dump-times "243048929 : 121524464" 2 "vrp1" } } */
+/* { dg-final { scan-tree-dump-times "243048929 : 121524464" 1 "evrp" } } */
/* { dg-final { scan-tree-dump-times "486097858" 0 "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr68431.c b/gcc/testsuite/gcc.dg/tree-ssa/pr68431.c
index 3bd3843..9c42563b 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/pr68431.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr68431.c
@@ -1,5 +1,5 @@
/* PR tree-optimization/68431 */
-/* { dg-options "-O2 -fdump-tree-vrp1-details" } */
+/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1-details" } */
unsigned int x = 1;
int
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp03.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp03.c
index 59146bf..5e87195 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp03.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp03.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-vrp1" } */
+/* { dg-options "-O2 -fdump-tree-evrp -fdump-tree-vrp1" } */
struct A
{
@@ -32,4 +32,4 @@ foo (struct A *p, struct A *q)
}
/* { dg-final { scan-tree-dump-times "Folding predicate q_.*to 1" 1 "vrp1" } } */
-/* { dg-final { scan-tree-dump-times "Folding predicate r_.*to 1" 1 "vrp1" } } */
+/* { dg-final { scan-tree-dump-times "Folding predicate r_.*to 1" 1 "evrp" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp07.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp07.c
index a5bd670..725bcc1 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp07.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp07.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fno-tree-fre -fdump-tree-vrp1-details -fdelete-null-pointer-checks" } */
+/* { dg-options "-O2 -fdisable-tree-evrp -fno-tree-fre -fdump-tree-vrp1-details -fdelete-null-pointer-checks" } */
int
foo (int i, int *p)
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp09.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp09.c
index d42a566..c2b2d65 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp09.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp09.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fno-tree-fre -fdump-tree-vrp1 -std=gnu89" } */
+/* { dg-options "-O2 -fno-tree-fre -fdump-tree-evrp -std=gnu89" } */
foo (int *p)
{
@@ -27,4 +27,4 @@ L78:
}
}
-/* { dg-final { scan-tree-dump-times "Folding predicate p_.. != 0B to 1" 2 "vrp1" } } */
+/* { dg-final { scan-tree-dump-times "Folding predicate p_..... != 0B to 1" 2 "evrp" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp17.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp17.c
index 4f12103..b8470e7 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp17.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp17.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-vrp1" } */
+/* { dg-options "-O2 -fdump-tree-evrp" } */
extern void abort (void) __attribute__ ((__noreturn__));
union tree_node;
@@ -27,5 +27,5 @@ gimplify_for_stmt (tree stmt)
abort ();
}
-/* { dg-final { scan-tree-dump-times "Simplified relational" 1 "vrp1" } } */
+/* { dg-final { scan-tree-dump-times "Simplified relational" 1 "evrp" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp18.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp18.c
index 008eebb..d7ab3f6 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp18.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp18.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-vrp1" } */
+/* { dg-options "-O2 -fdump-tree-evrp" } */
static int blocksize = 4096;
@@ -30,4 +30,4 @@ void foo (void)
eof_reached = 1;
}
-/* { dg-final { scan-tree-dump-times "Simplified relational" 1 "vrp1" } } */
+/* { dg-final { scan-tree-dump-times "Simplified relational" 1 "evrp" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp19.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp19.c
index cecacb6..3d47bfd 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp19.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp19.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-fwrapv -O1 -ftree-vrp -fdump-tree-vrp1" } */
+/* { dg-options "-fwrapv -O1 -ftree-vrp -fdump-tree-evrp" } */
#include <limits.h>
extern void abort ();
@@ -22,5 +22,5 @@ int g (int b) {
}
return 1;
}
-/* { dg-final { scan-tree-dump "Folding predicate a_. < 0 to 0" "vrp1" } } */
-/* { dg-final { scan-tree-dump "Folding predicate b_. >= 0 to 1" "vrp1" } } */
+/* { dg-final { scan-tree-dump "Folding predicate a_. < 0 to 0" "evrp" } } */
+/* { dg-final { scan-tree-dump "Folding predicate b_. >= 0 to 1" "evrp" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp20.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp20.c
index 60d1731..a844b94 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp20.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp20.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-fwrapv -O1 -fno-tree-fre -ftree-vrp -fdump-tree-vrp1" } */
+/* { dg-options "-fwrapv -O1 -fno-tree-fre -ftree-vrp -fdump-tree-evrp" } */
extern void abort ();
extern void exit (int);
@@ -23,5 +23,5 @@ int g (int b) {
return 1;
}
-/* { dg-final { scan-tree-dump "Folding predicate a_. == 0 to 0" "vrp1" } } */
-/* { dg-final { scan-tree-dump "Folding predicate b_. != 0 to 1" "vrp1" } } */
+/* { dg-final { scan-tree-dump "Folding predicate a_.... == 0 to 0" "evrp" } } */
+/* { dg-final { scan-tree-dump "Folding predicate b_.... != 0 to 1" "evrp" } } */
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp23.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp23.c
index ae68c090..855e8f1 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp23.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp23.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fno-tree-forwprop -fdump-tree-vrp1-details" } */
+/* { dg-options "-O2 -fdisable-tree-evrp -fno-tree-forwprop -fdump-tree-vrp1-details" } */
void aa (void);
void aos (void);
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp24.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp24.c
index 853ee21..1cdd763 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp24.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp24.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fno-tree-forwprop -fdump-tree-vrp1-details" } */
+/* { dg-options "-O2 -fdisable-tree-evrp -fno-tree-forwprop -fdump-tree-vrp1-details" } */
struct rtx_def;
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp58.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp58.c
index 5b44ae2..ff9835c 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp58.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp58.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-vrp1-details" } */
+/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1-details" } */
long long
foo (long long a, signed char b, signed char c)
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp92.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp92.c
index 5d53750..213aa47 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp92.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp92.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-vrp1-details -fdisable-tree-ethread" } */
+/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1-details -fdisable-tree-ethread" } */
void bar (void);
int foo (int i, int j)
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp98.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp98.c
index 982f091..704295a 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/vrp98.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp98.c
@@ -1,6 +1,6 @@
/* { dg-do compile } */
/* { dg-require-effective-target int128 } */
-/* { dg-options "-Os -fdump-tree-vrp1-details" } */
+/* { dg-options "-Os -fdump-tree-vrp1-details -fdisable-tree-evrp" } */
#include <stdint.h>
#include <limits.h>
diff --git a/gcc/testsuite/gcc.dg/vrp-min-max-1.c b/gcc/testsuite/gcc.dg/vrp-min-max-1.c
index 270f2bb..375d8d3 100644
--- a/gcc/testsuite/gcc.dg/vrp-min-max-1.c
+++ b/gcc/testsuite/gcc.dg/vrp-min-max-1.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-mergephi2" } */
+/* { dg-options "-O2 -fdisable-tree-evrp -fdump-tree-vrp1 -fdump-tree-mergephi2" } */
int bar (void);
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 7a08be7..f5d8154 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -10666,7 +10666,8 @@ evrp_dom_walker::before_dom_children (basic_block bb)
&& gimple_code (stmt) == GIMPLE_COND
&& (op0 = gimple_cond_lhs (stmt))
&& TREE_CODE (op0) == SSA_NAME
- && INTEGRAL_TYPE_P (TREE_TYPE (gimple_cond_lhs (stmt))))
+ && (INTEGRAL_TYPE_P (TREE_TYPE (gimple_cond_lhs (stmt)))
+ || POINTER_TYPE_P (TREE_TYPE (gimple_cond_lhs (stmt)))))
{
/* Entering a new scope. Try to see if we can find a VR
here. */
@@ -10749,12 +10750,23 @@ evrp_dom_walker::before_dom_children (basic_block bb)
set_defs_to_varying (stmt);
/* Try folding stmts with the VR discovered. */
- bool did_replace
- = replace_uses_in (stmt,
- op_with_constant_singleton_value_range);
- if (fold_stmt (&gsi, follow_single_use_edges)
- || did_replace)
- update_stmt (gsi_stmt (gsi));
+ bool did_replace = false;
+ if (vrp_fold_stmt (&gsi))
+ {
+ did_replace = true;
+ stmt = gsi_stmt (gsi);
+ update_stmt (stmt);
+ }
+
+ did_replace
+ |= replace_uses_in (stmt,
+ op_with_constant_singleton_value_range);
+
+ if (did_replace)
+ {
+ fold_stmt (&gsi, follow_single_use_edges);
+ stmt = gsi_stmt (gsi);
+ }
if (did_replace)
{
@@ -10776,6 +10788,7 @@ evrp_dom_walker::before_dom_children (basic_block bb)
if (TREE_CODE (rhs) == ADDR_EXPR)
recompute_tree_invariant_for_addr_expr (rhs);
}
+ update_stmt (gsi_stmt (gsi));
}
def_operand_p def_p = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF);
--
2.7.4
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [EVRP] Fold stmts with vrp_fold_stmt
2016-10-03 19:14 [EVRP] Fold stmts with vrp_fold_stmt kugan
@ 2016-10-04 8:56 ` Richard Biener
2016-10-05 5:58 ` kugan
0 siblings, 1 reply; 4+ messages in thread
From: Richard Biener @ 2016-10-04 8:56 UTC (permalink / raw)
To: kugan; +Cc: gcc-patches
On Tue, 4 Oct 2016, kugan wrote:
> Hi,
>
> This patch improves Early VRP by folding stmts using vrp_fold_stmt as it is
> done in ssa_propagate for VRP.
Why? I'd like us to move away from the fold_stmt callback of
substitute-and-fold (I have actually started some work towards that).
> I have also changed EVRP to handle POINTER_TYPE_P. I will send follow up
> patches to use this in IPA-VRP.
For pointers all VRP does is track non-NULLness. Can you split out this
part?
I'm really worried about all the testsuite changes -- it means we are
losing test coverage for VRP :/
Richard.
> Bootstrapped and regression testd on x86_64-linux-gnu with no new regressions.
> Is this OK for trunk?
>
> Thanks,
> Kugan
>
> gcc/testsuite/ChangeLog:
>
> 2016-10-03 Kugan Vivekanandarajah <kuganv@linaro.org>
>
> * gcc.dg/pr68217.c: Adjust testcase as more cases are now handled in
> evrp.
> * gcc.dg/predict-1.c: Likewise.
> * gcc.dg/predict-9.c: Likewise.
> * gcc.dg/tree-ssa/pr20318.c: Likewise.
> * gcc.dg/tree-ssa/pr21001.c: Likewise.
> * gcc.dg/tree-ssa/pr21090.c: Likewise.
> * gcc.dg/tree-ssa/pr21294.c: Likewise.
> * gcc.dg/tree-ssa/pr21559.c: Likewise.
> * gcc.dg/tree-ssa/pr21563.c: Likewise.
> * gcc.dg/tree-ssa/pr23744.c: Likewise.
> * gcc.dg/tree-ssa/pr25382.c: Likewise.
> * gcc.dg/tree-ssa/pr61839_1.c: Likewise.
> * gcc.dg/tree-ssa/pr68431.c: Likewise.
> * gcc.dg/tree-ssa/vrp03.c: Likewise.
> * gcc.dg/tree-ssa/vrp07.c: Likewise.
> * gcc.dg/tree-ssa/vrp09.c: Likewise.
> * gcc.dg/tree-ssa/vrp17.c: Likewise.
> * gcc.dg/tree-ssa/vrp18.c: Likewise.
> * gcc.dg/tree-ssa/vrp19.c: Likewise.
> * gcc.dg/tree-ssa/vrp20.c: Likewise.
> * gcc.dg/tree-ssa/vrp23.c: Likewise.
> * gcc.dg/tree-ssa/vrp24.c: Likewise.
> * gcc.dg/tree-ssa/vrp58.c: Likewise.
> * gcc.dg/tree-ssa/vrp92.c: Likewise.
> * gcc.dg/tree-ssa/vrp98.c: Likewise.
> * gcc.dg/vrp-min-max-1.c: Likewise.
>
> gcc/ChangeLog:
>
> 2016-10-03 Kugan Vivekanandarajah <kuganv@linaro.org>
>
> * tree-vrp.c (evrp_dom_walker::before_dom_children): Handle
> POINTER_TYPE_P. Also fold stmts with vrp_fold_stmt.
>
--
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [EVRP] Fold stmts with vrp_fold_stmt
2016-10-04 8:56 ` Richard Biener
@ 2016-10-05 5:58 ` kugan
2016-10-05 8:50 ` Richard Biener
0 siblings, 1 reply; 4+ messages in thread
From: kugan @ 2016-10-05 5:58 UTC (permalink / raw)
To: Richard Biener; +Cc: gcc-patches
[-- Attachment #1: Type: text/plain, Size: 2999 bytes --]
Hi Richard,
Thanks for the review.
On 04/10/16 19:56, Richard Biener wrote:
> On Tue, 4 Oct 2016, kugan wrote:
>
>> Hi,
>>
>> This patch improves Early VRP by folding stmts using vrp_fold_stmt as it is
>> done in ssa_propagate for VRP.
>
> Why?
I thought it would be good for early vrp to simplify stmts using ranges.
If we simplify obvious cases early, wouldn't it be better for IPA/LTO?
I'd like us to move away from the fold_stmt callback of
> substitute-and-fold (I have actually started some work towards that).
I must have missed it. But what is the general issue with
substitute-and-fold.
>
>> I have also changed EVRP to handle POINTER_TYPE_P. I will send follow up
>> patches to use this in IPA-VRP.
>
> For pointers all VRP does is track non-NULLness. Can you split out this
> part?
Attached patch does that.
> I'm really worried about all the testsuite changes -- it means we are
> losing test coverage for VRP :/
As you said earlier, unit testing with gimple FE should help. I am also
wondering if we should organize these testcases such that it is run once
without evrp and once with evrp to test both?
Thanks,
Kugan
gcc/ChangeLog:
2016-10-05 Kugan Vivekanandarajah <kuganv@linaro.org>
* tree-vrp.c (evrp_dom_walker::before_dom_children): Handle
POINTER_TYPE_P.
gcc/testsuite/ChangeLog:
2016-10-05 Kugan Vivekanandarajah <kuganv@linaro.org>
* gcc.dg/tree-ssa/evrp4.c: New test.
>
> Richard.
>
>> Bootstrapped and regression testd on x86_64-linux-gnu with no new regressions.
>> Is this OK for trunk?
>>
>> Thanks,
>> Kugan
>>
>> gcc/testsuite/ChangeLog:
>>
>> 2016-10-03 Kugan Vivekanandarajah <kuganv@linaro.org>
>>
>> * gcc.dg/pr68217.c: Adjust testcase as more cases are now handled in
>> evrp.
>> * gcc.dg/predict-1.c: Likewise.
>> * gcc.dg/predict-9.c: Likewise.
>> * gcc.dg/tree-ssa/pr20318.c: Likewise.
>> * gcc.dg/tree-ssa/pr21001.c: Likewise.
>> * gcc.dg/tree-ssa/pr21090.c: Likewise.
>> * gcc.dg/tree-ssa/pr21294.c: Likewise.
>> * gcc.dg/tree-ssa/pr21559.c: Likewise.
>> * gcc.dg/tree-ssa/pr21563.c: Likewise.
>> * gcc.dg/tree-ssa/pr23744.c: Likewise.
>> * gcc.dg/tree-ssa/pr25382.c: Likewise.
>> * gcc.dg/tree-ssa/pr61839_1.c: Likewise.
>> * gcc.dg/tree-ssa/pr68431.c: Likewise.
>> * gcc.dg/tree-ssa/vrp03.c: Likewise.
>> * gcc.dg/tree-ssa/vrp07.c: Likewise.
>> * gcc.dg/tree-ssa/vrp09.c: Likewise.
>> * gcc.dg/tree-ssa/vrp17.c: Likewise.
>> * gcc.dg/tree-ssa/vrp18.c: Likewise.
>> * gcc.dg/tree-ssa/vrp19.c: Likewise.
>> * gcc.dg/tree-ssa/vrp20.c: Likewise.
>> * gcc.dg/tree-ssa/vrp23.c: Likewise.
>> * gcc.dg/tree-ssa/vrp24.c: Likewise.
>> * gcc.dg/tree-ssa/vrp58.c: Likewise.
>> * gcc.dg/tree-ssa/vrp92.c: Likewise.
>> * gcc.dg/tree-ssa/vrp98.c: Likewise.
>> * gcc.dg/vrp-min-max-1.c: Likewise.
>>
>> gcc/ChangeLog:
>>
>> 2016-10-03 Kugan Vivekanandarajah <kuganv@linaro.org>
>>
>> * tree-vrp.c (evrp_dom_walker::before_dom_children): Handle
>> POINTER_TYPE_P. Also fold stmts with vrp_fold_stmt.
>>
>
[-- Attachment #2: 0001-Handle-pointer-type-in-evrp.patch --]
[-- Type: text/x-patch, Size: 1522 bytes --]
From c9badd0cee1433af67ba5e1a45a90b4b659a244f Mon Sep 17 00:00:00 2001
From: Kugan Vivekanandarajah <kugan.vivekanandarajah@linaro.org>
Date: Mon, 3 Oct 2016 06:12:05 +1100
Subject: [PATCH 1/5] Handle pointer type in evrp
---
gcc/testsuite/gcc.dg/tree-ssa/evrp4.c | 20 ++++++++++++++++++++
gcc/tree-vrp.c | 3 ++-
2 files changed, 22 insertions(+), 1 deletion(-)
create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/evrp4.c
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/evrp4.c b/gcc/testsuite/gcc.dg/tree-ssa/evrp4.c
new file mode 100644
index 0000000..ebb87ed
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/evrp4.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-evrp" } */
+
+int foo (int *p);
+
+struct st
+{
+ int a;
+ int b;
+};
+
+int bar (struct st *s)
+{
+
+ if (!s)
+ return 0;
+ foo (&s->a);
+}
+
+/* { dg-final { scan-tree-dump "\~\\\[0B, 0B\\\]" "evrp" } } */
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 7a08be7..46bbd82 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -10666,7 +10666,8 @@ evrp_dom_walker::before_dom_children (basic_block bb)
&& gimple_code (stmt) == GIMPLE_COND
&& (op0 = gimple_cond_lhs (stmt))
&& TREE_CODE (op0) == SSA_NAME
- && INTEGRAL_TYPE_P (TREE_TYPE (gimple_cond_lhs (stmt))))
+ && (INTEGRAL_TYPE_P (TREE_TYPE (gimple_cond_lhs (stmt)))
+ || POINTER_TYPE_P (TREE_TYPE (gimple_cond_lhs (stmt)))))
{
/* Entering a new scope. Try to see if we can find a VR
here. */
--
2.7.4
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [EVRP] Fold stmts with vrp_fold_stmt
2016-10-05 5:58 ` kugan
@ 2016-10-05 8:50 ` Richard Biener
0 siblings, 0 replies; 4+ messages in thread
From: Richard Biener @ 2016-10-05 8:50 UTC (permalink / raw)
To: kugan; +Cc: gcc-patches
On Wed, 5 Oct 2016, kugan wrote:
> Hi Richard,
> Thanks for the review.
>
> On 04/10/16 19:56, Richard Biener wrote:
> > On Tue, 4 Oct 2016, kugan wrote:
> >
> > > Hi,
> > >
> > > This patch improves Early VRP by folding stmts using vrp_fold_stmt as it
> > > is
> > > done in ssa_propagate for VRP.
> >
> > Why?
>
> I thought it would be good for early vrp to simplify stmts using ranges. If we
> simplify obvious cases early, wouldn't it be better for IPA/LTO?
>
> I'd like us to move away from the fold_stmt callback of
> > substitute-and-fold (I have actually started some work towards that).
>
> I must have missed it. But what is the general issue with
> substitute-and-fold.
The pass specific stmt folding hook is a distraction and causes extra
work. Most of the things the CCP variant does are no longer necessary
for example. First and foremost I'm trying to enable "dce" in
substitute-and-fold for VRP and handle ASSERT_EXPR "removal" by
means of propagation -- this should fix quite a few missed pattern
matchings with fold_stmt which when running into ASSERT_EXPRs just
give up.
> >
> > > I have also changed EVRP to handle POINTER_TYPE_P. I will send follow up
> > > patches to use this in IPA-VRP.
> >
> > For pointers all VRP does is track non-NULLness. Can you split out this
> > part?
> Attached patch does that.
That patch is ok.
> > I'm really worried about all the testsuite changes -- it means we are
> > losing test coverage for VRP :/
>
> As you said earlier, unit testing with gimple FE should help. I am also
> wondering if we should organize these testcases such that it is run once
> without evrp and once with evrp to test both?
Yeah, that would be nice. I always wondered about adding the ability
to add a "local torture" to individual testcases, say
{ dg-do compile }
{ dg-torture-options { "-O2 -fdisable-tree-evrp" "-O2" } }
(and make it be "additional" torture options when in dg-torture.exp)
Requires TCL hacking which isn't exactly my favourite...
Alternatively (seen elsewhere) put the testcase in a header and
have two testcases include it, with different dg-options ...
Richard.
> Thanks,
> Kugan
>
> gcc/ChangeLog:
>
> 2016-10-05 Kugan Vivekanandarajah <kuganv@linaro.org>
>
> * tree-vrp.c (evrp_dom_walker::before_dom_children): Handle
> POINTER_TYPE_P.
>
>
> gcc/testsuite/ChangeLog:
>
> 2016-10-05 Kugan Vivekanandarajah <kuganv@linaro.org>
>
> * gcc.dg/tree-ssa/evrp4.c: New test.
>
> >
> > Richard.
> >
> > > Bootstrapped and regression testd on x86_64-linux-gnu with no new
> > > regressions.
> > > Is this OK for trunk?
> > >
> > > Thanks,
> > > Kugan
> > >
> > > gcc/testsuite/ChangeLog:
> > >
> > > 2016-10-03 Kugan Vivekanandarajah <kuganv@linaro.org>
> > >
> > > * gcc.dg/pr68217.c: Adjust testcase as more cases are now handled in
> > > evrp.
> > > * gcc.dg/predict-1.c: Likewise.
> > > * gcc.dg/predict-9.c: Likewise.
> > > * gcc.dg/tree-ssa/pr20318.c: Likewise.
> > > * gcc.dg/tree-ssa/pr21001.c: Likewise.
> > > * gcc.dg/tree-ssa/pr21090.c: Likewise.
> > > * gcc.dg/tree-ssa/pr21294.c: Likewise.
> > > * gcc.dg/tree-ssa/pr21559.c: Likewise.
> > > * gcc.dg/tree-ssa/pr21563.c: Likewise.
> > > * gcc.dg/tree-ssa/pr23744.c: Likewise.
> > > * gcc.dg/tree-ssa/pr25382.c: Likewise.
> > > * gcc.dg/tree-ssa/pr61839_1.c: Likewise.
> > > * gcc.dg/tree-ssa/pr68431.c: Likewise.
> > > * gcc.dg/tree-ssa/vrp03.c: Likewise.
> > > * gcc.dg/tree-ssa/vrp07.c: Likewise.
> > > * gcc.dg/tree-ssa/vrp09.c: Likewise.
> > > * gcc.dg/tree-ssa/vrp17.c: Likewise.
> > > * gcc.dg/tree-ssa/vrp18.c: Likewise.
> > > * gcc.dg/tree-ssa/vrp19.c: Likewise.
> > > * gcc.dg/tree-ssa/vrp20.c: Likewise.
> > > * gcc.dg/tree-ssa/vrp23.c: Likewise.
> > > * gcc.dg/tree-ssa/vrp24.c: Likewise.
> > > * gcc.dg/tree-ssa/vrp58.c: Likewise.
> > > * gcc.dg/tree-ssa/vrp92.c: Likewise.
> > > * gcc.dg/tree-ssa/vrp98.c: Likewise.
> > > * gcc.dg/vrp-min-max-1.c: Likewise.
> > >
> > > gcc/ChangeLog:
> > >
> > > 2016-10-03 Kugan Vivekanandarajah <kuganv@linaro.org>
> > >
> > > * tree-vrp.c (evrp_dom_walker::before_dom_children): Handle
> > > POINTER_TYPE_P. Also fold stmts with vrp_fold_stmt.
> > >
> >
>
--
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-10-05 8:50 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-03 19:14 [EVRP] Fold stmts with vrp_fold_stmt kugan
2016-10-04 8:56 ` Richard Biener
2016-10-05 5:58 ` kugan
2016-10-05 8:50 ` Richard Biener
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).