[LLVMdev] Commutability of X86 FMA3 instructions.
Lang Hames
lhames at gmail.com
Thu Dec 19 21:45:22 PST 2013
Hi all,
The 213 variant of the FMA3 instructions is currently marked
commutable (see X86InstrFMA.td). Is that safe? According to the ISA
the FMA3 instructions aren't commutable for non-numeric results, so
I'd have thought commuting this would only be valid in fast-math mode?
For the curious, the reason that I'm asking is that we currently
always select the 213 variant, but this introduces an extra copies in
accumulator-style loops. Something like:
while (...)
accumulator = x * y + accumulator;
yields:
loop:
vfmadd.213 y, x, acc
vmovaps acc, x
decl count
jne loop
instead of
loop:
vfmadd.231 acc, x, y
decl count
jne loop
I have started writing a patch to generate the 231 variant by default,
and I want to know whether I need to go to the trouble of adding
custom commute logic. If these things aren't commutable then I don't
need to worry at all. If they are commutable, but only in fast-math
mode, then I can support that too.
Thanks for the help!
- Lang.
More information about the llvm-dev
mailing list