Mercurial > hg > truffle
changeset 5035:44d746dc51bf
Fix performance regression: remove unnecessary restriction of JSR parsing
author | Christian Wimmer <Christian.Wimmer@Oracle.com> |
---|---|
date | Tue, 06 Mar 2012 11:55:44 -0800 |
parents | 5733884ef819 |
children | d0d0dfbebd03 |
files | graal/com.oracle.max.graal.java/src/com/oracle/max/graal/java/BciBlockMapping.java graal/com.oracle.max.graal.java/src/com/oracle/max/graal/java/JsrScope.java |
diffstat | 2 files changed, 6 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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()) {
--- 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); }