https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49330
--- Comment #23 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Richard Biener from comment #22) > Things we fail to disambiguate are > > (mem:TF (pre_dec:SI (reg/f:SI 7 sp)) [0 S16 A8]) > vs. > (mem/c:TF (plus:SI (reg/f:SI 19 frame) > (const_int -16 [0xfffffffffffffff0])) [1 S16 A128]) > > or > > (mem:SI (pre_dec:SI (reg/f:SI 7 sp)) [3 S4 A32]) > vs. > (mem/f/c:SI (symbol_ref:SI ("argv") [flags 0x2] <var_decl 0x7f782d1e6360 > argv>) [2 argv+0 S4 A32]) > > where I don't find anything besides CSELIB cselib_sp_based_value_p handling > in find_base_term that could be the one handling it? > > I guess we should be able to somehow handle both sp and frame based > accesses in a more conservative way? it's really 99% like this which is why eventually that CONST_INT restriction worked so "well". Can we easily identify spill slot accesses somehow? The parameter accesses (frame references?) should simply get appropriate MEM_EXPRs IMHO.