diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-10-22 17:43:33 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-10-22 17:43:33 +0000 |
commit | 5dff767c25041c1dfbba42520ce59e8f837b19ad (patch) | |
tree | a2b4370d3fa2c3354f3b4f861bb12af2f3472ed1 | |
parent | 32401afd8cb86680afa1bc93e732b5fbc5a83401 (diff) | |
download | bcm5719-llvm-5dff767c25041c1dfbba42520ce59e8f837b19ad.tar.gz bcm5719-llvm-5dff767c25041c1dfbba42520ce59e8f837b19ad.zip |
[X86] getTargetConstantBitsFromNode - handle extraction from larger constant pool entries
First step towards removing X86ShuffleDecodeConstantPool usage from X86ISelLowering.cpp
llvm-svn: 344924
-rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 8f4e2ad5ed6..6059a2a09e7 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -5694,11 +5694,12 @@ static bool getTargetConstantBitsFromNode(SDValue Op, unsigned EltSizeInBits, // Extract constant bits from constant pool vector. if (auto *Cst = getTargetConstantFromNode(Op)) { Type *CstTy = Cst->getType(); - if (!CstTy->isVectorTy() || (SizeInBits != CstTy->getPrimitiveSizeInBits())) + unsigned CstSizeInBits = CstTy->getPrimitiveSizeInBits(); + if (!CstTy->isVectorTy() || (CstSizeInBits % SizeInBits) != 0) return false; unsigned SrcEltSizeInBits = CstTy->getScalarSizeInBits(); - unsigned NumSrcElts = CstTy->getVectorNumElements(); + unsigned NumSrcElts = SizeInBits / SrcEltSizeInBits; APInt UndefSrcElts(NumSrcElts, 0); SmallVector<APInt, 64> SrcEltBits(NumSrcElts, APInt(SrcEltSizeInBits, 0)); |