mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-14 07:31:47 +00:00
b0b708854e
sequence - target independent framework When the DAGcombiner selects instruction sequences it could increase the critical path or resource len. For example, on arm64 there are multiply-accumulate instructions (madd, msub). If e.g. the equivalent multiply-add sequence is not on the crictial path it makes sense to select it instead of the combined, single accumulate instruction (madd/msub). The reason is that the conversion from add+mul to the madd could lengthen the critical path by the latency of the multiply. But the DAGCombiner would always combine and select the madd/msub instruction. This patch uses machine trace metrics to estimate critical path length and resource length of an original instruction sequence vs a combined instruction sequence and picks the faster code based on its estimates. This patch only commits the target independent framework that evaluates and selects code sequences. The machine instruction combiner is turned off for all targets and expected to evolve over time by gradually handling DAGCombiner pattern in the target specific code. This framework lays the groundwork for fixing rdar://16319955 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214666 91177308-0d34-0410-b5e6-96231b3b80d8
126 lines
2.8 KiB
CMake
126 lines
2.8 KiB
CMake
add_llvm_library(LLVMCodeGen
|
|
AggressiveAntiDepBreaker.cpp
|
|
AllocationOrder.cpp
|
|
Analysis.cpp
|
|
AtomicExpandLoadLinkedPass.cpp
|
|
BasicTargetTransformInfo.cpp
|
|
BranchFolding.cpp
|
|
CalcSpillWeights.cpp
|
|
CallingConvLower.cpp
|
|
CodeGen.cpp
|
|
CodeGenPrepare.cpp
|
|
CriticalAntiDepBreaker.cpp
|
|
DFAPacketizer.cpp
|
|
DeadMachineInstructionElim.cpp
|
|
DwarfEHPrepare.cpp
|
|
EarlyIfConversion.cpp
|
|
EdgeBundles.cpp
|
|
ErlangGC.cpp
|
|
ExecutionDepsFix.cpp
|
|
ExpandISelPseudos.cpp
|
|
ExpandPostRAPseudos.cpp
|
|
GCMetadata.cpp
|
|
GCMetadataPrinter.cpp
|
|
GCStrategy.cpp
|
|
GlobalMerge.cpp
|
|
IfConversion.cpp
|
|
InlineSpiller.cpp
|
|
InterferenceCache.cpp
|
|
IntrinsicLowering.cpp
|
|
JITCodeEmitter.cpp
|
|
JumpInstrTables.cpp
|
|
LLVMTargetMachine.cpp
|
|
LatencyPriorityQueue.cpp
|
|
LexicalScopes.cpp
|
|
LiveDebugVariables.cpp
|
|
LiveInterval.cpp
|
|
LiveIntervalAnalysis.cpp
|
|
LiveIntervalUnion.cpp
|
|
LiveRangeCalc.cpp
|
|
LiveRangeEdit.cpp
|
|
LiveRegMatrix.cpp
|
|
LivePhysRegs.cpp
|
|
LiveStackAnalysis.cpp
|
|
LiveVariables.cpp
|
|
LocalStackSlotAllocation.cpp
|
|
MachineBasicBlock.cpp
|
|
MachineBlockFrequencyInfo.cpp
|
|
MachineBlockPlacement.cpp
|
|
MachineBranchProbabilityInfo.cpp
|
|
MachineCSE.cpp
|
|
MachineCodeEmitter.cpp
|
|
MachineCombiner.cpp
|
|
MachineCopyPropagation.cpp
|
|
MachineDominators.cpp
|
|
MachineDominanceFrontier.cpp
|
|
MachineFunction.cpp
|
|
MachineFunctionAnalysis.cpp
|
|
MachineFunctionPass.cpp
|
|
MachineFunctionPrinterPass.cpp
|
|
MachineInstr.cpp
|
|
MachineInstrBundle.cpp
|
|
MachineLICM.cpp
|
|
MachineLoopInfo.cpp
|
|
MachineModuleInfo.cpp
|
|
MachineModuleInfoImpls.cpp
|
|
MachinePassRegistry.cpp
|
|
MachinePostDominators.cpp
|
|
MachineRegisterInfo.cpp
|
|
MachineRegionInfo.cpp
|
|
MachineSSAUpdater.cpp
|
|
MachineScheduler.cpp
|
|
MachineSink.cpp
|
|
MachineTraceMetrics.cpp
|
|
MachineVerifier.cpp
|
|
OcamlGC.cpp
|
|
OptimizePHIs.cpp
|
|
PHIElimination.cpp
|
|
PHIEliminationUtils.cpp
|
|
Passes.cpp
|
|
PeepholeOptimizer.cpp
|
|
PostRASchedulerList.cpp
|
|
ProcessImplicitDefs.cpp
|
|
PrologEpilogInserter.cpp
|
|
PseudoSourceValue.cpp
|
|
RegAllocBase.cpp
|
|
RegAllocBasic.cpp
|
|
RegAllocFast.cpp
|
|
RegAllocGreedy.cpp
|
|
RegAllocPBQP.cpp
|
|
RegisterClassInfo.cpp
|
|
RegisterCoalescer.cpp
|
|
RegisterPressure.cpp
|
|
RegisterScavenging.cpp
|
|
ScheduleDAG.cpp
|
|
ScheduleDAGInstrs.cpp
|
|
ScheduleDAGPrinter.cpp
|
|
ScoreboardHazardRecognizer.cpp
|
|
ShadowStackGC.cpp
|
|
SjLjEHPrepare.cpp
|
|
SlotIndexes.cpp
|
|
SpillPlacement.cpp
|
|
Spiller.cpp
|
|
SplitKit.cpp
|
|
StackColoring.cpp
|
|
StackProtector.cpp
|
|
StackSlotColoring.cpp
|
|
StackMapLivenessAnalysis.cpp
|
|
StackMaps.cpp
|
|
TailDuplication.cpp
|
|
TargetFrameLoweringImpl.cpp
|
|
TargetInstrInfo.cpp
|
|
TargetLoweringBase.cpp
|
|
TargetLoweringObjectFileImpl.cpp
|
|
TargetOptionsImpl.cpp
|
|
TargetRegisterInfo.cpp
|
|
TargetSchedule.cpp
|
|
TwoAddressInstructionPass.cpp
|
|
UnreachableBlockElim.cpp
|
|
VirtRegMap.cpp
|
|
)
|
|
|
|
add_dependencies(LLVMCodeGen intrinsics_gen)
|
|
|
|
add_subdirectory(SelectionDAG)
|
|
add_subdirectory(AsmPrinter)
|