llvm-6502/lib/CodeGen
Anton Korobeynikov 3a84b9baf6 First step of switch lowering refactoring: perform worklist-driven
strategy, emit JT's where possible.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35338 91177308-0d34-0410-b5e6-96231b3b80d8
2007-03-25 15:07:15 +00:00
..
SelectionDAG First step of switch lowering refactoring: perform worklist-driven 2007-03-25 15:07:15 +00:00
AsmPrinter.cpp Small eye-candy: use asciz directive everywhere, where possible. 2007-03-06 19:25:02 +00:00
BranchFolding.cpp maintain LiveIn when splitting blocks (register scavenging needs it) 2007-03-20 21:35:06 +00:00
DwarfWriter.cpp Cleanup: make SetCounter an instance variable 2007-03-07 08:25:02 +00:00
ELFWriter.cpp Generalize TargetData strings, to support more interesting forms of data. 2007-02-14 05:52:17 +00:00
ELFWriter.h Moved from include/llvm/CodeGen to lib/CodeGen. 2007-02-08 01:30:50 +00:00
IntrinsicLowering.cpp Lower eh filter intrinsic. 2007-03-01 20:24:30 +00:00
LiveInterval.cpp
LiveIntervalAnalysis.cpp Fix for PR1257. Bug in live range shortening as a result of copy coalescing 2007-03-22 01:26:05 +00:00
LiveVariables.cpp Track the BB's where each virtual register is used. 2007-03-17 09:29:54 +00:00
LLVMTargetMachine.cpp Now LoopStrengthReduce is a LoopPass. 2007-03-06 21:14:09 +00:00
MachineBasicBlock.cpp Print preds / succs BB numbers. 2007-03-09 08:29:08 +00:00
MachineFunction.cpp Generalize TargetData strings, to support more interesting forms of data. 2007-02-14 05:52:17 +00:00
MachineInstr.cpp Use findRegisterUseOperand to find a kill of particular register. 2007-02-23 01:04:26 +00:00
MachineModuleInfo.cpp Collect eh filter info. 2007-03-01 20:25:32 +00:00
MachinePassRegistry.cpp
MachOWriter.cpp Remove unneeded header file. 2007-03-04 04:41:04 +00:00
MachOWriter.h More Mach-O writer improvements. 2007-02-28 07:40:50 +00:00
Makefile
Passes.cpp
PHIElimination.cpp Keep UsedBlocks info accurate. 2007-03-18 09:02:31 +00:00
PhysRegTracker.h
PrologEpilogInserter.cpp If target decides to create an emergency spill slot, make sure it's closest to SP or frame pointer. 2007-03-06 10:02:38 +00:00
README.txt Potential spiller improvement. 2007-03-20 22:22:38 +00:00
RegAllocLinearScan.cpp First cut trivial re-materialization support. 2007-03-20 08:13:50 +00:00
RegAllocLocal.cpp Use BitVector instead of vector<bool> which can be extremely slow. 2007-02-15 05:59:24 +00:00
RegAllocSimple.cpp Eliminate static ctors from Statistics 2006-12-19 22:41:21 +00:00
RegisterScavenging.cpp maintain LiveIn when splitting blocks (register scavenging needs it) 2007-03-20 21:35:06 +00:00
TwoAddressInstructionPass.cpp Keep UsedBlocks info accurate. 2007-03-18 09:02:31 +00:00
UnreachableBlockElim.cpp
VirtRegMap.cpp First cut trivial re-materialization support. 2007-03-20 08:13:50 +00:00
VirtRegMap.h First cut trivial re-materialization support. 2007-03-20 08:13:50 +00:00

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 lr, [sp, #+52]
	ldr lr, [r1, #+32]
	sxth r3, r3
	mla r4, r3, lr, r4

It also increase the likelyhood the store may become dead.