[PATCH] D40891: Fix accidentally quadratic time in BlockFrequencyInfoImpl::propagateMassToSuccessors
    Duncan P. N. Exon Smith via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Wed Dec  6 11:30:20 PST 2017
    
    
  
dexonsmith requested changes to this revision.
dexonsmith added inline comments.
This revision now requires changes to proceed.
================
Comment at: include/llvm/Analysis/BlockFrequencyInfoImpl.h:1318
+    for (auto SuccI = GraphTraits<const BlockT *>::child_begin(BB),
+         SuccE = GraphTraits<const BlockT *>::child_end(BB);
+         SuccI != SuccE;
----------------
If you run `clang-format-diff` on this I think the loop logic will be clearer.  For reference, see the Script for patch reformatting section of:
https://clang.llvm.org/docs/ClangFormat.html#script-for-patch-reformatting
(It will indent `SuccE`, clarifying that it's a continuation of the statement on the previous line.  I suspect it'll line it up with `SuccI`.)
================
Comment at: include/llvm/Analysis/BlockFrequencyInfoImpl.h:1322
+      if (!addToDist(Dist, OuterLoop, Node, getNode(*SuccI),
+        getWeightFromBranchProb(BPI->getEdgeProbability(BB, SuccI))))
+          // Irreducible backedge.
----------------
A comment explaining why we're passing in an iterator here might help to prevent a regression.
But I wonder if you even need this change: can't `getEdgeProbability()` call `BlockT::getIterator` on the reference?  I believe both `BasicBlock` and `MachineBasicBlock` have that function.  In that case, you should leave this function as is and clean up `getEdgeProbability()`.
Repository:
  rL LLVM
https://reviews.llvm.org/D40891
    
    
More information about the llvm-commits
mailing list