aboutsummaryrefslogtreecommitdiff
path: root/devel/llvm13/files/patch-llvm_lib_Target_X86_X86ISelLowering.cpp
blob: 877b03db54b92996ded4233080f3bb503454476e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--- llvm/lib/Target/X86/X86ISelLowering.cpp.orig
+++ llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -36201,7 +36201,11 @@
          (RootVT.is128BitVector() && Subtarget.hasVLX())) &&
         (MaskEltSizeInBits > 8 || Subtarget.hasBWI()) &&
         isSequentialOrUndefInRange(Mask, 0, NumMaskElts, 0, 2)) {
-      if (Depth == 0 && Root.getOpcode() == ISD::TRUNCATE)
+      // Bail if this was already a truncation or PACK node.
+      // We sometimes fail to match PACK if we demand known undef elements.
+      if (Depth == 0 && (Root.getOpcode() == ISD::TRUNCATE ||
+                         Root.getOpcode() == X86ISD::PACKSS ||
+                         Root.getOpcode() == X86ISD::PACKUS))
         return SDValue(); // Nothing to do!
       ShuffleSrcVT = MVT::getIntegerVT(MaskEltSizeInBits * 2);
       ShuffleSrcVT = MVT::getVectorVT(ShuffleSrcVT, NumMaskElts / 2);