diff options
author | Craig Topper <craig.topper@intel.com> | 2018-10-21 21:08:37 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@intel.com> | 2018-10-21 21:08:37 +0000 |
commit | 8de07b4db11b55d4a6073e7414f78d443c8d3791 (patch) | |
tree | 586517dd06c6586e6c0202a4d1fdacca2fe67876 /llvm/lib | |
parent | 5eea94edd4978bcab1c4f88196352473f32dbf81 (diff) | |
download | bcm5719-llvm-8de07b4db11b55d4a6073e7414f78d443c8d3791.tar.gz bcm5719-llvm-8de07b4db11b55d4a6073e7414f78d443c8d3791.zip |
Revert r344873 "foo"
Rebase gone wrong left this in my tree.
llvm-svn: 344875
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 12 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86MCInstLower.cpp | 24 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86ShuffleDecodeConstantPool.cpp | 58 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86ShuffleDecodeConstantPool.h | 13 |
4 files changed, 45 insertions, 62 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 23fc773b08e..69288018fe5 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -6046,7 +6046,7 @@ static bool getTargetShuffleMask(SDNode *N, MVT VT, bool AllowSentinelZero, break; } if (auto *C = getTargetConstantFromNode(MaskNode)) { - DecodeVPERMILPMask(C, MaskEltSize, VT.getSizeInBits(), Mask); + DecodeVPERMILPMask(C, MaskEltSize, Mask); break; } return false; @@ -6063,7 +6063,7 @@ static bool getTargetShuffleMask(SDNode *N, MVT VT, bool AllowSentinelZero, break; } if (auto *C = getTargetConstantFromNode(MaskNode)) { - DecodePSHUFBMask(C, VT.getSizeInBits(), Mask); + DecodePSHUFBMask(C, Mask); break; } return false; @@ -6128,7 +6128,7 @@ static bool getTargetShuffleMask(SDNode *N, MVT VT, bool AllowSentinelZero, break; } if (auto *C = getTargetConstantFromNode(MaskNode)) { - DecodeVPERMIL2PMask(C, CtrlImm, MaskEltSize, VT.getSizeInBits(), Mask); + DecodeVPERMIL2PMask(C, CtrlImm, MaskEltSize, Mask); break; } } @@ -6145,7 +6145,7 @@ static bool getTargetShuffleMask(SDNode *N, MVT VT, bool AllowSentinelZero, break; } if (auto *C = getTargetConstantFromNode(MaskNode)) { - DecodeVPPERMMask(C, VT.getSizeInBits(), Mask); + DecodeVPPERMMask(C, Mask); break; } return false; @@ -6163,7 +6163,7 @@ static bool getTargetShuffleMask(SDNode *N, MVT VT, bool AllowSentinelZero, break; } if (auto *C = getTargetConstantFromNode(MaskNode)) { - DecodeVPERMVMask(C, MaskEltSize, VT.getSizeInBits(), Mask); + DecodeVPERMVMask(C, MaskEltSize, Mask); break; } return false; @@ -6178,7 +6178,7 @@ static bool getTargetShuffleMask(SDNode *N, MVT VT, bool AllowSentinelZero, SDValue MaskNode = N->getOperand(1); unsigned MaskEltSize = VT.getScalarSizeInBits(); if (auto *C = getTargetConstantFromNode(MaskNode)) { - DecodeVPERMV3Mask(C, MaskEltSize, VT.getSizeInBits(), Mask); + DecodeVPERMV3Mask(C, MaskEltSize, Mask); break; } return false; diff --git a/llvm/lib/Target/X86/X86MCInstLower.cpp b/llvm/lib/Target/X86/X86MCInstLower.cpp index 9c278116d7e..58b1c505944 100644 --- a/llvm/lib/Target/X86/X86MCInstLower.cpp +++ b/llvm/lib/Target/X86/X86MCInstLower.cpp @@ -1594,18 +1594,6 @@ void X86AsmPrinter::EmitSEHInstruction(const MachineInstr *MI) { } } -static unsigned getRegisterWidth(const MCOperandInfo &Info) { - if (Info.RegClass == X86::VR128RegClassID || - Info.RegClass == X86::VR128XRegClassID) - return 128; - if (Info.RegClass == X86::VR256RegClassID || - Info.RegClass == X86::VR256XRegClassID) - return 256; - if (Info.RegClass == X86::VR512RegClassID) - return 512; - llvm_unreachable("Unknown register class!"); -} - void X86AsmPrinter::EmitInstruction(const MachineInstr *MI) { X86MCInstLower MCInstLowering(*MF, *this); const X86RegisterInfo *RI = @@ -1891,9 +1879,8 @@ void X86AsmPrinter::EmitInstruction(const MachineInstr *MI) { const MachineOperand &MaskOp = MI->getOperand(MaskIdx); if (auto *C = getConstantFromPool(*MI, MaskOp)) { - unsigned Width = getRegisterWidth(MI->getDesc().OpInfo[0]); SmallVector<int, 64> Mask; - DecodePSHUFBMask(C, Width, Mask); + DecodePSHUFBMask(C, Mask); if (!Mask.empty()) OutStreamer->AddComment(getShuffleComment(MI, SrcIdx, SrcIdx, Mask), !EnablePrintSchedInfo); @@ -1964,9 +1951,8 @@ void X86AsmPrinter::EmitInstruction(const MachineInstr *MI) { const MachineOperand &MaskOp = MI->getOperand(MaskIdx); if (auto *C = getConstantFromPool(*MI, MaskOp)) { - unsigned Width = getRegisterWidth(MI->getDesc().OpInfo[0]); SmallVector<int, 16> Mask; - DecodeVPERMILPMask(C, ElSize, Width, Mask); + DecodeVPERMILPMask(C, ElSize, Mask); if (!Mask.empty()) OutStreamer->AddComment(getShuffleComment(MI, SrcIdx, SrcIdx, Mask), !EnablePrintSchedInfo); @@ -1996,9 +1982,8 @@ void X86AsmPrinter::EmitInstruction(const MachineInstr *MI) { const MachineOperand &MaskOp = MI->getOperand(6); if (auto *C = getConstantFromPool(*MI, MaskOp)) { - unsigned Width = getRegisterWidth(MI->getDesc().OpInfo[0]); SmallVector<int, 16> Mask; - DecodeVPERMIL2PMask(C, (unsigned)CtrlOp.getImm(), ElSize, Width, Mask); + DecodeVPERMIL2PMask(C, (unsigned)CtrlOp.getImm(), ElSize, Mask); if (!Mask.empty()) OutStreamer->AddComment(getShuffleComment(MI, 1, 2, Mask), !EnablePrintSchedInfo); @@ -2014,9 +1999,8 @@ void X86AsmPrinter::EmitInstruction(const MachineInstr *MI) { const MachineOperand &MaskOp = MI->getOperand(6); if (auto *C = getConstantFromPool(*MI, MaskOp)) { - unsigned Width = getRegisterWidth(MI->getDesc().OpInfo[0]); SmallVector<int, 16> Mask; - DecodeVPPERMMask(C, Width, Mask); + DecodeVPPERMMask(C, Mask); if (!Mask.empty()) OutStreamer->AddComment(getShuffleComment(MI, 1, 2, Mask), !EnablePrintSchedInfo); diff --git a/llvm/lib/Target/X86/X86ShuffleDecodeConstantPool.cpp b/llvm/lib/Target/X86/X86ShuffleDecodeConstantPool.cpp index 720be8afa62..c7ddf93f8e8 100644 --- a/llvm/lib/Target/X86/X86ShuffleDecodeConstantPool.cpp +++ b/llvm/lib/Target/X86/X86ShuffleDecodeConstantPool.cpp @@ -112,10 +112,11 @@ static bool extractConstantMask(const Constant *C, unsigned MaskEltSizeInBits, return true; } -void DecodePSHUFBMask(const Constant *C, unsigned Width, - SmallVectorImpl<int> &ShuffleMask) { - assert((Width == 128 || Width == 256 || Width == 512) && - C->getType()->getPrimitiveSizeInBits() >= Width && +void DecodePSHUFBMask(const Constant *C, SmallVectorImpl<int> &ShuffleMask) { + Type *MaskTy = C->getType(); + unsigned MaskTySize = MaskTy->getPrimitiveSizeInBits(); + (void)MaskTySize; + assert((MaskTySize == 128 || MaskTySize == 256 || MaskTySize == 512) && "Unexpected vector size."); // The shuffle mask requires a byte vector. @@ -124,7 +125,7 @@ void DecodePSHUFBMask(const Constant *C, unsigned Width, if (!extractConstantMask(C, 8, UndefElts, RawMask)) return; - unsigned NumElts = Width / 8; + unsigned NumElts = RawMask.size(); assert((NumElts == 16 || NumElts == 32 || NumElts == 64) && "Unexpected number of vector elements."); @@ -150,10 +151,12 @@ void DecodePSHUFBMask(const Constant *C, unsigned Width, } } -void DecodeVPERMILPMask(const Constant *C, unsigned ElSize, unsigned Width, +void DecodeVPERMILPMask(const Constant *C, unsigned ElSize, SmallVectorImpl<int> &ShuffleMask) { - assert((Width == 128 || Width == 256 || Width == 512) && - C->getType()->getPrimitiveSizeInBits() >= Width && + Type *MaskTy = C->getType(); + unsigned MaskTySize = MaskTy->getPrimitiveSizeInBits(); + (void)MaskTySize; + assert((MaskTySize == 128 || MaskTySize == 256 || MaskTySize == 512) && "Unexpected vector size."); assert((ElSize == 32 || ElSize == 64) && "Unexpected vector element size."); @@ -163,7 +166,7 @@ void DecodeVPERMILPMask(const Constant *C, unsigned ElSize, unsigned Width, if (!extractConstantMask(C, ElSize, UndefElts, RawMask)) return; - unsigned NumElts = Width / ElSize; + unsigned NumElts = RawMask.size(); unsigned NumEltsPerLane = 128 / ElSize; assert((NumElts == 2 || NumElts == 4 || NumElts == 8 || NumElts == 16) && "Unexpected number of vector elements."); @@ -186,13 +189,11 @@ void DecodeVPERMILPMask(const Constant *C, unsigned ElSize, unsigned Width, } void DecodeVPERMIL2PMask(const Constant *C, unsigned M2Z, unsigned ElSize, - unsigned Width, SmallVectorImpl<int> &ShuffleMask) { Type *MaskTy = C->getType(); unsigned MaskTySize = MaskTy->getPrimitiveSizeInBits(); (void)MaskTySize; - assert((MaskTySize == 128 || MaskTySize == 256) && - Width >= MaskTySize && "Unexpected vector size."); + assert((MaskTySize == 128 || MaskTySize == 256) && "Unexpected vector size."); // The shuffle mask requires elements the same size as the target. APInt UndefElts; @@ -200,7 +201,7 @@ void DecodeVPERMIL2PMask(const Constant *C, unsigned M2Z, unsigned ElSize, if (!extractConstantMask(C, ElSize, UndefElts, RawMask)) return; - unsigned NumElts = Width / ElSize; + unsigned NumElts = RawMask.size(); unsigned NumEltsPerLane = 128 / ElSize; assert((NumElts == 2 || NumElts == 4 || NumElts == 8) && "Unexpected number of vector elements."); @@ -241,12 +242,9 @@ void DecodeVPERMIL2PMask(const Constant *C, unsigned M2Z, unsigned ElSize, } } -void DecodeVPPERMMask(const Constant *C, unsigned Width, - SmallVectorImpl<int> &ShuffleMask) { - Type *MaskTy = C->getType(); - unsigned MaskTySize = MaskTy->getPrimitiveSizeInBits(); - (void)MaskTySize; - assert(Width == 128 && Width >= MaskTySize && "Unexpected vector size."); +void DecodeVPPERMMask(const Constant *C, SmallVectorImpl<int> &ShuffleMask) { + assert(C->getType()->getPrimitiveSizeInBits() == 128 && + "Unexpected vector size."); // The shuffle mask requires a byte vector. APInt UndefElts; @@ -254,7 +252,7 @@ void DecodeVPPERMMask(const Constant *C, unsigned Width, if (!extractConstantMask(C, 8, UndefElts, RawMask)) return; - unsigned NumElts = Width / 8; + unsigned NumElts = RawMask.size(); assert(NumElts == 16 && "Unexpected number of vector elements."); for (unsigned i = 0; i != NumElts; ++i) { @@ -293,10 +291,12 @@ void DecodeVPPERMMask(const Constant *C, unsigned Width, } } -void DecodeVPERMVMask(const Constant *C, unsigned ElSize, unsigned Width, +void DecodeVPERMVMask(const Constant *C, unsigned ElSize, SmallVectorImpl<int> &ShuffleMask) { - assert((Width == 128 || Width == 256 || Width == 512) && - C->getType()->getPrimitiveSizeInBits() >= Width && + Type *MaskTy = C->getType(); + unsigned MaskTySize = MaskTy->getPrimitiveSizeInBits(); + (void)MaskTySize; + assert((MaskTySize == 128 || MaskTySize == 256 || MaskTySize == 512) && "Unexpected vector size."); assert((ElSize == 8 || ElSize == 16 || ElSize == 32 || ElSize == 64) && "Unexpected vector element size."); @@ -307,7 +307,7 @@ void DecodeVPERMVMask(const Constant *C, unsigned ElSize, unsigned Width, if (!extractConstantMask(C, ElSize, UndefElts, RawMask)) return; - unsigned NumElts = Width / ElSize; + unsigned NumElts = RawMask.size(); for (unsigned i = 0; i != NumElts; ++i) { if (UndefElts[i]) { @@ -319,10 +319,12 @@ void DecodeVPERMVMask(const Constant *C, unsigned ElSize, unsigned Width, } } -void DecodeVPERMV3Mask(const Constant *C, unsigned ElSize, unsigned Width, +void DecodeVPERMV3Mask(const Constant *C, unsigned ElSize, SmallVectorImpl<int> &ShuffleMask) { - assert((Width == 128 || Width == 256 || Width == 512) && - C->getType()->getPrimitiveSizeInBits() >= Width && + Type *MaskTy = C->getType(); + unsigned MaskTySize = MaskTy->getPrimitiveSizeInBits(); + (void)MaskTySize; + assert((MaskTySize == 128 || MaskTySize == 256 || MaskTySize == 512) && "Unexpected vector size."); assert((ElSize == 8 || ElSize == 16 || ElSize == 32 || ElSize == 64) && "Unexpected vector element size."); @@ -333,7 +335,7 @@ void DecodeVPERMV3Mask(const Constant *C, unsigned ElSize, unsigned Width, if (!extractConstantMask(C, ElSize, UndefElts, RawMask)) return; - unsigned NumElts = Width / ElSize; + unsigned NumElts = RawMask.size(); for (unsigned i = 0; i != NumElts; ++i) { if (UndefElts[i]) { diff --git a/llvm/lib/Target/X86/X86ShuffleDecodeConstantPool.h b/llvm/lib/Target/X86/X86ShuffleDecodeConstantPool.h index b08c31935d2..b703cbbd2b2 100644 --- a/llvm/lib/Target/X86/X86ShuffleDecodeConstantPool.h +++ b/llvm/lib/Target/X86/X86ShuffleDecodeConstantPool.h @@ -26,28 +26,25 @@ class Constant; class MVT; /// Decode a PSHUFB mask from an IR-level vector constant. -void DecodePSHUFBMask(const Constant *C, unsigned Width, - SmallVectorImpl<int> &ShuffleMask); +void DecodePSHUFBMask(const Constant *C, SmallVectorImpl<int> &ShuffleMask); /// Decode a VPERMILP variable mask from an IR-level vector constant. -void DecodeVPERMILPMask(const Constant *C, unsigned ElSize, unsigned Width, +void DecodeVPERMILPMask(const Constant *C, unsigned ElSize, SmallVectorImpl<int> &ShuffleMask); /// Decode a VPERMILP2 variable mask from an IR-level vector constant. void DecodeVPERMIL2PMask(const Constant *C, unsigned MatchImm, unsigned ElSize, - unsigned Width, SmallVectorImpl<int> &ShuffleMask); /// Decode a VPPERM variable mask from an IR-level vector constant. -void DecodeVPPERMMask(const Constant *C, unsigned Width, - SmallVectorImpl<int> &ShuffleMask); +void DecodeVPPERMMask(const Constant *C, SmallVectorImpl<int> &ShuffleMask); /// Decode a VPERM W/D/Q/PS/PD mask from an IR-level vector constant. -void DecodeVPERMVMask(const Constant *C, unsigned ElSize, unsigned Width, +void DecodeVPERMVMask(const Constant *C, unsigned ElSize, SmallVectorImpl<int> &ShuffleMask); /// Decode a VPERMT2 W/D/Q/PS/PD mask from an IR-level vector constant. -void DecodeVPERMV3Mask(const Constant *C, unsigned ElSize, unsigned Width, +void DecodeVPERMV3Mask(const Constant *C, unsigned ElSize, SmallVectorImpl<int> &ShuffleMask); } // llvm namespace |