Name Date Size #Lines LOC

..--

AsmPrinter/H--28,02118,897

GlobalISel/H--32,85024,569

LiveDebugValues/H--8,2935,049

MIRParser/H--5,8854,999

SelectionDAG/H--113,93982,566

AggressiveAntiDepBreaker.cppH A D19-Jan-202535 KiB968652

AggressiveAntiDepBreaker.hH A D02-Aug-20237 KiB18891

AllocationOrder.cppH A D12-Jul-20242 KiB5433

AllocationOrder.hH A D22-Oct-20204.3 KiB12569

Analysis.cppH A D23-Nov-202432.7 KiB833523

AssignmentTrackingAnalysis.cppH A D17-Jan-2025112.7 KiB2,8541,819

AtomicExpandPass.cppH A D13-Nov-202479.1 KiB2,0311,420

BasicBlockPathCloning.cppH A D04-Jun-20249.8 KiB257161

BasicBlockSections.cppH A D26-Sep-202417.3 KiB408208

BasicBlockSectionsProfileReader.cppH A D17-May-202417.7 KiB451288

BasicTargetTransformInfo.cppH A D28-Jun-20241.5 KiB3513

BranchFolding.cppH A D22-Jan-202578.7 KiB2,0641,364

BranchFolding.hH A D20-Jun-20247.5 KiB205124

BranchRelaxation.cppH A D27-Sep-202428.1 KiB761451

BreakFalseDeps.cppH A D21-May-202310.4 KiB306182

CFGuardLongjmp.cppH A D20-Jul-20243.8 KiB12267

CFIFixup.cppH A D20-Nov-202412.6 KiB241121

CFIInstrInserter.cppH A D11-Nov-202418.7 KiB451330

CMakeLists.txtH A D23-Jan-20256.7 KiB286275

CalcSpillWeights.cppH A D13-Nov-202411.8 KiB345235

CallBrPrepare.cppH A D25-Jan-20249 KiB253164

CallingConvLower.cppH A D19-Jan-202510.8 KiB293218

CodeGen.cppH A D23-Jan-20256.7 KiB146129

CodeGenCommonISel.cppH A D06-Sep-202410.4 KiB295180

CodeGenPrepare.cppH A D27-Jan-2025343.4 KiB8,9235,581

CodeGenTargetMachineImpl.cppH A D14-Nov-202411 KiB

CommandFlags.cppH A D29-Jan-202531.2 KiB777643

ComplexDeinterleavingPass.cppH A D09-Jan-202579.4 KiB2,0751,513

CriticalAntiDepBreaker.cppH A D19-Jan-202527.4 KiB699399

CriticalAntiDepBreaker.hH A D13-Apr-20204.2 KiB11358

DFAPacketizer.cppH A D17-Mar-202410.2 KiB290199

DeadMachineInstructionElim.cppH A D23-Jan-20253.9 KiB170112

DetectDeadLanes.cppH A D17-Apr-202319.3 KiB567431

DwarfEHPrepare.cppH A D13-Nov-202413.7 KiB404303

EHContGuardCatchret.cppH A D20-Jul-20242.5 KiB8446

EarlyIfConversion.cppH A D19-Jan-202546.1 KiB1,240831

EdgeBundles.cppH A D22-Nov-20243.9 KiB10269

ExecutionDomainFix.cppH A D19-Jan-202514.7 KiB471343

ExpandLargeDivRem.cppH A D13-Nov-20245.9 KiB184137

ExpandLargeFpConvert.cppH A D13-Nov-202427.7 KiB709472

ExpandMemCmp.cppH A D03-Jan-202539.9 KiB1,026685

ExpandPostRAPseudos.cppH A D04-Jul-20235.1 KiB162112

ExpandReductions.cppH A D17-Jul-20246.9 KiB193155

ExpandVectorPredication.cppH A D16-Jan-202524.6 KiB919708

