[PATCH] D15739: AVX-512: Kreg set 0/1 optimization
David Kreitzer via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 23 06:49:28 PST 2015
DavidKreitzer added inline comments.
Comment at: ../lib/Target/X86/X86InstrInfo.cpp:5287
@@ +5286,3 @@
+/// %k4 = KXNORrr %k0, %k0
+static bool Expand2AddrKreg(MachineInstrBuilder &MIB,
It would be a good idea to explain why it is preferable to read %k0 here, e.g. "KNL does not recognize dependency-breaking idioms for mask registers, so kxnor %k1, %k1, %k2 has a RAW dependence on %k1. Using %k0 as the undef input register is a performance heuristic based on the assumption that %k0 is used less frequently than the other mask registers, since it is not usable as a write mask. FIXME: A more advanced approach would be to choose the best input mask register based on context."
Comment at: ../lib/Target/X86/X86InstrInfo.cpp:5373
@@ -5358,3 +5372,3 @@
case X86::KSET0D: return Expand2AddrUndef(MIB, get(X86::KXORDrr));
case X86::KSET0Q: return Expand2AddrUndef(MIB, get(X86::KXORQrr));
These SET0 opcodes should also call Expand2AddrKreg with %k0, as KNL doesn't recognize kxor as an idiom either.
More information about the llvm-commits