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/test/Transforms/SimplifyCFG | |
| 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/test/Transforms/SimplifyCFG')
| -rw-r--r-- | llvm/test/Transforms/SimplifyCFG/preserve-branchweights.ll | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/llvm/test/Transforms/SimplifyCFG/preserve-branchweights.ll b/llvm/test/Transforms/SimplifyCFG/preserve-branchweights.ll index 359f21a75ab..57c37871d21 100644 --- a/llvm/test/Transforms/SimplifyCFG/preserve-branchweights.ll +++ b/llvm/test/Transforms/SimplifyCFG/preserve-branchweights.ll @@ -464,6 +464,30 @@ exit: 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 +; CHECK-NEXT: [[OUTVAL:%.*]] = select i1 [[BRMERGE]], i32 [[DOTMUX]], i32 1, !prof !16 +; 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,4 @@ exit: ; 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 8, i32 2} |

