mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-15 07:39:31 +00:00
addPassesToJITCompile now takes a FunctionPassManager, to support
function-at-a-time compilation and emission of code. Separate addPassesToEmitAssembly from addPassesToJITCompile, because the latter requires you to use FunctionPasses, and the former might diverge anyway. llvm-svn: 7817
This commit is contained in:
parent
feb6f95e87
commit
ccafb6e504
@ -48,7 +48,44 @@ X86TargetMachine::X86TargetMachine(unsigned Config)
|
||||
// does to emit statically compiled machine code.
|
||||
bool X86TargetMachine::addPassesToEmitAssembly(PassManager &PM,
|
||||
std::ostream &Out) {
|
||||
addPassesToJITCompile(PM);
|
||||
// FIXME: Implement the switch instruction in the instruction selector!
|
||||
PM.add(createLowerSwitchPass());
|
||||
|
||||
if (NoPatternISel)
|
||||
PM.add(createX86SimpleInstructionSelector(*this));
|
||||
else
|
||||
PM.add(createX86PatternInstructionSelector(*this));
|
||||
|
||||
// TODO: optional optimizations go here
|
||||
|
||||
// FIXME: Add SSA based peephole optimizer here.
|
||||
|
||||
// Print the instruction selected machine code...
|
||||
if (PrintCode)
|
||||
PM.add(createMachineFunctionPrinterPass());
|
||||
|
||||
// Perform register allocation to convert to a concrete x86 representation
|
||||
if (NoLocalRA)
|
||||
PM.add(createSimpleRegisterAllocator());
|
||||
else
|
||||
PM.add(createLocalRegisterAllocator());
|
||||
|
||||
if (PrintCode)
|
||||
PM.add(createMachineFunctionPrinterPass());
|
||||
|
||||
PM.add(createX86FloatingPointStackifierPass());
|
||||
|
||||
if (PrintCode)
|
||||
PM.add(createMachineFunctionPrinterPass());
|
||||
|
||||
// Insert prolog/epilog code. Eliminate abstract frame index references...
|
||||
PM.add(createPrologEpilogCodeInserter());
|
||||
|
||||
PM.add(createX86PeepholeOptimizerPass());
|
||||
|
||||
if (PrintCode) // Print the register-allocated code
|
||||
PM.add(createX86CodePrinterPass(std::cerr, *this));
|
||||
|
||||
PM.add(createX86CodePrinterPass(Out, *this));
|
||||
return false; // success!
|
||||
}
|
||||
@ -57,7 +94,7 @@ bool X86TargetMachine::addPassesToEmitAssembly(PassManager &PM,
|
||||
/// implement a fast dynamic compiler for this target. Return true if this is
|
||||
/// not supported for this target.
|
||||
///
|
||||
bool X86TargetMachine::addPassesToJITCompile(PassManager &PM) {
|
||||
bool X86TargetMachine::addPassesToJITCompile(FunctionPassManager &PM) {
|
||||
// FIXME: Implement the switch instruction in the instruction selector!
|
||||
PM.add(createLowerSwitchPass());
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user