diff options
author | Richard Biener <rguenther@suse.de> | 2019-06-06 07:32:44 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-06-06 07:32:44 +0000 |
commit | 8ce6fb5fec60f0ce6363d2a41f30e5fc620a4beb (patch) | |
tree | 7394a568931edeb98af3a8d7ae2e512a1ee71833 /gcc | |
parent | ed315c041f48f491d6310fe83810bb93cc3e5d17 (diff) | |
download | gcc-8ce6fb5fec60f0ce6363d2a41f30e5fc620a4beb.zip gcc-8ce6fb5fec60f0ce6363d2a41f30e5fc620a4beb.tar.gz gcc-8ce6fb5fec60f0ce6363d2a41f30e5fc620a4beb.tar.bz2 |
vr-values.c (vr_values::extract_range_from_ssa_name): Do not put equivalences on UNDEFINED ranges.
2019-06-06 Richard Biener <rguenther@suse.de>
* vr-values.c (vr_values::extract_range_from_ssa_name): Do not
put equivalences on UNDEFINED ranges.
* gimple-ssa-evrp.c (evrp_dom_walker::before_dom_children):
Make sure to drop defs of stmts added during simplification
to VARYING.
From-SVN: r271990
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/gimple-ssa-evrp.c | 17 | ||||
-rw-r--r-- | gcc/vr-values.c | 3 |
3 files changed, 27 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0cc05c7..84c01ce 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2019-06-06 Richard Biener <rguenther@suse.de> + * vr-values.c (vr_values::extract_range_from_ssa_name): Do not + put equivalences on UNDEFINED ranges. + * gimple-ssa-evrp.c (evrp_dom_walker::before_dom_children): + Make sure to drop defs of stmts added during simplification + to VARYING. + +2019-06-06 Richard Biener <rguenther@suse.de> + * tree-ssa-structalias.c: Include tree-cfg.h. (make_heapvar): Do not make heap vars artificial. (find_func_aliases_for_builtin_call): Handle stack allocation diff --git a/gcc/gimple-ssa-evrp.c b/gcc/gimple-ssa-evrp.c index 96da79b..16a8f7f 100644 --- a/gcc/gimple-ssa-evrp.c +++ b/gcc/gimple-ssa-evrp.c @@ -175,6 +175,8 @@ evrp_dom_walker::before_dom_children (basic_block bb) /* Try folding stmts with the VR discovered. */ bool did_replace = evrp_folder.replace_uses_in (stmt); + gimple_stmt_iterator prev_gsi = gsi; + gsi_prev (&prev_gsi); if (fold_stmt (&gsi, follow_single_use_edges) || did_replace) { @@ -191,6 +193,21 @@ evrp_dom_walker::before_dom_children (basic_block bb) if (did_replace) { + /* If we wound up generating new stmts during folding + drop all their defs to VARYING. We can't easily + process them because we've already instantiated + ranges on uses on STMT that only hold after it. */ + if (gsi_end_p (prev_gsi)) + prev_gsi = gsi_start_bb (bb); + else + gsi_next (&prev_gsi); + while (gsi_stmt (prev_gsi) != gsi_stmt (gsi)) + { + evrp_range_analyzer.get_vr_values () + ->set_defs_to_varying (gsi_stmt (prev_gsi)); + gsi_next (&prev_gsi); + } + /* If we cleaned up EH information from the statement, remove EH edges. */ if (maybe_clean_or_replace_eh_stmt (old_stmt, stmt)) diff --git a/gcc/vr-values.c b/gcc/vr-values.c index b401516..9e58cbf 100644 --- a/gcc/vr-values.c +++ b/gcc/vr-values.c @@ -719,7 +719,8 @@ vr_values::extract_range_from_ssa_name (value_range *vr, tree var) else vr->set (var); - vr->equiv_add (var, get_value_range (var), &vrp_equiv_obstack); + if (!vr->undefined_p ()) + vr->equiv_add (var, get_value_range (var), &vrp_equiv_obstack); } /* Extract range information from a binary expression OP0 CODE OP1 based on |