[llvm] 9a76337 - [X86] combineMOVMSK - constant fold with getTargetConstantBitsFromNode not just BUILD_VECTOR

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 8 09:49:03 PDT 2022


Author: Simon Pilgrim
Date: 2022-06-08T17:48:55+01:00
New Revision: 9a76337fee25c05531dee07e5b4c20798b647ac1

URL: https://github.com/llvm/llvm-project/commit/9a76337fee25c05531dee07e5b4c20798b647ac1
DIFF: https://github.com/llvm/llvm-project/commit/9a76337fee25c05531dee07e5b4c20798b647ac1.diff

LOG: [X86] combineMOVMSK - constant fold with getTargetConstantBitsFromNode not just BUILD_VECTOR

Help avoid a regression in D127115

Added: 
    

Modified: 
    llvm/lib/Target/X86/X86ISelLowering.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 7d0442b35d436..8394a69d609e3 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -51660,16 +51660,18 @@ static SDValue combineMOVMSK(SDNode *N, SelectionDAG &DAG,
   MVT VT = N->getSimpleValueType(0);
   unsigned NumBits = VT.getScalarSizeInBits();
   unsigned NumElts = SrcVT.getVectorNumElements();
+  unsigned NumBitsPerElt = SrcVT.getScalarSizeInBits();
+  assert(VT == MVT::i32 && NumElts <= NumBits && "Unexpected MOVMSK types");
 
   // Perform constant folding.
-  if (ISD::isBuildVectorOfConstantSDNodes(Src.getNode())) {
-    assert(VT == MVT::i32 && "Unexpected result type");
+  APInt UndefElts;
+  SmallVector<APInt, 32> EltBits;
+  if (getTargetConstantBitsFromNode(Src, NumBitsPerElt, UndefElts, EltBits)) {
     APInt Imm(32, 0);
-    for (unsigned Idx = 0, e = Src.getNumOperands(); Idx < e; ++Idx) {
-      if (!Src.getOperand(Idx).isUndef() &&
-          Src.getConstantOperandAPInt(Idx).isNegative())
+    for (unsigned Idx = 0; Idx != NumElts; ++Idx)
+      if (!UndefElts[Idx] && EltBits[Idx].isNegative())
         Imm.setBit(Idx);
-    }
+
     return DAG.getConstant(Imm, SDLoc(N), VT);
   }
 


        


More information about the llvm-commits mailing list