llvm-mirror/lib/IR
Michael J. Spencer 8c3c4e105e 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
2018-06-27 23:58:08 +00:00
..
AsmWriter.cpp [ADT] Make escaping fn conform to coding guidelines 2018-05-31 17:01:42 +00:00
AttributeImpl.h Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
Attributes.cpp [ADT] Make escaping fn conform to coding guidelines 2018-05-31 17:01:42 +00:00
AttributesCompatFunc.td
AutoUpgrade.cpp [X86] Rename the autoupgraded of packed fp compare and fpclass intrinsics that don't take a mask as input to exclude '.mask.' from their name. 2018-06-27 15:57:53 +00:00
BasicBlock.cpp Rename skipDebugInfo -> skipDebugIntrinsics, NFC 2018-06-26 21:16:59 +00:00
CMakeLists.txt [IR][CodeGen] Remove dependency on EVT from IR/Function.cpp. Move EVT to CodeGen layer. 2018-03-29 17:21:10 +00:00
Comdat.cpp
ConstantFold.cpp ConstantFold: Don't fold global address vs. null for addrspace != 0 2018-06-26 18:55:43 +00:00
ConstantFold.h
ConstantRange.cpp [ConstantRange] Add support of mul in makeGuaranteedNoWrapRegion. 2018-06-26 18:54:10 +00:00
Constants.cpp [IR] Use Instruction::isBinaryOp helper instead of raw enum range tests. NFCI. 2018-06-22 10:48:02 +00:00
ConstantsContext.h Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
Core.cpp [LLVM-C] Improve Bindings For Aliases 2018-05-20 23:49:08 +00:00
DataLayout.cpp Use uniform mechanism for OOM errors handling 2018-06-09 05:19:45 +00:00
DebugInfo.cpp Extend the GlobalObject metadata interface 2018-05-31 13:29:58 +00:00
DebugInfoMetadata.cpp [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
DebugLoc.cpp IWYU for llvm-config.h in llvm, additions. 2018-04-30 14:59:11 +00:00
DiagnosticHandler.cpp Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
DiagnosticInfo.cpp
DiagnosticPrinter.cpp
DIBuilder.cpp [DebugInfo] Refactoring DIType::setFlags to DIType::cloneWithFlags, NFC 2018-06-01 23:15:09 +00:00
Dominators.cpp Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
Function.cpp [IR] Split Intrinsics.inc into enums and implementations 2018-06-23 02:02:38 +00:00
Globals.cpp Sink Analysis/ObjectUtil(canBeOmittedFromSymbolTable) into IR so it can be legitimately be used by Object/IRSymtab 2018-03-21 19:23:45 +00:00
GVMaterializer.cpp
InlineAsm.cpp
Instruction.cpp [IR] Introduce helpers to skip debug instructions (NFC) 2018-06-19 23:42:17 +00:00
Instructions.cpp Improve ConvertDebugDeclareToDebugValue 2018-06-26 06:17:00 +00:00
IntrinsicInst.cpp Re-apply "[DebugInfo] Check size of variable in ConvertDebugDeclareToDebugValue" 2018-06-15 13:48:55 +00:00
IRBuilder.cpp [IRBuilder] Add APIs for creating calls to atomic memmove and memset intrinsics. (NFC) 2018-05-30 20:02:56 +00:00
IRPrintingPasses.cpp [Debugify] Add -debugify-each for testing each pass in a pipeline 2018-05-15 00:29:27 +00:00
LegacyPassManager.cpp Reland: [Timers] Use the pass argument name for JSON keys in time-passes 2018-06-13 21:03:56 +00:00
LLVMBuild.txt
LLVMContext.cpp allow custom OptBisect classes set to LLVMContext 2018-04-05 10:29:37 +00:00
LLVMContextImpl.cpp Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
LLVMContextImpl.h Extend the GlobalObject metadata interface 2018-05-31 13:29:58 +00:00
Mangler.cpp
MDBuilder.cpp Remove \brief commands from doxygen comments. 2018-05-01 15:54:18 +00:00
Metadata.cpp Extend the GlobalObject metadata interface 2018-05-31 13:29:58 +00:00
MetadataImpl.h
Module.cpp Add remarks describing when a pass changes the IR instruction count of a module 2018-05-18 17:26:39 +00:00
ModuleSummaryIndex.cpp
Operator.cpp
OptBisect.cpp [NFC] OptPassGate extracted from OptBisect 2018-03-27 16:57:20 +00:00
Pass.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
PassManager.cpp
PassRegistry.cpp
ProfileSummary.cpp [ProfileSummary] Move a vector we're about to destroy anyway; NFC 2018-04-12 20:54:05 +00:00
SafepointIRVerifier.cpp SafepointIRVerifier should ignore dead blocks and dead edges 2018-06-25 13:51:11 +00:00
Statepoint.cpp
SymbolTableListTraitsImpl.h
Type.cpp
TypeFinder.cpp
Use.cpp
User.cpp
Value.cpp In thin and full LTO + CFI, direct function calls may go through jump table 2018-06-04 18:18:12 +00:00
ValueSymbolTable.cpp Rename DEBUG macro to LLVM_DEBUG. 2018-05-14 12:53:11 +00:00
Verifier.cpp Add support for generating a call graph profile from Branch Frequency Info. 2018-06-27 23:58:08 +00:00