https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123776
--- Comment #6 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The trunk branch has been updated by Andrew Pinski <[email protected]>: https://gcc.gnu.org/g:716127795d95f96af7b19ef7d3ca8cfd80f32686 commit r16-6998-g716127795d95f96af7b19ef7d3ca8cfd80f32686 Author: Andrew Pinski <[email protected]> Date: Thu Jan 22 22:04:59 2026 -0800 gimple-fold: Fix handling of vdefs for MASK_LOAD_LANES replacement [PR123776] This was found when I was running the gcc testsuite with some SVE options to enable SVE only vectorization and enable it always. After r16-5984-gcee0a9dd2700b9 and r16-6918-g46a3355c7f1656, we would fold: # .MEM_696 = VDEF <.MEM_695> vect_array.781 = .MASK_LOAD_LANES (vectp_this.772_515, 64B, loop_mask_511, { 0, 0 }); into: vect_array.781 = {}; But since this was originally a "load" we don't copy the vdef. Some passes like fre will not cause a TODO_update_ssa to happen so we hit an assert which basically says the we should have done an update_ssa. While we could do an update_ssa, the better fix is to copy the vdef from the old statement to the new one before doing the gsi_replace. When we know this will be a store (in the !is_gimple_reg case). And then we have kept the vop up to date and don't need to do an update_ssa. Pushed as obvious after a build and test on aarch64-linux-gnu. PR tree-optimization/123776 gcc/ChangeLog: * gimple-fold.cc (gimple_fold_partial_load_store): Copy the vdef from the old statement to the new statement of a load that is also a store to non gimple_reg. Signed-off-by: Andrew Pinski <[email protected]>
