mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-13 14:46:53 +00:00
40cd497a24
This pass implements whole program optimization of virtual calls in cases where we know (via bitset information) that the list of callees is fixed. This includes the following: - Single implementation devirtualization: if a virtual call has a single possible callee, replace all calls with a direct call to that callee. - Virtual constant propagation: if the virtual function's return type is an integer <=64 bits and all possible callees are readnone, for each class and each list of constant arguments: evaluate the function, store the return value alongside the virtual table, and rewrite each virtual call as a load from the virtual table. - Uniform return value optimization: if the conditions for virtual constant propagation hold and each function returns the same constant value, replace each virtual call with that constant. - Unique return value optimization for i1 return values: if the conditions for virtual constant propagation hold and a single vtable's function returns 0, or a single vtable's function returns 1, replace each virtual call with a comparison of the vptr against that vtable's address. Differential Revision: http://reviews.llvm.org/D16795 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@260312 91177308-0d34-0410-b5e6-96231b3b80d8
38 lines
781 B
CMake
38 lines
781 B
CMake
add_llvm_library(LLVMipo
|
|
ArgumentPromotion.cpp
|
|
BarrierNoopPass.cpp
|
|
ConstantMerge.cpp
|
|
CrossDSOCFI.cpp
|
|
DeadArgumentElimination.cpp
|
|
ElimAvailExtern.cpp
|
|
ExtractGV.cpp
|
|
ForceFunctionAttrs.cpp
|
|
FunctionAttrs.cpp
|
|
FunctionImport.cpp
|
|
GlobalDCE.cpp
|
|
GlobalOpt.cpp
|
|
IPConstantPropagation.cpp
|
|
IPO.cpp
|
|
InferFunctionAttrs.cpp
|
|
InlineAlways.cpp
|
|
InlineSimple.cpp
|
|
Inliner.cpp
|
|
Internalize.cpp
|
|
LoopExtractor.cpp
|
|
LowerBitSets.cpp
|
|
MergeFunctions.cpp
|
|
PartialInlining.cpp
|
|
PassManagerBuilder.cpp
|
|
PruneEH.cpp
|
|
SampleProfile.cpp
|
|
StripDeadPrototypes.cpp
|
|
StripSymbols.cpp
|
|
WholeProgramDevirt.cpp
|
|
|
|
ADDITIONAL_HEADER_DIRS
|
|
${LLVM_MAIN_INCLUDE_DIR}/llvm/Transforms
|
|
${LLVM_MAIN_INCLUDE_DIR}/llvm/Transforms/IPO
|
|
)
|
|
|
|
add_dependencies(LLVMipo intrinsics_gen)
|