diff options
author | Dehao Chen <dehao@google.com> | 2016-05-10 23:07:19 +0000 |
---|---|---|
committer | Dehao Chen <dehao@google.com> | 2016-05-10 23:07:19 +0000 |
commit | b76e5d948a74edfb0c50efd3d4d419787a830d03 (patch) | |
tree | 57da6e0248ff072c1ab976fe6151d23d8aa2e762 /llvm/lib | |
parent | 1df01f0e31d7a3a889ca0deb3226159475de9f6d (diff) | |
download | bcm5719-llvm-b76e5d948a74edfb0c50efd3d4d419787a830d03.tar.gz bcm5719-llvm-b76e5d948a74edfb0c50efd3d4d419787a830d03.zip |
Propagate branch metadata when some branch probability is missing.
Summary: In sample profile, some branches may have profile missing due to profile inaccuracy. We want existing branch probability still valid after propagation.
Reviewers: hfinkel, davidxl, spatel
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D19948
llvm-svn: 269137
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index beb98a36fad..7f5e7eb193c 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -2821,15 +2821,23 @@ static bool SimplifyCondBranchToCondBranch(BranchInst *PBI, BranchInst *BI, // Update branch weight for PBI. uint64_t PredTrueWeight, PredFalseWeight, SuccTrueWeight, SuccFalseWeight; + uint64_t PredCommon, PredOther, SuccCommon, SuccOther; bool PredHasWeights = PBI->extractProfMetadata(PredTrueWeight, PredFalseWeight); bool SuccHasWeights = BI->extractProfMetadata(SuccTrueWeight, SuccFalseWeight); - if (PredHasWeights && SuccHasWeights) { - uint64_t PredCommon = PBIOp ? PredFalseWeight : PredTrueWeight; - uint64_t PredOther = PBIOp ?PredTrueWeight : PredFalseWeight; - uint64_t SuccCommon = BIOp ? SuccFalseWeight : SuccTrueWeight; - uint64_t SuccOther = BIOp ? SuccTrueWeight : SuccFalseWeight; + bool HasWeights = PredHasWeights || SuccHasWeights; + if (HasWeights) { + if (!PredHasWeights) { + PredFalseWeight = PredTrueWeight = 1; + } + if (!SuccHasWeights) { + SuccFalseWeight = SuccTrueWeight = 1; + } + PredCommon = PBIOp ? PredFalseWeight : PredTrueWeight; + PredOther = PBIOp ? PredTrueWeight : PredFalseWeight; + SuccCommon = BIOp ? SuccFalseWeight : SuccTrueWeight; + SuccOther = BIOp ? SuccTrueWeight : SuccFalseWeight; // The weight to CommonDest should be PredCommon * SuccTotal + // PredOther * SuccCommon. // The weight to OtherDest should be PredOther * SuccOther. |