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

--- Comment #22 from Segher Boessenkool <segher at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #21)
> It did so even before my or Roger's patch.

It was my first successful bootstrap in a few days, and I replied to this old
PR
without looking everywhere else first.

> As I wrote in PR105023, the problem is that the rs6000 backend decides to
> pass that huge (2 Exabytes long) argument partially in registers (reg:BLK 3
> 3) and partially on the stack,

It isn't the backend that decides to do that.  The backend correctly does what
the ABI requires here: pass up to eight things in GPRs, and the rest in the
parameter save area (on the stack) (this is ignoring FPRs and the like, for
simplicity).

> while on most other backends it is passed
> just on the stack and we sorry at that point instead of trying to overwrite
> compiler's memory.  (reg:BLK 3 3) looks just way too suspect to me, do we
> pass say 256 byte long homogenous structures that way too?

reg:BLK is invalid always, :BLK is valid on memory only.

Reply via email to