From 62d24a4b92df6f367b82eb232961c27421d8abfa Mon Sep 17 00:00:00 2001 From: Bob Wilson Date: Mon, 28 Jun 2010 22:23:17 +0000 Subject: [PATCH] Make the ARMCodeEmitter identify Thumb functions via ARMFunctionInfo instead of the Subtarget. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107086 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/ARMCodeEmitter.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/Target/ARM/ARMCodeEmitter.cpp b/lib/Target/ARM/ARMCodeEmitter.cpp index 00237a72ff1..048529b18c4 100644 --- a/lib/Target/ARM/ARMCodeEmitter.cpp +++ b/lib/Target/ARM/ARMCodeEmitter.cpp @@ -55,6 +55,7 @@ namespace { const std::vector *MCPEs; const std::vector *MJTEs; bool IsPIC; + bool IsThumb; void getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequired(); @@ -67,8 +68,8 @@ namespace { : MachineFunctionPass(&ID), JTI(0), II((const ARMInstrInfo *)tm.getInstrInfo()), TD(tm.getTargetData()), TM(tm), - MCE(mce), MCPEs(0), MJTEs(0), - IsPIC(TM.getRelocationModel() == Reloc::PIC_) {} + MCE(mce), MCPEs(0), MJTEs(0), + IsPIC(TM.getRelocationModel() == Reloc::PIC_), IsThumb(false) {} /// getBinaryCodeForInstr - This function, generated by the /// CodeEmitterGenerator using TableGen, produces the binary encoding for @@ -199,6 +200,7 @@ bool ARMCodeEmitter::runOnMachineFunction(MachineFunction &MF) { MJTEs = 0; if (MF.getJumpTableInfo()) MJTEs = &MF.getJumpTableInfo()->getJumpTables(); IsPIC = TM.getRelocationModel() == Reloc::PIC_; + IsThumb = MF.getInfo()->isThumbFunction(); JTI->Initialize(MF, IsPIC); MMI = &getAnalysis(); MCE.setModuleInfo(MMI); @@ -1635,7 +1637,7 @@ void ARMCodeEmitter::emitNEON1RegModImmInstruction(const MachineInstr &MI) { unsigned Imm3 = (Imm >> 4) & 0x7; unsigned Imm4 = Imm & 0xf; Binary |= (I << 24) | (Imm3 << 16) | (Cmode << 8) | (Op << 5) | Imm4; - if (Subtarget->isThumb()) + if (IsThumb) Binary = convertNEONDataProcToThumb(Binary); emitWordLE(Binary); } @@ -1649,7 +1651,7 @@ void ARMCodeEmitter::emitNEON2RegInstruction(const MachineInstr &MI) { if (TID.getOperandConstraint(OpIdx, TOI::TIED_TO) != -1) ++OpIdx; Binary |= encodeNEONRm(MI, OpIdx); - if (Subtarget->isThumb()) + if (IsThumb) Binary = convertNEONDataProcToThumb(Binary); // FIXME: This does not handle VDUPfdf or VDUPfqf. emitWordLE(Binary); @@ -1667,7 +1669,7 @@ void ARMCodeEmitter::emitNEON3RegInstruction(const MachineInstr &MI) { if (TID.getOperandConstraint(OpIdx, TOI::TIED_TO) != -1) ++OpIdx; Binary |= encodeNEONRm(MI, OpIdx); - if (Subtarget->isThumb()) + if (IsThumb) Binary = convertNEONDataProcToThumb(Binary); // FIXME: This does not handle VMOVDneon or VMOVQ. emitWordLE(Binary); -- 2.34.1