https://gcc.gnu.org/g:4d24159a1fcb15e1e28f46aa418de5e1ae384ff5

commit r15-1757-g4d24159a1fcb15e1e28f46aa418de5e1ae384ff5
Author: Richard Biener <rguent...@suse.de>
Date:   Sun Jun 30 11:37:12 2024 +0200

    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.

Diff:
---
 gcc/tree-ssa-forwprop.cc  | 4 ++++
 gcc/tree-ssa-propagate.cc | 8 ++++++++
 2 files changed, 12 insertions(+)

diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc
index abf71f0d3a0..44a6b5d39aa 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 a34c7618b55..d96d0a9fe19 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;
            }
        }

Reply via email to