# HG changeset patch # User Andreas Woess # Date 1375982922 -7200 # Node ID ac59bdde11945b0010f55bc7c09a6957dbd55b60 # Parent ceb2703b40b86abda76a6ec5fb23303c98b03793 TruffleCache: do not expand assertion paths by default. diff -r ceb2703b40b8 -r ac59bdde1194 graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java --- a/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java Thu Aug 08 18:59:09 2013 +0200 +++ b/graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java Thu Aug 08 19:28:42 2013 +0200 @@ -36,6 +36,7 @@ import com.oracle.graal.graph.Node; import com.oracle.graal.java.*; import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.nodes.java.MethodCallTargetNode.InvokeKind; import com.oracle.graal.nodes.spi.*; @@ -218,6 +219,8 @@ if (next instanceof InvokeWithExceptionNode) { InvokeWithExceptionNode invokeWithExceptionNode = (InvokeWithExceptionNode) next; next = invokeWithExceptionNode.next(); + } else if (next instanceof IfNode && isAssertionsEnabledCondition(((IfNode) next).condition())) { + next = ((IfNode) next).falseSuccessor(); } else if (next instanceof ControlSplitNode) { ControlSplitNode controlSplitNode = (ControlSplitNode) next; AbstractBeginNode maxProbNode = null; @@ -246,6 +249,19 @@ } } + private static boolean isAssertionsEnabledCondition(LogicNode condition) { + if (condition instanceof IntegerEqualsNode) { + IntegerEqualsNode equalsNode = (IntegerEqualsNode) condition; + if (equalsNode.x() instanceof LoadFieldNode && equalsNode.y().isConstant()) { + LoadFieldNode loadFieldNode = (LoadFieldNode) equalsNode.x(); + if (loadFieldNode.isStatic() && loadFieldNode.field().getName().equals("$assertionsDisabled") && loadFieldNode.field().isSynthetic()) { + return ((ConstantNode) equalsNode.y()).value.equals(Constant.INT_0); + } + } + } + return false; + } + private FixedNode expandInvoke(Invoke invoke) { if (invoke.callTarget() instanceof MethodCallTargetNode) { final MethodCallTargetNode methodCallTargetNode = (MethodCallTargetNode) invoke.callTarget();