aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKugan Vivekanandarajah <kugan@gcc.gnu.org>2016-10-13 01:26:28 +0000
committerKugan Vivekanandarajah <kugan@gcc.gnu.org>2016-10-13 01:26:28 +0000
commit0011af7b9dce859b28a4dbdce2dff6d081193ddd (patch)
tree0bf7abb84bde6fc4de931b535835cef98e0f5339 /gcc
parent457e189d04c97e71e14ab3ea8d5c32510b9a0616 (diff)
downloadgcc-0011af7b9dce859b28a4dbdce2dff6d081193ddd.zip
gcc-0011af7b9dce859b28a4dbdce2dff6d081193ddd.tar.gz
gcc-0011af7b9dce859b28a4dbdce2dff6d081193ddd.tar.bz2
EVRP - Push op1 value range before pushing op0 value range.
gcc/ChangeLog: 2016-10-12 Richard Biener <rguenther@suse.de> * tree-vrp.c (evrp_dom_walker::try_find_new_range): Renamed from try_add_new_range and made to eturn new range. (evrp_dom_walker::before_dom_children): Push op1 value range before pushing op0 value range. gcc/testsuite/ChangeLog: 2016-10-12 Kugan Vivekanandarajah <kuganv@linaro.org> * gcc.dg/tree-ssa/evrp6.c: New test. From-SVN: r241083
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/evrp6.c22
-rw-r--r--gcc/tree-vrp.c20
4 files changed, 46 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 600700a..922a0b6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2016-10-12 Richard Biener <rguenther@suse.de>
+
+ * tree-vrp.c (evrp_dom_walker::try_find_new_range): Renamed from
+ try_add_new_range and made to eturn new range.
+ (evrp_dom_walker::before_dom_children): Push op1 value range before
+ pushing op0 value range.
+
2016-10-12 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
PR tree-optimization/77937
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5eb693a..e0d4f0b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2016-10-12 Kugan Vivekanandarajah <kuganv@linaro.org>
+
+ * gcc.dg/tree-ssa/evrp6.c: New test.
+
2016-10-12 Segher Boessenkool <segher@kernel.crashing.org>
* gcc.target/powerpc/shrink-wrap-separate-0.c: New testcase.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/evrp6.c b/gcc/testsuite/gcc.dg/tree-ssa/evrp6.c
new file mode 100644
index 0000000..35d4d74
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/evrp6.c
@@ -0,0 +1,22 @@
+
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-evrp" } */
+
+extern void abort (void);
+
+int
+foo (int k, int j)
+{
+ if (j >= 10)
+ {
+ if (j < k)
+ {
+ k++;
+ if (k < 10)
+ abort ();
+ }
+ }
+
+ return j;
+}
+/* { dg-final { scan-tree-dump "\\\[12, \\+INF" "evrp" } } */
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 8d5fa66..941c0fd 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -10646,7 +10646,7 @@ public:
virtual void after_dom_children (basic_block);
void push_value_range (const_tree var, value_range *vr);
value_range *pop_value_range (const_tree var);
- void try_add_new_range (tree op, tree_code code, tree limit);
+ value_range *try_find_new_range (tree op, tree_code code, tree limit);
/* Cond_stack holds the old VR. */
auto_vec<std::pair <const_tree, value_range*> > stack;
@@ -10655,10 +10655,10 @@ public:
};
-/* Add new range to OP such that (OP CODE LIMIT) is true. */
+/* Find new range for OP such that (OP CODE LIMIT) is true. */
-void
-evrp_dom_walker::try_add_new_range (tree op, tree_code code, tree limit)
+value_range *
+evrp_dom_walker::try_find_new_range (tree op, tree_code code, tree limit)
{
value_range vr = VR_INITIALIZER;
value_range *old_vr = get_value_range (op);
@@ -10674,8 +10674,9 @@ evrp_dom_walker::try_add_new_range (tree op, tree_code code, tree limit)
{
value_range *new_vr = vrp_value_range_pool.allocate ();
*new_vr = vr;
- push_value_range (op, new_vr);
+ return new_vr;
}
+ return NULL;
}
/* See if there is any new scope is entered with new VR and set that VR to
@@ -10711,7 +10712,7 @@ evrp_dom_walker::before_dom_children (basic_block bb)
code = invert_tree_comparison (gimple_cond_code (stmt),
HONOR_NANS (op0));
/* Add VR when (OP0 CODE OP1) condition is true. */
- try_add_new_range (op0, code, op1);
+ value_range *op0_range = try_find_new_range (op0, code, op1);
/* Register ranges for y in x < y where
y might have ranges that are useful. */
@@ -10724,8 +10725,13 @@ evrp_dom_walker::before_dom_children (basic_block bb)
&new_code, &limit))
{
/* Add VR when (OP1 NEW_CODE LIMIT) condition is true. */
- try_add_new_range (op1, new_code, limit);
+ value_range *op1_range = try_find_new_range (op1, new_code, limit);
+ if (op1_range)
+ push_value_range (op1, op1_range);
}
+
+ if (op0_range)
+ push_value_range (op0, op0_range);
}
}