]> granicus.if.org Git - llvm/commitdiff
[X86][SSE] combineExtractVectorElt - add early-out to return zero/undef for out-of...
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sun, 28 Apr 2019 19:12:58 +0000 (19:12 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sun, 28 Apr 2019 19:12:58 +0000 (19:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@359406 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86ISelLowering.cpp

index 32e3a80d5c7465d5e5e0e61be93abce244673f77..c120ec1079f123cb17ad10df7d536394624317bd 100644 (file)
@@ -34838,9 +34838,11 @@ static SDValue combineExtractVectorElt(SDNode *N, SelectionDAG &DAG,
   SDLoc dl(InputVector);
   bool IsPextr = N->getOpcode() != ISD::EXTRACT_VECTOR_ELT;
 
+  if (CIdx && CIdx->getAPIntValue().uge(SrcVT.getVectorNumElements()))
+    return IsPextr ? DAG.getConstant(0, dl, VT) : DAG.getUNDEF(VT);
+
   // Integer Constant Folding.
-  if (VT.isInteger() && CIdx &&
-      CIdx->getAPIntValue().ult(SrcVT.getVectorNumElements())) {
+  if (CIdx && VT.isInteger()) {
     APInt UndefVecElts;
     SmallVector<APInt, 16> EltBits;
     unsigned VecEltBitWidth = SrcVT.getScalarSizeInBits();