llvm-6502/include/llvm/CodeGen
Gerolf Hoflehner b0b708854e MachineCombiner Pass for selecting faster instruction
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
2014-08-03 21:35:39 +00:00
..
PBQP Function defined in a header should be inline. Found by modules build. 2014-04-24 23:14:32 +00:00
Analysis.h Refactor duplicated code. 2014-07-30 19:42:16 +00:00
AsmPrinter.h Debug info: Infrastructure to support debug locations for fragmented 2014-08-01 22:11:58 +00:00
CalcSpillWeights.h
CallingConvLower.h ARM: HFAs must be passed in consecutive registers 2014-05-09 14:01:47 +00:00
CommandFlags.h Add a new attribute called 'jumptable' that creates jump-instruction tables for functions marked with this attribute. 2014-06-05 19:29:43 +00:00
DAGCombine.h
DFAPacketizer.h
EdgeBundles.h [modules] "Specialize" a function by actually specializing a function template 2014-04-24 18:27:29 +00:00
FastISel.h [FastISel] Move the helper function isCommutativeIntrinsic into FastISel base class. 2014-07-30 22:04:28 +00:00
FunctionLoweringInfo.h
GCMetadata.h
GCMetadataPrinter.h
GCs.h
GCStrategy.h
IntrinsicLowering.h
ISDOpcodes.h CodeGen: extend f16 conversions to permit types > float. 2014-07-17 10:51:23 +00:00
JITCodeEmitter.h
JumpInstrTables.h Escape "@function" with \verbatim. [-Wdocumentation] 2014-06-08 23:25:02 +00:00
LatencyPriorityQueue.h
LexicalScopes.h DebugInfo: Reapply r209984 (reverted in r210143), asserting that abstract DbgVariables have DIEs. 2014-06-04 23:50:52 +00:00
LinkAllAsmWriterComponents.h
LinkAllCodegenComponents.h [C++] Use 'nullptr'. 2014-04-24 06:44:33 +00:00
LiveInterval.h
LiveIntervalAnalysis.h Calculate dead instructions when a live interval is created. 2014-06-03 22:42:10 +00:00
LiveIntervalUnion.h
LivePhysRegs.h
LiveRangeEdit.h
LiveRegMatrix.h [C++11] Replace OwningPtr with std::unique_ptr in places where it doesn't break the API. 2014-04-21 09:34:48 +00:00
LiveStackAnalysis.h
LiveVariables.h
MachineBasicBlock.h Fix missing const 2014-07-02 06:45:26 +00:00
MachineBlockFrequencyInfo.h
MachineBranchProbabilityInfo.h
MachineCodeEmitter.h
MachineCodeInfo.h [C++] Use 'nullptr'. 2014-04-24 06:44:33 +00:00
MachineCombinerPattern.h MachineCombiner Pass for selecting faster instruction 2014-08-03 21:35:39 +00:00
MachineConstantPool.h CodeGen: Add a getSectionKind method to MachineConstantPoolEntry 2014-07-14 22:06:29 +00:00
MachineDominanceFrontier.h Try to fix MSVC build 2014-07-12 23:09:02 +00:00
MachineDominators.h
MachineFrameInfo.h Re-apply r211399, "Generate native unwind info on Win64" with a fix to ignore SEH pseudo ops in X86 JIT emitter. 2014-06-25 12:41:52 +00:00
MachineFunction.h AA metadata refactoring (introduce AAMDNodes) 2014-07-24 12:16:19 +00:00
MachineFunctionAnalysis.h
MachineFunctionPass.h
MachineInstr.h Add TargetInstrInfo interface isAsCheapAsAMove. 2014-07-29 01:55:19 +00:00
MachineInstrBuilder.h
MachineInstrBundle.h
MachineJumpTableInfo.h
MachineLoopInfo.h
MachineMemOperand.h AA metadata refactoring (introduce AAMDNodes) 2014-07-24 12:16:19 +00:00
MachineModuleInfo.h
MachineModuleInfoImpls.h
MachineOperand.h Clean up language and grammar. 2014-05-20 17:11:11 +00:00
MachinePassRegistry.h
MachinePostDominators.h
MachineRegionInfo.h Templatify RegionInfo so it works on MachineBasicBlocks 2014-07-19 18:29:29 +00:00
MachineRegisterInfo.h
MachineRelocation.h
MachineScheduler.h Move remaining LLVM_ENABLE_DUMP conditionals out of the headers 2014-07-01 21:19:13 +00:00
MachineSSAUpdater.h
MachineTraceMetrics.h MachineCombiner Pass for selecting faster instruction 2014-08-03 21:35:39 +00:00
MachineValueType.h Make the copy member of StringRef/ArrayRef generic wrt allocators. 2014-04-18 16:36:15 +00:00
MachORelocation.h
Passes.h MachineCombiner Pass for selecting faster instruction 2014-08-03 21:35:39 +00:00
PseudoSourceValue.h
RegAllocPBQP.h Sure up ownership passing of the PBQPBuilder by passing unique_ptrs by value rather than lvalue reference. 2014-07-19 21:19:45 +00:00
RegAllocRegistry.h
RegisterClassInfo.h [C++11] Replace OwningPtr with std::unique_ptr in places where it doesn't break the API. 2014-04-21 09:34:48 +00:00
RegisterPressure.h Move remaining LLVM_ENABLE_DUMP conditionals out of the headers 2014-07-01 21:19:13 +00:00
RegisterScavenging.h
ResourcePriorityQueue.h
RuntimeLibcalls.h CodeGen: generate single libcall for fptrunc -> f16 operations. 2014-07-17 11:12:12 +00:00
ScheduleDAG.h
ScheduleDAGInstrs.h
ScheduleDFS.h Move remaining LLVM_ENABLE_DUMP conditionals out of the headers 2014-07-01 21:19:13 +00:00
ScheduleHazardRecognizer.h
SchedulerRegistry.h
ScoreboardHazardRecognizer.h
SelectionDAG.h Make sure no loads resulting from load->switch DAGCombine are marked invariant 2014-07-31 21:45:05 +00:00
SelectionDAGISel.h Implememting named register intrinsics 2014-05-06 16:51:25 +00:00
SelectionDAGNodes.h Make classof in MemSDNode consistent with MemIntrinsicSDNode 2014-07-31 22:31:33 +00:00
SlotIndexes.h
StackMapLivenessAnalysis.h [StackMaps] Enable patchpoint liveness analysis per default. 2014-06-26 23:39:52 +00:00
StackMaps.h [Stackmaps] Pacify windows buildbot. 2014-05-01 22:39:26 +00:00
StackProtector.h
TargetLoweringObjectFileImpl.h CodeGen: Stick constant pool entries in COMDAT sections for WinCOFF 2014-07-14 22:57:27 +00:00
TargetSchedule.h MachineCombiner Pass for selecting faster instruction 2014-08-03 21:35:39 +00:00
ValueTypes.h
ValueTypes.td
VirtRegMap.h