[PATCH] D36864: [Profile] backward propagate profile data in jump-threading
Chandler Carruth via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 18 14:50:49 PDT 2017
chandlerc accepted this revision.
chandlerc added a comment.
This revision is now accepted and ready to land.
Awesome. LGTM with the minor things below addressed. Let me know if any of this isn't make sense.
================
Comment at: lib/Transforms/Scalar/JumpThreading.cpp:194
+
+ BP = (CI->getZExtValue() ? BranchProbability::getBranchProbability(
+ TrueWeight, TrueWeight + FalseWeight)
----------------
davidxl wrote:
> chandlerc wrote:
> > This code only handle i1 PHIs that directly feed conditional branches, right?
> >
> > Provided that's so, I would assert that CI is a 1 bit integer here, and then test whether it the null value or not rather than zexting and extracting it.
> There is an early check of one bit type. I am not clear what is the suggestion about (regarding extracting value).
Essentially...
assert(CI.getBitWidth() == 1 && "We only handle i1 constants here.");
BP = CI->isOne() ? ... : ...;
You could also use `CI->isZero()`, but one seems more clear.
================
Comment at: lib/Transforms/Scalar/JumpThreading.cpp:208-209
+ // FIXME: we currently only set the profile data when it is missing.
+ // With PGO, this can be turned on too to refine the profile with
+ // context information.
+ if (PredBr->extractProfMetadata(PredTrueWeight, PredFalseWeight))
----------------
chandlerc wrote:
> "With PGO, this can be turned on too to refine the profile with" -> "With PGO, this can be used to refine even existing profile data with"
This wording improvement for the comment would still be helpful I think.
================
Comment at: lib/Transforms/Scalar/JumpThreading.cpp:163
+// can not be greater than 1%.
+
+static void updatePredecessorProfileMetadata(PHINode *PN, BasicBlock *BB) {
----------------
nit: spurious blank line...
================
Comment at: lib/Transforms/Scalar/JumpThreading.cpp:176
+ // that leads to the PhiNode's incoming block:
+ auto GetPredOutEdge = [](BasicBlock *IncomingBB, BasicBlock *PhiBB) -> std::pair<BasicBlock *, BasicBlock *> {
+ auto *PredBB = IncomingBB;
----------------
nit: clang-format to fix line length
https://reviews.llvm.org/D36864
More information about the llvm-commits
mailing list