aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2021-10-27 18:22:16 +0200
committerAldy Hernandez <aldyh@redhat.com>2021-10-27 20:15:00 +0200
commitaeb10f8d2a6e1267c981a62dc8163af3b7607797 (patch)
tree00fcd3989eab2d835a6c1ae900994f804df50332 /gcc
parent2f0b6a971a051f6e687a15dd2fa4bf431381e551 (diff)
downloadgcc-aeb10f8d2a6e1267c981a62dc8163af3b7607797.zip
gcc-aeb10f8d2a6e1267c981a62dc8163af3b7607797.tar.gz
gcc-aeb10f8d2a6e1267c981a62dc8163af3b7607797.tar.bz2
Kill known equivalences before a new assignment in the path solver.
Every time we have a killing statement, we must also kill the relations seen so far. This is similar to what we did for the equivs inherent in PHIs along a path. Tested on x86-64 and ppc64le Linux. gcc/ChangeLog: * gimple-range-path.cc (path_range_query::range_defined_in_block): Call killing_def.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/gimple-range-path.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/gimple-range-path.cc b/gcc/gimple-range-path.cc
index 2f570a1..d8c2a9b 100644
--- a/gcc/gimple-range-path.cc
+++ b/gcc/gimple-range-path.cc
@@ -288,8 +288,14 @@ path_range_query::range_defined_in_block (irange &r, tree name, basic_block bb)
if (gimple_code (def_stmt) == GIMPLE_PHI)
ssa_range_in_phi (r, as_a<gphi *> (def_stmt));
- else if (!range_of_stmt (r, def_stmt, name))
- r.set_varying (TREE_TYPE (name));
+ else
+ {
+ if (name)
+ get_path_oracle ()->killing_def (name);
+
+ if (!range_of_stmt (r, def_stmt, name))
+ r.set_varying (TREE_TYPE (name));
+ }
if (bb)
m_non_null.adjust_range (r, name, bb);