https://gcc.gnu.org/g:f4ab559af9c423475a719b612061c34ff6d4d19b
commit r17-1266-gf4ab559af9c423475a719b612061c34ff6d4d19b Author: Andrew Pinski <[email protected]> Date: Tue Jun 2 14:20:17 2026 -0700 sccopy: Handle ssa info for copies in sccopy Currently if the ssa info (range or aliasing) is different between the src and dest of a copy, sccopy will reject it. This fixes the FIXME and handles it in a similar way as copyprop handles it. This is needed to able to move sccopy earlier (before phiopt1) and to act like a copyprop pass. Bootstrapped and tested on x86_64-linux-gnu with no regressions. gcc/ChangeLog: * gimple-ssa-sccopy.cc (stmt_may_generate_copy): Remove restriction on the ssa info being different for the "copy". (scc_copy_prop::replace_scc_by_value): Call maybe_duplicate_ssa_info_at_copy when copyproping a ssa name. Signed-off-by: Andrew Pinski <[email protected]> Diff: --- gcc/gimple-ssa-sccopy.cc | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/gcc/gimple-ssa-sccopy.cc b/gcc/gimple-ssa-sccopy.cc index 0badfb11b938..4252e5295df7 100644 --- a/gcc/gimple-ssa-sccopy.cc +++ b/gcc/gimple-ssa-sccopy.cc @@ -405,22 +405,6 @@ stmt_may_generate_copy (gimple *stmt) if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rhs)) return false; - /* It is possible that lhs has more alignment or value range information. By - propagating we would lose this information. So in the case that alignment - or value range information differs, we are conservative and do not - propagate. - - FIXME: Propagate alignment and value range info the same way copy-prop - does. */ - if (POINTER_TYPE_P (TREE_TYPE (lhs)) - && POINTER_TYPE_P (TREE_TYPE (rhs)) - && SSA_NAME_PTR_INFO (lhs) != SSA_NAME_PTR_INFO (rhs)) - return false; - if (!POINTER_TYPE_P (TREE_TYPE (lhs)) - && !POINTER_TYPE_P (TREE_TYPE (rhs)) - && SSA_NAME_RANGE_INFO (lhs) != SSA_NAME_RANGE_INFO (rhs)) - return false; - return true; /* A statement of type _2 = _1;. */ } @@ -497,6 +481,8 @@ scc_copy_prop::replace_scc_by_value (vec<gimple *> scc, tree val) } replace_uses_by (name, val); + if (TREE_CODE (val) == SSA_NAME) + maybe_duplicate_ssa_info_at_copy (name, val); bitmap_set_bit (dead_stmts, SSA_NAME_VERSION (name)); didsomething = true; }
