# HG changeset patch # User Lukas Stadler # Date 1312476770 -7200 # Node ID b9ed7199f6fb483a941372b4c04175fe51834d22 # Parent a5b02018b843e6a903e9f1e342a16770a9bcce33 special handling for VirtualObject(Field) in IdentifyBlocksPhase (don't schedule out of loops), better toString for HotSpotMethod/Field diff -r a5b02018b843 -r b9ed7199f6fb graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalCompiler.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalCompiler.java Thu Aug 04 11:54:05 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/GraalCompiler.java Thu Aug 04 18:52:50 2011 +0200 @@ -95,7 +95,7 @@ } CiResult result = null; - TTY.Filter filter = new TTY.Filter(GraalOptions.PrintFilter, method); + TTY.Filter filter = new TTY.Filter(GraalOptions.PrintFilter, CiUtil.format("%H.%n", method, false)); GraalCompilation compilation = new GraalCompilation(this, method, osrBCI, stats); currentCompilation = compilation; try { diff -r a5b02018b843 -r b9ed7199f6fb graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/ComputeLinearScanOrder.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/ComputeLinearScanOrder.java Thu Aug 04 11:54:05 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/ir/ComputeLinearScanOrder.java Thu Aug 04 18:52:50 2011 +0200 @@ -29,7 +29,6 @@ import com.oracle.max.graal.compiler.debug.*; import com.oracle.max.graal.compiler.lir.*; import com.oracle.max.graal.graph.*; -import com.oracle.max.graal.graph.collections.*; public final class ComputeLinearScanOrder { diff -r a5b02018b843 -r b9ed7199f6fb graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java Thu Aug 04 11:54:05 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/DeadCodeEliminationPhase.java Thu Aug 04 18:52:50 2011 +0200 @@ -22,8 +22,6 @@ */ package com.oracle.max.graal.compiler.phases; -import java.util.*; - import com.oracle.max.graal.compiler.*; import com.oracle.max.graal.compiler.debug.*; import com.oracle.max.graal.compiler.gen.*; diff -r a5b02018b843 -r b9ed7199f6fb graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java Thu Aug 04 11:54:05 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java Thu Aug 04 18:52:50 2011 +0200 @@ -974,9 +974,9 @@ Invoke invoke = new Invoke(bci(), opcode, resultType.stackKind(), args, target, target.signature().returnType(method.holder()), graph); Value result = appendWithBCI(invoke); invoke.setExceptionEdge(handleException(null, bci())); - if (invoke.exceptionEdge() == null) { - TTY.println("no exception edge" + unwindHandler); - } +// if (invoke.exceptionEdge() == null) { +// TTY.println("no exception edge" + unwindHandler); +// } frameState.pushReturn(resultType, result); } } diff -r a5b02018b843 -r b9ed7199f6fb graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java Thu Aug 04 11:54:05 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java Thu Aug 04 18:52:50 2011 +0200 @@ -334,7 +334,7 @@ Block block; if (latestBlock == null) { block = earliestBlock(n); - } else if (GraalOptions.ScheduleOutOfLoops) { + } else if (GraalOptions.ScheduleOutOfLoops && !(n instanceof VirtualObjectField) && !(n instanceof VirtualObject)) { block = scheduleOutOfLoops(n, latestBlock, earliestBlock(n)); } else { block = latestBlock; @@ -626,7 +626,8 @@ } private boolean noRematerialization(Node n) { - return n instanceof Local || n instanceof LocationNode || n instanceof Constant || n instanceof StateSplit || n instanceof FrameState; + return n instanceof Local || n instanceof LocationNode || n instanceof Constant || n instanceof StateSplit || n instanceof FrameState || n instanceof VirtualObject || + n instanceof VirtualObjectField; } private double liveRange(Block from, Set usages) { diff -r a5b02018b843 -r b9ed7199f6fb graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotField.java --- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotField.java Thu Aug 04 11:54:05 2011 +0200 +++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotField.java Thu Aug 04 18:52:50 2011 +0200 @@ -26,8 +26,7 @@ import java.lang.reflect.*; import com.oracle.max.graal.compiler.*; -import com.sun.cri.ci.CiConstant; -import com.sun.cri.ci.CiKind; +import com.sun.cri.ci.*; import com.sun.cri.ri.RiField; import com.sun.cri.ri.RiType; @@ -130,7 +129,7 @@ @Override public String toString() { - return "HotSpotField<" + holder.name() + "." + name + ":" + offset + ">"; + return "HotSpotField<" + CiUtil.format("%h.%n", this, false) + ":" + offset + ">"; } } diff -r a5b02018b843 -r b9ed7199f6fb graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotMethodResolvedImpl.java --- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotMethodResolvedImpl.java Thu Aug 04 11:54:05 2011 +0200 +++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotMethodResolvedImpl.java Thu Aug 04 18:52:50 2011 +0200 @@ -166,7 +166,7 @@ @Override public String toString() { - return "HotSpotMethod<" + holder().name() + ". " + name + ">"; + return "HotSpotMethod<" + CiUtil.format("%h.%n", this, false) + ">"; } public boolean hasCompiledCode() { @@ -218,15 +218,15 @@ TTY.println("canBeStaticallyBound: " + canBeStaticallyBound()); TTY.println("invocationCount: " + invocationCount()); for (int i = 0; i < codeSize(); i++) { - if (exceptionProbability(i) > 0) { - TTY.println(" exceptionProbability@%d: %d", i, exceptionProbability(i)); - } if (branchProbability(i) != -1) { TTY.println(" branchProbability@%d: %f", i, branchProbability(i)); } RiTypeProfile profile = typeProfile(i); if (profile != null && profile.count > 0) { TTY.println(" profile@%d: count: %d, morphism: %d", i, profile.count, profile.morphism); + if (exceptionProbability(i) != -1) { + TTY.println(" exceptionProbability@%d: %d", i, exceptionProbability(i)); + } } } } diff -r a5b02018b843 -r b9ed7199f6fb graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java --- a/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java Thu Aug 04 11:54:05 2011 +0200 +++ b/graal/com.oracle.max.graal.runtime/src/com/oracle/max/graal/runtime/HotSpotRuntime.java Thu Aug 04 18:52:50 2011 +0200 @@ -553,7 +553,6 @@ } else if (holderName.equals("Lsun/misc/Unsafe;")) { if (fullName.equals("getObject(Ljava/lang/Object;J)Ljava/lang/Object;")) { CompilerGraph graph = new CompilerGraph(this); - Local unsafe = new Local(CiKind.Object, 0, graph); Local object = new Local(CiKind.Object, 1, graph); Local offset = new Local(CiKind.Long, 2, graph); UnsafeLoad load = new UnsafeLoad(object, offset, CiKind.Object, graph); @@ -564,17 +563,12 @@ intrinsicGraphs.put(method, graph); } else if (fullName.equals("putObject(Ljava/lang/Object;JLjava/lang/Object;)V")) { CompilerGraph graph = new CompilerGraph(this); - Local unsafe = new Local(CiKind.Object, 0, graph); Local object = new Local(CiKind.Object, 1, graph); Local offset = new Local(CiKind.Long, 2, graph); Local value = new Local(CiKind.Object, 3, graph); UnsafeStore store = new UnsafeStore(object, offset, value, CiKind.Object, graph); - FrameState frameState = new FrameState(method, 0, parameters.size(), 0, 0, false, graph); + FrameState frameState = new FrameState(method, FrameState.AFTER_BCI, 0, 0, 0, false, graph); store.setStateAfter(frameState); - frameState.setValueAt(0, unsafe); - frameState.setValueAt(1, object); - frameState.setValueAt(2, offset); - frameState.setValueAt(3, value); Return ret = new Return(null, graph); store.setNext(ret); graph.start().setNext(store); diff -r a5b02018b843 -r b9ed7199f6fb src/share/vm/graal/graalVMEntries.cpp --- a/src/share/vm/graal/graalVMEntries.cpp Thu Aug 04 11:54:05 2011 +0200 +++ b/src/share/vm/graal/graalVMEntries.cpp Thu Aug 04 18:52:50 2011 +0200 @@ -192,21 +192,19 @@ methodOop method = getMethodFromHotSpotMethod(hotspot_method); cimethod = (ciMethod*)CURRENT_ENV->get_object(method); } + ciMethodData* method_data = cimethod->method_data(); - ciMethodData* method_data = cimethod->method_data_or_null(); - if (method_data == NULL) { - return -1; + if (method_data == NULL || !method_data->is_mature()) return -1; + + ciProfileData* profile = method_data->bci_to_data(bci); + if (profile == NULL) { + return 0; + } + uint trap = method_data->trap_recompiled_at(profile); + if (trap > 0) { + return 100; } else { - ciProfileData* profile = method_data->bci_to_data(bci); - if (profile == NULL) { - return 0; - } - uint trap = method_data->trap_recompiled_at(profile); - if (trap > 0) { - return 100; - } else { - return trap; - } + return trap; } }