1
0
Fork 0
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hmz007 6d24f2138b
Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56)
3 years ago
..
AsmPrinter Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
GlobalISel Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MIRParser Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
SelectionDAG Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
AggressiveAntiDepBreaker.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
AggressiveAntiDepBreaker.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
AllocationOrder.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
AllocationOrder.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
Analysis.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
AntiDepBreaker.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
AtomicExpandPass.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
BasicTargetTransformInfo.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
BranchFolding.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
BranchFolding.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
BranchRelaxation.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
BreakFalseDeps.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
BuiltinGCs.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
CFGuardLongjmp.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
CFIInstrInserter.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
CMakeLists.txt Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
CalcSpillWeights.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
CallingConvLower.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
CodeGen.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
CodeGenPrepare.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
CriticalAntiDepBreaker.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
CriticalAntiDepBreaker.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
DFAPacketizer.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
DeadMachineInstructionElim.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
DetectDeadLanes.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
DwarfEHPrepare.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
EarlyIfConversion.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
EdgeBundles.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ExecutionDomainFix.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ExpandMemCmp.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ExpandPostRAPseudos.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ExpandReductions.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
FEntryInserter.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
FaultMaps.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
FinalizeISel.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
FuncletLayout.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
GCMetadata.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
GCMetadataPrinter.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
GCRootLowering.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
GCStrategy.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
GlobalMerge.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
HardwareLoops.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
IfConversion.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ImplicitNullChecks.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
IndirectBrExpandPass.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
InlineSpiller.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
InterferenceCache.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
InterferenceCache.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
InterleavedAccessPass.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
InterleavedLoadCombinePass.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
IntrinsicLowering.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LLVMBuild.txt Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LLVMTargetMachine.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LatencyPriorityQueue.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LazyMachineBlockFrequencyInfo.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LexicalScopes.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LiveDebugValues.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LiveDebugVariables.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LiveDebugVariables.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LiveInterval.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LiveIntervalUnion.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LiveIntervals.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LivePhysRegs.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LiveRangeCalc.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LiveRangeEdit.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LiveRangeShrink.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LiveRangeUtils.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LiveRegMatrix.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LiveRegUnits.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LiveStacks.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LiveVariables.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LocalStackSlotAllocation.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LoopTraversal.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LowLevelType.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
LowerEmuTLS.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MIRCanonicalizerPass.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MIRNamerPass.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MIRPrinter.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MIRPrintingPass.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MIRVRegNamerUtils.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MIRVRegNamerUtils.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineBasicBlock.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineBlockFrequencyInfo.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineBlockPlacement.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineBranchProbabilityInfo.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineCSE.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineCombiner.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineCopyPropagation.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineDominanceFrontier.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineDominators.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineFrameInfo.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineFunction.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineFunctionPass.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineFunctionPrinterPass.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineInstr.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineInstrBundle.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineLICM.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineLoopInfo.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineLoopUtils.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineModuleInfo.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineModuleInfoImpls.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineOperand.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineOptimizationRemarkEmitter.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineOutliner.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachinePipeliner.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachinePostDominators.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineRegionInfo.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineRegisterInfo.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineSSAUpdater.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineScheduler.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineSink.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineSizeOpts.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineTraceMetrics.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MachineVerifier.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
MacroFusion.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ModuloSchedule.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
NonRelocatableStringpool.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
OptimizePHIs.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
PHIElimination.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
PHIEliminationUtils.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
PHIEliminationUtils.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ParallelCG.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
PatchableFunction.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
PeepholeOptimizer.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
PostRAHazardRecognizer.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
PostRASchedulerList.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
PreISelIntrinsicLowering.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ProcessImplicitDefs.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
PrologEpilogInserter.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
PseudoSourceValue.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
README.txt Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ReachingDefAnalysis.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
RegAllocBase.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
RegAllocBase.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
RegAllocBasic.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
RegAllocFast.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
RegAllocGreedy.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
RegAllocPBQP.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
RegUsageInfoCollector.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
RegUsageInfoPropagate.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
RegisterClassInfo.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
RegisterCoalescer.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
RegisterCoalescer.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
RegisterPressure.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
RegisterScavenging.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
RegisterUsageInfo.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
RenameIndependentSubregs.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ResetMachineFunctionPass.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
SafeStack.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
SafeStackColoring.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
SafeStackColoring.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
SafeStackLayout.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
SafeStackLayout.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ScalarizeMaskedMemIntrin.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ScheduleDAG.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ScheduleDAGInstrs.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ScheduleDAGPrinter.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ScoreboardHazardRecognizer.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ShadowStackGCLowering.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ShrinkWrap.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
SjLjEHPrepare.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
SlotIndexes.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
SpillPlacement.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
SpillPlacement.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
Spiller.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
SplitKit.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
SplitKit.h Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
StackColoring.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
StackMapLivenessAnalysis.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
StackMaps.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
StackProtector.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
StackSlotColoring.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
SwiftErrorValueTracking.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
SwitchLoweringUtils.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
TailDuplication.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
TailDuplicator.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
TargetFrameLoweringImpl.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
TargetInstrInfo.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
TargetLoweringBase.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
TargetLoweringObjectFileImpl.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
TargetOptionsImpl.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
TargetPassConfig.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
TargetRegisterInfo.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
TargetSchedule.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
TargetSubtargetInfo.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
TwoAddressInstructionPass.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
TypePromotion.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
UnreachableBlockElim.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
ValueTypes.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
VirtRegMap.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
WasmEHPrepare.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
WinEHPrepare.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago
XRayInstrumentation.cpp Rockchip Anroid12_SDK 20220721-rkr10 (e1522e56) 3 years ago

