# HG changeset patch # User Christian Wimmer # Date 1331063744 28800 # Node ID 44d746dc51bff61d9726d7ab7cf4f571a6aab72f # Parent 5733884ef8190e05248da6e598838d62837b664f Fix performance regression: remove unnecessary restriction of JSR parsing diff -r 5733884ef819 -r 44d746dc51bf graal/com.oracle.max.graal.java/src/com/oracle/max/graal/java/BciBlockMapping.java --- a/graal/com.oracle.max.graal.java/src/com/oracle/max/graal/java/BciBlockMapping.java Tue Mar 06 19:17:52 2012 +0100 +++ b/graal/com.oracle.max.graal.java/src/com/oracle/max/graal/java/BciBlockMapping.java Tue Mar 06 11:55:44 2012 -0800 @@ -457,6 +457,7 @@ block.successors.add(block.retSuccessor); assert block.retSuccessor != block.jsrSuccessor; } + Debug.log("JSR alternatives block %s sux %s jsrSux %s retSux %s jsrScope %s", block, block.successors, block.jsrSuccessor, block.retSuccessor, block.jsrScope); if (block.jsrSuccessor != null || !scope.isEmpty()) { for (int i = 0; i < block.successors.size(); i++) { @@ -468,7 +469,7 @@ if (successor == block.retSuccessor) { nextScope = scope.pop(); } - if (!successor.jsrScope.isEmpty()) { + if (!successor.jsrScope.isPrefixOf(nextScope)) { throw new JsrNotSupportedBailout("unstructured control flow (" + successor.jsrScope + " " + nextScope + ")"); } if (!nextScope.isEmpty()) { diff -r 5733884ef819 -r 44d746dc51bf graal/com.oracle.max.graal.java/src/com/oracle/max/graal/java/JsrScope.java --- a/graal/com.oracle.max.graal.java/src/com/oracle/max/graal/java/JsrScope.java Tue Mar 06 19:17:52 2012 +0100 +++ b/graal/com.oracle.max.graal.java/src/com/oracle/max/graal/java/JsrScope.java Tue Mar 06 11:55:44 2012 -0800 @@ -51,6 +51,10 @@ return scope == 0; } + public boolean isPrefixOf(JsrScope other) { + return (scope & other.scope) == scope; + } + public JsrScope pop() { return new JsrScope(scope >>> 16); }