diff options
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/Sparc/Sparc.cpp | 45 | 
1 files changed, 35 insertions, 10 deletions
| diff --git a/llvm/lib/Target/Sparc/Sparc.cpp b/llvm/lib/Target/Sparc/Sparc.cpp index 74597155a20..1ca04a6abad 100644 --- a/llvm/lib/Target/Sparc/Sparc.cpp +++ b/llvm/lib/Target/Sparc/Sparc.cpp @@ -53,9 +53,9 @@ static cl::opt<bool> DisablePeephole("nopeephole",  // that implements the Sparc backend. (the llvm/CodeGen/Sparc.h interface)  //---------------------------------------------------------------------------- -TargetMachine *allocateSparcTargetMachine() { return new UltraSparc(); } - - +TargetMachine *allocateSparcTargetMachine(unsigned Configuration) { +  return new UltraSparc(); +}  //---------------------------------------------------------------------------  // class UltraSparcFrameInfo  @@ -155,13 +155,12 @@ bool UltraSparc::addPassesToEmitAssembly(PassManager &PM, std::ostream &Out)    // Specialize LLVM code for this target machine and then    // run basic dataflow optimizations on LLVM code. -  if (!DisablePreSelect) -    { -      PM.add(createPreSelectionPass(*this)); -      PM.add(createReassociatePass()); -      PM.add(createLICMPass()); -      PM.add(createGCSEPass()); -    } +  if (!DisablePreSelect) { +    PM.add(createPreSelectionPass(*this)); +    PM.add(createReassociatePass()); +    PM.add(createLICMPass()); +    PM.add(createGCSEPass()); +  }    PM.add(createInstructionSelectionPass(*this)); @@ -194,3 +193,29 @@ bool UltraSparc::addPassesToEmitAssembly(PassManager &PM, std::ostream &Out)    PM.add(getFunctionInfo(Out));     return false;  } + +// addPassesToJITCompile - This method controls the JIT method of code +// generation for the UltraSparc. +// +bool UltraSparc::addPassesToJITCompile(PassManager &PM) { +  // FIXME: implement the switch instruction in the instruction selector. +  PM.add(createLowerSwitchPass()); + +  // Construct and initialize the MachineFunction object for this fn. +  PM.add(createMachineCodeConstructionPass(*this)); + +  //Insert empty stackslots in the stack frame of each function +  //so %fp+offset-8 and %fp+offset-16 are empty slots now! +  PM.add(createStackSlotsPass(*this)); + +  PM.add(createInstructionSelectionPass(*this)); + +  // new pass: convert Value* in MachineOperand to an unsigned register +  // this brings it in line with what the X86 JIT's RegisterAllocator expects +  //PM.add(createAddRegNumToValuesPass()); + +  PM.add(getRegisterAllocator(*this)); +  PM.add(getPrologEpilogInsertionPass()); + +  return false; // success! +} | 

