diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-09-29 14:51:09 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-09-29 14:51:09 +0000 |
commit | a731940c60ac5230a07657cbeae4e5432924260e (patch) | |
tree | c3e4c3740713d8d10b4c70b15d5ec195c264fee2 /llvm | |
parent | 43e4e648ef3258a9eb8f9437c702834b8c65d6ef (diff) | |
download | bcm5719-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.cpp | 8 |
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; } } |