aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/ARM/Thumb1InstrInfo.cpp
diff options
context:
space:
mode:
authorDavid Goodwin <david_goodwin@apple.com>2009-07-08 16:09:28 +0000
committerDavid Goodwin <david_goodwin@apple.com>2009-07-08 16:09:28 +0000
commit334c26473bba3ad8b88341bb0d25d0ac2008bb8d (patch)
tree04d6f19211a1608488c595de5d573f70b9a6388e /lib/Target/ARM/Thumb1InstrInfo.cpp
parent8c899ee031481dbece5f111379a274c848cb5902 (diff)
Checkpoint Thumb2 Instr info work. Generalized base code so that it can be shared between ARM and Thumb2. Not yet activated because register information must be generalized first.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75010 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/Thumb1InstrInfo.cpp')
-rw-r--r--lib/Target/ARM/Thumb1InstrInfo.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/Target/ARM/Thumb1InstrInfo.cpp b/lib/Target/ARM/Thumb1InstrInfo.cpp
index e13a8117bf..6cdc71838c 100644
--- a/lib/Target/ARM/Thumb1InstrInfo.cpp
+++ b/lib/Target/ARM/Thumb1InstrInfo.cpp
@@ -26,6 +26,61 @@ Thumb1InstrInfo::Thumb1InstrInfo(const ARMSubtarget &STI)
: ARMBaseInstrInfo(STI), RI(*this, STI) {
}
+unsigned Thumb1InstrInfo::
+getUnindexedOpcode(unsigned Opc) const {
+ return 0;
+}
+
+unsigned Thumb1InstrInfo::
+getOpcode(ARMII::Op Op) const {
+ switch (Op) {
+ case ARMII::ADDri: return ARM::tADDi8;
+ case ARMII::ADDrs: return 0;
+ case ARMII::ADDrr: return ARM::tADDrr;
+ case ARMII::B: return ARM::tB;
+ case ARMII::Bcc: return ARM::tBcc;
+ case ARMII::BR_JTr: return ARM::tBR_JTr;
+ case ARMII::BR_JTm: return 0;
+ case ARMII::BR_JTadd: return 0;
+ case ARMII::FCPYS: return 0;
+ case ARMII::FCPYD: return 0;
+ case ARMII::FLDD: return 0;
+ case ARMII::FLDS: return 0;
+ case ARMII::FSTD: return 0;
+ case ARMII::FSTS: return 0;
+ case ARMII::LDR: return ARM::tLDR;
+ case ARMII::MOVr: return ARM::tMOVr;
+ case ARMII::STR: return ARM::tSTR;
+ case ARMII::SUBri: return ARM::tSUBi8;
+ case ARMII::SUBrs: return 0;
+ case ARMII::SUBrr: return ARM::tSUBrr;
+ case ARMII::VMOVD: return 0;
+ case ARMII::VMOVQ: return 0;
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+bool
+Thumb1InstrInfo::BlockHasNoFallThrough(const MachineBasicBlock &MBB) const {
+ if (MBB.empty()) return false;
+
+ switch (MBB.back().getOpcode()) {
+ case ARM::tBX_RET:
+ case ARM::tBX_RET_vararg:
+ case ARM::tPOP_RET:
+ case ARM::tB:
+ case ARM::tBR_JTr:
+ return true;
+ default:
+ break;
+ }
+
+ return false;
+}
+
bool Thumb1InstrInfo::isMoveInstr(const MachineInstr &MI,
unsigned &SrcReg, unsigned &DstReg,
unsigned& SrcSubIdx, unsigned& DstSubIdx) const {