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/tree-vrp.c | |
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/tree-vrp.c')
-rw-r--r-- | gcc/tree-vrp.c | 20 |
1 files changed, 13 insertions, 7 deletions
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); } } |