summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2018-09-29 14:51:09 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2018-09-29 14:51:09 +0000
commita731940c60ac5230a07657cbeae4e5432924260e (patch)
treec3e4c3740713d8d10b4c70b15d5ec195c264fee2 /llvm
parent43e4e648ef3258a9eb8f9437c702834b8c65d6ef (diff)
downloadbcm5719-llvm-a731940c60ac5230a07657cbeae4e5432924260e.tar.gz
bcm5719-llvm-a731940c60ac5230a07657cbeae4e5432924260e.zip
[X86] getTargetConstantBitsFromNode - fix self-move assertions from gcc builds due to rL343375
llvm-svn: 343377
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index a71c3271ed7..ca39575d6ca 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -5748,11 +5748,15 @@ static bool getTargetConstantBitsFromNode(SDValue Op, unsigned EltSizeInBits,
if (getTargetConstantBitsFromNode(Op.getOperand(0), EltSizeInBits,
UndefElts, EltBits, AllowWholeUndefs,
AllowPartialUndefs)) {
+ EVT SrcVT = Op.getOperand(0).getValueType();
+ unsigned NumSrcElts = SrcVT.getVectorNumElements();
unsigned NumSubElts = VT.getVectorNumElements();
unsigned BaseIdx = Op.getConstantOperandVal(1);
UndefElts = UndefElts.extractBits(NumSubElts, BaseIdx);
- EltBits.erase(EltBits.begin() + BaseIdx + NumSubElts, EltBits.end());
- EltBits.erase(EltBits.begin(), EltBits.begin() + BaseIdx);
+ if ((BaseIdx + NumSubElts) != NumSrcElts)
+ EltBits.erase(EltBits.begin() + BaseIdx + NumSubElts, EltBits.end());
+ if (BaseIdx != 0)
+ EltBits.erase(EltBits.begin(), EltBits.begin() + BaseIdx);
return true;
}
}
OpenPOWER on IntegriCloud