# HG changeset patch # User Roland Schatz # Date 1436444991 -7200 # Node ID 3c32af2369d2bcc1a6a2a8abc56d7947f715b8c1 # Parent ffe1fd7ff6d7204a53b8ae6a2f32c5f8a3ee0b17 More accurate assertion in LIRKind.merge. diff -r ffe1fd7ff6d7 -r 3c32af2369d2 jvmci/jdk.internal.jvmci.meta/src/jdk/internal/jvmci/meta/LIRKind.java --- 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 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,