// result, we do not have profile info for the branch probability.
// We set the probability to 80% taken to indicate that the static
// call is likely taken.
- DI = promoteIndirectCall(I, CalledFunction, 80, 100);
+ DI = dyn_cast<Instruction>(
+ promoteIndirectCall(I, CalledFunction, 80, 100)
+ ->stripPointerCasts());
PromotedInsns.insert(I);
} else {
DEBUG(dbgs() << "\nFailed to promote indirect call to "
; CHECK-LABEL: @test_inline
; If the indirect call is promoted and inlined in profile, we should promote and inline it.
-define void @test_inline(void ()*) !dbg !3 {
- %2 = alloca void ()*
- store void ()* %0, void ()** %2
- %3 = load void ()*, void ()** %2
+define void @test_inline(i64* (i32*)*, i32* %x) !dbg !3 {
+ %2 = alloca i64* (i32*)*
+ store i64* (i32*)* %0, i64* (i32*)** %2
+ %3 = load i64* (i32*)*, i64* (i32*)** %2
; CHECK: icmp {{.*}} @foo_inline
; CHECK: if.true.direct_targ:
; CHECK-NOT: call
; CHECK: if.false.orig_indirect:
; CHECK: call
- call void %3(), !dbg !5
+ call i64* %3(i32* %x), !dbg !5
ret void
}
ret void
}
-define void @foo_inline() !dbg !3 {
- ret void
+@x = global i32 0, align 4
+
+define i32* @foo_inline(i32* %x) !dbg !3 {
+ ret i32* %x
}
define i32 @foo_noinline(i32 %x) !dbg !3 {