FEntryInserter.cppH A D15-Mar-20221.7 KiB5132

FaultMaps.cppH A D17-Jul-20223.8 KiB11578

FinalizeISel.cppH A D04-Jun-20243.5 KiB10267

FixupStatepointCallerSaved.cppH A D19-Jan-202522.3 KiB630434

FuncletLayout.cppH A D13-Nov-20192.2 KiB6339

GCEmptyBasicBlocks.cppH A D13-Nov-20243.5 KiB10165

GCMetadata.cppH A D06-Dec-20244 KiB13192

GCMetadataPrinter.cppH A D19-Jan-2019748 225

GCRootLowering.cppH A D19-Mar-202411.9 KiB346220

GlobalMerge.cppH A D27-Jan-202528.2 KiB728441

GlobalMergeFunctions.cppH A D27-Dec-202422.9 KiB

HardwareLoops.cppH A D13-Nov-202421.9 KiB615450

IfConversion.cppH A D13-Jan-202589.4 KiB2,3601,581

ImplicitNullChecks.cppH A D19-Sep-202429.1 KiB819470

IndirectBrExpandPass.cppH A D28-Jun-202410.8 KiB297191

InitUndef.cppH A D14-Jan-20259.5 KiB278186

InlineSpiller.cppH A D26-Jan-202564.7 KiB1,7141,128

InterferenceCache.cppH A D19-Jan-20258.3 KiB259198

InterferenceCache.hH A D07-Jun-20237.4 KiB244127

InterleavedAccessPass.cppH A D23-Jan-202525 KiB550335

InterleavedLoadCombinePass.cppH A D13-Nov-202442.8 KiB1,377723

IntrinsicLowering.cppH A D27-Nov-202417.7 KiB486410

JMCInstrumenter.cppH A D19-Mar-20249.3 KiB241172

KCFI.cppH A D13-Nov-20243.8 KiB11363

LatencyPriorityQueue.cppH A D29-Nov-20215.4 KiB14885

LazyMachineBlockFrequencyInfo.cppH A D13-Dec-20243.5 KiB10067

LexicalScopes.cppH A D26-Jun-202412.1 KiB348245

LiveDebugVariables.cppH A D06-Dec-202475.5 KiB1,9721,334

LiveInterval.cppH A D24-Sep-202446.5 KiB1,413952

LiveIntervalCalc.cppH A D13-Nov-20247.3 KiB196129

LiveIntervalUnion.cppH A D13-Nov-20236.7 KiB215139

LiveIntervals.cppH A D25-Jan-202568.8 KiB1,7631,238

LivePhysRegs.cppH A D21-Jan-202511 KiB341240

LiveRangeCalc.cppH A D13-Nov-202416 KiB457323

LiveRangeEdit.cppH A D13-Jan-202518.2 KiB509357

LiveRangeShrink.cppH A D09-Nov-20249 KiB248166

LiveRangeUtils.hH A D18-Nov-20212.1 KiB6236

LiveRegMatrix.cppH A D20-Jan-202510.8 KiB249177

LiveRegUnits.cppH A D13-Sep-20225.2 KiB160111

LiveStacks.cppH A D06-Dec-20243.7 KiB8657

LiveVariables.cppH A D21-Jan-202532.2 KiB895602

LocalStackSlotAllocation.cppH A D02-Sep-202417.6 KiB462281

LoopTraversal.cppH A D19-Sep-20212.9 KiB7652

LowLevelTypeUtils.cppH A D13-Dec-20242.6 KiB8961

LowerEmuTLS.cppH A D15-Apr-20246.1 KiB178125

MBFIWrapper.cppH A D06-Oct-20231.6 KiB5125

MIRCanonicalizerPass.cppH A D16-Dec-202412 KiB424299

MIRFSDiscriminator.cppH A D11-Oct-20237.7 KiB205148

MIRNamerPass.cppH A D15-Mar-20222 KiB7640

