Hello,

I'm seeing a miscompilation on sel-sched branch that at first sight looks
related to IRA merge.

alias.c::anti_dependence disambiguates references to
(mem/c:DI (reg:DI 122 r122 [121]) [64 ivtmp.743+0 S8 A64])
and
(mem/c:DI (reg:DI 122 r122) [64 ivtmp.1640+0 S8 A64])
while there are no stores to r122 between corresponding insns.

It does so because nonoverlapping_memrefs_p returns TRUE for these mems, which
is, in turn, due to this code:

2118   /* If either RTL is not a MEM, it must be a REG or CONCAT, meaning they
2119      can't overlap unless they are the same because we never reuse that 
part
2120      of the stack frame used for locals for spilled pseudos.  */
2121   if ((!MEM_P (rtlx) || !MEM_P (rtly))
2122       && ! rtx_equal_p (rtlx, rtly))
2123     return 1;

Corresponding RTL_DECLS are:
rtlx = (reg:DI 97 r105 [orig:850 ivtmp.743 ] [850])
rtly = (mem/c:DI (plus:DI (reg/f:DI 111 r119)
        (const_int -1456 [0xfffffffffffffa50])) [64 ivtmp.1640+0 S8 A64])

Does IRA support stack slot sharing described in the comment?

Thanks.

--
Alexander Monakov

Reply via email to