# HG changeset patch # User Doug Simon # Date 1335974676 -7200 # Node ID f47c770756e675aff6cd1400b5f0161dcdfae0a7 # Parent 20c14eb462388673b444a8549d11f0b7e2315da7 moved RiResolvedMethod.dumpProfile() to CiUtil.profileAsString() diff -r 20c14eb46238 -r f47c770756e6 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotMethodResolved.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotMethodResolved.java Wed May 02 17:09:00 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotMethodResolved.java Wed May 02 18:04:36 2012 +0200 @@ -29,7 +29,6 @@ public interface HotSpotMethodResolved extends RiResolvedMethod, Remote { RiResolvedMethod uniqueConcreteMethod(); - void dumpProfile(); int vtableEntryOffset(); void setCurrentTask(CompilationTask task); diff -r 20c14eb46238 -r f47c770756e6 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotMethodResolvedImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotMethodResolvedImpl.java Wed May 02 17:09:00 2012 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/ri/HotSpotMethodResolvedImpl.java Wed May 02 18:04:36 2012 +0200 @@ -27,14 +27,13 @@ import java.util.*; import java.util.concurrent.*; -import com.oracle.max.cri.ci.*; -import com.oracle.max.cri.ri.*; -import com.oracle.max.cri.ri.RiTypeProfile.ProfiledType; -import com.oracle.max.criutils.*; import com.oracle.graal.compiler.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.counters.*; import com.oracle.graal.java.bytecode.*; +import com.oracle.max.cri.ci.*; +import com.oracle.max.cri.ri.*; +import com.oracle.max.criutils.*; /** * Implementation of RiMethod for resolved HotSpot methods. @@ -255,61 +254,6 @@ } @Override - public void dumpProfile() { - TTY.println("profile info for %s", this); - TTY.println("canBeStaticallyBound: " + canBeStaticallyBound()); - TTY.println("invocationCount: " + invocationCount()); - RiProfilingInfo profilingInfo = this.profilingInfo(); - for (int i = 0; i < codeSize(); i++) { - if (profilingInfo.getExecutionCount(i) != -1) { - TTY.println(" executionCount@%d: %d", i, profilingInfo.getExecutionCount(i)); - } - - if (profilingInfo.getBranchTakenProbability(i) != -1) { - TTY.println(" branchProbability@%d: %.3f", i, profilingInfo.getBranchTakenProbability(i)); - } - - double[] switchProbabilities = profilingInfo.getSwitchProbabilities(i); - if (switchProbabilities != null) { - TTY.print(" switchProbabilities@%d:", i); - for (int j = 0; j < switchProbabilities.length; j++) { - TTY.print(" %.3f", switchProbabilities[j]); - } - TTY.println(); - } - - if (profilingInfo.getExceptionSeen(i) != RiExceptionSeen.FALSE) { - TTY.println(" exceptionSeen@%d: %s", i, profilingInfo.getExceptionSeen(i).name()); - } - - RiTypeProfile typeProfile = profilingInfo.getTypeProfile(i); - if (typeProfile != null) { - ProfiledType[] ptypes = typeProfile.getTypes(); - if (ptypes != null) { - TTY.println(" types@%d:", i); - for (int j = 0; j < ptypes.length; j++) { - ProfiledType ptype = ptypes[j]; - TTY.println(" %.3f %s", ptype.probability, ptype.type); - } - TTY.println(" %.3f ", typeProfile.getNotRecordedProbability()); - } - } - } - - boolean firstDeoptReason = true; - for (RiDeoptReason reason: RiDeoptReason.values()) { - int count = profilingInfo.getDeoptimizationCount(reason); - if (count > 0) { - if (firstDeoptReason) { - TTY.println("Deopt History"); - firstDeoptReason = false; - } - TTY.println(" %s: %d", reason.name(), count); - } - } - } - - @Override public Annotation[][] getParameterAnnotations() { if (isConstructor()) { Constructor javaConstructor = toJavaConstructor(); diff -r 20c14eb46238 -r f47c770756e6 graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Wed May 02 17:09:00 2012 +0200 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java Wed May 02 18:04:36 2012 +0200 @@ -147,7 +147,8 @@ } if (GraalOptions.PrintProfilingInformation) { - method.dumpProfile(); + TTY.println("Profiling info for " + method); + TTY.println(CiUtil.indent(CiUtil.profileAsString(method), " ")); } // compute the block map, setup exception handlers and get the entrypoint(s) diff -r 20c14eb46238 -r f47c770756e6 graal/com.oracle.max.cri/src/com/oracle/max/cri/ci/CiUtil.java --- a/graal/com.oracle.max.cri/src/com/oracle/max/cri/ci/CiUtil.java Wed May 02 17:09:00 2012 +0200 +++ b/graal/com.oracle.max.cri/src/com/oracle/max/cri/ci/CiUtil.java Wed May 02 18:04:36 2012 +0200 @@ -28,6 +28,7 @@ import java.util.*; import com.oracle.max.cri.ri.*; +import com.oracle.max.cri.ri.RiTypeProfile.ProfiledType; /** * Miscellaneous collection of utility methods used in the {@code CRI} project. @@ -736,4 +737,64 @@ } return result; } + + /** + * Formats the profiling information associated with a given method to a string. + */ + public static String profileAsString(RiResolvedMethod method) { + StringBuilder buf = new StringBuilder(100); + buf.append(String.format("canBeStaticallyBound: %b%n", method.canBeStaticallyBound())). + append(String.format("invocationCount: %d%n", method.invocationCount())); + RiProfilingInfo profilingInfo = method.profilingInfo(); + if (profilingInfo != null) { + for (int i = 0; i < method.codeSize(); i++) { + if (profilingInfo.getExecutionCount(i) != -1) { + buf.append(String.format("executionCount@%d: %d%n", i, profilingInfo.getExecutionCount(i))); + } + + if (profilingInfo.getBranchTakenProbability(i) != -1) { + buf.append(String.format("branchProbability@%d: %.3f%n", i, profilingInfo.getBranchTakenProbability(i))); + } + + double[] switchProbabilities = profilingInfo.getSwitchProbabilities(i); + if (switchProbabilities != null) { + buf.append(String.format("switchProbabilities@%d:", i)); + for (int j = 0; j < switchProbabilities.length; j++) { + buf.append(String.format(" %.3f", switchProbabilities[j])); + } + buf.append(NEW_LINE); + } + + if (profilingInfo.getExceptionSeen(i) != RiExceptionSeen.FALSE) { + buf.append(String.format("exceptionSeen@%d: %s%n", i, profilingInfo.getExceptionSeen(i).name())); + } + + RiTypeProfile typeProfile = profilingInfo.getTypeProfile(i); + if (typeProfile != null) { + ProfiledType[] ptypes = typeProfile.getTypes(); + if (ptypes != null) { + buf.append(String.format("types@%d:%n", i)); + for (int j = 0; j < ptypes.length; j++) { + ProfiledType ptype = ptypes[j]; + buf.append(String.format(" %.3f %s%n", ptype.probability, ptype.type)); + } + buf.append(String.format(" %.3f %n", typeProfile.getNotRecordedProbability())); + } + } + } + + boolean firstDeoptReason = true; + for (RiDeoptReason reason: RiDeoptReason.values()) { + int count = profilingInfo.getDeoptimizationCount(reason); + if (count > 0) { + if (firstDeoptReason) { + buf.append("deoptimization history").append(NEW_LINE); + firstDeoptReason = false; + } + buf.append(String.format(" %s: %d%n", reason.name(), count)); + } + } + } + return buf.toString(); + } } diff -r 20c14eb46238 -r f47c770756e6 graal/com.oracle.max.cri/src/com/oracle/max/cri/ri/RiResolvedMethod.java --- a/graal/com.oracle.max.cri/src/com/oracle/max/cri/ri/RiResolvedMethod.java Wed May 02 17:09:00 2012 +0200 +++ b/graal/com.oracle.max.cri/src/com/oracle/max/cri/ri/RiResolvedMethod.java Wed May 02 18:04:36 2012 +0200 @@ -224,9 +224,4 @@ * @return {@code true} if this method can be inlined */ boolean canBeInlined(); - - /** - * Dumps the recorded profiling information to TTY. - */ - void dumpProfile(); }