From b428654076f5faae00c1e64a0f0a398b22703109 Mon Sep 17 00:00:00 2001 From: Brian Gaeke Date: Wed, 13 Aug 2003 18:15:52 +0000 Subject: [PATCH] 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7817 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86TargetMachine.cpp | 41 +++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/lib/Target/X86/X86TargetMachine.cpp b/lib/Target/X86/X86TargetMachine.cpp index 2de30f7245d..e3cc88078cf 100644 --- a/lib/Target/X86/X86TargetMachine.cpp +++ b/lib/Target/X86/X86TargetMachine.cpp @@ -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()); -- 2.34.1