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

--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Bill Seurer from comment #4)
> That fix broke the test case pr60203.c.
> 
> PASS: gcc.target/powerpc/pr60203.c (test for excess errors)
> PASS: gcc.target/powerpc/pr60203.c scan-assembler-not stfd
> FAIL: gcc.target/powerpc/pr60203.c scan-assembler-not lfd
> PASS: gcc.target/powerpc/pr60203.c scan-assembler-not lxsdx
> PASS: gcc.target/powerpc/pr60203.c scan-assembler-not stxsdx
> PASS: gcc.target/powerpc/pr60203.c scan-assembler-not mfvsrd
> PASS: gcc.target/powerpc/pr60203.c scan-assembler-not mtvsrd
> 
> There are two lfds and lots of other ops in the generated code with the fix
> 
> pack:
>       xxpermdi 0,2,1,0
>       addi 9,1,-16
>       xxpermdi 0,0,0,2
>       stxvd2x 0,0,9
>       lfd 1,-16(1)
>       lfd 2,-8(1)
>       blr
> 
> and none without
> 
> pack:
>       blr
> 
> Compiled with  -mcpu=power8 -O3.

So this is very likely vectorization of

long double
pack (double a, double aa)
{
  union u_ld u;
  u.d[0] = a;
  u.d[1] = aa;
  return u.ld;
}

being no longer profitable.  I'll investigate why, this shouldn't have changed
at all by the rev.

I get

# of expected passes            7

with a cross btw.

pack:
        blr

it's already optimized at GIMPLE level to

pack (double a, double aa)
{
  <bb 2>:
  return a_2(D);

}

even before vectorization.  So certainly unrelated to this change.

Reply via email to