[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