Add support for generating a call graph profile from Branch Frequency Info.
authorMichael J. Spencer <bigcheesegs@gmail.com>
Wed, 27 Jun 2018 23:58:08 +0000 (23:58 +0000)
committerMichael J. Spencer <bigcheesegs@gmail.com>
Wed, 27 Jun 2018 23:58:08 +0000 (23:58 +0000)
commit5bf1ead3771667bc51d7b6b2ddc29cb860b4fe21
treeaae2c2b9bd92abfe0bf8942cfbdcd8f567aa554e
parent0cad9cb9a4b9c3fcda1086dbdab734ef82f780c3
Add support for generating a call graph profile from Branch Frequency Info.

=== Generating the CG Profile ===

The CGProfile module pass simply gets the block profile count for each BB and scans for call instructions.  For each call instruction it adds an edge from the current function to the called function with the current BB block profile count as the weight.

After scanning all the functions, it generates an appending module flag containing the data. The format looks like:
```
!llvm.module.flags = !{!0}

!0 = !{i32 5, !"CG Profile", !1}
!1 = !{!2, !3, !4} ; List of edges
!2 = !{void ()* @a, void ()* @b, i64 32} ; Edge from a to b with a weight of 32
!3 = !{void (i1)* @freq, void ()* @a, i64 11}
!4 = !{void (i1)* @freq, void ()* @b, i64 20}
```

Differential Revision: https://reviews.llvm.org/D48105

llvm-svn: 335794
13 files changed:
llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
llvm/include/llvm/Transforms/Instrumentation/CGProfile.h [new file with mode: 0644]
llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
llvm/lib/IR/Verifier.cpp
llvm/lib/Passes/PassBuilder.cpp
llvm/lib/Passes/PassRegistry.def
llvm/lib/Transforms/Instrumentation/CGProfile.cpp [new file with mode: 0644]
llvm/lib/Transforms/Instrumentation/CMakeLists.txt
llvm/test/Instrumentation/cgprofile.ll [new file with mode: 0644]
llvm/test/MC/ELF/cgprofile.ll [new file with mode: 0644]
llvm/test/Other/new-pm-defaults.ll
llvm/test/Other/new-pm-thinlto-defaults.ll
llvm/test/Verifier/module-flags-cgprofile.ll [new file with mode: 0644]