mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-14 07:31:47 +00:00
0bf16a5969
Requesting metadata for a global is a relatively expensive operation as it involves a map lookup, but it's one that we need to do relatively frequently in this pass to collect the list of type metadata nodes associated with a global. This change improves the performance of type metadata queries by prebuilding data structures that keep the global together with its list of type metadata, and changing the pass to use that data structure wherever we were previously passing global references around. This change also eliminates some O(N^2) behavior by collecting the list of globals associated with each type identifier during the first pass over the list of globals rather than visiting each global to compute that list every time we add a new type identifier. Reduces pass runtime on a module containing Chrome's vtables from over 60s to 0.9s. Differential Revision: https://reviews.llvm.org/D27484 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288859 91177308-0d34-0410-b5e6-96231b3b80d8 |
||
---|---|---|
.. | ||
AlwaysInliner.cpp | ||
ArgumentPromotion.cpp | ||
BarrierNoopPass.cpp | ||
CMakeLists.txt | ||
ConstantMerge.cpp | ||
CrossDSOCFI.cpp | ||
DeadArgumentElimination.cpp | ||
ElimAvailExtern.cpp | ||
ExtractGV.cpp | ||
ForceFunctionAttrs.cpp | ||
FunctionAttrs.cpp | ||
FunctionImport.cpp | ||
GlobalDCE.cpp | ||
GlobalOpt.cpp | ||
GlobalSplit.cpp | ||
InferFunctionAttrs.cpp | ||
Inliner.cpp | ||
InlineSimple.cpp | ||
Internalize.cpp | ||
IPConstantPropagation.cpp | ||
IPO.cpp | ||
LLVMBuild.txt | ||
LoopExtractor.cpp | ||
LowerTypeTests.cpp | ||
MergeFunctions.cpp | ||
PartialInlining.cpp | ||
PassManagerBuilder.cpp | ||
PruneEH.cpp | ||
SampleProfile.cpp | ||
StripDeadPrototypes.cpp | ||
StripSymbols.cpp | ||
WholeProgramDevirt.cpp |