mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
380e0d5013
block frequency analyses. This differs substantially from the existing block-placement pass in LLVM: 1) It operates on the Machine-IR in the CodeGen layer. This exposes much more (and more precise) information and opportunities. Also, the results are more stable due to fewer transforms ocurring after the pass runs. 2) It uses the generalized probability and frequency analyses. These can model static heuristics, code annotation derived heuristics as well as eventual profile loading. By basing the optimization on the analysis interface it can work from any (or a combination) of these inputs. 3) It uses a more aggressive algorithm, both building chains from tho bottom up to maximize benefit, and using an SCC-based walk to layout chains of blocks in a profitable ordering without O(N^2) iterations which the old pass involves. The pass is currently gated behind a flag, and not enabled by default because it still needs to grow some important features. Most notably, it needs to support loop aligning and careful layout of loop structures much as done by hand currently in CodePlacementOpt. Once it supports these, and has sufficient testing and quality tuning, it should replace both of these passes. Thanks to Nick Lewycky and Richard Smith for help authoring & debugging this, and to Jakob, Andy, Eric, Jim, and probably a few others I'm forgetting for reviewing and answering all my questions. Writing a backend pass is *sooo* much better now than it used to be. =D llvm-svn: 142641
116 lines
2.5 KiB
CMake
116 lines
2.5 KiB
CMake
add_llvm_library(LLVMCodeGen
|
|
AggressiveAntiDepBreaker.cpp
|
|
AllocationOrder.cpp
|
|
Analysis.cpp
|
|
BranchFolding.cpp
|
|
CalcSpillWeights.cpp
|
|
CallingConvLower.cpp
|
|
CodeGen.cpp
|
|
CodePlacementOpt.cpp
|
|
CriticalAntiDepBreaker.cpp
|
|
DeadMachineInstructionElim.cpp
|
|
DwarfEHPrepare.cpp
|
|
EdgeBundles.cpp
|
|
ELFCodeEmitter.cpp
|
|
ELFWriter.cpp
|
|
ExecutionDepsFix.cpp
|
|
ExpandISelPseudos.cpp
|
|
ExpandPostRAPseudos.cpp
|
|
GCMetadata.cpp
|
|
GCMetadataPrinter.cpp
|
|
GCStrategy.cpp
|
|
IfConversion.cpp
|
|
InlineSpiller.cpp
|
|
InterferenceCache.cpp
|
|
IntrinsicLowering.cpp
|
|
LLVMTargetMachine.cpp
|
|
LatencyPriorityQueue.cpp
|
|
LexicalScopes.cpp
|
|
LiveDebugVariables.cpp
|
|
LiveInterval.cpp
|
|
LiveIntervalAnalysis.cpp
|
|
LiveIntervalUnion.cpp
|
|
LiveStackAnalysis.cpp
|
|
LiveVariables.cpp
|
|
LiveRangeCalc.cpp
|
|
LiveRangeEdit.cpp
|
|
LocalStackSlotAllocation.cpp
|
|
MachineBasicBlock.cpp
|
|
MachineBlockFrequencyInfo.cpp
|
|
MachineBlockPlacement.cpp
|
|
MachineBranchProbabilityInfo.cpp
|
|
MachineCSE.cpp
|
|
MachineDominators.cpp
|
|
MachineFunction.cpp
|
|
MachineFunctionAnalysis.cpp
|
|
MachineFunctionPass.cpp
|
|
MachineFunctionPrinterPass.cpp
|
|
MachineInstr.cpp
|
|
MachineLICM.cpp
|
|
MachineLoopInfo.cpp
|
|
MachineLoopRanges.cpp
|
|
MachineModuleInfo.cpp
|
|
MachineModuleInfoImpls.cpp
|
|
MachinePassRegistry.cpp
|
|
MachineRegisterInfo.cpp
|
|
MachineSSAUpdater.cpp
|
|
MachineSink.cpp
|
|
MachineVerifier.cpp
|
|
ObjectCodeEmitter.cpp
|
|
OcamlGC.cpp
|
|
OptimizePHIs.cpp
|
|
PHIElimination.cpp
|
|
PHIEliminationUtils.cpp
|
|
Passes.cpp
|
|
PeepholeOptimizer.cpp
|
|
PostRASchedulerList.cpp
|
|
ProcessImplicitDefs.cpp
|
|
PrologEpilogInserter.cpp
|
|
PseudoSourceValue.cpp
|
|
RegAllocBasic.cpp
|
|
RegAllocFast.cpp
|
|
RegAllocGreedy.cpp
|
|
RegAllocLinearScan.cpp
|
|
RegAllocPBQP.cpp
|
|
RegisterClassInfo.cpp
|
|
RegisterCoalescer.cpp
|
|
RegisterScavenging.cpp
|
|
RenderMachineFunction.cpp
|
|
ScheduleDAG.cpp
|
|
ScheduleDAGEmit.cpp
|
|
ScheduleDAGInstrs.cpp
|
|
ScheduleDAGPrinter.cpp
|
|
ScoreboardHazardRecognizer.cpp
|
|
ShadowStackGC.cpp
|
|
ShrinkWrapping.cpp
|
|
SjLjEHPrepare.cpp
|
|
SlotIndexes.cpp
|
|
Spiller.cpp
|
|
SpillPlacement.cpp
|
|
SplitKit.cpp
|
|
Splitter.cpp
|
|
StackProtector.cpp
|
|
StackSlotColoring.cpp
|
|
StrongPHIElimination.cpp
|
|
TailDuplication.cpp
|
|
TargetInstrInfoImpl.cpp
|
|
TargetLoweringObjectFileImpl.cpp
|
|
TwoAddressInstructionPass.cpp
|
|
UnreachableBlockElim.cpp
|
|
VirtRegMap.cpp
|
|
VirtRegRewriter.cpp
|
|
)
|
|
|
|
add_llvm_library_dependencies(LLVMCodeGen
|
|
LLVMAnalysis
|
|
LLVMCore
|
|
LLVMMC
|
|
LLVMScalarOpts
|
|
LLVMSupport
|
|
LLVMTarget
|
|
LLVMTransformUtils
|
|
)
|
|
|
|
add_subdirectory(SelectionDAG)
|
|
add_subdirectory(AsmPrinter)
|