ARM: rework Thumb1 frame index rewriting
authorTim Northover <tnorthover@apple.com>
Mon, 20 Oct 2014 21:28:41 +0000 (21:28 +0000)
committerTim Northover <tnorthover@apple.com>
Mon, 20 Oct 2014 21:28:41 +0000 (21:28 +0000)
commit23075ccee73e9dc9c6db8c157efa34706c14f42d
treee6956d9326cc4625c8a13bbc5ce77aa8ad3f6152
parentbc89b18c4e90fe39138206050066f9408b606076
ARM: rework Thumb1 frame index rewriting

The previous code had a few problems, motivating the choices here.

1. It could create instructions clobbering CPSR, but the incoming MachineInstr
   didn't reflect this. A potential source of corruption. This is why the patch
   has a new PseudoInst for before lowering.
2. Similarly, there was some code to handle the incoming instruction not being
   ARMCC::AL, but this would have caused massive problems if it was actually
   invoked when a complex offset needing more than one instruction was requested.
3. It wasn't designed to handle unaligned pointers (or offsets). These should
   probably be minimised anyway, but the code needs to deal with them properly
   regardless.
4. It had some rather dubious ad-hoc code to avoid calling
   emitThumbRegPlusImmediate, a function which should be designed to do precisely
   this job.

We seem to cover the common cases correctly now, and hopefully can enhance
emitThumbRegPlusImmediate to handle any extra optimisations we need to add in
future.

llvm-svn: 220236
llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp
llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp
llvm/lib/Target/ARM/ARMISelLowering.cpp
llvm/lib/Target/ARM/ARMInstrThumb.td
llvm/lib/Target/ARM/Thumb1RegisterInfo.cpp
llvm/test/CodeGen/ARM/thumb1-varalloc.ll