https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68961
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I can only reproduce with a ppc64le cross, but not be cross, supposedly because my ppc64le cross is using auto-host.h which Marek sent me from a native configured compiler, while the be one does not. Maybe the difference is whether power8 instructions are supported by assembler or something similar. Looking at the be->le differences, it starts in esra: ... -Rejected (2230): not aggregate: a -Rejected (2231): not aggregate: aa -Candidate (2234): u -Created a replacement for u offset: 0, size: 64: u$d$0 +Rejected (2351): not aggregate: a +Rejected (2352): not aggregate: aa +Candidate (2355): u +! Disqualifying u - No scalar replacements to be created. ... pack (double a, double aa) { - double u$d$0; union u_ld u; long double _6; <bb 2>: - u$d$0_8 = a_2(D); + u.d[0] = a_2(D); u.d[1] = aa_4(D); - _6 = u$d$0_8; + _6 = u.ld; u ={v} {CLOBBER}; return _6; and if we don't SRA this, we don't optimize it away. Ah, actually, I can reproduce even with the ppc64be cross, if I use explicit -mlong-double-128.