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: _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits