[PATCH] D29569: Fix the bug of samplepgo indirect call promption when type casting of the return value is needed.
Dehao Chen via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 6 09:50:26 PST 2017
danielcdh updated this revision to Diff 87245.
danielcdh marked an inline comment as done.
danielcdh added a comment.
update
https://reviews.llvm.org/D29569
Files:
lib/Transforms/IPO/SampleProfile.cpp
test/Transforms/SampleProfile/indirect-call.ll
Index: test/Transforms/SampleProfile/indirect-call.ll
===================================================================
--- test/Transforms/SampleProfile/indirect-call.ll
+++ test/Transforms/SampleProfile/indirect-call.ll
@@ -12,16 +12,16 @@
; 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
}
@@ -37,8 +37,10 @@
ret void
}
-define void @foo_inline() !dbg !3 {
- ret void
+ at 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 {
Index: lib/Transforms/IPO/SampleProfile.cpp
===================================================================
--- lib/Transforms/IPO/SampleProfile.cpp
+++ lib/Transforms/IPO/SampleProfile.cpp
@@ -643,7 +643,9 @@
// 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 "
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D29569.87245.patch
Type: text/x-patch
Size: 1854 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170206/a1ee7753/attachment.bin>
More information about the llvm-commits
mailing list