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.

Reply via email to