[PATCH] D42161: Add Call Graph Profile pass and ELF assembly support

Michael Spencer via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 25 17:27:45 PST 2018


On Wed, Jan 17, 2018 at 12:30 AM, Michael Spencer via Phabricator <
reviews at reviews.llvm.org> wrote:

> Bigcheese created this revision.
> Bigcheese added reviewers: espindola, ruiu.
> Herald added subscribers: mgorny, mehdi_amini.
>
> This adds the LLVM side of https://reviews.llvm.org/D36351.
>
> The purpose of this patch is to get call graph edge counts from LLVM IR to
> the linker.
>
> The IR pass uses Block Frequency Info to generate module flags metadata in
> the format:
>
>   !28 = !{i32 5, !"CG Profile", !29}
>   !29 = !{!30, !31, !32, !33, !34, !35}
>   !30 = !{!"main", !"_Z3foov", i64 1}
>   !31 = !{!"main", !"_Z3barv", i64 1}
>   !32 = !{!"_Z3foov", !"_Z5adenav", i64 6}
>   !33 = !{!"_Z3foov", !"puts", i64 1}
>   !34 = !{!"_Z3barv", !"puts", i64 1}
>   !35 = !{!"_Z5adenav", !"puts", i64 10}
>
> Where `!28` is the modules flag for call graph profile info whose 3rd
> element is a list of (from name, to name, count) triplets.
>
> This data is then written to the object file in the `.note.llvm.cgprofile`
> section as an array of:
>
> uint32_t: From Symbol Index
> uint32_t: To Symbol Index
> uint64_t: Call Count
>
> This also adds the `.cg_profile` directive to the assembly parser/printer
> as:
>
> `.cg_profile <from symbol name>, <to symbol name>, <call count>`
>
> Which generates the above triplets.
>
> I've yet to write non-lld tests for this, and I'll do so before commit.
>
>
> Repository:
>   rL LLVM
>
> https://reviews.llvm.org/D42161
>
> Files:
>   include/llvm/InitializePasses.h
>   include/llvm/LinkAllPasses.h
>   include/llvm/MC/MCAssembler.h
>   include/llvm/MC/MCELFStreamer.h
>   include/llvm/MC/MCStreamer.h
>   include/llvm/Object/ELFTypes.h
>   include/llvm/Transforms/Instrumentation.h
>   lib/CodeGen/TargetLoweringObjectFileImpl.cpp
>   lib/MC/ELFObjectWriter.cpp
>   lib/MC/MCAsmStreamer.cpp
>   lib/MC/MCELFStreamer.cpp
>   lib/MC/MCParser/ELFAsmParser.cpp
>   lib/MC/MCStreamer.cpp
>   lib/Transforms/IPO/PassManagerBuilder.cpp
>   lib/Transforms/Instrumentation/CGProfile.cpp
>   lib/Transforms/Instrumentation/CMakeLists.txt
>   lib/Transforms/Instrumentation/Instrumentation.cpp
>   tools/llvm-readobj/ELFDumper.cpp
>   tools/llvm-readobj/ObjDumper.h
>   tools/llvm-readobj/llvm-readobj.cpp
>
>
ping

- Michael Spencer
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180125/32df52b4/attachment.html>


More information about the llvm-commits mailing list