[PATCH] D31175: Improve TargetTransformInfo::getCFInstrCost()
Matthew Simpson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 24 08:16:08 PDT 2017
mssimpso added inline comments.
================
Comment at: lib/Transforms/Vectorize/LoopVectorize.cpp:2110
+ /// vectorization as a predicated block.
+ SmallPtrSet<BasicBlock *, 4> PredicatedBBsAfterVectorization;
+
----------------
I'm not sure you need this new set. See below.
================
Comment at: lib/Transforms/Vectorize/LoopVectorize.cpp:7219-7220
+ if (VF > 1 && BI->isConditional() &&
+ (PredicatedBBsAfterVectorization.count(BI->getSuccessor(0)) ||
+ PredicatedBBsAfterVectorization.count(BI->getSuccessor(1))))
+ ScalarPredicatedBB = true;
----------------
Can't we just use Legal->blockNeedsPredication() for the successors here instead of creating PredicatedBBsAfterVectorization. They should be the same, right?
================
Comment at: lib/Transforms/Vectorize/LoopVectorize.cpp:7223-7228
+ if (ScalarPredicatedBB) {
+ // Return cost for branches around scalarized and predicated blocks.
+ Type *Vec_i1Ty =
+ VectorType::get(IntegerType::getInt1Ty(RetTy->getContext()), VF);
+ return (TTI.getScalarizationOverhead(Vec_i1Ty, false, true) +
+ (TTI.getCFInstrCost(Instruction::Br) * VF));
----------------
We should probably also include the cost of the unconditional branches inside the predicated blocks. This would amount to another factor of VF * TTI.getCFInstrCost(Instruction::Br) / getReciprocalPredBlockProb() for the ScalarPredicatedBB case.
https://reviews.llvm.org/D31175
More information about the llvm-commits
mailing list