[PATCH] D19948: Propagate branch metadata when some branch probability is missing.
Dehao Chen via llvm-commits
llvm-commits at lists.llvm.org
Wed May 4 17:25:44 PDT 2016
danielcdh created this revision.
danielcdh added reviewers: davidxl, spatel, hfinkel.
danielcdh added a subscriber: llvm-commits.
In sample profile, some branches may have profile missing due to profile inaccuracy. We want existing branch probability still valid after propagation.
http://reviews.llvm.org/D19948
Files:
lib/Transforms/Utils/SimplifyCFG.cpp
test/Transforms/SimplifyCFG/preserve-branchweights.ll
Index: test/Transforms/SimplifyCFG/preserve-branchweights.ll
===================================================================
--- test/Transforms/SimplifyCFG/preserve-branchweights.ll
+++ test/Transforms/SimplifyCFG/preserve-branchweights.ll
@@ -464,6 +464,30 @@
ret i32 %outval
}
+define i32 @SimplifyCondBranchToCondBranchSwapMissingWeight(i1 %cmpa, i1 %cmpb) {
+; CHECK-LABEL: @SimplifyCondBranchToCondBranchSwapMissingWeight(
+; CHECK-NEXT: block1:
+; CHECK-NEXT: [[CMPA_NOT:%.*]] = xor i1 %cmpa, true
+; CHECK-NEXT: [[CMPB_NOT:%.*]] = xor i1 %cmpb, true
+; CHECK-NEXT: [[BRMERGE:%.*]] = or i1 [[CMPA_NOT]], [[CMPB_NOT]]
+; CHECK-NEXT: [[DOTMUX:%.*]] = select i1 [[CMPA_NOT]], i32 0, i32 2, !prof !16
+; CHECK-NEXT: [[OUTVAL:%.*]] = select i1 [[BRMERGE]], i32 [[DOTMUX]], i32 1, !prof !17
+; CHECK-NEXT: ret i32 [[OUTVAL]]
+;
+block1:
+ br i1 %cmpa, label %block2, label %block3, !prof !13
+
+block2:
+ br i1 %cmpb, label %exit, label %block3
+
+block3:
+ %cowval = phi i32 [ 2, %block2 ], [ 0, %block1 ]
+ br label %exit
+
+exit:
+ %outval = phi i32 [ %cowval, %block3 ], [ 1, %block2 ]
+ ret i32 %outval
+}
!0 = !{!"branch_weights", i32 3, i32 5}
!1 = !{!"branch_weights", i32 1, i32 1}
@@ -499,4 +523,6 @@
; CHECK: !13 = !{!"branch_weights", i32 34, i32 21}
; CHECK: !14 = !{!"branch_weights", i32 33, i32 14}
; CHECK: !15 = !{!"branch_weights", i32 47, i32 8}
+; CHECK: !16 = !{!"branch_weights", i32 6, i32 2}
+; CHECK: !17 = !{!"branch_weights", i32 8, i32 2}
Index: lib/Transforms/Utils/SimplifyCFG.cpp
===================================================================
--- lib/Transforms/Utils/SimplifyCFG.cpp
+++ lib/Transforms/Utils/SimplifyCFG.cpp
@@ -2843,10 +2843,18 @@
MDBuilder MDB(BI->getContext());
uint64_t PredTrueWeight, PredFalseWeight, SuccTrueWeight, SuccFalseWeight;
uint64_t PredCommon, PredOther, SuccCommon, SuccOther;
- bool HasWeights = PBI->extractProfMetadata(PredTrueWeight, PredFalseWeight);
- if (HasWeights)
- HasWeights = BI->extractProfMetadata(SuccTrueWeight, SuccFalseWeight);
+ bool PredHasWeights =
+ PBI->extractProfMetadata(PredTrueWeight, PredFalseWeight);
+ bool SuccHasWeights =
+ BI->extractProfMetadata(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;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D19948.56227.patch
Type: text/x-patch
Size: 2674 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160505/9c2874fd/attachment.bin>
More information about the llvm-commits
mailing list