# HG changeset patch # User Josef Eisl # Date 1423241594 -3600 # Node ID 0cd7d78a29c55147a0c824422e51db56e6c92e96 # Parent 12508cf94ad970ced5e0f904f916460fc68ed4b7 GraalCompiler: outsource low-level compiler pipeline. diff -r 12508cf94ad9 -r 0cd7d78a29c5 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Fri Feb 06 17:04:48 2015 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java Fri Feb 06 17:53:14 2015 +0100 @@ -336,60 +336,67 @@ throw Debug.handle(e); } - try (Scope s0 = Debug.scope("HighTier")) { - if (ConstantLoadOptimization.Options.ConstantLoadOptimization.getValue()) { - try (Scope s = Debug.scope("ConstantLoadOptimization", lir)) { - ConstantLoadOptimization.optimize(lirGenRes.getLIR(), lirGen); - Debug.dump(lir, "After constant load optimization"); - } catch (Throwable e) { - throw Debug.handle(e); - } - } + try (Scope s = Debug.scope("LowLevelTier", nodeLirGen)) { + return emitLowLevel(backend, target, lir, codeEmittingOrder, linearScanOrder, lirGenRes, lirGen); + } catch (Throwable e) { + throw Debug.handle(e); } + } catch (Throwable e) { + throw Debug.handle(e); + } + } - try (Scope s0 = Debug.scope("MidTier")) { - try (Scope s = Debug.scope("Allocator", nodeLirGen)) { - if (backend.shouldAllocateRegisters()) { - LinearScan.allocate(target, lirGenRes); - } + public static > LIRGenerationResult emitLowLevel(Backend backend, TargetDescription target, LIR lir, List codeEmittingOrder, + @SuppressWarnings("unused") List linearScanOrder, LIRGenerationResult lirGenRes, LIRGeneratorTool lirGen) { + try (Scope s0 = Debug.scope("HighTier")) { + if (ConstantLoadOptimization.Options.ConstantLoadOptimization.getValue()) { + try (Scope s = Debug.scope("ConstantLoadOptimization", lir)) { + ConstantLoadOptimization.optimize(lirGenRes.getLIR(), lirGen); + Debug.dump(lir, "After constant load optimization"); } catch (Throwable e) { throw Debug.handle(e); } + } + } - try (Scope s1 = Debug.scope("BuildFrameMap")) { - // build frame map - final StackSlotAllocator allocator; - if (LSStackSlotAllocator.Options.LSStackSlotAllocation.getValue()) { - allocator = new LSStackSlotAllocator(); - } else { - allocator = new SimpleStackSlotAllocator(); - } - lirGenRes.buildFrameMap(allocator); - Debug.dump(lir, "After FrameMap building"); - } - try (Scope s1 = Debug.scope("MarkLocations")) { - if (backend.shouldAllocateRegisters()) { - // currently we mark locations only if we do register allocation - LocationMarker.markLocations(lirGenRes); - } + try (Scope s0 = Debug.scope("MidTier")) { + try (Scope s = Debug.scope("Allocator")) { + if (backend.shouldAllocateRegisters()) { + LinearScan.allocate(target, lirGenRes); } } - try (Scope s = Debug.scope("LowTier")) { - EdgeMoveOptimizer.optimize(lirGenRes); - ControlFlowOptimizer.optimize(lir, codeEmittingOrder); - if (lirGen.canEliminateRedundantMoves()) { - RedundantMoveElimination.optimize(lirGenRes); + try (Scope s1 = Debug.scope("BuildFrameMap")) { + // build frame map + final StackSlotAllocator allocator; + if (LSStackSlotAllocator.Options.LSStackSlotAllocation.getValue()) { + allocator = new LSStackSlotAllocator(); + } else { + allocator = new SimpleStackSlotAllocator(); } - NullCheckOptimizer.optimize(target, lirGenRes); + lirGenRes.buildFrameMap(allocator); + Debug.dump(lir, "After FrameMap building"); + } + try (Scope s1 = Debug.scope("MarkLocations")) { + if (backend.shouldAllocateRegisters()) { + // currently we mark locations only if we do register allocation + LocationMarker.markLocations(lirGenRes); + } + } + } - Debug.dump(lir, "After control flow optimization"); + try (Scope s = Debug.scope("LowTier")) { + EdgeMoveOptimizer.optimize(lirGenRes); + ControlFlowOptimizer.optimize(lir, codeEmittingOrder); + if (lirGen.canEliminateRedundantMoves()) { + RedundantMoveElimination.optimize(lirGenRes); } + NullCheckOptimizer.optimize(target, lirGenRes); - return lirGenRes; - } catch (Throwable e) { - throw Debug.handle(e); + Debug.dump(lir, "After control flow optimization"); } + + return lirGenRes; } public static void emitCode(Backend backend, Assumptions assumptions, LIRGenerationResult lirGenRes, CompilationResult compilationResult, ResolvedJavaMethod installedCodeOwner,