[PATCH] D109974: [WIP][X86] `matchBinaryShuffle()`: lift same-dimensions restriction on `OR` blend

Roman Lebedev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 17 09:05:46 PDT 2021


lebedev.ri created this revision.
lebedev.ri added a project: LLVM.
Herald added subscribers: pengfei, hiraditya.
lebedev.ri requested review of this revision.

Does not affect any existing tests.
Not really sure if i will want to add some, or let this rot.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D109974

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


Index: llvm/lib/Target/X86/X86ISelLowering.cpp
===================================================================
--- llvm/lib/Target/X86/X86ISelLowering.cpp
+++ llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -36232,7 +36232,7 @@
         Shuffle = ISD::OR;
         SrcVT = DstVT = MaskVT.changeTypeToInteger();
         return true;
-      } else if (NumV1Elts == NumV2Elts && NumV1Elts == NumMaskElts) {
+      } else {
         // FIXME: handle mismatched sizes?
         // TODO: investigate if `ISD::OR` handling in
         // `TargetLowering::SimplifyDemandedVectorElts` can be improved instead.
@@ -36253,6 +36253,11 @@
         KnownBits V1Known = computeKnownBitsElementWise(V1);
         KnownBits V2Known = computeKnownBitsElementWise(V2);
 
+        for (APInt *K :
+             {&V1Known.Zero, &V1Known.One, &V2Known.Zero, &V2Known.One})
+          *K = APIntOps::ScaleBitMask(*K, NumMaskElts,
+                                      APIntOps::BitMergingApproach::Lossy);
+
         for (unsigned i = 0; i != NumMaskElts && IsBlend; ++i) {
           int M = Mask[i];
           if (M == SM_SentinelUndef)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D109974.373246.patch
Type: text/x-patch
Size: 1118 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210917/41948faf/attachment.bin>


More information about the llvm-commits mailing list