diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java @ 11442:2868b55001d4

Truffle-DSL: fixed specializationg grouping failed with guards using base types.
author Christian Humer <christian.humer@gmail.com>
date Wed, 28 Aug 2013 01:45:13 +0200
parents efe58aa92f86
children b33783cbd8ce
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java	Tue Aug 27 23:06:24 2013 +0200
+++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java	Wed Aug 28 01:45:13 2013 +0200
@@ -1545,7 +1545,7 @@
                 return true;
             }
             SpecializationGroup previous = group.getPreviousGroup();
-            if (previous == null || previous.getElseConnectableGuard() == null) {
+            if (previous == null || previous.getElseConnectableGuards().isEmpty()) {
                 return true;
             }
 
@@ -1571,7 +1571,7 @@
             String guardsAnd = "";
             String guardsCastAnd = "";
 
-            GuardData elseGuard = group.getElseConnectableGuard();
+            List<GuardData> elseGuards = group.getElseConnectableGuards();
 
             boolean minimumState = checkMinimumState;
             if (minimumState) {
@@ -1643,7 +1643,7 @@
             }
 
             for (GuardData guard : group.getGuards()) {
-                if (elseGuard == guard) {
+                if (elseGuards.contains(guard)) {
                     continue;
                 }
 
@@ -1656,17 +1656,17 @@
                 }
             }
 
-            int ifCount = startGuardIf(builder, guardsBuilder, 0, elseGuard);
+            int ifCount = startGuardIf(builder, guardsBuilder, 0, elseGuards);
             builder.tree(castBuilder.getRoot());
-            ifCount = startGuardIf(builder, guardsCastBuilder, ifCount, elseGuard);
+            ifCount = startGuardIf(builder, guardsCastBuilder, ifCount, elseGuards);
             return ifCount;
         }
 
-        private int startGuardIf(CodeTreeBuilder builder, CodeTreeBuilder conditionBuilder, int ifCount, GuardData elseGuard) {
+        private int startGuardIf(CodeTreeBuilder builder, CodeTreeBuilder conditionBuilder, int ifCount, List<GuardData> elseGuard) {
             int newIfCount = ifCount;
 
             if (!conditionBuilder.isEmpty()) {
-                if (ifCount == 0 && elseGuard != null) {
+                if (ifCount == 0 && !elseGuard.isEmpty()) {
                     builder.startElseIf();
                 } else {
                     builder.startIf();
@@ -1674,7 +1674,7 @@
                 builder.tree(conditionBuilder.getRoot());
                 builder.end().startBlock();
                 newIfCount++;
-            } else if (ifCount == 0 && elseGuard != null) {
+            } else if (ifCount == 0 && !elseGuard.isEmpty()) {
                 builder.startElseBlock();
                 newIfCount++;
             }