MIRPrinter.cppH A D13-Jan-202538.2 KiB1,017867

MIRPrintingPass.cppH A D24-Jul-20242.6 KiB8048

MIRSampleProfile.cppH A D08-Jan-202515 KiB410322

MIRVRegNamerUtils.cppH A D26-Sep-20246.5 KiB175128

MIRVRegNamerUtils.hH A D20-Apr-20203.3 KiB9840

MIRYamlMapping.cppH A D30-Apr-20211.6 KiB4426

MLRegAllocEvictAdvisor.cppH A D28-Jan-202550.6 KiB1,166867

MLRegAllocEvictAdvisor.hH A D11-Aug-20244.5 KiB9539

MLRegAllocPriorityAdvisor.cppH A D09-Jul-202412.7 KiB359268

MachineBasicBlock.cppH A D19-Jan-202560.5 KiB1,7801,299

MachineBlockFrequencyInfo.cppH A D12-Jul-202412 KiB290218

MachineBlockPlacement.cppH A D22-Jan-2025155.5 KiB3,7802,207

MachineBranchProbabilityInfo.cppH A D08-Jan-20254.1 KiB11280

MachineCFGPrinter.cppH A D22-Sep-20223 KiB9660

MachineCSE.cppH A D24-Jan-202535.4 KiB954663

MachineCheckDebugify.cppH A D28-Jun-20244.2 KiB12992

MachineCombiner.cppH A D16-Dec-202431.7 KiB755521

MachineConvergenceVerifier.cppH A D13-Nov-20243.1 KiB10175

MachineCopyPropagation.cppH A D20-Jan-202558.7 KiB1,489955

MachineCycleAnalysis.cppH A D20-Aug-20245.1 KiB152102

MachineDebugify.cppH A D16-Apr-20248.5 KiB224155

MachineDomTreeUpdater.cppH A D13-Dec-20242.3 KiB6739

MachineDominanceFrontier.cppH A D13-Dec-20241.9 KiB5536

MachineDominators.cppH A D13-Dec-20244.2 KiB192122

MachineFrameInfo.cppH A D23-Jul-20249.6 KiB254186

MachineFunction.cppH A D27-Jan-202557.4 KiB1,5441,091

MachineFunctionAnalysis.cppH A D26-Jul-20241.8 KiB4826

MachineFunctionPass.cppH A D21-Dec-20247.4 KiB191144

MachineFunctionPrinterPass.cppH A D09-Jul-20242.4 KiB7242

MachineFunctionSplitter.cppH A D23-Nov-20248.8 KiB215134

MachineInstr.cppH A D24-Jan-202593.3 KiB2,6242,002

MachineInstrBundle.cppH A D27-Jun-202411.8 KiB382292

MachineLICM.cppH A D13-Jan-202564.8 KiB1,7341,135

MachineLateInstrsCleanup.cppH A D16-Dec-20248.4 KiB249172

MachineLoopInfo.cppH A D13-Dec-202410.4 KiB283204

MachineLoopUtils.cppH A D23-Jan-20255.1 KiB135107

MachineModuleInfo.cppH A D14-Nov-20247.5 KiB257198

MachineModuleInfoImpls.cppH A D16-Dec-20242.5 KiB6738

MachineModuleSlotTracker.cppH A D24-Jul-20243 KiB8265

MachineOperand.cppH A D26-Jan-202544 KiB1,2751,085

MachineOptimizationRemarkEmitter.cppH A D14-Jul-20244.1 KiB9865

MachineOutliner.cppH A D13-Jan-202558 KiB1,221698

MachinePassManager.cppH A D30-Apr-20246.3 KiB166103

MachinePipeliner.cppH A D22-Jan-2025133.7 KiB3,7802,899

MachinePostDominators.cppH A D25-Jun-20244.3 KiB12183

MachineRegionInfo.cppH A D12-Jun-20244.9 KiB15192

