[Bug middle-end/82636] powerpc: Unnecessary copy of __ieee128 parameter

2017-10-20 Thread meissner at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82636

--- Comment #5 from Michael Meissner  ---
Created attachment 42425
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=42425=edit
Post reload dump file

[Bug middle-end/82636] powerpc: Unnecessary copy of __ieee128 parameter

2017-10-20 Thread meissner at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82636

--- Comment #4 from Michael Meissner  ---
Created attachment 42424
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=42424=edit
Reload dump file

[Bug middle-end/82636] powerpc: Unnecessary copy of __ieee128 parameter

2017-10-20 Thread meissner at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82636

--- Comment #3 from Michael Meissner  ---
Created attachment 42423
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=42423=edit
LRA dump file

[Bug middle-end/82636] powerpc: Unnecessary copy of __ieee128 parameter

2017-10-20 Thread meissner at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82636

--- Comment #2 from Michael Meissner  ---
Created attachment 42422
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=42422=edit
Simpler test case that does not use asm

[Bug middle-end/82636] powerpc: Unnecessary copy of __ieee128 parameter

2017-10-20 Thread meissner at gcc dot gnu.org
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82636

--- Comment #1 from Michael Meissner  ---
This looks like a reload bug.  I see the same thing with automatically
generated fmas:

--> cat foo06c.c
__ieee128
__fmaf128_power9 (__ieee128 x, __ieee128 y, __ieee128 z)
{
  return (x * y) + z;
}

After the LRA pass, the rtl dump is:

(insn 13 8 14 2 (set (reg/i:KF 79 2)
(fma:KF (reg:KF 79 2 [ x ])
(reg:KF 80 3 [ y ])
(reg:KF 81 4 [ z ]))) "foo06c.c":5 873 {fmakf4_hw}
 (expr_list:REG_DEAD (reg:KF 81 4 [ z ])
(expr_list:REG_DEAD (reg:KF 80 3 [ y ])
(nil
(insn 14 13 16 2 (use (reg/i:KF 79 2)) "foo06c.c":5 -1
 (nil))


However, reload inserts moves:

(insn 18 8 13 2 (set (reg:KF 77 0 [orig:126 z ] [126])
(reg:KF 81 4 [ z ])) "foo06c.c":5 1009 {*vsx_movkf_64bit}
 (nil))
(insn 13 18 19 2 (set (reg:KF 77 0 [orig:126 z ] [126])
(fma:KF (reg:KF 79 2 [ x ])
(reg:KF 80 3 [ y ])
(reg:KF 77 0 [orig:126 z ] [126]))) "foo06c.c":5 873 {fmakf4_hw}
 (nil))
(insn 19 13 14 2 (set (reg/i:KF 79 2)
(reg:KF 77 0 [orig:126 z ] [126])) "foo06c.c":5 1009 {*vsx_movkf_64bit}
 (nil))
(insn 14 19 16 2 (use (reg/i:KF 79 2)) "foo06c.c":5 -1
 (nil))