README.txt

//===---------------------------------------------------------------------===//

Common register allocation / spilling problem:

        mul lr, r4, lr
        str lr, [sp, #+52]
        ldr lr, [r1, #+32]
        sxth r3, r3
        ldr r4, [sp, #+52]
        mla r4, r3, lr, r4

can be:

        mul lr, r4, lr
        mov r4, lr
        str lr, [sp, #+52]
        ldr lr, [r1, #+32]
        sxth r3, r3
        mla r4, r3, lr, r4

and then "merge" mul and mov:

        mul r4, r4, lr
        str r4, [sp, #+52]
        ldr lr, [r1, #+32]
        sxth r3, r3
        mla r4, r3, lr, r4

It also increase the likelihood the store may become dead.

//===---------------------------------------------------------------------===//

bb27 ...
        ...
        %reg1037 = ADDri %reg1039, 1
        %reg1038 = ADDrs %reg1032, %reg1039, %noreg, 10
    Successors according to CFG: 0x8b03bf0 (#5)

bb76 (0x8b03bf0, LLVM BB @0x8b032d0, ID#5):
    Predecessors according to CFG: 0x8b0c5f0 (#3) 0x8b0a7c0 (#4)
        %reg1039 = PHI %reg1070, mbb<bb76.outer,0x8b0c5f0>, %reg1037, mbb<bb27,0x8b0a7c0>

Note ADDri is not a two-address instruction. However, its result %reg1037 is an
operand of the PHI node in bb76 and its operand %reg1039 is the result of the
PHI node. We should treat it as a two-address code and make sure the ADDri is
scheduled after any node that reads %reg1039.

//===---------------------------------------------------------------------===//

Use local info (i.e. register scavenger) to assign it a free register to allow
reuse:
        ldr r3, [sp, #+4]
        add r3, r3, #3
        ldr r2, [sp, #+8]
        add r2, r2, #2
        ldr r1, [sp, #+4]  <==
        add r1, r1, #1
        ldr r0, [sp, #+4]
        add r0, r0, #2

//===---------------------------------------------------------------------===//

LLVM aggressively lift CSE out of loop. Sometimes this can be negative side-
effects:

R1 = X + 4
R2 = X + 7
R3 = X + 15

loop:
load [i + R1]
...
load [i + R2]
...
load [i + R3]

Suppose there is high register pressure, R1, R2, R3, can be spilled. We need
to implement proper re-materialization to handle this:

R1 = X + 4
R2 = X + 7
R3 = X + 15

loop:
R1 = X + 4  @ re-materialized
load [i + R1]
...
R2 = X + 7 @ re-materialized
load [i + R2]
...
R3 = X + 15 @ re-materialized
load [i + R3]

Furthermore, with re-association, we can enable sharing:

R1 = X + 4
R2 = X + 7
R3 = X + 15

loop:
T = i + X
load [T + 4]
...
load [T + 7]
...
load [T + 15]
//===---------------------------------------------------------------------===//

It's not always a good idea to choose rematerialization over spilling. If all
the load / store instructions would be folded then spilling is cheaper because
it won't require new live intervals / registers. See 2003-05-31-LongShifts for
an example.

//===---------------------------------------------------------------------===//

With a copying garbage collector, derived pointers must not be retained across
collector safe points; the collector could move the objects and invalidate the
derived pointer. This is bad enough in the first place, but safe points can
crop up unpredictably. Consider:

        %array = load { i32, [0 x %obj] }** %array_addr
        %nth_el = getelementptr { i32, [0 x %obj] }* %array, i32 0, i32 %n
        %old = load %obj** %nth_el
        %z = div i64 %x, %y
        store %obj* %new, %obj** %nth_el

If the i64 division is lowered to a libcall, then a safe point will (must)
appear for the call site. If a collection occurs, %array and %nth_el no longer
point into the correct object.

The fix for this is to copy address calculations so that dependent pointers
are never live across safe point boundaries. But the loads cannot be copied
like this if there was an intervening store, so may be hard to get right.

Only a concurrent mutator can trigger a collection at the libcall safe point.
So single-threaded programs do not have this requirement, even with a copying
collector. Still, LLVM optimizations would probably undo a front-end's careful
work.

//===---------------------------------------------------------------------===//

The ocaml frametable structure supports liveness information. It would be good
to support it.

//===---------------------------------------------------------------------===//

The FIXME in ComputeCommonTailLength in BranchFolding.cpp needs to be
revisited. The check is there to work around a misuse of directives in inline
assembly.

//===---------------------------------------------------------------------===//

It would be good to detect collector/target compatibility instead of silently
doing the wrong thing.

//===---------------------------------------------------------------------===//

It would be really nice to be able to write patterns in .td files for copies,
which would eliminate a bunch of explicit predicates on them (e.g. no side
effects).  Once this is in place, it would be even better to have tblgen
synthesize the various copy insertion/inspection methods in TargetInstrInfo.

//===---------------------------------------------------------------------===//

Stack coloring improvements:

1. Do proper LiveStacks analysis on all stack objects including those which are
   not spill slots.
2. Reorder objects to fill in gaps between objects.
   e.g. 4, 1, <gap>, 4, 1, 1, 1, <gap>, 4 => 4, 1, 1, 1, 1, 4, 4

//===---------------------------------------------------------------------===//

The scheduler should be able to sort nearby instructions by their address. For
example, in an expanded memset sequence it's not uncommon to see code like this:

  movl $0, 4(%rdi)
  movl $0, 8(%rdi)
  movl $0, 12(%rdi)
  movl $0, 0(%rdi)

Each of the stores is independent, and the scheduler is currently making an
arbitrary decision about the order.

//===---------------------------------------------------------------------===//

Another opportunitiy in this code is that the $0 could be moved to a register:

  movl $0, 4(%rdi)
  movl $0, 8(%rdi)
  movl $0, 12(%rdi)
  movl $0, 0(%rdi)

This would save substantial code size, especially for longer sequences like
this. It would be easy to have a rule telling isel to avoid matching MOV32mi
if the immediate has more than some fixed number of uses. It's more involved
to teach the register allocator how to do late folding to recover from
excessive register pressure.