mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-19 19:29:31 +00:00
Only strip symbols if emitting bytecode to the assembly file.
Move lowerselect pass to come after preselection. Move machine code construction and stack slots pass to come right before instruction selection. This is to help fix perlbmk. Update comments. Make the sequence of passes in addPassesToJITCompile look more like the sequence of passes in addPassesToEmitAssembly, including support for -print-machineinstrs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12614 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
142e22a5f4
commit
79ee87b1bb
@ -125,39 +125,34 @@ SparcV9TargetMachine::SparcV9TargetMachine(IntrinsicLowering *il)
|
|||||||
bool
|
bool
|
||||||
SparcV9TargetMachine::addPassesToEmitAssembly(PassManager &PM, std::ostream &Out)
|
SparcV9TargetMachine::addPassesToEmitAssembly(PassManager &PM, std::ostream &Out)
|
||||||
{
|
{
|
||||||
// The following 3 passes used to be inserted specially by llc.
|
|
||||||
// Replace malloc and free instructions with library calls.
|
// Replace malloc and free instructions with library calls.
|
||||||
PM.add(createLowerAllocationsPass());
|
PM.add(createLowerAllocationsPass());
|
||||||
|
|
||||||
// Strip all of the symbols from the bytecode so that it will be smaller...
|
|
||||||
if (!DisableStrip)
|
|
||||||
PM.add(createSymbolStrippingPass());
|
|
||||||
|
|
||||||
// FIXME: implement the switch instruction in the instruction selector.
|
// FIXME: implement the switch instruction in the instruction selector.
|
||||||
PM.add(createLowerSwitchPass());
|
PM.add(createLowerSwitchPass());
|
||||||
|
|
||||||
PM.add(createLowerSelectPass());
|
|
||||||
|
|
||||||
// FIXME: implement the invoke/unwind instructions!
|
// FIXME: implement the invoke/unwind instructions!
|
||||||
PM.add(createLowerInvokePass());
|
PM.add(createLowerInvokePass());
|
||||||
|
|
||||||
// decompose multi-dimensional array references into single-dim refs
|
// decompose multi-dimensional array references into single-dim refs
|
||||||
PM.add(createDecomposeMultiDimRefsPass());
|
PM.add(createDecomposeMultiDimRefsPass());
|
||||||
|
|
||||||
// Construct and initialize the MachineFunction object for this fn.
|
|
||||||
PM.add(createMachineCodeConstructionPass(*this));
|
|
||||||
|
|
||||||
//Insert empty stackslots in the stack frame of each function
|
// Lower LLVM code to the form expected by the SPARCv9 instruction selector.
|
||||||
//so %fp+offset-8 and %fp+offset-16 are empty slots now!
|
|
||||||
PM.add(createStackSlotsPass(*this));
|
|
||||||
|
|
||||||
// Specialize LLVM code for this target machine and then
|
|
||||||
// run basic dataflow optimizations on LLVM code.
|
|
||||||
PM.add(createPreSelectionPass(*this));
|
PM.add(createPreSelectionPass(*this));
|
||||||
|
PM.add(createLowerSelectPass());
|
||||||
|
|
||||||
|
// Run basic LLVM dataflow optimizations, to clean up after pre-selection.
|
||||||
PM.add(createReassociatePass());
|
PM.add(createReassociatePass());
|
||||||
PM.add(createLICMPass());
|
PM.add(createLICMPass());
|
||||||
PM.add(createGCSEPass());
|
PM.add(createGCSEPass());
|
||||||
|
|
||||||
|
// 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));
|
PM.add(createInstructionSelectionPass(*this));
|
||||||
|
|
||||||
if (!DisableSched)
|
if (!DisableSched)
|
||||||
@ -190,9 +185,13 @@ SparcV9TargetMachine::addPassesToEmitAssembly(PassManager &PM, std::ostream &Out
|
|||||||
PM.add(createSparcV9MachineCodeDestructionPass());
|
PM.add(createSparcV9MachineCodeDestructionPass());
|
||||||
|
|
||||||
// Emit bytecode to the assembly file into its special section next
|
// Emit bytecode to the assembly file into its special section next
|
||||||
if (EmitMappingInfo)
|
if (EmitMappingInfo) {
|
||||||
|
// Strip all of the symbols from the bytecode so that it will be smaller...
|
||||||
|
if (!DisableStrip)
|
||||||
|
PM.add(createSymbolStrippingPass());
|
||||||
PM.add(createBytecodeAsmPrinterPass(Out));
|
PM.add(createBytecodeAsmPrinterPass(Out));
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,35 +205,40 @@ void SparcV9JITInfo::addPassesToJITCompile(FunctionPassManager &PM) {
|
|||||||
TD.getPointerAlignment(), TD.getDoubleAlignment()));
|
TD.getPointerAlignment(), TD.getDoubleAlignment()));
|
||||||
|
|
||||||
// Replace malloc and free instructions with library calls.
|
// Replace malloc and free instructions with library calls.
|
||||||
// Do this after tracing until lli implements these lib calls.
|
|
||||||
// For now, it will emulate malloc and free internally.
|
|
||||||
PM.add(createLowerAllocationsPass());
|
PM.add(createLowerAllocationsPass());
|
||||||
|
|
||||||
// FIXME: implement the switch instruction in the instruction selector.
|
// FIXME: implement the switch instruction in the instruction selector.
|
||||||
PM.add(createLowerSwitchPass());
|
PM.add(createLowerSwitchPass());
|
||||||
|
|
||||||
PM.add(createLowerSelectPass());
|
|
||||||
|
|
||||||
// FIXME: implement the invoke/unwind instructions!
|
// FIXME: implement the invoke/unwind instructions!
|
||||||
PM.add(createLowerInvokePass());
|
PM.add(createLowerInvokePass());
|
||||||
|
|
||||||
// decompose multi-dimensional array references into single-dim refs
|
// decompose multi-dimensional array references into single-dim refs
|
||||||
PM.add(createDecomposeMultiDimRefsPass());
|
PM.add(createDecomposeMultiDimRefsPass());
|
||||||
|
|
||||||
// Construct and initialize the MachineFunction object for this fn.
|
|
||||||
PM.add(createMachineCodeConstructionPass(TM));
|
|
||||||
|
|
||||||
// Specialize LLVM code for this target machine and then
|
// Lower LLVM code to the form expected by the SPARCv9 instruction selector.
|
||||||
// run basic dataflow optimizations on LLVM code.
|
|
||||||
PM.add(createPreSelectionPass(TM));
|
PM.add(createPreSelectionPass(TM));
|
||||||
|
PM.add(createLowerSelectPass());
|
||||||
|
|
||||||
|
// Run basic LLVM dataflow optimizations, to clean up after pre-selection.
|
||||||
PM.add(createReassociatePass());
|
PM.add(createReassociatePass());
|
||||||
// FIXME: these passes crash the FunctionPassManager when being added...
|
// FIXME: these passes crash the FunctionPassManager when being added...
|
||||||
//PM.add(createLICMPass());
|
//PM.add(createLICMPass());
|
||||||
//PM.add(createGCSEPass());
|
//PM.add(createGCSEPass());
|
||||||
|
|
||||||
|
// Construct and initialize the MachineFunction object for this fn.
|
||||||
|
PM.add(createMachineCodeConstructionPass(TM));
|
||||||
|
|
||||||
PM.add(createInstructionSelectionPass(TM));
|
PM.add(createInstructionSelectionPass(TM));
|
||||||
|
|
||||||
|
if (PrintMachineCode)
|
||||||
|
PM.add(createMachineFunctionPrinterPass(&std::cerr, "Before reg alloc:\n"));
|
||||||
|
|
||||||
PM.add(getRegisterAllocator(TM));
|
PM.add(getRegisterAllocator(TM));
|
||||||
|
|
||||||
|
if (PrintMachineCode)
|
||||||
|
PM.add(createMachineFunctionPrinterPass(&std::cerr, "After reg alloc:\n"));
|
||||||
|
|
||||||
PM.add(createPrologEpilogInsertionPass());
|
PM.add(createPrologEpilogInsertionPass());
|
||||||
|
|
||||||
if (!DisablePeephole)
|
if (!DisablePeephole)
|
||||||
|
Loading…
Reference in New Issue
Block a user