OSDN Git Service

AVX-512: Kreg set 0/1 optimization
authorElena Demikhovsky <elena.demikhovsky@intel.com>
Thu, 24 Dec 2015 08:12:22 +0000 (08:12 +0000)
committerElena Demikhovsky <elena.demikhovsky@intel.com>
Thu, 24 Dec 2015 08:12:22 +0000 (08:12 +0000)
commit52ebd433386d85eee0b06d4592961294563fb067
treef36f5ec8b5dfe5f1462984107842273e5799c27a
parentd7d8cb8af1e5dd8e52ef0bb425e74b0ec2f5550e
AVX-512: Kreg set 0/1 optimization
The patterns that set a mask register to 0/1
KXOR %kn, %kn, %kn / KXNOR %kn, %kn, %kn
are replaced with
KXOR %k0, %k0, %kn / KXNOR %k0, %k0, %kn - AVX-512 targets optimization.

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.

Differential Revision: http://reviews.llvm.org/D15739

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@256365 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/X86/X86InstrInfo.cpp
test/CodeGen/X86/avx512-gather-scatter-intrin.ll
test/CodeGen/X86/avx512-mask-op.ll
test/CodeGen/X86/masked_gather_scatter.ll