# HG changeset patch # User Josef Eisl # Date 1395238477 -3600 # Node ID 836d558c3a5fd84256f217e3e6a5ef38ce8f4e76 # Parent 61821c3e9235ce125f80cbcb50ddd3ee52147f30 Create Baseline version of doBlock in LIRGenerator. diff -r 61821c3e9235 -r 836d558c3a5f graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java --- a/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java Wed Mar 19 15:13:13 2014 +0100 +++ b/graal/com.oracle.graal.baseline/src/com/oracle/graal/baseline/BaselineCompiler.java Wed Mar 19 15:14:37 2014 +0100 @@ -35,9 +35,11 @@ import com.oracle.graal.api.meta.ResolvedJavaType.Representation; import com.oracle.graal.bytecode.*; import com.oracle.graal.compiler.*; +import com.oracle.graal.compiler.alloc.*; import com.oracle.graal.compiler.gen.*; import com.oracle.graal.compiler.target.*; import com.oracle.graal.debug.*; +import com.oracle.graal.debug.Debug.Scope; import com.oracle.graal.graph.*; import com.oracle.graal.java.*; import com.oracle.graal.java.BciBlockMapping.Block; @@ -116,18 +118,33 @@ List> linearScanOrder = ComputeBlockOrder.computeLinearScanOrder(blocks.length, b, blockProbabilities); List> codeEmittingOrder = ComputeBlockOrder.computeCodeEmittingOrder(blocks.length, b, blockProbabilities); LIR lir = new LIR(cfg, linearScanOrder, codeEmittingOrder); - CallingConvention cc = CodeUtil.getCallingConvention(backend.getProviders().getCodeCache(), CallingConvention.Type.JavaCallee, method, false); - LIRGenerationResult lirGenRes = backend.newLIRGenerationResult(lir, backend.newFrameMap(), null); - LIRGenerator lirGen = backend.newLIRGenerator(null, cc, lirGenRes); + LIRGenerationResult lirGenRes = null; + try (Scope ds = Debug.scope("BackEnd", lir)) { + FrameMap frameMap = backend.newFrameMap(); + TargetDescription target = backend.getTarget(); + CallingConvention cc = CodeUtil.getCallingConvention(backend.getProviders().getCodeCache(), CallingConvention.Type.JavaCallee, method, false); + lirGenRes = backend.newLIRGenerationResult(lir, frameMap, null); + LIRGenerator lirGen = backend.newLIRGenerator(null, cc, lirGenRes); + + try (Scope s = Debug.scope("LIRGen", lirGen)) { + lirGen.doBlock(b); + // lirGen.beforeRegisterAllocation(); - // add instruction - lirGen.emitAdd(Constant.forLong(42), Constant.forLong(73)); + Debug.dump(lir, "After LIR generation"); + } catch (Throwable e) { + throw Debug.handle(e); + } - List lirList = null; - lir.setLIRforBlock(b, lirList); - - // register allocation - lirGenRes.getFrameMap().finish(); + try (Scope s = Debug.scope("Allocator", lirGen)) { + if (backend.shouldAllocateRegisters()) { + new LinearScan(target, lir, frameMap).allocate(); + } + } catch (Throwable e) { + throw Debug.handle(e); + } + } catch (Throwable e) { + throw Debug.handle(e); + } // emitCode Assumptions assumptions = new Assumptions(OptAssumptions.getValue()); diff -r 61821c3e9235 -r 836d558c3a5f graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java Wed Mar 19 15:13:13 2014 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/GraalCompilerTest.java Wed Mar 19 15:14:37 2014 +0100 @@ -498,7 +498,7 @@ } private CompilationResult compileBaseline(ResolvedJavaMethod javaMethod) { - try (Scope bds = Debug.scope("compileBaseline")) { + try (Scope bds = Debug.scope("compileBaseline", javaMethod)) { BaselineCompiler baselineCompiler = new BaselineCompiler(GraphBuilderConfiguration.getDefault(), providers.getMetaAccess()); return baselineCompiler.generate(javaMethod, -1, getBackend(), new CompilationResult(), javaMethod, CompilationResultBuilderFactory.Default); } catch (Throwable e) { diff -r 61821c3e9235 -r 836d558c3a5f graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Wed Mar 19 15:13:13 2014 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGenerator.java Wed Mar 19 15:14:37 2014 +0100 @@ -407,7 +407,7 @@ res.getLIR().getLIRforBlock(currentBlock).add(op); } - public void doBlock(Block block, StructuredGraph graph, BlockMap> blockMap) { + private final void doBlockStart(AbstractBlock block) { if (printIRWithLIR) { TTY.print(block.toString()); } @@ -423,6 +423,33 @@ if (traceLevel >= 1) { TTY.println("BEGIN Generating LIR for block B" + block.getId()); } + } + + private final void doBlockEnd(AbstractBlock block) { + + if (traceLevel >= 1) { + TTY.println("END Generating LIR for block B" + block.getId()); + } + + currentBlock = null; + + if (printIRWithLIR) { + TTY.println(); + } + } + + /** + * For Baseline compilation + */ + public void doBlock(AbstractBlock block) { + doBlockStart(block); + // add instruction + emitAdd(Constant.forLong(42), Constant.forLong(73)); + doBlockEnd(block); + } + + public void doBlock(Block block, StructuredGraph graph, BlockMap> blockMap) { + doBlockStart(block); if (block == res.getLIR().getControlFlowGraph().getStartBlock()) { assert block.getPredecessorCount() == 0; @@ -472,16 +499,7 @@ } assert verifyBlock(res.getLIR(), block); - - if (traceLevel >= 1) { - TTY.println("END Generating LIR for block B" + block.getId()); - } - - currentBlock = null; - - if (printIRWithLIR) { - TTY.println(); - } + doBlockEnd(block); } protected abstract boolean peephole(ValueNode valueNode); diff -r 61821c3e9235 -r 836d558c3a5f graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGeneratorCommon.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGeneratorCommon.java Wed Mar 19 15:13:13 2014 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/LIRGeneratorCommon.java Wed Mar 19 15:14:37 2014 +0100 @@ -4,6 +4,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.lir.*; import com.oracle.graal.nodes.calc.*; +import com.oracle.graal.nodes.cfg.*; import com.oracle.graal.nodes.type.*; public interface LIRGeneratorCommon { @@ -50,6 +51,8 @@ Value loadNonConst(Value value); + void doBlock(AbstractBlock block); + /** * Gets the ABI specific operand used to return a value of a given kind from a method. *