Mercurial > hg > truffle
changeset 11268:ac59bdde1194
TruffleCache: do not expand assertion paths by default.
author | Andreas Woess <andreas.woess@jku.at> |
---|---|
date | Thu, 08 Aug 2013 19:28:42 +0200 |
parents | ceb2703b40b8 |
children | f00c85ee46a2 |
files | graal/com.oracle.graal.truffle/src/com/oracle/graal/truffle/TruffleCache.java |
diffstat | 1 files changed, 16 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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();