diff options
author | Dehao Chen <dehao@google.com> | 2017-02-22 17:27:21 +0000 |
---|---|---|
committer | Dehao Chen <dehao@google.com> | 2017-02-22 17:27:21 +0000 |
commit | 94ebcf7e5eccd1b4f8bad3d88f765e29d01254db (patch) | |
tree | 92f672c999370cac6ee441afaf6e9123dd652d17 | |
parent | 61ce026358244ce3bbc38b71f9ed3b88376333b8 (diff) |
Fix an obvious bug in SampleProfileReaderGCC.
Summary: The CallTargetProfile should be added to FProfile to be consistent with other profile readers.
Reviewers: dnovillo, davidxl
Reviewed By: davidxl
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D30233
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@295852 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/ProfileData/SampleProfReader.cpp | 8 | ||||
-rw-r--r-- | test/Transforms/SampleProfile/Inputs/indirect-call.afdo | bin | 0 -> 1744 bytes | |||
-rw-r--r-- | test/Transforms/SampleProfile/indirect-call-gcc.ll | 26 |
3 files changed, 29 insertions, 5 deletions
diff --git a/lib/ProfileData/SampleProfReader.cpp b/lib/ProfileData/SampleProfReader.cpp index af80b036a5b..6d063602fb2 100644 --- a/lib/ProfileData/SampleProfReader.cpp +++ b/lib/ProfileData/SampleProfReader.cpp @@ -681,11 +681,9 @@ std::error_code SampleProfileReaderGCC::readOneFunctionProfile( if (!GcovBuffer.readInt64(TargetCount)) return sampleprof_error::truncated; - if (Update) { - FunctionSamples &TargetProfile = Profiles[TargetName]; - TargetProfile.addCalledTargetSamples(LineOffset, Discriminator, - TargetName, TargetCount); - } + if (Update) + FProfile->addCalledTargetSamples(LineOffset, Discriminator, + TargetName, TargetCount); } } diff --git a/test/Transforms/SampleProfile/Inputs/indirect-call.afdo b/test/Transforms/SampleProfile/Inputs/indirect-call.afdo Binary files differnew file mode 100644 index 00000000000..2d5b345e960 --- /dev/null +++ b/test/Transforms/SampleProfile/Inputs/indirect-call.afdo diff --git a/test/Transforms/SampleProfile/indirect-call-gcc.ll b/test/Transforms/SampleProfile/indirect-call-gcc.ll new file mode 100644 index 00000000000..678c7931250 --- /dev/null +++ b/test/Transforms/SampleProfile/indirect-call-gcc.ll @@ -0,0 +1,26 @@ +; RUN: opt < %s -sample-profile -sample-profile-file=%S/Inputs/indirect-call.afdo -S | FileCheck %s + +; Checks if indirect call targets are read correctly when reading from gcc +; format profile. +; It is expected to fail on certain architectures as gcc profile reader does +; not work. +; XFAIL: powerpc64-, s390x, mips-, mips64-, sparc + +define void @test(void ()*) !dbg !3 { + %2 = alloca void ()* + store void ()* %0, void ()** %2 + %3 = load void ()*, void ()** %2 + ; CHECK: call {{.*}}, !prof ![[PROF:[0-9]+]] + call void %3(), !dbg !4 + ret void +} + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!2} + +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1) +!1 = !DIFile(filename: "test.cc", directory: "/") +!2 = !{i32 2, !"Debug Info Version", i32 3} +!3 = distinct !DISubprogram(name: "test", scope: !1, file: !1, line: 1, unit: !0) +!4 = !DILocation(line: 5, scope: !3) +; CHECK: ![[PROF]] = !{!"VP", i32 0, i64 3457, i64 9191153033785521275, i64 2059, i64 -1069303473483922844, i64 1398} |