aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2024-06-30 11:37:12 +0200
committerRichard Biener <rguenth@gcc.gnu.org>2024-07-01 16:20:41 +0200
commit4d24159a1fcb15e1e28f46aa418de5e1ae384ff5 (patch)
tree05bf2c87d7e9be344a3d43dc7773eca112b94133
parent7a65ab6b5f38d3018ffd456f278a9fd885487a27 (diff)
downloadgcc-4d24159a1fcb15e1e28f46aa418de5e1ae384ff5.zip
gcc-4d24159a1fcb15e1e28f46aa418de5e1ae384ff5.tar.gz
gcc-4d24159a1fcb15e1e28f46aa418de5e1ae384ff5.tar.bz2
Preserve SSA info for more propagated copy
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. * tree-ssa-forwprop.cc (fwprop_set_lattice_val): Preserve SSA info. * tree-ssa-propagate.cc (substitute_and_fold_dom_walker::before_dom_children): Likewise.
-rw-r--r--gcc/tree-ssa-forwprop.cc4
-rw-r--r--gcc/tree-ssa-propagate.cc8
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc
index abf71f0..44a6b5d 100644
--- a/gcc/tree-ssa-forwprop.cc
+++ b/gcc/tree-ssa-forwprop.cc
@@ -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);
}
}
diff --git a/gcc/tree-ssa-propagate.cc b/gcc/tree-ssa-propagate.cc
index a34c761..d96d0a9 100644
--- a/gcc/tree-ssa-propagate.cc
+++ b/gcc/tree-ssa-propagate.cc
@@ -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;
}
}