[X86] LowerVectorAllZero - early out for masked v2i64 cases without PTEST. NFC.
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Thu, 23 Mar 2023 13:07:29 +0000 (13:07 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Thu, 23 Mar 2023 13:07:29 +0000 (13:07 +0000)
llvm/lib/Target/X86/X86ISelLowering.cpp

index e828fe4b9dd15674d4eed4c067b2ca76ec43fc0d..74e2a2b6fdc10f68544b7306a94e02d62026c645 100644 (file)
@@ -24192,6 +24192,12 @@ static SDValue LowerVectorAllZero(const SDLoc &DL, SDValue V, ISD::CondCode CC,
                        DAG.getConstant(0, DL, IntVT));
   }
 
+  // Without PTEST, a masked v2i64 or-reduction is not faster than
+  // scalarization.
+  bool UsePTEST = Subtarget.hasSSE41();
+  if (!UsePTEST && !Mask.isAllOnes() && VT.getScalarSizeInBits() > 32)
+    return SDValue();
+
   // Split down to 128/256-bit vector.
   unsigned TestSize = Subtarget.hasAVX() ? 256 : 128;
   while (VT.getSizeInBits() > TestSize) {
@@ -24200,18 +24206,12 @@ static SDValue LowerVectorAllZero(const SDLoc &DL, SDValue V, ISD::CondCode CC,
     V = DAG.getNode(ISD::OR, DL, VT, Split.first, Split.second);
   }
 
-  bool UsePTEST = Subtarget.hasSSE41();
   if (UsePTEST) {
     MVT TestVT = VT.is128BitVector() ? MVT::v2i64 : MVT::v4i64;
     V = DAG.getBitcast(TestVT, MaskBits(V));
     return DAG.getNode(X86ISD::PTEST, DL, MVT::i32, V, V);
   }
 
-  // Without PTEST, a masked v2i64 or-reduction is not faster than
-  // scalarization.
-  if (!Mask.isAllOnes() && VT.getScalarSizeInBits() > 32)
-    return SDValue();
-
   V = DAG.getBitcast(MVT::v16i8, MaskBits(V));
   V = DAG.getNode(X86ISD::PCMPEQ, DL, MVT::v16i8, V,
                   getZeroVector(MVT::v16i8, Subtarget, DAG, DL));