- Add pseudo instructions tLDRpci_pic and t2LDRpci_pic which does a pc-relative
authorEvan Cheng <evan.cheng@apple.com>
Fri, 6 Nov 2009 23:52:48 +0000 (23:52 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Fri, 6 Nov 2009 23:52:48 +0000 (23:52 +0000)
commitb9803a8fa65f043c96612fa9c5aeeee12739db2b
tree355e48e66722750d42e12b549cf6134ff2c13257
parentfc2cba8362b603b376ea9a27b257579efaff14ac
- Add pseudo instructions tLDRpci_pic and t2LDRpci_pic which does a pc-relative
  load of a GV from constantpool and then add pc. It allows the code sequence to
  be rematerializable so it would be hoisted by machine licm.
- Add a late pass to break these pseudo instructions into a number of real
  instructions. Also move the code in Thumb2 IT pass that breaks up t2MOVi32imm
  to this pass. This is done before post regalloc scheduling to allow the
  scheduler to proper schedule these instructions. It also allow them to be
  if-converted and shrunk by later passes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86304 91177308-0d34-0410-b5e6-96231b3b80d8
15 files changed:
lib/Target/ARM/ARM.h
lib/Target/ARM/ARMBaseInstrInfo.h
lib/Target/ARM/ARMExpandPseudoInsts.cpp [new file with mode: 0644]
lib/Target/ARM/ARMInstrInfo.cpp
lib/Target/ARM/ARMInstrInfo.h
lib/Target/ARM/ARMInstrThumb.td
lib/Target/ARM/ARMInstrThumb2.td
lib/Target/ARM/ARMTargetMachine.cpp
lib/Target/ARM/Thumb1InstrInfo.cpp
lib/Target/ARM/Thumb1InstrInfo.h
lib/Target/ARM/Thumb2ITBlockPass.cpp
lib/Target/ARM/Thumb2InstrInfo.cpp
lib/Target/ARM/Thumb2InstrInfo.h
test/CodeGen/Thumb2/2009-09-28-ITBlockBug.ll
test/CodeGen/Thumb2/machine-licm.ll