https://gcc.gnu.org/bugzilla/show_bug.cgi?id=74585
--- Comment #16 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Segher Boessenkool from comment #15) > The compiler now seems to assume in earlier passes that parameters and > return values are passed in memory. This is very sub-optimal, all but the > last passes cannot do much useful work this way. No, it "assumes" that RTL expansion will put aggregate typed parameters in a stack slot, and RTL expansion does exactly this if the aggregate has BLKmode (it always did this). It's RTL optimizers job to remove this "abstraction" (it always has been). If we'd get GIMPLE more knowledge we'd just shift the abstraction removal there in the hope it'll be more powerful, in particular stack slot allocation can eventually be avoided (we can't really undo that on RTL, we can only get rid of uses of a stack slot).