mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-22 13:32:09 +00:00
Do not inline recursive direct calls in sample loader pass.
Summary: r305009 disables recursive inlining for indirect calls in sample loader pass. The same logic applies to direct recursive calls. Reviewers: iteratee, davidxl Reviewed By: iteratee Subscribers: sanjoy, llvm-commits, eraman Differential Revision: https://reviews.llvm.org/D34456 llvm-svn: 305934
This commit is contained in:
parent
d394a5b7a6
commit
6ae666b3ab
@ -690,6 +690,9 @@ bool SampleProfileLoader::inlineHotFunctions(
|
||||
for (auto I : CIS) {
|
||||
InlineFunctionInfo IFI(nullptr, ACT ? &GetAssumptionCache : nullptr);
|
||||
Function *CalledFunction = CallSite(I).getCalledFunction();
|
||||
// Do not inline recursive calls.
|
||||
if (CalledFunction == &F)
|
||||
continue;
|
||||
Instruction *DI = I;
|
||||
if (!CalledFunction && !PromotedInsns.count(I) &&
|
||||
CallSite(I).isIndirectCall())
|
||||
|
@ -1,3 +1,6 @@
|
||||
_Z3foov:200:100
|
||||
1: _Z3barv:0
|
||||
3: _Z3barv:100
|
||||
recursive:200:100
|
||||
1: recursive:100
|
||||
2: recursive:100
|
||||
|
@ -32,6 +32,19 @@ define internal void @_ZL3barv() !dbg !12 {
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK-LABEL: @recursive
|
||||
define void @recursive() !dbg !13 {
|
||||
; Recursive calls should not be early-inlined.
|
||||
; CHECK-NOT: call void @recursive
|
||||
; CHECK: call void @recursive
|
||||
; CHECK: call void @recursive
|
||||
; CHECK-NOT: call void @recursive
|
||||
; CHECK: ret
|
||||
call void @recursive(), !dbg !14
|
||||
call void @recursive(), !dbg !15
|
||||
ret void
|
||||
}
|
||||
|
||||
declare i32 @__gxx_personality_v0(...)
|
||||
|
||||
!llvm.dbg.cu = !{!0}
|
||||
@ -46,3 +59,6 @@ declare i32 @__gxx_personality_v0(...)
|
||||
!10 = !DILocation(line: 8, column: 5, scope: !11)
|
||||
!11 = distinct !DILexicalBlock(scope: !6, file: !1, line: 7, column: 7)
|
||||
!12 = distinct !DISubprogram(linkageName: "_ZL3barv", scope: !1, file: !1, line: 20, scopeLine: 20, unit: !0)
|
||||
!13 = distinct !DISubprogram(linkageName: "recursive", scope: !1, file: !1, line: 20, scopeLine: 20, unit: !0)
|
||||
!14 = !DILocation(line: 21, column: 3, scope: !13)
|
||||
!15 = !DILocation(line: 22, column: 3, scope: !13)
|
||||
|
Loading…
x
Reference in New Issue
Block a user