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

--- Comment #5 from Tamar Christina <tnfchris at gcc dot gnu.org> ---
looks like the only other function that changed is mult_su3_an

which now seems to have different scheduling and uses a different vector FMA
instruction (presumably because of a change in register allocation).

  - vfmadd132pd %ymm5,%ymm1,%ymm10
  - vfnmadd132pd %ymm8,%ymm10,%ymm1
  - vfmadd132pd %ymm8,%ymm10,%ymm9
  + vfmadd132pd %ymm4,%ymm16,%ymm9
  + vfnmadd132pd %ymm20,%ymm9,%ymm16
  + vfmadd231pd %ymm20,%ymm8,%ymm9

but now schedules the permutes in sequence rather than in batches as it did
before.

I don't know enough about Zen4's micro-architecture to say if

  # peak
  vmovupd    0x30(%rsi),%ymm2
  ...
  vpermilpd  $0x0,%ymm2,%ymm8
  vpermilpd  $0xf,%ymm2,%ymm4

  vmovupd    0x60(%rsi),%ymm2
  vpermpd    $0xee,%ymm3,%ymm21
  vpermpd    $0xbb,%ymm3,%ymm16
  vpermpd    $0x11,%ymm0,%ymm9
  vpermpd    $0x44,%ymm0,%ymm20
  ...
  vpermpd    $0xbb,%ymm5,%ymm18
  vpermpd    $0xee,%ymm5,%ymm5
  vpermilpd  $0x5,%ymm6,%ymm17
  vpermpd    $0xbb,%ymm0,%ymm13
  vpermpd    $0xee,%ymm0,%ymm0
  vpermilpd  $0x0,%ymm2,%ymm22
  vpermilpd  $0xf,%ymm2,%ymm2

  vmulpd     %ymm22,%ymm21,%ymm21
  vmulpd     %ymm22,%ymm1,%ymm1
  vmulpd     %ymm22,%ymm3,%ymm3

is a problem vs

  # base
  vmovupd    0x60(%rsi),%ymm2
  vmovupd    0x30(%rsi),%ymm5
  ...
  vpermilpd  $0x0,%ymm2,%ymm22
  vpermilpd  $0xf,%ymm2,%ymm2
  ...
  vpermilpd  $0x0,%ymm5,%ymm8

  vmulpd     %ymm22,%ymm1,%ymm1
  vmulpd     %ymm22,%ymm21,%ymm21

  ...
  vpermilpd  $0xf,%ymm5,%ymm5
  vpermpd    $0x11,%ymm0,%ymm10
  vpermpd    $0x44,%ymm0,%ymm9
  ...
  vmulpd     %ymm22,%ymm3,%ymm3

but this would just be target scheduling.

So I don't think the patch is directly related, unless I missed something.

Reply via email to