[3/3] Preserve SSA info for more propagated copy
Checks
Commit Message
Besides VN and copy-prop also CCP and VRP as well as forwprop
propagate out copies and thus it's worthwhile to try to preserve
range and points-to info there when possible.
Note that this also fixes the testcase from PR115701 but that's
because we do not actually intersect info but only copy info when
there was no info present.
Bootstrapped and tested on x86_64-unknown-linux-gnu, will push
only tomorrow.
* tree-ssa-forwprop.cc (fwprop_set_lattice_val): Preserve
SSA info.
* tree-ssa-propagate.cc
(substitute_and_fold_dom_walker::before_dom_children): Likewise.
---
gcc/tree-ssa-forwprop.cc | 4 ++++
gcc/tree-ssa-propagate.cc | 8 ++++++++
2 files changed, 12 insertions(+)
@@ -207,6 +207,10 @@ fwprop_set_lattice_val (tree name, tree val)
lattice.quick_grow_cleared (num_ssa_names);
}
lattice[SSA_NAME_VERSION (name)] = val;
+ /* As this now constitutes a copy duplicate points-to
+ and range info appropriately. */
+ if (TREE_CODE (val) == SSA_NAME)
+ maybe_duplicate_ssa_info_at_copy (name, val);
}
}
@@ -789,6 +789,10 @@ substitute_and_fold_dom_walker::before_dom_children (basic_block bb)
fprintf (dump_file, "\n");
}
bitmap_set_bit (dceworklist, SSA_NAME_VERSION (res));
+ /* As this now constitutes a copy duplicate points-to
+ and range info appropriately. */
+ if (TREE_CODE (sprime) == SSA_NAME)
+ maybe_duplicate_ssa_info_at_copy (res, sprime);
continue;
}
}
@@ -831,6 +835,10 @@ substitute_and_fold_dom_walker::before_dom_children (basic_block bb)
fprintf (dump_file, "\n");
}
bitmap_set_bit (dceworklist, SSA_NAME_VERSION (lhs));
+ /* As this now constitutes a copy duplicate points-to
+ and range info appropriately. */
+ if (TREE_CODE (sprime) == SSA_NAME)
+ maybe_duplicate_ssa_info_at_copy (lhs, sprime);
continue;
}
}