[X86] lowerShuffleOfExtractsAsVperm - move hasOneUse checks to the end of the match...
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sun, 2 Apr 2023 17:29:37 +0000 (18:29 +0100)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sun, 2 Apr 2023 18:00:53 +0000 (19:00 +0100)
Check the cheap parts of the pattern first, and make the more expensive hasOneUse() call as late as possible.

llvm/lib/Target/X86/X86ISelLowering.cpp

index 2b8815a..fc6ab06 100644 (file)
@@ -14815,10 +14815,10 @@ static SDValue lowerShuffleOfExtractsAsVperm(const SDLoc &DL, SDValue N0,
          "VPERM* family of shuffles requires 32-bit or 64-bit elements");
 
   // Check that both sources are extracts of the same source vector.
-  if (!N0.hasOneUse() || !N1.hasOneUse() ||
-      N0.getOpcode() != ISD::EXTRACT_SUBVECTOR ||
+  if (N0.getOpcode() != ISD::EXTRACT_SUBVECTOR ||
       N1.getOpcode() != ISD::EXTRACT_SUBVECTOR ||
-      N0.getOperand(0) != N1.getOperand(0))
+      N0.getOperand(0) != N1.getOperand(0) ||
+      !N0.hasOneUse() || !N1.hasOneUse())
     return SDValue();
 
   SDValue WideVec = N0.getOperand(0);