[PATCH] D99719: [SLP] Better estimate cost of no-op extracts on target vectors.
Florian Hahn via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 1 12:41:49 PDT 2021
fhahn added inline comments.
================
Comment at: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:3535
+ Cost -= TTI->getVectorInstrCost(Instruction::ExtractElement,
+ VecTy, I);
+ }
----------------
ABataev wrote:
> fhahn wrote:
> > ABataev wrote:
> > > fhahn wrote:
> > > > ABataev wrote:
> > > > > I think you need to use the real extract indices here to be more correct, i.e.
> > > > > ```
> > > > > for (unsigned I = Idx - EltsPerVector; I <= Idx; ++I)
> > > > > Cost -= TTI->getVectorInstrCost(Instruction::ExtractElement,
> > > > > cast<ExtractElementInst>(VL[I])->getVectorOperandType(), *getExtractIndex(cast<Instruction>(VL[I])));
> > > > > ```
> > > > Thanks, I think that's much better, updated.
> > > Hmm, I think more correct would be to do something like this:
> > > ```
> > > Cost += TTI->getShuffleCost(
> > > ShuffleKind.getValue(),
> > > FixedVectorType::get(VecTy->getElementType(), EltsPerVector), Mask);
> > > ```
> > > in case if `AllConsecutive` is `false` and ignore the initial shuffle cost completely. Also, you need to calculate the correct `Mask` here or pass `llvm::None`
> > >
> > > So, I think you need to split it into separate parts.
> > > The first one for `*ShuffleKind == TargetTransformInfo::SK_PermuteSingleSrc` with improved shuffle cost for non-consecutive extracts and the generic one with the old functionality
> > That sounds good! I put up D99745. Was that what you had in mind for preparation? (Still need to add some comments, but I wanted to make sure that's what you actually had in mind)
> Sorry, I did not mean to split the patch into 2 parts :) I meant to split processing into 2 parts. Plus, the patch cannot be NFC since it changes the functionality.
Oh right! I think I see what you mean now. I move the new logic to a separate function and changed it to only add the shuffle costs for blocks that are not consecutive. I think the code should be much clearer now, thanks!
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D99719/new/
https://reviews.llvm.org/D99719
More information about the llvm-commits
mailing list