MachineRegisterInfo.cppH A D07-Jan-202522.9 KiB664486

MachineSSAContext.cppH A D24-Jan-20254 KiB9970

MachineSSAUpdater.cppH A D30-Oct-202413.9 KiB384242

MachineScheduler.cppH A D22-Jan-2025168.9 KiB4,5673,246

MachineSink.cppH A D24-Jan-202584 KiB2,1351,388

MachineSizeOpts.cppH A D28-Oct-20242.2 KiB5334

MachineStableHash.cppH A D04-Dec-20249.7 KiB234192

MachineStripDebug.cppH A D29-Oct-20243.7 KiB10977

MachineTraceMetrics.cppH A D02-Jan-202550.4 KiB1,357971

MachineUniformityAnalysis.cppH A D13-Dec-20247.7 KiB247198

MachineVerifier.cppH A D28-Jan-2025147.6 KiB3,8463,025

MacroFusion.cppH A D22-Dec-20238 KiB221141

ModuloSchedule.cppH A D25-Jan-2025108.6 KiB2,8502,044

MultiHazardRecognizer.cppH A D24-Dec-20202.7 KiB9366

NonRelocatableStringpool.cppH A D19-Mar-20241.5 KiB4833

OptimizePHIs.cppH A D13-Nov-20246.9 KiB207134

PHIElimination.cppH A D13-Dec-202433.6 KiB812537

PHIEliminationUtils.cppH A D17-Sep-20202.5 KiB6532

PHIEliminationUtils.hH A D19-Jan-2019972 259

PatchableFunction.cppH A D22-Jan-20242.6 KiB6948

PeepholeOptimizer.cppH A D23-Jan-202580.5 KiB2,1901,231

PostRAHazardRecognizer.cppH A D21-Mar-20223.4 KiB9749

PostRASchedulerList.cppH A D29-Dec-202423.7 KiB696440

PreISelIntrinsicLowering.cppH A D24-Jan-202519.3 KiB423323

ProcessImplicitDefs.cppH A D24-May-20235.3 KiB169119

PrologEpilogInserter.cppH A D27-Jan-202559.9 KiB1,5741,025

PseudoProbeInserter.cppH A D10-Mar-20235.7 KiB15198

PseudoSourceValue.cppH A D28-Jun-20245 KiB154113

RDFGraph.cppH A D19-Nov-202454.6 KiB1,8001,321

RDFLiveness.cppH A D21-Jan-202542.8 KiB1,178767

RDFRegisters.cppH A D14-Aug-202312 KiB424338

README.txtH A D06-Dec-20186.2 KiB200149

ReachingDefAnalysis.cppH A D29-Jan-202526.4 KiB713547

RegAllocBase.cppH A D16-Dec-20247.9 KiB190130

RegAllocBase.hH A D16-Dec-20245.6 KiB14355

RegAllocBasic.cppH A D13-Jan-202512.4 KiB338216

RegAllocEvictionAdvisor.cppH A D16-Nov-202412.2 KiB313209

RegAllocEvictionAdvisor.hH A D12-Jun-20238.5 KiB224112

RegAllocFast.cppH A D21-Jan-202564.5 KiB1,8481,328

RegAllocGreedy.cppH A D19-Jan-2025105.3 KiB2,7821,840

RegAllocGreedy.hH A D04-Dec-202416 KiB456314

RegAllocPBQP.cppH A D13-Jan-202533.9 KiB955663

RegAllocPriorityAdvisor.cppH A D02-Jan-20255.4 KiB11390

RegAllocPriorityAdvisor.hH A D02-Jan-20253.6 KiB9760

RegAllocScore.cppH A D13-Nov-20244.5 KiB12196

RegAllocScore.hH A D24-Jun-20222.9 KiB7443

RegUsageInfoCollector.cppH A D19-Jan-20258.3 KiB219135

RegUsageInfoPropagate.cppH A D15-Nov-20246 KiB155107

