# HG changeset patch # User Thomas Wuerthinger # Date 1366921816 -7200 # Node ID dc04c7e8f7147dee43d1cf93504e804c6dd59049 # Parent 18d28d9bb13ae55e2754a727c91538ee99512598 Add javadoc to BranchProbabilityNode.probability node intrinsic. Avoid combined conditions in connection with the probability. diff -r 18d28d9bb13a -r dc04c7e8f714 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopySnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopySnippets.java Thu Apr 25 22:20:47 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopySnippets.java Thu Apr 25 22:30:16 2013 +0200 @@ -84,7 +84,7 @@ long nonVectorBytes = byteLength % VECTOR_SIZE; long srcOffset = (long) srcPos * elementSize; long destOffset = (long) destPos * elementSize; - if (probability(NOT_FREQUENT_PROBABILITY, src == dest && srcPos < destPos)) { + if (probability(NOT_FREQUENT_PROBABILITY, src == dest) && probability(NOT_FREQUENT_PROBABILITY, srcPos < destPos)) { // bad aliased case for (long i = byteLength - elementSize; i >= byteLength - nonVectorBytes; i -= elementSize) { UnsafeStoreNode.store(dest, header, i + destOffset, UnsafeLoadNode.load(src, header, i + srcOffset, baseKind), baseKind); @@ -271,7 +271,7 @@ int log2ElementSize = (layoutHelper >> layoutHelperLog2ElementSizeShift()) & layoutHelperLog2ElementSizeMask(); final boolean isObjectArray = ((layoutHelper & layoutHelperElementTypePrimitiveInPlace()) == 0); - if (probability(FAST_PATH_PROBABILITY, srcHub.equal(destHub) && src != dest)) { + if (probability(FAST_PATH_PROBABILITY, srcHub.equal(destHub)) && probability(FAST_PATH_PROBABILITY, src != dest)) { checkLimits(src, srcPos, dest, destPos, length); if (probability(FAST_PATH_PROBABILITY, isObjectArray)) { genericObjectExactCallCounter.inc(); diff -r 18d28d9bb13a -r dc04c7e8f714 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CheckCastSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CheckCastSnippets.java Thu Apr 25 22:20:47 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/CheckCastSnippets.java Thu Apr 25 22:30:16 2013 +0200 @@ -65,7 +65,7 @@ */ @Snippet public static Object checkcastExact(Object object, Word exactHub, @ConstantParameter boolean checkNull) { - if (probability(NOT_FREQUENT_PROBABILITY, checkNull && object == null)) { + if (checkNull && probability(NOT_FREQUENT_PROBABILITY, object == null)) { isNull.inc(); } else { Word objectHub = loadHub(object); @@ -90,7 +90,7 @@ */ @Snippet public static Object checkcastPrimary(Word hub, Object object, @ConstantParameter int superCheckOffset, @ConstantParameter boolean checkNull) { - if (probability(NOT_FREQUENT_PROBABILITY, checkNull && object == null)) { + if (checkNull && probability(NOT_FREQUENT_PROBABILITY, object == null)) { isNull.inc(); } else { Word objectHub = loadHub(object); @@ -109,7 +109,7 @@ */ @Snippet public static Object checkcastSecondary(Word hub, Object object, @VarargsParameter Word[] hints, @ConstantParameter boolean checkNull) { - if (probability(NOT_FREQUENT_PROBABILITY, checkNull && object == null)) { + if (checkNull && probability(NOT_FREQUENT_PROBABILITY, object == null)) { isNull.inc(); } else { Word objectHub = loadHub(object); @@ -137,7 +137,7 @@ */ @Snippet public static Object checkcastDynamic(Word hub, Object object, @ConstantParameter boolean checkNull) { - if (probability(NOT_FREQUENT_PROBABILITY, checkNull && object == null)) { + if (checkNull && probability(NOT_FREQUENT_PROBABILITY, object == null)) { isNull.inc(); } else { Word objectHub = loadHub(object); diff -r 18d28d9bb13a -r dc04c7e8f714 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java Thu Apr 25 22:20:47 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/InstanceOfSnippets.java Thu Apr 25 22:30:16 2013 +0200 @@ -58,7 +58,7 @@ */ @Snippet public static Object instanceofExact(Object object, Word exactHub, Object trueValue, Object falseValue, @ConstantParameter boolean checkNull) { - if (probability(NOT_FREQUENT_PROBABILITY, checkNull && object == null)) { + if (checkNull && probability(NOT_FREQUENT_PROBABILITY, object == null)) { isNull.inc(); return falseValue; } @@ -76,7 +76,7 @@ */ @Snippet public static Object instanceofPrimary(Word hub, Object object, @ConstantParameter int superCheckOffset, Object trueValue, Object falseValue, @ConstantParameter boolean checkNull) { - if (probability(NOT_FREQUENT_PROBABILITY, checkNull && object == null)) { + if (checkNull && probability(NOT_FREQUENT_PROBABILITY, object == null)) { isNull.inc(); return falseValue; } @@ -95,7 +95,7 @@ @Snippet public static Object instanceofSecondary(Word hub, Object object, @VarargsParameter Word[] hints, @VarargsParameter boolean[] hintIsPositive, Object trueValue, Object falseValue, @ConstantParameter boolean checkNull) { - if (probability(NOT_FREQUENT_PROBABILITY, checkNull && object == null)) { + if (checkNull && probability(NOT_FREQUENT_PROBABILITY, object == null)) { isNull.inc(); return falseValue; } @@ -121,7 +121,7 @@ */ @Snippet public static Object instanceofDynamic(Class mirror, Object object, Object trueValue, Object falseValue, @ConstantParameter boolean checkNull) { - if (probability(NOT_FREQUENT_PROBABILITY, checkNull && object == null)) { + if (checkNull && probability(NOT_FREQUENT_PROBABILITY, object == null)) { isNull.inc(); return falseValue; } diff -r 18d28d9bb13a -r dc04c7e8f714 graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64ConvertSnippets.java --- a/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64ConvertSnippets.java Thu Apr 25 22:20:47 2013 +0200 +++ b/graal/com.oracle.graal.replacements.amd64/src/com/oracle/graal/replacements/amd64/AMD64ConvertSnippets.java Thu Apr 25 22:30:16 2013 +0200 @@ -108,7 +108,6 @@ @Snippet public static int d2i(double input, int result) { if (probability(SLOW_PATH_PROBABILITY, result == Integer.MIN_VALUE)) { - if (Double.isNaN(input)) { // input is NaN -> return 0 return 0; diff -r 18d28d9bb13a -r dc04c7e8f714 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BranchProbabilityNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BranchProbabilityNode.java Thu Apr 25 22:20:47 2013 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BranchProbabilityNode.java Thu Apr 25 22:30:16 2013 +0200 @@ -99,9 +99,19 @@ return this; } - @SuppressWarnings("unused") + /** + * This intrinsic should only be used for the condition of an if statement. The parameter + * condition should also only denote a simple condition and not a combined condition involving + * && or || operators. It injects the probability of the condition into the if statement. + * + * @param probability the probability that the given condition is true as a double value between + * 0.0 and 1.0. + * @param condition the simple condition without any && or || operators + * @return the condition + */ @NodeIntrinsic public static boolean probability(double probability, boolean condition) { + assert probability >= 0.0 && probability <= 1.0; return condition; }