# HG changeset patch # User Christian Humer # Date 1386670214 -3600 # Node ID 038f55aab194dd3a3025404b20fc88b92cbd3141 # Parent ce017d1e4234611b7f693f828b6b84edb11ac5f8# Parent d86dc1b84973a1b591275dca28fcd4c4b5bb3dfe Merge. diff -r ce017d1e4234 -r 038f55aab194 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/MetaUtil.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/MetaUtil.java Mon Dec 09 17:31:12 2013 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/MetaUtil.java Tue Dec 10 11:10:14 2013 +0100 @@ -28,7 +28,7 @@ import java.lang.reflect.*; import java.util.*; -import com.oracle.graal.api.meta.ProfilingInfo.TriState; +import com.oracle.graal.api.meta.ProfilingInfo.*; /** * Miscellaneous collection of utility methods used by {@code com.oracle.graal.api.meta} and its @@ -536,11 +536,11 @@ buf.append(sep); } - if (info.getExceptionSeen(i) == TriState.TRUE) { + if (info.getExceptionSeen(i) != TriState.UNKNOWN) { buf.append(String.format("exceptionSeen@%d: %s%s", i, info.getExceptionSeen(i).name(), sep)); } - if (info.getNullSeen(i) == TriState.TRUE) { + if (info.getNullSeen(i) != TriState.UNKNOWN) { buf.append(String.format("nullSeen@%d: %s%s", i, info.getNullSeen(i).name(), sep)); } diff -r ce017d1e4234 -r 038f55aab194 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ProfilingInfoTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ProfilingInfoTest.java Mon Dec 09 17:31:12 2013 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/ProfilingInfoTest.java Tue Dec 10 11:10:14 2013 +0100 @@ -30,9 +30,19 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.api.meta.ProfilingInfo.TriState; +/** + * Tests profiling information provided by the runtime. + *

+ * NOTE: These tests are actually not very robust. The problem is that only partial profiling + * information may be gathered for any given method. For example, HotSpot's advanced compilation + * policy can decide to only gather partial profiles in a first level compilation (see + * AdvancedThresholdPolicy::common(...) in advancedThresholdPolicy.cpp). Because of this, + * occasionally tests for {@link ProfilingInfo#getNullSeen(int)} can fail since HotSpot only set's + * the null_seen bit when doing full profiling. + */ public class ProfilingInfoTest extends GraalCompilerTest { - private static final int N = 100; + private static final int N = 10; private static final double DELTA = 1d / Integer.MAX_VALUE; @Test @@ -268,14 +278,17 @@ continueProfiling(snippet, new Object()); Assert.assertEquals(TriState.FALSE, info.getNullSeen(1)); - continueProfiling(snippet, (Object) null); - Assert.assertEquals(TriState.TRUE, info.getNullSeen(1)); + if (TriState.TRUE == info.getNullSeen(1)) { + // See the javadoc comment for ProfilingInfoTest. + continueProfiling(snippet, (Object) null); + Assert.assertEquals(TriState.TRUE, info.getNullSeen(1)); - continueProfiling(snippet, 0.0); - Assert.assertEquals(TriState.TRUE, info.getNullSeen(1)); + continueProfiling(snippet, 0.0); + Assert.assertEquals(TriState.TRUE, info.getNullSeen(1)); - continueProfiling(snippet, new Object()); - Assert.assertEquals(TriState.TRUE, info.getNullSeen(1)); + continueProfiling(snippet, new Object()); + Assert.assertEquals(TriState.TRUE, info.getNullSeen(1)); + } resetProfile(snippet); Assert.assertEquals(TriState.FALSE, info.getNullSeen(1)); diff -r ce017d1e4234 -r 038f55aab194 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/StandardOp.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/StandardOp.java Mon Dec 09 17:31:12 2013 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/StandardOp.java Tue Dec 10 11:10:14 2013 +0100 @@ -113,7 +113,9 @@ @Override public void emitCode(CompilationResultBuilder crb) { - crb.asm.jmp(destination.label()); + if (!destination.isCodeEmittingOrderSuccessorEdge(crb.getCurrentBlockIndex())) { + crb.asm.jmp(destination.label()); + } } public LabelRef destination() {