RegisterBank.cppH A D03-Nov-20233.4 KiB9860

RegisterBankInfo.cppH A D11-Jan-202530.6 KiB821627

RegisterClassInfo.cppH A D19-Jan-20257.8 KiB235161

RegisterCoalescer.cppH A D29-Jan-2025165.7 KiB4,3032,599

RegisterCoalescer.hH A D28-Jan-20253.9 KiB11537

RegisterPressure.cppH A D22-Jan-202548.7 KiB1,3961,063

RegisterScavenging.cppH A D13-Nov-202419 KiB532379

RegisterUsageInfo.cppH A D15-Nov-20243.9 KiB10068

RemoveLoadsIntoFakeUses.cppH A D28-Jan-20256.9 KiB

RemoveRedundantDebugValues.cppH A D02-Sep-20237.3 KiB228129

RenameIndependentSubregs.cppH A D10-Jul-202415.2 KiB413285

ReplaceWithVeclib.cppH A D19-Dec-202411.5 KiB269181

ResetMachineFunctionPass.cppH A D14-Nov-20243.7 KiB9863

SafeStack.cppH A D13-Nov-202435.7 KiB975682

SafeStackLayout.cppH A D15-Mar-20225.2 KiB153117

SafeStackLayout.hH A D28-Jun-20242.4 KiB8645

SanitizerBinaryMetadata.cppH A D12-Dec-20233.1 KiB8863

ScheduleDAG.cppH A D20-Aug-202421.6 KiB756604

ScheduleDAGInstrs.cppH A D23-Jan-202554.7 KiB1,5481,045

ScheduleDAGPrinter.cppH A D15-Mar-20223 KiB9360

ScoreboardHazardRecognizer.cppH A D08-Aug-20227.9 KiB242164

SelectOptimize.cppH A D28-Jan-202557.7 KiB1,320893

ShadowStackGCLowering.cppH A D23-Jan-202515.7 KiB421270

ShrinkWrap.cppH A D22-Jan-202538 KiB1,003616

SjLjEHPrepare.cppH A D24-Jan-202519.9 KiB526354

SlotIndexes.cppH A D09-Jul-20249.6 KiB278187

SpillPlacement.cppH A D29-Nov-202414 KiB399246

SplitKit.cppH A D14-Jan-202568.4 KiB1,9041,309

SplitKit.hH A D18-Nov-202323.6 KiB567211

StackColoring.cppH A D24-Jan-202550.6 KiB1,353714

StackFrameLayoutAnalysisPass.cppH A D13-Nov-202410.4 KiB255161

StackMapLivenessAnalysis.cppH A D29-Dec-20246.1 KiB171101

StackMaps.cppH A D17-Dec-202425.1 KiB755553

StackProtector.cppH A D16-Oct-202427.6 KiB718482

StackSlotColoring.cppH A D06-Dec-202418 KiB566394

StaticDataSplitter.cppH A D29-Jan-20255.9 KiB

SwiftErrorValueTracking.cppH A D02-Jan-202512 KiB331227

SwitchLoweringUtils.cppH A D18-Sep-202421.8 KiB577407

TailDuplication.cppH A D09-Nov-20244.8 KiB10371

TailDuplicator.cppH A D23-Jan-202540.4 KiB1,090735

TargetFrameLoweringImpl.cppH A D13-Nov-20247.2 KiB169107

TargetInstrInfo.cppH A D13-Jan-202571.1 KiB1,9161,326

TargetLoweringBase.cppH A D24-Jan-202588 KiB2,5351,899

TargetLoweringObjectFileImpl.cppH A D29-Jan-2025105.4 KiB2,7412,042

TargetOptionsImpl.cppH A D17-Oct-20242.5 KiB7441

TargetPassConfig.cppH A D29-Jan-202559.8 KiB1,557984

TargetRegisterInfo.cppH A D19-Jan-202524.9 KiB682502

