diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-08-07 14:21:18 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-08-07 14:21:18 +0000 |
commit | f8b27c41e84cefba4be361b96cc0bd545e1dc64d (patch) | |
tree | 30da06ab749221027f133c39c8d85ade1bdc2807 /llvm/lib/Target/PowerPC | |
parent | 84d35dfe962dcac4833381e5bd52eddcbcb91662 (diff) | |
download | bcm5719-llvm-f8b27c41e84cefba4be361b96cc0bd545e1dc64d.tar.gz bcm5719-llvm-f8b27c41e84cefba4be361b96cc0bd545e1dc64d.zip |
Nuke the old JIT.
I am sure we will be finding bits and pieces of dead code for years to
come, but this is a good start.
Thanks to Lang Hames for making MCJIT a good replacement!
llvm-svn: 215111
Diffstat (limited to 'llvm/lib/Target/PowerPC')
-rw-r--r-- | llvm/lib/Target/PowerPC/CMakeLists.txt | 5 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/Makefile | 2 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPC.h | 3 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCCTRLoops.cpp | 3 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp | 295 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 51 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCJITInfo.cpp | 482 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCJITInfo.h | 46 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCSubtarget.cpp | 15 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCSubtarget.h | 11 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCTargetMachine.cpp | 12 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCTargetMachine.h | 2 |
12 files changed, 24 insertions, 903 deletions
diff --git a/llvm/lib/Target/PowerPC/CMakeLists.txt b/llvm/lib/Target/PowerPC/CMakeLists.txt index ea4de63a244..47a9474ae16 100644 --- a/llvm/lib/Target/PowerPC/CMakeLists.txt +++ b/llvm/lib/Target/PowerPC/CMakeLists.txt @@ -2,9 +2,8 @@ set(LLVM_TARGET_DEFINITIONS PPC.td) tablegen(LLVM PPCGenAsmWriter.inc -gen-asm-writer) tablegen(LLVM PPCGenAsmMatcher.inc -gen-asm-matcher) -tablegen(LLVM PPCGenCodeEmitter.inc -gen-emitter) tablegen(LLVM PPCGenDisassemblerTables.inc -gen-disassembler) -tablegen(LLVM PPCGenMCCodeEmitter.inc -gen-emitter -mc-emitter) +tablegen(LLVM PPCGenMCCodeEmitter.inc -gen-emitter) tablegen(LLVM PPCGenRegisterInfo.inc -gen-register-info) tablegen(LLVM PPCGenInstrInfo.inc -gen-instr-info) tablegen(LLVM PPCGenDAGISel.inc -gen-dag-isel) @@ -16,7 +15,6 @@ add_public_tablegen_target(PowerPCCommonTableGen) add_llvm_target(PowerPCCodeGen PPCAsmPrinter.cpp PPCBranchSelector.cpp - PPCCodeEmitter.cpp PPCCTRLoops.cpp PPCHazardRecognizers.cpp PPCInstrInfo.cpp @@ -24,7 +22,6 @@ add_llvm_target(PowerPCCodeGen PPCISelLowering.cpp PPCFastISel.cpp PPCFrameLowering.cpp - PPCJITInfo.cpp PPCMCInstLower.cpp PPCMachineFunctionInfo.cpp PPCRegisterInfo.cpp diff --git a/llvm/lib/Target/PowerPC/Makefile b/llvm/lib/Target/PowerPC/Makefile index c96674809b0..cf516f4e5ec 100644 --- a/llvm/lib/Target/PowerPC/Makefile +++ b/llvm/lib/Target/PowerPC/Makefile @@ -13,7 +13,7 @@ TARGET = PPC # Make sure that tblgen is run, first thing. BUILT_SOURCES = PPCGenRegisterInfo.inc PPCGenAsmMatcher.inc \ - PPCGenAsmWriter.inc PPCGenCodeEmitter.inc \ + PPCGenAsmWriter.inc \ PPCGenInstrInfo.inc PPCGenDAGISel.inc \ PPCGenSubtargetInfo.inc PPCGenCallingConv.inc \ PPCGenMCCodeEmitter.inc PPCGenFastISel.inc \ diff --git a/llvm/lib/Target/PowerPC/PPC.h b/llvm/lib/Target/PowerPC/PPC.h index ba5fa4f79b4..87be6b5382b 100644 --- a/llvm/lib/Target/PowerPC/PPC.h +++ b/llvm/lib/Target/PowerPC/PPC.h @@ -26,7 +26,6 @@ namespace llvm { class PassRegistry; class FunctionPass; class ImmutablePass; - class JITCodeEmitter; class MachineInstr; class AsmPrinter; class MCInst; @@ -41,8 +40,6 @@ namespace llvm { FunctionPass *createPPCVSXFMAMutatePass(); FunctionPass *createPPCBranchSelectionPass(); FunctionPass *createPPCISelDag(PPCTargetMachine &TM); - FunctionPass *createPPCJITCodeEmitterPass(PPCTargetMachine &TM, - JITCodeEmitter &MCE); void LowerPPCMachineInstrToMCInst(const MachineInstr *MI, MCInst &OutMI, AsmPrinter &AP, bool isDarwin); diff --git a/llvm/lib/Target/PowerPC/PPCCTRLoops.cpp b/llvm/lib/Target/PowerPC/PPCCTRLoops.cpp index 333780f1fcd..5f3b1764173 100644 --- a/llvm/lib/Target/PowerPC/PPCCTRLoops.cpp +++ b/llvm/lib/Target/PowerPC/PPCCTRLoops.cpp @@ -386,8 +386,7 @@ bool PPCCTRLoops::mightUseCTR(const Triple &TT, BasicBlock *BB) { return true; const TargetLowering *TLI = TM->getSubtargetImpl()->getTargetLowering(); - if (TLI->supportJumpTables() && - SI->getNumCases()+1 >= (unsigned) TLI->getMinimumJumpTableEntries()) + if (SI->getNumCases() + 1 >= (unsigned)TLI->getMinimumJumpTableEntries()) return true; } } diff --git a/llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp b/llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp deleted file mode 100644 index cf704fab277..00000000000 --- a/llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp +++ /dev/null @@ -1,295 +0,0 @@ -//===-- PPCCodeEmitter.cpp - JIT Code Emitter for PowerPC -----------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines the PowerPC 32-bit CodeEmitter and associated machinery to -// JIT-compile bitcode to native PowerPC. -// -//===----------------------------------------------------------------------===// - -#include "PPC.h" -#include "PPCRelocations.h" -#include "PPCTargetMachine.h" -#include "llvm/CodeGen/JITCodeEmitter.h" -#include "llvm/CodeGen/MachineFunctionPass.h" -#include "llvm/CodeGen/MachineInstrBuilder.h" -#include "llvm/CodeGen/MachineModuleInfo.h" -#include "llvm/IR/Module.h" -#include "llvm/PassManager.h" -#include "llvm/Support/ErrorHandling.h" -#include "llvm/Support/raw_ostream.h" -#include "llvm/Target/TargetOptions.h" -using namespace llvm; - -namespace { - class PPCCodeEmitter : public MachineFunctionPass { - TargetMachine &TM; - JITCodeEmitter &MCE; - MachineModuleInfo *MMI; - - void getAnalysisUsage(AnalysisUsage &AU) const override { - AU.addRequired<MachineModuleInfo>(); - MachineFunctionPass::getAnalysisUsage(AU); - } - - static char ID; - - /// MovePCtoLROffset - When/if we see a MovePCtoLR instruction, we record - /// its address in the function into this pointer. - void *MovePCtoLROffset; - public: - - PPCCodeEmitter(TargetMachine &tm, JITCodeEmitter &mce) - : MachineFunctionPass(ID), TM(tm), MCE(mce) {} - - /// getBinaryCodeForInstr - This function, generated by the - /// CodeEmitterGenerator using TableGen, produces the binary encoding for - /// machine instructions. - uint64_t getBinaryCodeForInstr(const MachineInstr &MI) const; - - - MachineRelocation GetRelocation(const MachineOperand &MO, - unsigned RelocID) const; - - /// getMachineOpValue - evaluates the MachineOperand of a given MachineInstr - unsigned getMachineOpValue(const MachineInstr &MI, - const MachineOperand &MO) const; - - unsigned get_crbitm_encoding(const MachineInstr &MI, unsigned OpNo) const; - unsigned getDirectBrEncoding(const MachineInstr &MI, unsigned OpNo) const; - unsigned getCondBrEncoding(const MachineInstr &MI, unsigned OpNo) const; - unsigned getAbsDirectBrEncoding(const MachineInstr &MI, - unsigned OpNo) const; - unsigned getAbsCondBrEncoding(const MachineInstr &MI, unsigned OpNo) const; - - unsigned getImm16Encoding(const MachineInstr &MI, unsigned OpNo) const; - unsigned getMemRIEncoding(const MachineInstr &MI, unsigned OpNo) const; - unsigned getMemRIXEncoding(const MachineInstr &MI, unsigned OpNo) const; - unsigned getTLSRegEncoding(const MachineInstr &MI, unsigned OpNo) const; - unsigned getTLSCallEncoding(const MachineInstr &MI, unsigned OpNo) const; - - const char *getPassName() const override { - return "PowerPC Machine Code Emitter"; - } - - /// runOnMachineFunction - emits the given MachineFunction to memory - /// - bool runOnMachineFunction(MachineFunction &MF) override; - - /// emitBasicBlock - emits the given MachineBasicBlock to memory - /// - void emitBasicBlock(MachineBasicBlock &MBB); - }; -} - -char PPCCodeEmitter::ID = 0; - -/// createPPCCodeEmitterPass - Return a pass that emits the collected PPC code -/// to the specified MCE object. -FunctionPass *llvm::createPPCJITCodeEmitterPass(PPCTargetMachine &TM, - JITCodeEmitter &JCE) { - return new PPCCodeEmitter(TM, JCE); -} - -bool PPCCodeEmitter::runOnMachineFunction(MachineFunction &MF) { - assert((MF.getTarget().getRelocationModel() != Reloc::Default || - MF.getTarget().getRelocationModel() != Reloc::Static) && - "JIT relocation model must be set to static or default!"); - - MMI = &getAnalysis<MachineModuleInfo>(); - MCE.setModuleInfo(MMI); - do { - MovePCtoLROffset = nullptr; - MCE.startFunction(MF); - for (MachineFunction::iterator BB = MF.begin(), E = MF.end(); BB != E; ++BB) - emitBasicBlock(*BB); - } while (MCE.finishFunction(MF)); - - return false; -} - -void PPCCodeEmitter::emitBasicBlock(MachineBasicBlock &MBB) { - MCE.StartMachineBasicBlock(&MBB); - - for (MachineBasicBlock::iterator I = MBB.begin(), E = MBB.end(); I != E; ++I){ - const MachineInstr &MI = *I; - MCE.processDebugLoc(MI.getDebugLoc(), true); - switch (MI.getOpcode()) { - default: - MCE.emitWordBE(getBinaryCodeForInstr(MI)); - break; - case TargetOpcode::CFI_INSTRUCTION: - break; - case TargetOpcode::EH_LABEL: - MCE.emitLabel(MI.getOperand(0).getMCSymbol()); - break; - case TargetOpcode::IMPLICIT_DEF: - case TargetOpcode::KILL: - break; // pseudo opcode, no side effects - case PPC::MovePCtoLR: - case PPC::MovePCtoLR8: - assert(TM.getRelocationModel() == Reloc::PIC_); - MovePCtoLROffset = (void*)MCE.getCurrentPCValue(); - MCE.emitWordBE(0x48000005); // bl 1 - break; - } - MCE.processDebugLoc(MI.getDebugLoc(), false); - } -} - -unsigned PPCCodeEmitter::get_crbitm_encoding(const MachineInstr &MI, - unsigned OpNo) const { - const MachineOperand &MO = MI.getOperand(OpNo); - assert((MI.getOpcode() == PPC::MTOCRF || MI.getOpcode() == PPC::MTOCRF8 || - MI.getOpcode() == PPC::MFOCRF || MI.getOpcode() == PPC::MFOCRF8) && - (MO.getReg() >= PPC::CR0 && MO.getReg() <= PPC::CR7)); - return 0x80 >> TM.getSubtargetImpl()->getRegisterInfo()->getEncodingValue( - MO.getReg()); -} - -MachineRelocation PPCCodeEmitter::GetRelocation(const MachineOperand &MO, - unsigned RelocID) const { - // If in PIC mode, we need to encode the negated address of the - // 'movepctolr' into the unrelocated field. After relocation, we'll have - // &gv-&movepctolr-4 in the imm field. Once &movepctolr is added to the imm - // field, we get &gv. This doesn't happen for branch relocations, which are - // always implicitly pc relative. - intptr_t Cst = 0; - if (TM.getRelocationModel() == Reloc::PIC_) { - assert(MovePCtoLROffset && "MovePCtoLR not seen yet?"); - Cst = -(intptr_t)MovePCtoLROffset - 4; - } - - if (MO.isGlobal()) - return MachineRelocation::getGV(MCE.getCurrentPCOffset(), RelocID, - const_cast<GlobalValue *>(MO.getGlobal()), - Cst, isa<Function>(MO.getGlobal())); - if (MO.isSymbol()) - return MachineRelocation::getExtSym(MCE.getCurrentPCOffset(), - RelocID, MO.getSymbolName(), Cst); - if (MO.isCPI()) - return MachineRelocation::getConstPool(MCE.getCurrentPCOffset(), - RelocID, MO.getIndex(), Cst); - - if (MO.isMBB()) - return MachineRelocation::getBB(MCE.getCurrentPCOffset(), - RelocID, MO.getMBB()); - - assert(MO.isJTI()); - return MachineRelocation::getJumpTable(MCE.getCurrentPCOffset(), - RelocID, MO.getIndex(), Cst); -} - -unsigned PPCCodeEmitter::getDirectBrEncoding(const MachineInstr &MI, - unsigned OpNo) const { - const MachineOperand &MO = MI.getOperand(OpNo); - if (MO.isReg() || MO.isImm()) return getMachineOpValue(MI, MO); - - MCE.addRelocation(GetRelocation(MO, PPC::reloc_pcrel_bx)); - return 0; -} - -unsigned PPCCodeEmitter::getCondBrEncoding(const MachineInstr &MI, - unsigned OpNo) const { - const MachineOperand &MO = MI.getOperand(OpNo); - MCE.addRelocation(GetRelocation(MO, PPC::reloc_pcrel_bcx)); - return 0; -} - -unsigned PPCCodeEmitter::getAbsDirectBrEncoding(const MachineInstr &MI, - unsigned OpNo) const { - const MachineOperand &MO = MI.getOperand(OpNo); - if (MO.isReg() || MO.isImm()) return getMachineOpValue(MI, MO); - - llvm_unreachable("Absolute branch relocations unsupported on the old JIT."); -} - -unsigned PPCCodeEmitter::getAbsCondBrEncoding(const MachineInstr &MI, - unsigned OpNo) const { - llvm_unreachable("Absolute branch relocations unsupported on the old JIT."); -} - -unsigned PPCCodeEmitter::getImm16Encoding(const MachineInstr &MI, - unsigned OpNo) const { - const MachineOperand &MO = MI.getOperand(OpNo); - if (MO.isReg() || MO.isImm()) return getMachineOpValue(MI, MO); - - unsigned RelocID; - switch (MO.getTargetFlags() & PPCII::MO_ACCESS_MASK) { - default: llvm_unreachable("Unsupported target operand flags!"); - case PPCII::MO_LO: RelocID = PPC::reloc_absolute_low; break; - case PPCII::MO_HA: RelocID = PPC::reloc_absolute_high; break; - } - - MCE.addRelocation(GetRelocation(MO, RelocID)); - return 0; -} - -unsigned PPCCodeEmitter::getMemRIEncoding(const MachineInstr &MI, - unsigned OpNo) const { - // Encode (imm, reg) as a memri, which has the low 16-bits as the - // displacement and the next 5 bits as the register #. - assert(MI.getOperand(OpNo+1).isReg()); - unsigned RegBits = getMachineOpValue(MI, MI.getOperand(OpNo+1)) << 16; - - const MachineOperand &MO = MI.getOperand(OpNo); - if (MO.isImm()) - return (getMachineOpValue(MI, MO) & 0xFFFF) | RegBits; - - // Add a fixup for the displacement field. - MCE.addRelocation(GetRelocation(MO, PPC::reloc_absolute_low)); - return RegBits; -} - -unsigned PPCCodeEmitter::getMemRIXEncoding(const MachineInstr &MI, - unsigned OpNo) const { - // Encode (imm, reg) as a memrix, which has the low 14-bits as the - // displacement and the next 5 bits as the register #. - assert(MI.getOperand(OpNo+1).isReg()); - unsigned RegBits = getMachineOpValue(MI, MI.getOperand(OpNo+1)) << 14; - - const MachineOperand &MO = MI.getOperand(OpNo); - if (MO.isImm()) - return ((getMachineOpValue(MI, MO) >> 2) & 0x3FFF) | RegBits; - - MCE.addRelocation(GetRelocation(MO, PPC::reloc_absolute_low_ix)); - return RegBits; -} - - -unsigned PPCCodeEmitter::getTLSRegEncoding(const MachineInstr &MI, - unsigned OpNo) const { - llvm_unreachable("TLS not supported on the old JIT."); - return 0; -} - -unsigned PPCCodeEmitter::getTLSCallEncoding(const MachineInstr &MI, - unsigned OpNo) const { - llvm_unreachable("TLS not supported on the old JIT."); - return 0; -} - -unsigned PPCCodeEmitter::getMachineOpValue(const MachineInstr &MI, - const MachineOperand &MO) const { - - if (MO.isReg()) { - // MTOCRF/MFOCRF should go through get_crbitm_encoding for the CR operand. - // The GPR operand should come through here though. - assert((MI.getOpcode() != PPC::MTOCRF && MI.getOpcode() != PPC::MTOCRF8 && - MI.getOpcode() != PPC::MFOCRF && MI.getOpcode() != PPC::MFOCRF8) || - MO.getReg() < PPC::CR0 || MO.getReg() > PPC::CR7); - return TM.getSubtargetImpl()->getRegisterInfo()->getEncodingValue( - MO.getReg()); - } - - assert(MO.isImm() && - "Relocation required in an instruction that we cannot encode!"); - return MO.getImm(); -} - -#include "PPCGenCodeEmitter.inc" diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp index 36e1e1334e5..61003cf1b34 100644 --- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp @@ -684,11 +684,6 @@ PPCTargetLowering::PPCTargetLowering(PPCTargetMachine &TM) if (Subtarget.isDarwin()) setPrefFunctionAlignment(4); - if (isPPC64 && Subtarget.isJITCodeModel()) - // Temporary workaround for the inability of PPC64 JIT to handle jump - // tables. - setSupportJumpTables(false); - setInsertFencesForAtomic(true); if (Subtarget.enableMachineScheduler()) @@ -3564,33 +3559,27 @@ unsigned PrepareCall(SelectionDAG &DAG, SDValue &Callee, SDValue &InFlag, } if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(Callee)) { - // XXX Work around for http://llvm.org/bugs/show_bug.cgi?id=5201 - // Use indirect calls for ALL functions calls in JIT mode, since the - // far-call stubs may be outside relocation limits for a BL instruction. - if (!DAG.getTarget().getSubtarget<PPCSubtarget>().isJITCodeModel()) { - unsigned OpFlags = 0; - if ((DAG.getTarget().getRelocationModel() != Reloc::Static && - (Subtarget.getTargetTriple().isMacOSX() && - Subtarget.getTargetTriple().isMacOSXVersionLT(10, 5)) && - (G->getGlobal()->isDeclaration() || - G->getGlobal()->isWeakForLinker())) || - (Subtarget.isTargetELF() && !isPPC64 && - !G->getGlobal()->hasLocalLinkage() && - DAG.getTarget().getRelocationModel() == Reloc::PIC_)) { - // PC-relative references to external symbols should go through $stub, - // unless we're building with the leopard linker or later, which - // automatically synthesizes these stubs. - OpFlags = PPCII::MO_PLT_OR_STUB; - } - - // If the callee is a GlobalAddress/ExternalSymbol node (quite common, - // every direct call is) turn it into a TargetGlobalAddress / - // TargetExternalSymbol node so that legalize doesn't hack it. - Callee = DAG.getTargetGlobalAddress(G->getGlobal(), dl, - Callee.getValueType(), - 0, OpFlags); - needIndirectCall = false; + unsigned OpFlags = 0; + if ((DAG.getTarget().getRelocationModel() != Reloc::Static && + (Subtarget.getTargetTriple().isMacOSX() && + Subtarget.getTargetTriple().isMacOSXVersionLT(10, 5)) && + (G->getGlobal()->isDeclaration() || + G->getGlobal()->isWeakForLinker())) || + (Subtarget.isTargetELF() && !isPPC64 && + !G->getGlobal()->hasLocalLinkage() && + DAG.getTarget().getRelocationModel() == Reloc::PIC_)) { + // PC-relative references to external symbols should go through $stub, + // unless we're building with the leopard linker or later, which + // automatically synthesizes these stubs. + OpFlags = PPCII::MO_PLT_OR_STUB; } + + // If the callee is a GlobalAddress/ExternalSymbol node (quite common, + // every direct call is) turn it into a TargetGlobalAddress / + // TargetExternalSymbol node so that legalize doesn't hack it. + Callee = DAG.getTargetGlobalAddress(G->getGlobal(), dl, + Callee.getValueType(), 0, OpFlags); + needIndirectCall = false; } if (ExternalSymbolSDNode *S = dyn_cast<ExternalSymbolSDNode>(Callee)) { diff --git a/llvm/lib/Target/PowerPC/PPCJITInfo.cpp b/llvm/lib/Target/PowerPC/PPCJITInfo.cpp deleted file mode 100644 index e5f113a0c03..00000000000 --- a/llvm/lib/Target/PowerPC/PPCJITInfo.cpp +++ /dev/null @@ -1,482 +0,0 @@ -//===-- PPCJITInfo.cpp - Implement the JIT interfaces for the PowerPC -----===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the JIT interfaces for the 32-bit PowerPC target. -// -//===----------------------------------------------------------------------===// - -#include "PPCJITInfo.h" -#include "PPCRelocations.h" -#include "PPCSubtarget.h" -#include "llvm/IR/Function.h" -#include "llvm/Support/Debug.h" -#include "llvm/Support/ErrorHandling.h" -#include "llvm/Support/Memory.h" -#include "llvm/Support/raw_ostream.h" -using namespace llvm; - -#define DEBUG_TYPE "jit" - -static TargetJITInfo::JITCompilerFn JITCompilerFunction; - -PPCJITInfo::PPCJITInfo(PPCSubtarget &STI) - : Subtarget(STI), is64Bit(STI.isPPC64()) { - useGOT = 0; -} - -#define BUILD_ADDIS(RD,RS,IMM16) \ - ((15 << 26) | ((RD) << 21) | ((RS) << 16) | ((IMM16) & 65535)) -#define BUILD_ORI(RD,RS,UIMM16) \ - ((24 << 26) | ((RS) << 21) | ((RD) << 16) | ((UIMM16) & 65535)) -#define BUILD_ORIS(RD,RS,UIMM16) \ - ((25 << 26) | ((RS) << 21) | ((RD) << 16) | ((UIMM16) & 65535)) -#define BUILD_RLDICR(RD,RS,SH,ME) \ - ((30 << 26) | ((RS) << 21) | ((RD) << 16) | (((SH) & 31) << 11) | \ - (((ME) & 63) << 6) | (1 << 2) | ((((SH) >> 5) & 1) << 1)) -#define BUILD_MTSPR(RS,SPR) \ - ((31 << 26) | ((RS) << 21) | ((SPR) << 16) | (467 << 1)) -#define BUILD_BCCTRx(BO,BI,LINK) \ - ((19 << 26) | ((BO) << 21) | ((BI) << 16) | (528 << 1) | ((LINK) & 1)) -#define BUILD_B(TARGET, LINK) \ - ((18 << 26) | (((TARGET) & 0x00FFFFFF) << 2) | ((LINK) & 1)) - -// Pseudo-ops -#define BUILD_LIS(RD,IMM16) BUILD_ADDIS(RD,0,IMM16) -#define BUILD_SLDI(RD,RS,IMM6) BUILD_RLDICR(RD,RS,IMM6,63-IMM6) -#define BUILD_MTCTR(RS) BUILD_MTSPR(RS,9) -#define BUILD_BCTR(LINK) BUILD_BCCTRx(20,0,LINK) - -static void EmitBranchToAt(uint64_t At, uint64_t To, bool isCall, bool is64Bit){ - intptr_t Offset = ((intptr_t)To - (intptr_t)At) >> 2; - unsigned *AtI = (unsigned*)(intptr_t)At; - - if (Offset >= -(1 << 23) && Offset < (1 << 23)) { // In range? - AtI[0] = BUILD_B(Offset, isCall); // b/bl target - } else if (!is64Bit) { - AtI[0] = BUILD_LIS(12, To >> 16); // lis r12, hi16(address) - AtI[1] = BUILD_ORI(12, 12, To); // ori r12, r12, lo16(address) - AtI[2] = BUILD_MTCTR(12); // mtctr r12 - AtI[3] = BUILD_BCTR(isCall); // bctr/bctrl - } else { - AtI[0] = BUILD_LIS(12, To >> 48); // lis r12, hi16(address) - AtI[1] = BUILD_ORI(12, 12, To >> 32); // ori r12, r12, lo16(address) - AtI[2] = BUILD_SLDI(12, 12, 32); // sldi r12, r12, 32 - AtI[3] = BUILD_ORIS(12, 12, To >> 16); // oris r12, r12, hi16(address) - AtI[4] = BUILD_ORI(12, 12, To); // ori r12, r12, lo16(address) - AtI[5] = BUILD_MTCTR(12); // mtctr r12 - AtI[6] = BUILD_BCTR(isCall); // bctr/bctrl - } -} - -extern "C" void PPC32CompilationCallback(); -extern "C" void PPC64CompilationCallback(); - -// The first clause of the preprocessor directive looks wrong, but it is -// necessary when compiling this code on non-PowerPC hosts. -#if (!defined(__ppc__) && !defined(__powerpc__)) || defined(__powerpc64__) || defined(__ppc64__) -void PPC32CompilationCallback() { - llvm_unreachable("This is not a 32bit PowerPC, you can't execute this!"); -} -#elif !defined(__ELF__) -// CompilationCallback stub - We can't use a C function with inline assembly in -// it, because we the prolog/epilog inserted by GCC won't work for us. Instead, -// write our own wrapper, which does things our way, so we have complete control -// over register saving and restoring. -asm( - ".text\n" - ".align 2\n" - ".globl _PPC32CompilationCallback\n" -"_PPC32CompilationCallback:\n" - // Make space for 8 ints r[3-10] and 13 doubles f[1-13] and the - // FIXME: need to save v[0-19] for altivec? - // FIXME: could shrink frame - // Set up a proper stack frame - // FIXME Layout - // PowerPC32 ABI linkage - 24 bytes - // parameters - 32 bytes - // 13 double registers - 104 bytes - // 8 int registers - 32 bytes - "mflr r0\n" - "stw r0, 8(r1)\n" - "stwu r1, -208(r1)\n" - // Save all int arg registers - "stw r10, 204(r1)\n" "stw r9, 200(r1)\n" - "stw r8, 196(r1)\n" "stw r7, 192(r1)\n" - "stw r6, 188(r1)\n" "stw r5, 184(r1)\n" - "stw r4, 180(r1)\n" "stw r3, 176(r1)\n" - // Save all call-clobbered FP regs. - "stfd f13, 168(r1)\n" "stfd f12, 160(r1)\n" - "stfd f11, 152(r1)\n" "stfd f10, 144(r1)\n" - "stfd f9, 136(r1)\n" "stfd f8, 128(r1)\n" - "stfd f7, 120(r1)\n" "stfd f6, 112(r1)\n" - "stfd f5, 104(r1)\n" "stfd f4, 96(r1)\n" - "stfd f3, 88(r1)\n" "stfd f2, 80(r1)\n" - "stfd f1, 72(r1)\n" - // Arguments to Compilation Callback: - // r3 - our lr (address of the call instruction in stub plus 4) - // r4 - stub's lr (address of instruction that called the stub plus 4) - // r5 - is64Bit - always 0. - "mr r3, r0\n" - "lwz r2, 208(r1)\n" // stub's frame - "lwz r4, 8(r2)\n" // stub's lr - "li r5, 0\n" // 0 == 32 bit - "bl _LLVMPPCCompilationCallback\n" - "mtctr r3\n" - // Restore all int arg registers - "lwz r10, 204(r1)\n" "lwz r9, 200(r1)\n" - "lwz r8, 196(r1)\n" "lwz r7, 192(r1)\n" - "lwz r6, 188(r1)\n" "lwz r5, 184(r1)\n" - "lwz r4, 180(r1)\n" "lwz r3, 176(r1)\n" - // Restore all FP arg registers - "lfd f13, 168(r1)\n" "lfd f12, 160(r1)\n" - "lfd f11, 152(r1)\n" "lfd f10, 144(r1)\n" - "lfd f9, 136(r1)\n" "lfd f8, 128(r1)\n" - "lfd f7, 120(r1)\n" "lfd f6, 112(r1)\n" - "lfd f5, 104(r1)\n" "lfd f4, 96(r1)\n" - "lfd f3, 88(r1)\n" "lfd f2, 80(r1)\n" - "lfd f1, 72(r1)\n" - // Pop 3 frames off the stack and branch to target - "lwz r1, 208(r1)\n" - "lwz r2, 8(r1)\n" - "mtlr r2\n" - "bctr\n" - ); - -#else -// ELF PPC 32 support - -// CompilationCallback stub - We can't use a C function with inline assembly in -// it, because we the prolog/epilog inserted by GCC won't work for us. Instead, -// write our own wrapper, which does things our way, so we have complete control -// over register saving and restoring. -asm( - ".text\n" - ".align 2\n" - ".globl PPC32CompilationCallback\n" -"PPC32CompilationCallback:\n" - // Make space for 8 ints r[3-10] and 8 doubles f[1-8] and the - // FIXME: need to save v[0-19] for altivec? - // FIXME: could shrink frame - // Set up a proper stack frame - // FIXME Layout - // 8 double registers - 64 bytes - // 8 int registers - 32 bytes - "mflr 0\n" - "stw 0, 4(1)\n" - "stwu 1, -104(1)\n" - // Save all int arg registers - "stw 10, 100(1)\n" "stw 9, 96(1)\n" - "stw 8, 92(1)\n" "stw 7, 88(1)\n" - "stw 6, 84(1)\n" "stw 5, 80(1)\n" - "stw 4, 76(1)\n" "stw 3, 72(1)\n" - // Save all call-clobbered FP regs. - "stfd 8, 64(1)\n" - "stfd 7, 56(1)\n" "stfd 6, 48(1)\n" - "stfd 5, 40(1)\n" "stfd 4, 32(1)\n" - "stfd 3, 24(1)\n" "stfd 2, 16(1)\n" - "stfd 1, 8(1)\n" - // Arguments to Compilation Callback: - // r3 - our lr (address of the call instruction in stub plus 4) - // r4 - stub's lr (address of instruction that called the stub plus 4) - // r5 - is64Bit - always 0. - "mr 3, 0\n" - "lwz 5, 104(1)\n" // stub's frame - "lwz 4, 4(5)\n" // stub's lr - "li 5, 0\n" // 0 == 32 bit - "bl LLVMPPCCompilationCallback\n" - "mtctr 3\n" - // Restore all int arg registers - "lwz 10, 100(1)\n" "lwz 9, 96(1)\n" - "lwz 8, 92(1)\n" "lwz 7, 88(1)\n" - "lwz 6, 84(1)\n" "lwz 5, 80(1)\n" - "lwz 4, 76(1)\n" "lwz 3, 72(1)\n" - // Restore all FP arg registers - "lfd 8, 64(1)\n" - "lfd 7, 56(1)\n" "lfd 6, 48(1)\n" - "lfd 5, 40(1)\n" "lfd 4, 32(1)\n" - "lfd 3, 24(1)\n" "lfd 2, 16(1)\n" - "lfd 1, 8(1)\n" - // Pop 3 frames off the stack and branch to target - "lwz 1, 104(1)\n" - "lwz 0, 4(1)\n" - "mtlr 0\n" - "bctr\n" - ); -#endif - -#if !defined(__powerpc64__) && !defined(__ppc64__) -void PPC64CompilationCallback() { - llvm_unreachable("This is not a 64bit PowerPC, you can't execute this!"); -} -#else -# ifdef __ELF__ -asm( - ".text\n" - ".align 2\n" - ".globl PPC64CompilationCallback\n" -#if _CALL_ELF == 2 - ".type PPC64CompilationCallback,@function\n" -"PPC64CompilationCallback:\n" -#else - ".section \".opd\",\"aw\",@progbits\n" - ".align 3\n" -"PPC64CompilationCallback:\n" - ".quad .L.PPC64CompilationCallback,.TOC.@tocbase,0\n" - ".size PPC64CompilationCallback,24\n" - ".previous\n" - ".align 4\n" - ".type PPC64CompilationCallback,@function\n" -".L.PPC64CompilationCallback:\n" -#endif -# else -asm( - ".text\n" - ".align 2\n" - ".globl _PPC64CompilationCallback\n" -"_PPC64CompilationCallback:\n" -# endif - // Make space for 8 ints r[3-10] and 13 doubles f[1-13] and the - // FIXME: need to save v[0-19] for altivec? - // Set up a proper stack frame - // Layout - // PowerPC64 ABI linkage - 48 bytes - // parameters - 64 bytes - // 13 double registers - 104 bytes - // 8 int registers - 64 bytes - "mflr 0\n" - "std 0, 16(1)\n" - "stdu 1, -280(1)\n" - // Save all int arg registers - "std 10, 272(1)\n" "std 9, 264(1)\n" - "std 8, 256(1)\n" "std 7, 248(1)\n" - "std 6, 240(1)\n" "std 5, 232(1)\n" - "std 4, 224(1)\n" "std 3, 216(1)\n" - // Save all call-clobbered FP regs. - "stfd 13, 208(1)\n" "stfd 12, 200(1)\n" - "stfd 11, 192(1)\n" "stfd 10, 184(1)\n" - "stfd 9, 176(1)\n" "stfd 8, 168(1)\n" - "stfd 7, 160(1)\n" "stfd 6, 152(1)\n" - "stfd 5, 144(1)\n" "stfd 4, 136(1)\n" - "stfd 3, 128(1)\n" "stfd 2, 120(1)\n" - "stfd 1, 112(1)\n" - // Arguments to Compilation Callback: - // r3 - our lr (address of the call instruction in stub plus 4) - // r4 - stub's lr (address of instruction that called the stub plus 4) - // r5 - is64Bit - always 1. - "mr 3, 0\n" // return address (still in r0) - "ld 5, 280(1)\n" // stub's frame - "ld 4, 16(5)\n" // stub's lr - "li 5, 1\n" // 1 == 64 bit -# ifdef __ELF__ - "bl LLVMPPCCompilationCallback\n" - "nop\n" -# else - "bl _LLVMPPCCompilationCallback\n" -# endif - "mtctr 3\n" - // Restore all int arg registers - "ld 10, 272(1)\n" "ld 9, 264(1)\n" - "ld 8, 256(1)\n" "ld 7, 248(1)\n" - "ld 6, 240(1)\n" "ld 5, 232(1)\n" - "ld 4, 224(1)\n" "ld 3, 216(1)\n" - // Restore all FP arg registers - "lfd 13, 208(1)\n" "lfd 12, 200(1)\n" - "lfd 11, 192(1)\n" "lfd 10, 184(1)\n" - "lfd 9, 176(1)\n" "lfd 8, 168(1)\n" - "lfd 7, 160(1)\n" "lfd 6, 152(1)\n" - "lfd 5, 144(1)\n" "lfd 4, 136(1)\n" - "lfd 3, 128(1)\n" "lfd 2, 120(1)\n" - "lfd 1, 112(1)\n" - // Pop 3 frames off the stack and branch to target - "ld 1, 280(1)\n" - "ld 0, 16(1)\n" - "mtlr 0\n" - // XXX: any special TOC handling in the ELF case for JIT? - "bctr\n" - ); -#endif - -extern "C" { -LLVM_LIBRARY_VISIBILITY void * -LLVMPPCCompilationCallback(unsigned *StubCallAddrPlus4, - unsigned *OrigCallAddrPlus4, - bool is64Bit) { - // Adjust the pointer to the address of the call instruction in the stub - // emitted by emitFunctionStub, rather than the instruction after it. - unsigned *StubCallAddr = StubCallAddrPlus4 - 1; - unsigned *OrigCallAddr = OrigCallAddrPlus4 - 1; - - void *Target = JITCompilerFunction(StubCallAddr); - - // Check to see if *OrigCallAddr is a 'bl' instruction, and if we can rewrite - // it to branch directly to the destination. If so, rewrite it so it does not - // need to go through the stub anymore. - unsigned OrigCallInst = *OrigCallAddr; - if ((OrigCallInst >> 26) == 18) { // Direct call. - intptr_t Offset = ((intptr_t)Target - (intptr_t)OrigCallAddr) >> 2; - - if (Offset >= -(1 << 23) && Offset < (1 << 23)) { // In range? - // Clear the original target out. - OrigCallInst &= (63 << 26) | 3; - // Fill in the new target. - OrigCallInst |= (Offset & ((1 << 24)-1)) << 2; - // Replace the call. - *OrigCallAddr = OrigCallInst; - } - } - - // Assert that we are coming from a stub that was created with our - // emitFunctionStub. - if ((*StubCallAddr >> 26) == 18) - StubCallAddr -= 3; - else { - assert((*StubCallAddr >> 26) == 19 && "Call in stub is not indirect!"); - StubCallAddr -= is64Bit ? 9 : 6; - } - - // Rewrite the stub with an unconditional branch to the target, for any users - // who took the address of the stub. - EmitBranchToAt((intptr_t)StubCallAddr, (intptr_t)Target, false, is64Bit); - sys::Memory::InvalidateInstructionCache(StubCallAddr, 7*4); - - // Put the address of the target function to call and the address to return to - // after calling the target function in a place that is easy to get on the - // stack after we restore all regs. - return Target; -} -} - - - -TargetJITInfo::LazyResolverFn -PPCJITInfo::getLazyResolverFunction(JITCompilerFn Fn) { - JITCompilerFunction = Fn; - return is64Bit ? PPC64CompilationCallback : PPC32CompilationCallback; -} - -TargetJITInfo::StubLayout PPCJITInfo::getStubLayout() { - // The stub contains up to 10 4-byte instructions, aligned at 4 bytes: 3 - // instructions to save the caller's address if this is a lazy-compilation - // stub, plus a 1-, 4-, or 7-instruction sequence to load an arbitrary address - // into a register and jump through it. - StubLayout Result = {10*4, 4}; - return Result; -} - -#if (defined(__POWERPC__) || defined (__ppc__) || defined(_POWER)) && \ -defined(__APPLE__) -extern "C" void sys_icache_invalidate(const void *Addr, size_t len); -#endif - -void *PPCJITInfo::emitFunctionStub(const Function* F, void *Fn, - JITCodeEmitter &JCE) { - // If this is just a call to an external function, emit a branch instead of a - // call. The code is the same except for one bit of the last instruction. - if (Fn != (void*)(intptr_t)PPC32CompilationCallback && - Fn != (void*)(intptr_t)PPC64CompilationCallback) { - void *Addr = (void*)JCE.getCurrentPCValue(); - JCE.emitWordBE(0); - JCE.emitWordBE(0); - JCE.emitWordBE(0); - JCE.emitWordBE(0); - JCE.emitWordBE(0); - JCE.emitWordBE(0); - JCE.emitWordBE(0); - EmitBranchToAt((intptr_t)Addr, (intptr_t)Fn, false, is64Bit); - sys::Memory::InvalidateInstructionCache(Addr, 7*4); - return Addr; - } - - void *Addr = (void*)JCE.getCurrentPCValue(); - if (is64Bit) { - JCE.emitWordBE(0xf821ffb1); // stdu r1,-80(r1) - JCE.emitWordBE(0x7d6802a6); // mflr r11 - JCE.emitWordBE(0xf9610060); // std r11, 96(r1) - } else if (Subtarget.isDarwinABI()){ - JCE.emitWordBE(0x9421ffe0); // stwu r1,-32(r1) - JCE.emitWordBE(0x7d6802a6); // mflr r11 - JCE.emitWordBE(0x91610028); // stw r11, 40(r1) - } else { - JCE.emitWordBE(0x9421ffe0); // stwu r1,-32(r1) - JCE.emitWordBE(0x7d6802a6); // mflr r11 - JCE.emitWordBE(0x91610024); // stw r11, 36(r1) - } - intptr_t BranchAddr = (intptr_t)JCE.getCurrentPCValue(); - JCE.emitWordBE(0); - JCE.emitWordBE(0); - JCE.emitWordBE(0); - JCE.emitWordBE(0); - JCE.emitWordBE(0); - JCE.emitWordBE(0); - JCE.emitWordBE(0); - EmitBranchToAt(BranchAddr, (intptr_t)Fn, true, is64Bit); - sys::Memory::InvalidateInstructionCache(Addr, 10*4); - return Addr; -} - - -void PPCJITInfo::relocate(void *Function, MachineRelocation *MR, - unsigned NumRelocs, unsigned char* GOTBase) { - for (unsigned i = 0; i != NumRelocs; ++i, ++MR) { - unsigned *RelocPos = (unsigned*)Function + MR->getMachineCodeOffset()/4; - intptr_t ResultPtr = (intptr_t)MR->getResultPointer(); - switch ((PPC::RelocationType)MR->getRelocationType()) { - default: llvm_unreachable("Unknown relocation type!"); - case PPC::reloc_pcrel_bx: - // PC-relative relocation for b and bl instructions. - ResultPtr = (ResultPtr-(intptr_t)RelocPos) >> 2; - assert(ResultPtr >= -(1 << 23) && ResultPtr < (1 << 23) && - "Relocation out of range!"); - *RelocPos |= (ResultPtr & ((1 << 24)-1)) << 2; - break; - case PPC::reloc_pcrel_bcx: - // PC-relative relocation for BLT,BLE,BEQ,BGE,BGT,BNE, or other - // bcx instructions. - ResultPtr = (ResultPtr-(intptr_t)RelocPos) >> 2; - assert(ResultPtr >= -(1 << 13) && ResultPtr < (1 << 13) && - "Relocation out of range!"); - *RelocPos |= (ResultPtr & ((1 << 14)-1)) << 2; - break; - case PPC::reloc_absolute_high: // high bits of ref -> low 16 of instr - case PPC::reloc_absolute_low: { // low bits of ref -> low 16 of instr - ResultPtr += MR->getConstantVal(); - - // If this is a high-part access, get the high-part. - if (MR->getRelocationType() == PPC::reloc_absolute_high) { - // If the low part will have a carry (really a borrow) from the low - // 16-bits into the high 16, add a bit to borrow from. - if (((int)ResultPtr << 16) < 0) - ResultPtr += 1 << 16; - ResultPtr >>= 16; - } - - // Do the addition then mask, so the addition does not overflow the 16-bit - // immediate section of the instruction. - unsigned LowBits = (*RelocPos + ResultPtr) & 65535; - unsigned HighBits = *RelocPos & ~65535; - *RelocPos = LowBits | HighBits; // Slam into low 16-bits - break; - } - case PPC::reloc_absolute_low_ix: { // low bits of ref -> low 14 of instr - ResultPtr += MR->getConstantVal(); - // Do the addition then mask, so the addition does not overflow the 16-bit - // immediate section of the instruction. - unsigned LowBits = (*RelocPos + ResultPtr) & 0xFFFC; - unsigned HighBits = *RelocPos & 0xFFFF0003; - *RelocPos = LowBits | HighBits; // Slam into low 14-bits. - break; - } - } - } -} - -void PPCJITInfo::replaceMachineCodeForFunction(void *Old, void *New) { - EmitBranchToAt((intptr_t)Old, (intptr_t)New, false, is64Bit); - sys::Memory::InvalidateInstructionCache(Old, 7*4); -} diff --git a/llvm/lib/Target/PowerPC/PPCJITInfo.h b/llvm/lib/Target/PowerPC/PPCJITInfo.h deleted file mode 100644 index b6b37ffb852..00000000000 --- a/llvm/lib/Target/PowerPC/PPCJITInfo.h +++ /dev/null @@ -1,46 +0,0 @@ -//===-- PPCJITInfo.h - PowerPC impl. of the JIT interface -------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file contains the PowerPC implementation of the TargetJITInfo class. -// -//===----------------------------------------------------------------------===// - -#ifndef POWERPC_JITINFO_H -#define POWERPC_JITINFO_H - -#include "llvm/CodeGen/JITCodeEmitter.h" -#include "llvm/Target/TargetJITInfo.h" - -namespace llvm { -class PPCSubtarget; -class PPCJITInfo : public TargetJITInfo { -protected: - PPCSubtarget &Subtarget; - bool is64Bit; - -public: - PPCJITInfo(PPCSubtarget &STI); - - StubLayout getStubLayout() override; - void *emitFunctionStub(const Function *F, void *Fn, - JITCodeEmitter &JCE) override; - LazyResolverFn getLazyResolverFunction(JITCompilerFn) override; - void relocate(void *Function, MachineRelocation *MR, unsigned NumRelocs, - unsigned char *GOTBase) override; - - /// replaceMachineCodeForFunction - Make it so that calling the function - /// whose machine code is at OLD turns into a call to NEW, perhaps by - /// overwriting OLD with a branch to NEW. This is used for self-modifying - /// code. - /// - void replaceMachineCodeForFunction(void *Old, void *New) override; -}; -} - -#endif diff --git a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp index 85b77354de3..fd7e0c761a2 100644 --- a/llvm/lib/Target/PowerPC/PPCSubtarget.cpp +++ b/llvm/lib/Target/PowerPC/PPCSubtarget.cpp @@ -80,21 +80,9 @@ PPCSubtarget::PPCSubtarget(const std::string &TT, const std::string &CPU, : PPCGenSubtargetInfo(TT, CPU, FS), IsPPC64(is64Bit), TargetTriple(TT), OptLevel(OptLevel), TargetABI(PPC_ABI_UNKNOWN), FrameLowering(initializeSubtargetDependencies(CPU, FS)), - DL(getDataLayoutString(*this)), InstrInfo(*this), JITInfo(*this), + DL(getDataLayoutString(*this)), InstrInfo(*this), TLInfo(TM), TSInfo(&DL) {} -/// SetJITMode - This is called to inform the subtarget info that we are -/// producing code for the JIT. -void PPCSubtarget::SetJITMode() { - // JIT mode doesn't want lazy resolver stubs, it knows exactly where - // everything is. This matters for PPC64, which codegens in PIC mode without - // stubs. - HasLazyResolverStubs = false; - - // Calls to external functions need to use indirect calls - IsJITCodeModel = true; -} - void PPCSubtarget::resetSubtargetFeatures(const MachineFunction *MF) { AttributeSet FnAttrs = MF->getFunction()->getAttributes(); Attribute CPUAttr = FnAttrs.getAttribute(AttributeSet::FunctionIndex, @@ -143,7 +131,6 @@ void PPCSubtarget::initializeEnvironment() { DeprecatedMFTB = false; DeprecatedDST = false; HasLazyResolverStubs = false; - IsJITCodeModel = false; } void PPCSubtarget::resetSubtargetFeatures(StringRef CPU, StringRef FS) { diff --git a/llvm/lib/Target/PowerPC/PPCSubtarget.h b/llvm/lib/Target/PowerPC/PPCSubtarget.h index 374962de427..f74a2a76d41 100644 --- a/llvm/lib/Target/PowerPC/PPCSubtarget.h +++ b/llvm/lib/Target/PowerPC/PPCSubtarget.h @@ -17,7 +17,6 @@ #include "PPCFrameLowering.h" #include "PPCInstrInfo.h" #include "PPCISelLowering.h" -#include "PPCJITInfo.h" #include "PPCSelectionDAGInfo.h" #include "llvm/ADT/Triple.h" #include "llvm/IR/DataLayout.h" @@ -104,7 +103,6 @@ protected: bool DeprecatedMFTB; bool DeprecatedDST; bool HasLazyResolverStubs; - bool IsJITCodeModel; bool IsLittleEndian; /// TargetTriple - What processor and OS we're targeting. @@ -122,7 +120,6 @@ protected: PPCFrameLowering FrameLowering; const DataLayout DL; PPCInstrInfo InstrInfo; - PPCJITInfo JITInfo; PPCTargetLowering TLInfo; PPCSelectionDAGInfo TSInfo; @@ -138,10 +135,6 @@ public: /// subtarget options. Definition of function is auto generated by tblgen. void ParseSubtargetFeatures(StringRef CPU, StringRef FS); - /// SetJITMode - This is called to inform the subtarget info that we are - /// producing code for the JIT. - void SetJITMode(); - /// getStackAlignment - Returns the minimum alignment known to hold of the /// stack frame on entry to the function and which must be maintained by every /// function for this subtarget. @@ -162,7 +155,6 @@ public: } const DataLayout *getDataLayout() const override { return &DL; } const PPCInstrInfo *getInstrInfo() const override { return &InstrInfo; } - PPCJITInfo *getJITInfo() override { return &JITInfo; } const PPCTargetLowering *getTargetLowering() const override { return &TLInfo; } @@ -207,9 +199,6 @@ public: bool hasLazyResolverStub(const GlobalValue *GV, const TargetMachine &TM) const; - // isJITCodeModel - True if we're generating code for the JIT - bool isJITCodeModel() const { return IsJITCodeModel; } - // isLittleEndian - True if generating little-endian code bool isLittleEndian() const { return IsLittleEndian; } diff --git a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp index 9563b9045c3..e7f961c4324 100644 --- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp +++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp @@ -148,18 +148,6 @@ bool PPCPassConfig::addPreEmitPass() { return false; } -bool PPCTargetMachine::addCodeEmitter(PassManagerBase &PM, - JITCodeEmitter &JCE) { - // Inform the subtarget that we are in JIT mode. FIXME: does this break macho - // writing? - Subtarget.SetJITMode(); - - // Machine code emitter pass for PowerPC. - PM.add(createPPCJITCodeEmitterPass(*this, JCE)); - - return false; -} - void PPCTargetMachine::addAnalysisPasses(PassManagerBase &PM) { // Add first the target-independent BasicTTI pass, then our PPC pass. This // allows the PPC pass to delegate to the target independent layer when diff --git a/llvm/lib/Target/PowerPC/PPCTargetMachine.h b/llvm/lib/Target/PowerPC/PPCTargetMachine.h index 9bda22a354d..b8078bdb5b6 100644 --- a/llvm/lib/Target/PowerPC/PPCTargetMachine.h +++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.h @@ -36,8 +36,6 @@ public: // Pass Pipeline Configuration TargetPassConfig *createPassConfig(PassManagerBase &PM) override; - bool addCodeEmitter(PassManagerBase &PM, - JITCodeEmitter &JCE) override; /// \brief Register PPC analysis passes with a pass manager. void addAnalysisPasses(PassManagerBase &PM) override; |