diff options
author | Andrew Lenharth <andrewl@lenharth.org> | 2005-07-22 20:52:16 +0000 |
---|---|---|
committer | Andrew Lenharth <andrewl@lenharth.org> | 2005-07-22 20:52:16 +0000 |
commit | 0934ae02af2e4d295951cea7e4567b065e183451 (patch) | |
tree | 40feeb03f423fe8947cb28fc6026e2df4e3279e0 /lib/Target/Alpha/AlphaTargetMachine.cpp | |
parent | f3f951af3f6b83c7c28c58d5af68ba83f07d1959 (diff) |
Alpha JIT (beta)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22500 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Alpha/AlphaTargetMachine.cpp')
-rw-r--r-- | lib/Target/Alpha/AlphaTargetMachine.cpp | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/lib/Target/Alpha/AlphaTargetMachine.cpp b/lib/Target/Alpha/AlphaTargetMachine.cpp index 2c3be3dbcd..16f8899818 100644 --- a/lib/Target/Alpha/AlphaTargetMachine.cpp +++ b/lib/Target/Alpha/AlphaTargetMachine.cpp @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// #include "Alpha.h" +#include "AlphaJITInfo.h" #include "AlphaTargetMachine.h" #include "llvm/Module.h" #include "llvm/CodeGen/Passes.h" @@ -49,9 +50,18 @@ unsigned AlphaTargetMachine::getModuleMatchQuality(const Module &M) { return 0; } +unsigned AlphaTargetMachine::getJITMatchQuality() { +#if 0 + return 10; +#else + return 0; +#endif +} + AlphaTargetMachine::AlphaTargetMachine( const Module &M, IntrinsicLowering *IL) : TargetMachine("alpha", IL, true), - FrameInfo(TargetFrameInfo::StackGrowsDown, 8, 0) //TODO: check these + FrameInfo(TargetFrameInfo::StackGrowsDown, 8, 0), //TODO: check these + JITInfo(*this) {} /// addPassesToEmitFile - Add passes to the specified pass manager to implement @@ -99,3 +109,47 @@ bool AlphaTargetMachine::addPassesToEmitFile(PassManager &PM, PM.add(createMachineCodeDeleter()); return false; } + +void AlphaJITInfo::addPassesToJITCompile(FunctionPassManager &PM) { + + if (EnableAlphaLSR) { + PM.add(createLoopStrengthReducePass()); + PM.add(createCFGSimplificationPass()); + } + + // FIXME: Implement efficient support for garbage collection intrinsics. + PM.add(createLowerGCPass()); + + // FIXME: Implement the invoke/unwind instructions! + PM.add(createLowerInvokePass()); + + // FIXME: Implement the switch instruction in the instruction selector! + PM.add(createLowerSwitchPass()); + + // Make sure that no unreachable blocks are instruction selected. + PM.add(createUnreachableBlockEliminationPass()); + + PM.add(createAlphaPatternInstructionSelector(TM)); + + if (PrintMachineCode) + PM.add(createMachineFunctionPrinterPass(&std::cerr)); + + PM.add(createRegisterAllocator()); + + if (PrintMachineCode) + PM.add(createMachineFunctionPrinterPass(&std::cerr)); + + PM.add(createPrologEpilogCodeInserter()); + + // Must run branch selection immediately preceding the asm printer + //PM.add(createAlphaBranchSelectionPass()); + +} + +bool AlphaTargetMachine::addPassesToEmitMachineCode(FunctionPassManager &PM, + MachineCodeEmitter &MCE) { + PM.add(createAlphaCodeEmitterPass(MCE)); + // Delete machine code for this function + PM.add(createMachineCodeDeleter()); + return false; +} |