[X86] Add KADD X86ISD opcode instead of reusing ISD::ADD.
authorCraig Topper <craig.topper@intel.com>
Mon, 12 Feb 2018 01:33:38 +0000 (01:33 +0000)
committerCraig Topper <craig.topper@intel.com>
Mon, 12 Feb 2018 01:33:38 +0000 (01:33 +0000)
commit3ce035acf313f00c9814461e07cc3630e88a1f89
treed530acf1eacdb3a077b4e0174010563b8c39f585
parentdfc322ddf4542d34d3fffb5f5813c1a94bd3717f
[X86] Add KADD X86ISD opcode instead of reusing ISD::ADD.

ISD::ADD implies individual vector element addition with no carries between elements. But for a vXi1 type that would be the same as XOR. And we already turn ISD::ADD into ISD::XOR for all vXi1 types during lowering. So the ISD::ADD pattern would never be able to match anyway.

KADD is different, it adds the elements but also propagates a carry between them. This just a way of doing an add in k-register without bitcasting to the scalar domain. There's still no way to match the pattern, but at least its not obviously wrong.

llvm-svn: 324861
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/lib/Target/X86/X86ISelLowering.h
llvm/lib/Target/X86/X86InstrAVX512.td
llvm/lib/Target/X86/X86InstrFragmentsSIMD.td