# HG changeset patch # User Gilles Duboscq # Date 1378822415 -7200 # Node ID 9e12e51fe7b2494a07ef7341360f2fae1f9c63c0 # Parent 454dc34d041c9e585f4a62f8cc8a248cf96f176f Add helper methods with negations for inputs in LogicNode. Use helper method in CheckCastNode lowering diff -r 454dc34d041c -r 9e12e51fe7b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicNode.java Tue Sep 10 14:32:04 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/LogicNode.java Tue Sep 10 16:13:35 2013 +0200 @@ -32,12 +32,20 @@ } public static LogicNode and(LogicNode a, LogicNode b, double shortCircuitProbability) { + return and(a, false, b, false, shortCircuitProbability); + } + + public static LogicNode and(LogicNode a, boolean negateA, LogicNode b, boolean negateB, double shortCircuitProbability) { StructuredGraph graph = a.graph(); - ShortCircuitOrNode notAorNotB = graph.unique(new ShortCircuitOrNode(a, true, b, true, shortCircuitProbability)); + ShortCircuitOrNode notAorNotB = graph.unique(new ShortCircuitOrNode(a, !negateA, b, !negateB, shortCircuitProbability)); return graph.unique(new LogicNegationNode(notAorNotB)); } public static LogicNode or(LogicNode a, LogicNode b, double shortCircuitProbability) { - return a.graph().unique(new ShortCircuitOrNode(a, false, b, false, shortCircuitProbability)); + return or(a, false, b, false, shortCircuitProbability); + } + + public static LogicNode or(LogicNode a, boolean negateA, LogicNode b, boolean negateB, double shortCircuitProbability) { + return a.graph().unique(new ShortCircuitOrNode(a, negateA, b, negateB, shortCircuitProbability)); } } diff -r 454dc34d041c -r 9e12e51fe7b2 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Tue Sep 10 14:32:04 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/CheckCastNode.java Tue Sep 10 16:13:35 2013 +0200 @@ -118,7 +118,7 @@ } else { // TODO (ds) replace with probability of null-seen when available double shortCircuitProbability = NOT_FREQUENT_PROBABILITY; - condition = graph().unique(new ShortCircuitOrNode(graph().unique(new IsNullNode(object)), false, typeTest, false, shortCircuitProbability)); + condition = LogicNode.or(graph().unique(new IsNullNode(object)), typeTest, shortCircuitProbability); } } GuardingPiNode checkedObject = graph().add(new GuardingPiNode(object, condition, false, forStoreCheck ? ArrayStoreException : ClassCastException, InvalidateReprofile, stamp));