# HG changeset patch # User Doug Simon # Date 1385419789 -3600 # Node ID 70e6bb85d802a6a993bacd3a940552b511bcbd5c # Parent 1baa169508f57da81fbb6860bb5193c07120aed7 cleaned up HotSpotMethodData tracing a little and enabled it when -Dgraal.traceMethodDataFilter=true diff -r 1baa169508f5 -r 70e6bb85d802 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodData.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodData.java Mon Nov 25 18:42:51 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMethodData.java Mon Nov 25 23:49:49 2013 +0100 @@ -214,7 +214,7 @@ private abstract static class AbstractMethodData implements HotSpotMethodDataAccessor { /** - * Corresponds to DS_RECOMPILE_BIT defined in deoptimization.cpp. + * Corresponds to {@code exception_seen_flag}. */ private static final int EXCEPTIONS_MASK = 0x2; @@ -287,17 +287,7 @@ return 0; } - public StringBuilder appendFlagsTo(StringBuilder sb, HotSpotMethodData data, int pos) { - int flags = getFlags(data, pos); - if (flags != 0) { - sb.append(format("flags(0x%02x)", flags)); - } - return sb; - } - - public StringBuilder appendTo(StringBuilder sb, HotSpotMethodData data, int pos) { - return appendFlagsTo(sb, data, pos); - } + public abstract StringBuilder appendTo(StringBuilder sb, HotSpotMethodData data, int pos); } private static class NoMethodData extends AbstractMethodData { @@ -321,6 +311,11 @@ public TriState getExceptionSeen(HotSpotMethodData data, int position) { return exceptionSeen; } + + @Override + public StringBuilder appendTo(StringBuilder sb, HotSpotMethodData data, int pos) { + return sb; + } } private static class BitData extends AbstractMethodData { @@ -341,6 +336,11 @@ public TriState getNullSeen(HotSpotMethodData data, int position) { return TriState.get((getFlags(data, position) & BIT_DATA_NULL_SEEN_FLAG) != 0); } + + @Override + public StringBuilder appendTo(StringBuilder sb, HotSpotMethodData data, int pos) { + return sb.append(format("exception_seen(%s)", getExceptionSeen(data, pos))); + } } private static class CounterData extends BitData { @@ -368,7 +368,7 @@ @Override public StringBuilder appendTo(StringBuilder sb, HotSpotMethodData data, int pos) { - return appendFlagsTo(sb, data, pos).append(format("count(%d)", getCounterValue(data, pos))); + return sb.append(format("count(%d)", getCounterValue(data, pos))); } } @@ -403,7 +403,7 @@ @Override public StringBuilder appendTo(StringBuilder sb, HotSpotMethodData data, int pos) { - return appendFlagsTo(sb, data, pos).append(format("taken(%d) displacement(%d)", getExecutionCount(data, pos), getTakenDisplacement(data, pos))); + return sb.append(format("taken(%d) displacement(%d)", getExecutionCount(data, pos), getTakenDisplacement(data, pos))); } } @@ -494,9 +494,9 @@ @Override public StringBuilder appendTo(StringBuilder sb, HotSpotMethodData data, int pos) { - super.appendTo(sb, data, pos); RawItemProfile profile = getRawTypeProfile(data, pos); - sb.append(format("nonprofiled_count(%d) entries(%d)", getTypesNotRecordedExecutionCount(data, pos), profile.entries)); + TriState nullSeen = getNullSeen(data, pos); + sb.append(format("count(%d) null_seen(%s) nonprofiled_count(%d) entries(%d)", getCounterValue(data, pos), nullSeen, getTypesNotRecordedExecutionCount(data, pos), profile.entries)); for (int i = 0; i < profile.entries; i++) { long count = profile.counts[i]; sb.append(format("%n %s (%d, %4.2f)", MetaUtil.toJavaName(profile.items[i]), count, (double) count / profile.totalCount)); @@ -619,7 +619,7 @@ @Override public StringBuilder appendTo(StringBuilder sb, HotSpotMethodData data, int pos) { RawItemProfile profile = getRawMethodProfile(data, pos); - super.appendTo(sb, data, pos).append(format("%nmethod_entries(%d)", profile.entries)); + super.appendTo(sb.append(format("exception_seen(%s) ", getExceptionSeen(data, pos))), data, pos).append(format("%nmethod_entries(%d)", profile.entries)); for (int i = 0; i < profile.entries; i++) { long count = profile.counts[i]; sb.append(format("%n %s (%d, %4.2f)", MetaUtil.format("%H.%n(%p)", profile.items[i]), count, (double) count / profile.totalCount)); @@ -669,8 +669,7 @@ long taken = data.readUnsignedInt(pos, TAKEN_COUNT_OFFSET); long notTaken = data.readUnsignedInt(pos, NOT_TAKEN_COUNT_OFFSET); double takenProbability = getBranchTakenProbability(data, pos); - return appendFlagsTo(sb, data, pos).append( - format("taken(%d, %4.2f) not_taken(%d, %4.2f) displacement(%d)", taken, takenProbability, notTaken, 1.0D - takenProbability, getTakenDisplacement(data, pos))); + return sb.append(format("taken(%d, %4.2f) not_taken(%d, %4.2f) displacement(%d)", taken, takenProbability, notTaken, 1.0D - takenProbability, getTakenDisplacement(data, pos))); } } diff -r 1baa169508f5 -r 70e6bb85d802 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java Mon Nov 25 18:42:51 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaMethod.java Mon Nov 25 23:49:49 2013 +0100 @@ -34,6 +34,7 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.api.meta.ProfilingInfo.TriState; +import com.oracle.graal.debug.*; import com.oracle.graal.graph.*; import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.debug.*; @@ -282,6 +283,8 @@ return getCompiledCodeSize() > 0; } + private static final String TraceMethodDataFilter = System.getProperty("graal.traceMethodDataFilter"); + @Override public ProfilingInfo getProfilingInfo() { ProfilingInfo info; @@ -290,6 +293,10 @@ long metaspaceMethodData = unsafeReadWord(metaspaceMethod + runtime().getConfig().methodDataOffset); if (metaspaceMethodData != 0) { methodData = new HotSpotMethodData(metaspaceMethodData); + if (TraceMethodDataFilter != null && MetaUtil.format("%H.%n", this).contains(TraceMethodDataFilter)) { + TTY.println("Raw method data for " + MetaUtil.format("%H.%n(%p)", this) + ":"); + TTY.println(methodData.toString()); + } } }