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);
     }