https://gcc.gnu.org/g:2e5184c4a93c4b0d40675014e9ff8b345ec16509
commit r17-1753-g2e5184c4a93c4b0d40675014e9ff8b345ec16509 Author: Andrew Pinski <[email protected]> Date: Sun Jun 21 11:40:33 2026 -0700 cselim: manually keep upto date the vops While working on related code I noticed that we can keep the vops up todate so rename ssa does not need to do anything here. This manually updates the 2 inserted statements, the load on the edge and the store in the join bb. This should be a small compile time optimization. Boostrapped and tested on x86_64-linux-gnu. gcc/ChangeLog: * tree-ssa-phiopt.cc (cond_store_replacement): Update the vuse on the new load and the vuse/vdef on the new store. Signed-off-by: Andrew Pinski <[email protected]> Diff: --- gcc/tree-ssa-phiopt.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc index ebdff20b69bb..b18e5aa9c069 100644 --- a/gcc/tree-ssa-phiopt.cc +++ b/gcc/tree-ssa-phiopt.cc @@ -3167,9 +3167,12 @@ cond_store_replacement (basic_block middle_bb, basic_block join_bb, edge e0, /* 2) Insert a load from the memory of the store to the temporary on the edge which did not contain the store. */ + gphi *vphi = get_virtual_phi (join_bb); name = make_temp_ssa_name (TREE_TYPE (lhs), NULL, "cstore"); new_stmt = gimple_build_assign (name, lhs); gimple_set_location (new_stmt, locus); + /* Set the vuse for the new load. */ + gimple_set_vuse (new_stmt, gimple_phi_arg_def (vphi, e1->dest_idx)); lhs = unshare_expr (lhs); { /* Set the no-warning bit on the rhs of the load to avoid uninit @@ -3189,6 +3192,15 @@ cond_store_replacement (basic_block middle_bb, basic_block join_bb, edge e0, new_stmt = gimple_build_assign (lhs, gimple_phi_result (newphi)); + /* Update the vdef for the new store statement. */ + tree newvphilhs = make_ssa_name (gimple_vop (cfun)); + tree vdef = gimple_phi_result (vphi); + gimple_set_vuse (new_stmt, newvphilhs); + gimple_set_vdef (new_stmt, vdef); + gimple_phi_set_result (vphi, newvphilhs); + SSA_NAME_DEF_STMT (vdef) = new_stmt; + update_stmt (vphi); + /* 4) Insert that PHI node. */ gsi = gsi_after_labels (join_bb); gsi_insert_before (&gsi, new_stmt, GSI_NEW_STMT);
