[llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.cpp

Evan Cheng evan.cheng at apple.com
Tue Jan 30 00:22:49 PST 2007



Changes in directory llvm/lib/Target/ARM:

ARMInstrInfo.cpp updated: 1.14 -> 1.15
---
Log message:

Copy and paste bug.

---
Diffs of the changes:  (+11 -1)

 ARMInstrInfo.cpp |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletion(-)


Index: llvm/lib/Target/ARM/ARMInstrInfo.cpp
diff -u llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.14 llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.15
--- llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.14	Tue Jan 30 02:03:06 2007
+++ llvm/lib/Target/ARM/ARMInstrInfo.cpp	Tue Jan 30 02:22:33 2007
@@ -444,6 +444,8 @@
     // If this machine instr is an inline asm, measure it.
     if (MI->getOpcode() == ARM::INLINEASM)
       return TAI->getInlineAsmLength(MI->getOperand(0).getSymbolName());
+    if (MI->getOpcode() == ARM::LABEL)
+      return 0;
     assert(0 && "Unknown or unset size field for instr!");
     break;
   case ARMII::Size8Bytes: return 8;          // Arm instruction x 2.
@@ -457,13 +459,21 @@
       return MI->getOperand(2).getImm();
     case ARM::BR_JTr:
     case ARM::BR_JTm:
-    case ARM::BR_JTadd: {
+    case ARM::BR_JTadd:
+    case ARM::tBR_JTr: {
       // These are jumptable branches, i.e. a branch followed by an inlined
       // jumptable. The size is 4 + 4 * number of entries.
       unsigned JTI = MI->getOperand(MI->getNumOperands()-2).getJumpTableIndex();
       MachineJumpTableInfo *MJTI = MF->getJumpTableInfo();
       const std::vector<MachineJumpTableEntry> &JT = MJTI->getJumpTables();
       assert(JTI < JT.size());
+      // Thumb instructions are 2 byte aligned, but JT entries are 4 byte
+      // 4 aligned. The assembler / linker may add 2 byte padding just before
+      // the JT entries. Use + 4 even for tBR_JTr to purposely over-estimate
+      // the size the jumptable.
+      // FIXME: If we know the size of the function is less than (1 << 16) *2
+      // bytes, we can use 16-bit entries instead. Then there won't be an
+      // alignment issue.
       return getNumJTEntries(JT, JTI) * 4 + 4;
     }
     default:






More information about the llvm-commits mailing list