1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 03:33:20 +01:00
llvm-mirror/include/llvm/CodeGen
Gerolf Hoflehner b4a5e33ee0 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

llvm-svn: 214666
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 [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-15 06:32:26 +00:00
GCMetadata.h Use unique_ptr to manage ownership of GCStrategy objects in GCMetadata 2014-04-15 05:34:49 +00:00
GCMetadataPrinter.h
GCs.h
GCStrategy.h Use unique_ptr to manage ownership of GCFunctionInfos in GCStrategy 2014-04-15 06:07:26 +00:00
IntrinsicLowering.h
ISDOpcodes.h CodeGen: extend f16 conversions to permit types > float. 2014-07-17 10:51:23 +00:00
JITCodeEmitter.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
JumpInstrTables.h Escape "@function" with \verbatim. [-Wdocumentation] 2014-06-08 23:25:02 +00:00
LatencyPriorityQueue.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
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 [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
LiveIntervalAnalysis.h Calculate dead instructions when a live interval is created. 2014-06-03 22:42:10 +00:00
LiveIntervalUnion.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
LivePhysRegs.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
LiveRangeEdit.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
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 [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
LiveVariables.h
MachineBasicBlock.h Fix missing const 2014-07-02 06:45:26 +00:00
MachineBlockFrequencyInfo.h blockfreq: Remove unnecessary template parameters 2014-04-11 23:21:02 +00:00
MachineBranchProbabilityInfo.h blockfreq: Use const in MachineBlockFrequencyInfo 2014-03-25 18:01:32 +00:00
MachineCodeEmitter.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
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 [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
MachineInstrBundle.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
MachineJumpTableInfo.h
MachineLoopInfo.h
MachineMemOperand.h AA metadata refactoring (introduce AAMDNodes) 2014-07-24 12:16:19 +00:00
MachineModuleInfo.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
MachineModuleInfoImpls.h
MachineOperand.h Clean up language and grammar. 2014-05-20 17:11:11 +00:00
MachinePassRegistry.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
MachinePostDominators.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
MachineRegionInfo.h Templatify RegionInfo so it works on MachineBasicBlocks 2014-07-19 18:29:29 +00:00
MachineRegisterInfo.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
MachineRelocation.h
MachineScheduler.h Move remaining LLVM_ENABLE_DUMP conditionals out of the headers 2014-07-01 21:19:13 +00:00
MachineSSAUpdater.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
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 Fix broken build of llvm using clang. 2014-04-15 08:10:46 +00:00
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 [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
ResourcePriorityQueue.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-15 06:32:26 +00:00
RuntimeLibcalls.h CodeGen: generate single libcall for fptrunc -> f16 operations. 2014-07-17 11:12:12 +00:00
ScheduleDAG.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
ScheduleDAGInstrs.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
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 [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
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 [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
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 [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00
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 [C++11] More 'nullptr' conversion or in some cases just using a boolean check instead of comparing to nullptr. 2014-04-09 06:08:46 +00:00
ValueTypes.td
VirtRegMap.h [C++11] More 'nullptr' conversion. In some cases just using a boolean check instead of comparing to nullptr. 2014-04-14 00:51:57 +00:00