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.