mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:40:38 +00:00
[BPI] Consider deoptimize calls as "unreachable"
Summary: Calls to @llvm.experimental.deoptimize are expected to "never execute", so optimize them as such. Reviewers: chandlerc Subscribers: junbuml, mcrosier, llvm-commits Differential Revision: http://reviews.llvm.org/D19095 llvm-svn: 266654
This commit is contained in:
parent
e9233149ee
commit
f97ce19844
@ -115,7 +115,12 @@ static const uint32_t IH_NONTAKEN_WEIGHT = 1;
|
||||
bool BranchProbabilityInfo::calcUnreachableHeuristics(const BasicBlock *BB) {
|
||||
const TerminatorInst *TI = BB->getTerminator();
|
||||
if (TI->getNumSuccessors() == 0) {
|
||||
if (isa<UnreachableInst>(TI))
|
||||
if (isa<UnreachableInst>(TI) ||
|
||||
// If this block is terminated by a call to
|
||||
// @llvm.experimental.deoptimize then treat it like an unreachable since
|
||||
// the @llvm.experimental.deoptimize call is expected to practically
|
||||
// never execute.
|
||||
BB->getTerminatingDeoptimizeCall())
|
||||
PostDominatedByUnreachable.insert(BB);
|
||||
return false;
|
||||
}
|
||||
|
20
test/Analysis/BranchProbabilityInfo/deopt-intrinsic.ll
Normal file
20
test/Analysis/BranchProbabilityInfo/deopt-intrinsic.ll
Normal file
@ -0,0 +1,20 @@
|
||||
; RUN: opt -analyze -branch-prob < %s | FileCheck %s
|
||||
|
||||
declare i32 @llvm.experimental.deoptimize.i32(...)
|
||||
|
||||
define i32 @test1(i32 %a, i32 %b) {
|
||||
; CHECK-LABEL: Printing analysis 'Branch Probability Analysis' for function 'test1':
|
||||
entry:
|
||||
%cond = icmp eq i32 %a, 42
|
||||
br i1 %cond, label %exit, label %deopt
|
||||
|
||||
; CHECK: edge entry -> exit probability is 0x7ffff800 / 0x80000000 = 100.00% [HOT edge]
|
||||
; CHECK: edge entry -> deopt probability is 0x00000800 / 0x80000000 = 0.00%
|
||||
|
||||
deopt:
|
||||
%rval = call i32(...) @llvm.experimental.deoptimize.i32() [ "deopt"() ]
|
||||
ret i32 %rval
|
||||
|
||||
exit:
|
||||
ret i32 %b
|
||||
}
|
Loading…
Reference in New Issue
Block a user