[X86] Explcitly disable VEXTRACT instruction matching for an immediate of 0. Remove...
authorCraig Topper <craig.topper@intel.com>
Wed, 22 May 2019 21:00:18 +0000 (21:00 +0000)
committerCraig Topper <craig.topper@intel.com>
Wed, 22 May 2019 21:00:18 +0000 (21:00 +0000)
commit93f38e1f1ae23623a03d456b5b46f19f5c500036
tree1e49cf98e47629cc5960381bf3ba1f32c7e129f0
parented49f6d8e65a4d8c26621624252c5f5588d549a1
[X86] Explcitly disable VEXTRACT instruction matching for an immediate of 0. Remove a bunch of isel patterns that become unnecessary.

We effectively had a second set of isel patterns that tried to use a
regular store instruction and an extract_subreg instruction. Or a masked move
and an extract_subreg. These patterns were intended to override the
matching of VEXTRACT instructions by taking advantage of the priority
of the explicit immediate 0 for the index.

This patch instaed just disables the immediate 0 matchin the VEXTRACT
patterns. This each of the component pieces of the larger patterns will
match by themselves.

This found a bug of sorts were we didn't use 128-bit store for 512->128
extract on KNL. Its unclear what the right thing here should be.
Using the vextract avoids constraining the register allocator to use
xmm0-15. But it always results in a longer encoding if the register
allocator ends up choosing xmm0-15 anyway.

llvm-svn: 361431
llvm/lib/Target/X86/X86InstrAVX512.td
llvm/lib/Target/X86/X86InstrFragmentsSIMD.td
llvm/lib/Target/X86/X86InstrVecCompiler.td
llvm/test/CodeGen/X86/avx512-insert-extract.ll