diff options
author | Dehao Chen <dehao@google.com> | 2017-09-19 18:26:54 +0000 |
---|---|---|
committer | Dehao Chen <dehao@google.com> | 2017-09-19 18:26:54 +0000 |
commit | a84aa64e93ae94d42f8025e9d6ab89a19da422dd (patch) | |
tree | 4a337f6b118e93ea2baf4cb1e97a4e2fe6718528 /test/Transforms/SampleProfile | |
parent | 3796a45d298ba18926bea1eff2ac9a8e50f109ae (diff) |
Handle profile mismatch correctly for SamplePGO.
Summary: Fix the bug when promoted call return type mismatches with the promoted function, we should not try to inline it. Otherwise it may lead to compiler crash.
Reviewers: davidxl, tejohnson, eraman
Reviewed By: tejohnson
Subscribers: llvm-commits, sanjoy
Differential Revision: https://reviews.llvm.org/D38018
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313658 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/SampleProfile')
-rw-r--r-- | test/Transforms/SampleProfile/Inputs/indirect-call.prof | 3 | ||||
-rw-r--r-- | test/Transforms/SampleProfile/indirect-call.ll | 20 |
2 files changed, 23 insertions, 0 deletions
diff --git a/test/Transforms/SampleProfile/Inputs/indirect-call.prof b/test/Transforms/SampleProfile/Inputs/indirect-call.prof index ff1368142a0..f35b4b13c71 100644 --- a/test/Transforms/SampleProfile/Inputs/indirect-call.prof +++ b/test/Transforms/SampleProfile/Inputs/indirect-call.prof @@ -20,3 +20,6 @@ test_inline_strip_conflict:3000:0 test_norecursive_inline:3000:0 1: test_norecursive_inline:3000 20: 3000 +test_noinline_bitcast:3000:0 + 1: foo_direct_i32:3000 + 1: 3000 diff --git a/test/Transforms/SampleProfile/indirect-call.ll b/test/Transforms/SampleProfile/indirect-call.ll index bee98f1066d..28d61ed2426 100644 --- a/test/Transforms/SampleProfile/indirect-call.ll +++ b/test/Transforms/SampleProfile/indirect-call.ll @@ -69,6 +69,19 @@ define void @test_noinline(void ()*) !dbg !12 { ret void } +; CHECK-LABEL: @test_noinline_bitcast +; If the indirect call has been promoted to a direct call with bitcast, +; do not inline it. +define float @test_noinline_bitcast(float ()*) !dbg !26 { + %2 = alloca float ()* + store float ()* %0, float ()** %2 +; CHECK: icmp +; CHECK: call + %3 = load float ()*, float ()** %2 + %4 = call float %3(), !dbg !27 + ret float %4 +} + ; CHECK-LABEL: @test_norecursive_inline ; If the indirect call target is the caller, we should not promote it. define void @test_norecursive_inline() !dbg !24 { @@ -114,6 +127,10 @@ define void @foo_direct() !dbg !21 { ret void } +define i32 @foo_direct_i32() !dbg !28 { + ret i32 0; +} + ; CHECK-LABEL: @test_direct ; We should not promote a direct call. define void @test_direct() !dbg !22 { @@ -155,3 +172,6 @@ define void @test_direct() !dbg !22 { !23 = !DILocation(line: 23, scope: !22) !24 = distinct !DISubprogram(name: "test_norecursive_inline", scope: !1, file: !1, line: 12, unit: !0) !25 = !DILocation(line: 13, scope: !24) +!26 = distinct !DISubprogram(name: "test_noinline_bitcast", scope: !1, file: !1, line: 12, unit: !0) +!27 = !DILocation(line: 13, scope: !26) +!28 = distinct !DISubprogram(name: "foo_direct_i32", scope: !1, file: !1, line: 11, unit: !0) |