changeset 22191:3c32af2369d2

More accurate assertion in LIRKind.merge.
author Roland Schatz <roland.schatz@oracle.com>
date Thu, 09 Jul 2015 14:29:51 +0200
parents ffe1fd7ff6d7
children 488d54275360
files jvmci/jdk.internal.jvmci.meta/src/jdk/internal/jvmci/meta/LIRKind.java
diffstat 1 files changed, 14 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/jvmci/jdk.internal.jvmci.meta/src/jdk/internal/jvmci/meta/LIRKind.java	Wed Jul 08 17:26:14 2015 -0700
+++ b/jvmci/jdk.internal.jvmci.meta/src/jdk/internal/jvmci/meta/LIRKind.java	Thu Jul 09 14:29:51 2015 +0200
@@ -150,14 +150,13 @@
 
         for (LIRKind kind : kinds) {
 
-            assert mergeKind == null || verifyMoveKinds(mergeKind, kind) : String.format("Input kinds do not match %s vs. %s", mergeKind, kind);
-
             if (kind.isDerivedReference()) {
                 /**
                  * Kind is a derived reference therefore the result can only be also a derived
                  * reference.
                  */
-                return kind;
+                mergeKind = kind;
+                break;
             }
             if (mergeKind == null) {
                 mergeKind = kind;
@@ -171,7 +170,8 @@
                      * Inputs consists of values and references. Make the result a derived
                      * reference.
                      */
-                    return mergeKind.makeDerivedReference();
+                    mergeKind = mergeKind.makeDerivedReference();
+                    break;
                 }
                 /* Check that other inputs are also values. */
             } else {
@@ -180,17 +180,25 @@
                     /*
                      * Reference maps do not match so the result can only be a derived reference.
                      */
-                    return mergeKind.makeDerivedReference();
+                    mergeKind = mergeKind.makeDerivedReference();
+                    break;
                 }
             }
 
         }
-        assert mergeKind != null;
+        assert mergeKind != null && verifyMerge(mergeKind, kinds);
 
         // all inputs are values or references, just return one of them
         return mergeKind;
     }
 
+    private static boolean verifyMerge(LIRKind mergeKind, Iterable<LIRKind> kinds) {
+        for (LIRKind kind : kinds) {
+            assert mergeKind == null || verifyMoveKinds(mergeKind, kind) : String.format("Input kinds do not match %s vs. %s", mergeKind, kind);
+        }
+        return true;
+    }
+
     /**
      * Create a new {@link LIRKind} with the same reference information and a new
      * {@linkplain #getPlatformKind platform kind}. If the new kind is a longer vector than this,