TargetSchedule.cppH A D13-Nov-202412.8 KiB350253

TargetSubtargetInfo.cppH A D09-Dec-20241.9 KiB6136

TwoAddressInstructionPass.cppH A D26-Jul-202475.2 KiB2,0351,387

TypePromotion.cppH A D24-Jan-202534.4 KiB1,057674

UnreachableBlockElim.cppH A D13-Jan-20257.2 KiB199139

VLIWMachineScheduler.cppH A D12-Dec-202433.9 KiB1,008730

ValueTypes.cppH A D17-Nov-202411.2 KiB306249

VirtRegMap.cppH A D19-Jan-202526.9 KiB648452

WasmEHPrepare.cppH A D24-Jan-202515.4 KiB403225

WinEHPrepare.cppH A D29-Jan-202556.7 KiB1,408983

WindowScheduler.cppH A D05-Aug-202426.9 KiB703494

XRayInstrumentation.cppH A D13-Jan-202510.2 KiB272189

README.txt

1//===---------------------------------------------------------------------===//
2
3Common register allocation / spilling problem:
4
5        mul lr, r4, lr
6        str lr, [sp, #+52]
7        ldr lr, [r1, #+32]
8        sxth r3, r3
9        ldr r4, [sp, #+52]
10        mla r4, r3, lr, r4
11
12can be:
13
14        mul lr, r4, lr
15        mov r4, lr
16        str lr, [sp, #+52]
17        ldr lr, [r1, #+32]
18        sxth r3, r3
19        mla r4, r3, lr, r4
20
21and then "merge" mul and mov:
22
23        mul r4, r4, lr
24        str r4, [sp, #+52]
25        ldr lr, [r1, #+32]
26        sxth r3, r3
27        mla r4, r3, lr, r4
28
29It also increase the likelihood the store may become dead.
30
31//===---------------------------------------------------------------------===//
32
33bb27 ...
34        ...
35        %reg1037 = ADDri %reg1039, 1
36        %reg1038 = ADDrs %reg1032, %reg1039, %noreg, 10
37    Successors according to CFG: 0x8b03bf0 (#5)
38
39bb76 (0x8b03bf0, LLVM BB @0x8b032d0, ID#5):
40    Predecessors according to CFG: 0x8b0c5f0 (#3) 0x8b0a7c0 (#4)
41        %reg1039 = PHI %reg1070, mbb<bb76.outer,0x8b0c5f0>, %reg1037, mbb<bb27,0x8b0a7c0>
42
43Note ADDri is not a two-address instruction. However, its result %reg1037 is an
44operand of the PHI node in bb76 and its operand %reg1039 is the result of the
45PHI node. We should treat it as a two-address code and make sure the ADDri is
46scheduled after any node that reads %reg1039.
47
48//===---------------------------------------------------------------------===//
49
50Use local info (i.e. register scavenger) to assign it a free register to allow
51reuse:
52        ldr r3, [sp, #+4]
53        add r3, r3, #3
54        ldr r2, [sp, #+8]
55        add r2, r2, #2
56        ldr r1, [sp, #+4]  <==
57        add r1, r1, #1
58        ldr r0, [sp, #+4]
59        add r0, r0, #2
60
61//===---------------------------------------------------------------------===//
62
63LLVM aggressively lift CSE out of loop. Sometimes this can be negative side-
64effects:
65
66R1 = X + 4
67R2 = X + 7
68R3 = X + 15
69
70loop:
71load [i + R1]
72...
73load [i + R2]
74...
75load [i + R3]
76
77Suppose there is high register pressure, R1, R2, R3, can be spilled. We need
78to implement proper re-materialization to handle this:
79
80R1 = X + 4
81R2 = X + 7
82R3 = X + 15
83
84loop:
85R1 = X + 4  @ re-materialized
86load [i + R1]
87...
88R2 = X + 7 @ re-materialized
89load [i + R2]
90...
91R3 = X + 15 @ re-materialized
92load [i + R3]
93
94Furthermore, with re-association, we can enable sharing:
95
96R1 = X + 4
97R2 = X + 7
98R3 = X + 15
99
100loop:
101T = i + X
102load [T + 4]
103...
104load [T + 7]
105...
106load [T + 15]
107//===---------------------------------------------------------------------===//
108
109It's not always a good idea to choose rematerialization over spilling. If all
110the load / store instructions would be folded then spilling is cheaper because
111it won't require new live intervals / registers. See 2003-05-31-LongShifts for
112an example.
113
114//===---------------------------------------------------------------------===//
115
116With a copying garbage collector, derived pointers must not be retained across
117collector safe points; the collector could move the objects and invalidate the
118derived pointer. This is bad enough in the first place, but safe points can
119crop up unpredictably. Consider:
120
121        %array = load { i32, [0 x %obj] }** %array_addr
122        %nth_el = getelementptr { i32, [0 x %obj] }* %array, i32 0, i32 %n
123        %old = load %obj** %nth_el
124        %z = div i64 %x, %y
125        store %obj* %new, %obj** %nth_el
126
127If the i64 division is lowered to a libcall, then a safe point will (must)
128appear for the call site. If a collection occurs, %array and %nth_el no longer
129point into the correct object.
130
131The fix for this is to copy address calculations so that dependent pointers
132are never live across safe point boundaries. But the loads cannot be copied
133like this if there was an intervening store, so may be hard to get right.
134
135Only a concurrent mutator can trigger a collection at the libcall safe point.
136So single-threaded programs do not have this requirement, even with a copying
137collector. Still, LLVM optimizations would probably undo a front-end's careful
138work.
139
140//===---------------------------------------------------------------------===//
141
142The ocaml frametable structure supports liveness information. It would be good
143to support it.
144
145//===---------------------------------------------------------------------===//
146
147The FIXME in ComputeCommonTailLength in BranchFolding.cpp needs to be
148revisited. The check is there to work around a misuse of directives in inline
149assembly.
150
151//===---------------------------------------------------------------------===//
152
153It would be good to detect collector/target compatibility instead of silently
154doing the wrong thing.
155
156//===---------------------------------------------------------------------===//
157
158It would be really nice to be able to write patterns in .td files for copies,
159which would eliminate a bunch of explicit predicates on them (e.g. no side
160effects).  Once this is in place, it would be even better to have tblgen
161synthesize the various copy insertion/inspection methods in TargetInstrInfo.
162
163//===---------------------------------------------------------------------===//
164
165Stack coloring improvements:
166
1671. Do proper LiveStacks analysis on all stack objects including those which are
168   not spill slots.
1692. Reorder objects to fill in gaps between objects.
170   e.g. 4, 1, <gap>, 4, 1, 1, 1, <gap>, 4 => 4, 1, 1, 1, 1, 4, 4
171
172//===---------------------------------------------------------------------===//
173
174The scheduler should be able to sort nearby instructions by their address. For
175example, in an expanded memset sequence it's not uncommon to see code like this:
176
177  movl $0, 4(%rdi)
178  movl $0, 8(%rdi)
179  movl $0, 12(%rdi)
180  movl $0, 0(%rdi)
181
182Each of the stores is independent, and the scheduler is currently making an
183arbitrary decision about the order.
184
185//===---------------------------------------------------------------------===//
186
187Another opportunitiy in this code is that the $0 could be moved to a register:
188
189  movl $0, 4(%rdi)
190  movl $0, 8(%rdi)
191  movl $0, 12(%rdi)
192  movl $0, 0(%rdi)
193
194This would save substantial code size, especially for longer sequences like
195this. It would be easy to have a rule telling isel to avoid matching MOV32mi
196if the immediate has more than some fixed number of uses. It's more involved
197to teach the register allocator how to do late folding to recover from
198excessive register pressure.
199
200