https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83758

--- Comment #30 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> 
---
(In reply to acsawdey from comment #29)
> The problematic expression was:
> 
> (mem/c:QI (plus:DI (plus:DI (reg/f:DI 187) (const_int 32 [0x20])) (const_int
> 72 [0x48]))
> 
> and internal_arg_pointer was (plus:DI (reg/f:DI 187) (const_int 32 [0x20]))
> ... just not the same rtx object in both places.

Where does it get copied?

> It seems like the +32 is FIRST_PARM_OFFSET for ppc64le. 187 is in fact just
> a copy of the stack pointer (r12).
> 
> It seems like there is something that decomposed the whole offset of 104,
> which is seen elsewhere after expand into 32+72.
> 
> If I understand correctly, you are saying that if the rtx with splitstack on
> was just reg+104, we would not recognize that because we are looking for
> this particular reg+32 pattern?

Yeah.  I'm not sure how we end up with the nested pluses
(which would normally be folded into one) but don't end up with
equal addresses for the inner plus.  It seems like a weird half
measure.

Reply via email to