Page MenuHomePhabricator

[SimplifyCFG] Don't speculatively execute BB if it's predictably not taken

Authored by lebedev.ri on Jul 23 2021, 4:29 AM.



If the branch isn't unpredictable, and it is predicted to *not* branch
to the block we are considering speculatively executing,
then it seems counter-productive to execute the code that is predicted not to be executed.

Diff Detail

Event Timeline

lebedev.ri created this revision.Jul 23 2021, 4:29 AM
lebedev.ri requested review of this revision.Jul 23 2021, 4:29 AM
spatel accepted this revision.Jul 24 2021, 4:08 AM



I think it would be easier to read without the potential double complement:

if (BI->extractProfMetadata(TWeight, FWeight) && (TWeight + FWeight) != 0) {
  uint64_t EndWeight = Invert ? TWeight : FWeight;
  BranchProbability BIEndProb =
      BranchProbability::getBranchProbability(EndWeight, TWeight + FWeight);

(although the meaning of Invert seems reversed from the code example in the function comment at line 2331)


Add one more negative test to verify that we are respecting the TTI setting? It would need a different metadata - { 98, 2 } or similar.

This revision is now accepted and ready to land.Jul 24 2021, 4:08 AM


Thank you for the review!
Please note that D106717 is another similar patch.
I do hope to merge these two functions, but later.