diff options
author | Kugan Vivekanandarajah <kugan@gcc.gnu.org> | 2016-10-13 01:26:28 +0000 |
---|---|---|
committer | Kugan Vivekanandarajah <kugan@gcc.gnu.org> | 2016-10-13 01:26:28 +0000 |
commit | 0011af7b9dce859b28a4dbdce2dff6d081193ddd (patch) | |
tree | 0bf7abb84bde6fc4de931b535835cef98e0f5339 /gcc | |
parent | 457e189d04c97e71e14ab3ea8d5c32510b9a0616 (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/evrp6.c | 22 | ||||
-rw-r--r-- | gcc/tree-vrp.c | 20 |
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); } } |