summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDehao Chen <dehao@google.com>2017-03-23 14:43:10 +0000
committerDehao Chen <dehao@google.com>2017-03-23 14:43:10 +0000
commit53a0c082d2f8e3dbd2e138adc7d0f60e46fed307 (patch)
tree0a242cc149491f5bd66370e73835868cd2015f3e
parent50910bf842ca2d6bf16655ef3b74a8a34ca8c5f2 (diff)
downloadbcm5719-llvm-53a0c082d2f8e3dbd2e138adc7d0f60e46fed307.tar.gz
bcm5719-llvm-53a0c082d2f8e3dbd2e138adc7d0f60e46fed307.zip
Do not set branch weight if the branch weight annotation is present.
Summary: ThinLTO will annotate the CFG twice. If the branch weight is set by the first annotation, we should not set the branch weight again in the second annotation because the first annotation is more accurate as there is less optimization that could affect debug info accuracy. Reviewers: tejohnson, davidxl Reviewed By: tejohnson Subscribers: mehdi_amini, aprantl, llvm-commits Differential Revision: https://reviews.llvm.org/D31228 llvm-svn: 298602
-rw-r--r--llvm/lib/Transforms/IPO/SampleProfile.cpp6
-rw-r--r--llvm/test/Transforms/SampleProfile/branch.ll5
2 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/IPO/SampleProfile.cpp b/llvm/lib/Transforms/IPO/SampleProfile.cpp
index e8a1acf3c9c..d2ccbd811ba 100644
--- a/llvm/lib/Transforms/IPO/SampleProfile.cpp
+++ b/llvm/lib/Transforms/IPO/SampleProfile.cpp
@@ -1162,9 +1162,13 @@ void SampleProfileLoader::propagateWeights(Function &F) {
}
}
+ uint64_t TempWeight;
// Only set weights if there is at least one non-zero weight.
// In any other case, let the analyzer set weights.
- if (MaxWeight > 0) {
+ // Do not set weights if the weights are present. In ThinLTO, the profile
+ // annotation is done twice. If the first annotation already set the
+ // weights, the second pass does not need to set it.
+ if (MaxWeight > 0 && !TI->extractProfTotalWeight(TempWeight)) {
DEBUG(dbgs() << "SUCCESS. Found non-zero weights.\n");
TI->setMetadata(llvm::LLVMContext::MD_prof,
MDB.createBranchWeights(Weights));
diff --git a/llvm/test/Transforms/SampleProfile/branch.ll b/llvm/test/Transforms/SampleProfile/branch.ll
index 2ef01a76b0f..5a5160e6343 100644
--- a/llvm/test/Transforms/SampleProfile/branch.ll
+++ b/llvm/test/Transforms/SampleProfile/branch.ll
@@ -87,7 +87,9 @@ for.cond: ; preds = %for.inc, %if.then.2
%6 = load i32, i32* %u, align 4, !dbg !46
%7 = load i32, i32* %limit, align 4, !dbg !48
%cmp5 = icmp slt i32 %6, %7, !dbg !49
- br i1 %cmp5, label %for.body, label %for.end, !dbg !50
+ br i1 %cmp5, label %for.body, label %for.end, !dbg !50, !prof !80
+; CHECK: edge for.cond -> for.body probability is 0x73333333 / 0x80000000 = 90.00%
+; CHECK: edge for.cond -> for.end probability is 0x0ccccccd / 0x80000000 = 10.00%
for.body: ; preds = %for.cond
call void @llvm.dbg.declare(metadata double* %x, metadata !51, metadata !17), !dbg !53
@@ -237,3 +239,4 @@ attributes #4 = { nounwind readonly }
!77 = !DILocation(line: 20, column: 4, scope: !6)
!78 = !DILocation(line: 21, column: 4, scope: !6)
!79 = !DILocation(line: 22, column: 2, scope: !6)
+!80 = !{!"branch_weights", i32 90, i32 10}
OpenPOWER on IntegriCloud