# HG changeset patch # User Roland Schatz # Date 1414670613 -3600 # Node ID 8652481a11108db0826f835b43ac50fc5c36cf44 # Parent 9619ba4daf4cd9935a1847b089cf6f32e1ef0acc Introduce new Constant interface for use in high-level graph. diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/CodeCacheProvider.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/CodeCacheProvider.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/CodeCacheProvider.java Thu Oct 30 13:03:33 2014 +0100 @@ -85,10 +85,9 @@ boolean needsDataPatch(JavaConstant constant); /** - * Create a {@link Data} item for a {@link JavaConstant}, that can be used in a - * {@link DataPatch}. + * Create a {@link Data} item for a {@link Constant}, that can be used in a {@link DataPatch}. */ - Data createDataItem(JavaConstant constant); + Data createDataItem(Constant constant); /** * Gets a description of the target architecture. diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Constant.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Constant.java Thu Oct 30 13:03:33 2014 +0100 @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.api.meta; + +/** + * Represents a compile-time constant (boxed) value within the compiler. + */ +public interface Constant { + + boolean isDefaultForKind(); + + String toValueString(); +} diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ConstantReflectionProvider.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ConstantReflectionProvider.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/ConstantReflectionProvider.java Thu Oct 30 13:03:33 2014 +0100 @@ -38,7 +38,7 @@ * {@link Boolean#FALSE false} if they are different. Returns {@code null} if the constants * cannot be compared at this point. */ - Boolean constantEquals(JavaConstant x, JavaConstant y); + Boolean constantEquals(Constant x, Constant y); /** * Returns the length of the array constant. Returns {@code null} if the constant is not an diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/JavaConstant.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/JavaConstant.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/JavaConstant.java Thu Oct 30 13:03:33 2014 +0100 @@ -25,10 +25,10 @@ /** * Represents a constant (boxed) value, such as an integer, floating point number, or object * reference, within the compiler and across the compiler/runtime interface. Exports a set of - * {@code Constant} instances that represent frequently used constant values, such as + * {@code JavaConstant} instances that represent frequently used constant values, such as * {@link #NULL_OBJECT}. */ -public abstract class JavaConstant extends Value { +public abstract class JavaConstant extends Value implements Constant { private static final long serialVersionUID = -6355452536852663986L; @@ -61,6 +61,14 @@ */ public abstract boolean isNull(); + public static boolean isNull(Constant c) { + if (c instanceof JavaConstant) { + return ((JavaConstant) c).isNull(); + } else { + return false; + } + } + /** * Checks whether this constant is non-null. * diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/VMConstant.java --- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/VMConstant.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/VMConstant.java Thu Oct 30 13:03:33 2014 +0100 @@ -22,5 +22,5 @@ */ package com.oracle.graal.api.meta; -public interface VMConstant { +public interface VMConstant extends Constant { } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/calc/Condition.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/calc/Condition.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/calc/Condition.java Thu Oct 30 13:03:33 2014 +0100 @@ -336,16 +336,18 @@ * @return true if the comparison is known to be true, false if the comparison is known to be * false */ - public boolean foldCondition(JavaConstant lt, JavaConstant rt, ConstantReflectionProvider constantReflection, boolean unorderedIsTrue) { + public boolean foldCondition(Constant lt, Constant rt, ConstantReflectionProvider constantReflection, boolean unorderedIsTrue) { if (lt instanceof PrimitiveConstant) { - switch (lt.getKind()) { + PrimitiveConstant lp = (PrimitiveConstant) lt; + PrimitiveConstant rp = (PrimitiveConstant) rt; + switch (lp.getKind()) { case Boolean: case Byte: case Char: case Short: case Int: { - int x = lt.asInt(); - int y = rt.asInt(); + int x = lp.asInt(); + int y = rp.asInt(); switch (this) { case EQ: return x == y; @@ -372,8 +374,8 @@ } } case Long: { - long x = lt.asLong(); - long y = rt.asLong(); + long x = lp.asLong(); + long y = rp.asLong(); switch (this) { case EQ: return x == y; @@ -400,8 +402,8 @@ } } case Float: { - float x = lt.asFloat(); - float y = rt.asFloat(); + float x = lp.asFloat(); + float y = rp.asFloat(); if (Float.isNaN(x) || Float.isNaN(y)) { return unorderedIsTrue; } @@ -423,8 +425,8 @@ } } case Double: { - double x = lt.asDouble(); - double y = rt.asDouble(); + double x = lp.asDouble(); + double y = rp.asDouble(); if (Double.isNaN(x) || Double.isNaN(y)) { return unorderedIsTrue; } @@ -446,7 +448,7 @@ } } default: - throw new GraalInternalError("expected value kind %s while folding condition: %s", lt.getKind(), this); + throw new GraalInternalError("expected value kind %s while folding condition: %s", lp.getKind(), this); } } else { Boolean equal = constantReflection.constantEquals(lt, rt); diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/AbstractObjectStamp.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/AbstractObjectStamp.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/AbstractObjectStamp.java Thu Oct 30 13:03:33 2014 +0100 @@ -53,9 +53,10 @@ } @Override - public Stamp constant(JavaConstant c, MetaAccessProvider meta) { - ResolvedJavaType constType = c.isNull() ? null : meta.lookupJavaType(c); - return copyWith(constType, c.isNonNull(), c.isNonNull(), c.isNull()); + public Stamp constant(Constant c, MetaAccessProvider meta) { + JavaConstant jc = (JavaConstant) c; + ResolvedJavaType constType = jc.isNull() ? null : meta.lookupJavaType(jc); + return copyWith(constType, jc.isNonNull(), jc.isNonNull(), jc.isNull()); } @Override diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ArithmeticOpTable.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ArithmeticOpTable.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/ArithmeticOpTable.java Thu Oct 30 13:03:33 2014 +0100 @@ -278,9 +278,9 @@ } /** - * Apply the operation to a {@link JavaConstant}. + * Apply the operation to a {@link Constant}. */ - public abstract JavaConstant foldConstant(JavaConstant value); + public abstract Constant foldConstant(Constant value); /** * Apply the operation to a {@link Stamp}. @@ -359,9 +359,9 @@ } /** - * Apply the operation to two {@linkplain JavaConstant Constants}. + * Apply the operation to two {@linkplain Constant Constants}. */ - public abstract JavaConstant foldConstant(JavaConstant a, JavaConstant b); + public abstract Constant foldConstant(Constant a, Constant b); /** * Apply the operation to two {@linkplain Stamp Stamps}. @@ -388,13 +388,13 @@ } /** - * Check whether a {@link JavaConstant} is a neutral element for this operation. A neutral + * Check whether a {@link Constant} is a neutral element for this operation. A neutral * element is any element {@code n} where {@code a . n == a} for all a. * - * @param n the {@link JavaConstant} that should be tested + * @param n the {@link Constant} that should be tested * @return true iff for all {@code a}: {@code a . n == a} */ - public boolean isNeutral(JavaConstant n) { + public boolean isNeutral(Constant n) { return false; } @@ -407,7 +407,7 @@ * @return a unique {@code z} such that {@code z == a . a} for each {@code a} in * {@code stamp} if it exists, otherwise {@code null} */ - public JavaConstant getZero(Stamp stamp) { + public Constant getZero(Stamp stamp) { return null; } } @@ -453,7 +453,7 @@ super(op); } - public abstract JavaConstant foldConstant(int inputBits, int resultBits, JavaConstant value); + public abstract Constant foldConstant(int inputBits, int resultBits, Constant value); public abstract Stamp foldStamp(int inputBits, int resultBits, Stamp stamp); } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/FloatStamp.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/FloatStamp.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/FloatStamp.java Thu Oct 30 13:03:33 2014 +0100 @@ -61,9 +61,10 @@ } @Override - public Stamp constant(JavaConstant c, MetaAccessProvider meta) { - assert c.getKind().isNumericFloat() && c.getKind().getBitCount() == getBits(); - return StampFactory.forConstant(c); + public Stamp constant(Constant c, MetaAccessProvider meta) { + JavaConstant jc = (JavaConstant) c; + assert jc.getKind().isNumericFloat() && jc.getKind().getBitCount() == getBits(); + return StampFactory.forConstant(jc); } @Override @@ -260,7 +261,8 @@ new UnaryOp.Neg() { @Override - public JavaConstant foldConstant(JavaConstant value) { + public Constant foldConstant(Constant c) { + PrimitiveConstant value = (PrimitiveConstant) c; switch (value.getKind()) { case Float: return JavaConstant.forFloat(-value.asFloat()); @@ -281,7 +283,9 @@ new BinaryOp.Add(false, true) { @Override - public JavaConstant foldConstant(JavaConstant a, JavaConstant b) { + public Constant foldConstant(Constant const1, Constant const2) { + PrimitiveConstant a = (PrimitiveConstant) const1; + PrimitiveConstant b = (PrimitiveConstant) const2; assert a.getKind() == b.getKind(); switch (a.getKind()) { case Float: @@ -300,7 +304,8 @@ } @Override - public boolean isNeutral(JavaConstant n) { + public boolean isNeutral(Constant value) { + PrimitiveConstant n = (PrimitiveConstant) value; switch (n.getKind()) { case Float: return Float.compare(n.asFloat(), -0.0f) == 0; @@ -315,7 +320,9 @@ new BinaryOp.Sub(false, false) { @Override - public JavaConstant foldConstant(JavaConstant a, JavaConstant b) { + public Constant foldConstant(Constant const1, Constant const2) { + PrimitiveConstant a = (PrimitiveConstant) const1; + PrimitiveConstant b = (PrimitiveConstant) const2; assert a.getKind() == b.getKind(); switch (a.getKind()) { case Float: @@ -334,7 +341,8 @@ } @Override - public boolean isNeutral(JavaConstant n) { + public boolean isNeutral(Constant value) { + PrimitiveConstant n = (PrimitiveConstant) value; switch (n.getKind()) { case Float: return Float.compare(n.asFloat(), 0.0f) == 0; @@ -349,7 +357,9 @@ new BinaryOp.Mul(false, true) { @Override - public JavaConstant foldConstant(JavaConstant a, JavaConstant b) { + public Constant foldConstant(Constant const1, Constant const2) { + PrimitiveConstant a = (PrimitiveConstant) const1; + PrimitiveConstant b = (PrimitiveConstant) const2; assert a.getKind() == b.getKind(); switch (a.getKind()) { case Float: @@ -368,7 +378,8 @@ } @Override - public boolean isNeutral(JavaConstant n) { + public boolean isNeutral(Constant value) { + PrimitiveConstant n = (PrimitiveConstant) value; switch (n.getKind()) { case Float: return Float.compare(n.asFloat(), 1.0f) == 0; @@ -383,7 +394,9 @@ new BinaryOp.Div(false, false) { @Override - public JavaConstant foldConstant(JavaConstant a, JavaConstant b) { + public Constant foldConstant(Constant const1, Constant const2) { + PrimitiveConstant a = (PrimitiveConstant) const1; + PrimitiveConstant b = (PrimitiveConstant) const2; assert a.getKind() == b.getKind(); switch (a.getKind()) { case Float: @@ -402,7 +415,8 @@ } @Override - public boolean isNeutral(JavaConstant n) { + public boolean isNeutral(Constant value) { + PrimitiveConstant n = (PrimitiveConstant) value; switch (n.getKind()) { case Float: return Float.compare(n.asFloat(), 1.0f) == 0; @@ -417,7 +431,9 @@ new BinaryOp.Rem(false, false) { @Override - public JavaConstant foldConstant(JavaConstant a, JavaConstant b) { + public Constant foldConstant(Constant const1, Constant const2) { + PrimitiveConstant a = (PrimitiveConstant) const1; + PrimitiveConstant b = (PrimitiveConstant) const2; assert a.getKind() == b.getKind(); switch (a.getKind()) { case Float: @@ -443,7 +459,8 @@ new FloatConvertOp(F2I) { @Override - public JavaConstant foldConstant(JavaConstant value) { + public Constant foldConstant(Constant c) { + PrimitiveConstant value = (PrimitiveConstant) c; return JavaConstant.forInt((int) value.asFloat()); } @@ -457,7 +474,8 @@ new FloatConvertOp(F2L) { @Override - public JavaConstant foldConstant(JavaConstant value) { + public Constant foldConstant(Constant c) { + PrimitiveConstant value = (PrimitiveConstant) c; return JavaConstant.forLong((long) value.asFloat()); } @@ -471,7 +489,8 @@ new FloatConvertOp(D2I) { @Override - public JavaConstant foldConstant(JavaConstant value) { + public Constant foldConstant(Constant c) { + PrimitiveConstant value = (PrimitiveConstant) c; return JavaConstant.forInt((int) value.asDouble()); } @@ -485,7 +504,8 @@ new FloatConvertOp(D2L) { @Override - public JavaConstant foldConstant(JavaConstant value) { + public Constant foldConstant(Constant c) { + PrimitiveConstant value = (PrimitiveConstant) c; return JavaConstant.forLong((long) value.asDouble()); } @@ -499,7 +519,8 @@ new FloatConvertOp(F2D) { @Override - public JavaConstant foldConstant(JavaConstant value) { + public Constant foldConstant(Constant c) { + PrimitiveConstant value = (PrimitiveConstant) c; return JavaConstant.forDouble(value.asFloat()); } @@ -513,7 +534,8 @@ new FloatConvertOp(D2F) { @Override - public JavaConstant foldConstant(JavaConstant value) { + public Constant foldConstant(Constant c) { + PrimitiveConstant value = (PrimitiveConstant) c; return JavaConstant.forFloat((float) value.asDouble()); } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IllegalStamp.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IllegalStamp.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IllegalStamp.java Thu Oct 30 13:03:33 2014 +0100 @@ -55,7 +55,7 @@ } @Override - public Stamp constant(JavaConstant c, MetaAccessProvider meta) { + public Stamp constant(Constant c, MetaAccessProvider meta) { throw GraalInternalError.shouldNotReachHere("illegal stamp has no value"); } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IntegerStamp.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IntegerStamp.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IntegerStamp.java Thu Oct 30 13:03:33 2014 +0100 @@ -89,8 +89,8 @@ } @Override - public Stamp constant(JavaConstant c, MetaAccessProvider meta) { - long value = c.asLong(); + public Stamp constant(Constant c, MetaAccessProvider meta) { + long value = ((PrimitiveConstant) c).asLong(); return StampFactory.forInteger(getBits(), value, value); } @@ -373,8 +373,9 @@ new UnaryOp.Neg() { @Override - public JavaConstant foldConstant(JavaConstant value) { - return JavaConstant.forIntegerKind(value.getKind(), -value.asLong()); + public Constant foldConstant(Constant value) { + PrimitiveConstant c = (PrimitiveConstant) value; + return PrimitiveConstant.forIntegerKind(c.getKind(), -c.asLong()); } @Override @@ -393,7 +394,9 @@ new BinaryOp.Add(true, true) { @Override - public JavaConstant foldConstant(JavaConstant a, JavaConstant b) { + public Constant foldConstant(Constant const1, Constant const2) { + PrimitiveConstant a = (PrimitiveConstant) const1; + PrimitiveConstant b = (PrimitiveConstant) const2; assert a.getKind() == b.getKind(); return JavaConstant.forIntegerKind(a.getKind(), a.asLong() + b.asLong()); } @@ -442,7 +445,8 @@ } @Override - public boolean isNeutral(JavaConstant n) { + public boolean isNeutral(Constant value) { + PrimitiveConstant n = (PrimitiveConstant) value; return n.asLong() == 0; } }, @@ -450,7 +454,9 @@ new BinaryOp.Sub(true, false) { @Override - public JavaConstant foldConstant(JavaConstant a, JavaConstant b) { + public Constant foldConstant(Constant const1, Constant const2) { + PrimitiveConstant a = (PrimitiveConstant) const1; + PrimitiveConstant b = (PrimitiveConstant) const2; assert a.getKind() == b.getKind(); return JavaConstant.forIntegerKind(a.getKind(), a.asLong() - b.asLong()); } @@ -461,12 +467,13 @@ } @Override - public boolean isNeutral(JavaConstant n) { + public boolean isNeutral(Constant value) { + PrimitiveConstant n = (PrimitiveConstant) value; return n.asLong() == 0; } @Override - public JavaConstant getZero(Stamp s) { + public Constant getZero(Stamp s) { IntegerStamp stamp = (IntegerStamp) s; return JavaConstant.forPrimitiveInt(stamp.getBits(), 0); } @@ -475,7 +482,9 @@ new BinaryOp.Mul(true, true) { @Override - public JavaConstant foldConstant(JavaConstant a, JavaConstant b) { + public Constant foldConstant(Constant const1, Constant const2) { + PrimitiveConstant a = (PrimitiveConstant) const1; + PrimitiveConstant b = (PrimitiveConstant) const2; assert a.getKind() == b.getKind(); return JavaConstant.forIntegerKind(a.getKind(), a.asLong() * b.asLong()); } @@ -495,7 +504,8 @@ } @Override - public boolean isNeutral(JavaConstant n) { + public boolean isNeutral(Constant value) { + PrimitiveConstant n = (PrimitiveConstant) value; return n.asLong() == 1; } }, @@ -503,7 +513,9 @@ new BinaryOp.Div(true, false) { @Override - public JavaConstant foldConstant(JavaConstant a, JavaConstant b) { + public Constant foldConstant(Constant const1, Constant const2) { + PrimitiveConstant a = (PrimitiveConstant) const1; + PrimitiveConstant b = (PrimitiveConstant) const2; assert a.getKind() == b.getKind(); return JavaConstant.forIntegerKind(a.getKind(), a.asLong() / b.asLong()); } @@ -523,7 +535,8 @@ } @Override - public boolean isNeutral(JavaConstant n) { + public boolean isNeutral(Constant value) { + PrimitiveConstant n = (PrimitiveConstant) value; return n.asLong() == 1; } }, @@ -531,7 +544,9 @@ new BinaryOp.Rem(false, false) { @Override - public JavaConstant foldConstant(JavaConstant a, JavaConstant b) { + public Constant foldConstant(Constant const1, Constant const2) { + PrimitiveConstant a = (PrimitiveConstant) const1; + PrimitiveConstant b = (PrimitiveConstant) const2; assert a.getKind() == b.getKind(); return JavaConstant.forIntegerKind(a.getKind(), a.asLong() % b.asLong()); } @@ -562,7 +577,8 @@ new UnaryOp.Not() { @Override - public JavaConstant foldConstant(JavaConstant value) { + public Constant foldConstant(Constant c) { + PrimitiveConstant value = (PrimitiveConstant) c; return JavaConstant.forIntegerKind(value.getKind(), ~value.asLong()); } @@ -578,7 +594,9 @@ new BinaryOp.And(true, true) { @Override - public JavaConstant foldConstant(JavaConstant a, JavaConstant b) { + public Constant foldConstant(Constant const1, Constant const2) { + PrimitiveConstant a = (PrimitiveConstant) const1; + PrimitiveConstant b = (PrimitiveConstant) const2; assert a.getKind() == b.getKind(); return JavaConstant.forIntegerKind(a.getKind(), a.asLong() & b.asLong()); } @@ -592,7 +610,8 @@ } @Override - public boolean isNeutral(JavaConstant n) { + public boolean isNeutral(Constant value) { + PrimitiveConstant n = (PrimitiveConstant) value; int bits = n.getKind().getBitCount(); long mask = CodeUtil.mask(bits); return (n.asLong() & mask) == mask; @@ -602,7 +621,9 @@ new BinaryOp.Or(true, true) { @Override - public JavaConstant foldConstant(JavaConstant a, JavaConstant b) { + public Constant foldConstant(Constant const1, Constant const2) { + PrimitiveConstant a = (PrimitiveConstant) const1; + PrimitiveConstant b = (PrimitiveConstant) const2; assert a.getKind() == b.getKind(); return JavaConstant.forIntegerKind(a.getKind(), a.asLong() | b.asLong()); } @@ -616,7 +637,8 @@ } @Override - public boolean isNeutral(JavaConstant n) { + public boolean isNeutral(Constant value) { + PrimitiveConstant n = (PrimitiveConstant) value; return n.asLong() == 0; } }, @@ -624,7 +646,9 @@ new BinaryOp.Xor(true, true) { @Override - public JavaConstant foldConstant(JavaConstant a, JavaConstant b) { + public Constant foldConstant(Constant const1, Constant const2) { + PrimitiveConstant a = (PrimitiveConstant) const1; + PrimitiveConstant b = (PrimitiveConstant) const2; assert a.getKind() == b.getKind(); return JavaConstant.forIntegerKind(a.getKind(), a.asLong() ^ b.asLong()); } @@ -642,12 +666,13 @@ } @Override - public boolean isNeutral(JavaConstant n) { + public boolean isNeutral(Constant value) { + PrimitiveConstant n = (PrimitiveConstant) value; return n.asLong() == 0; } @Override - public JavaConstant getZero(Stamp s) { + public Constant getZero(Stamp s) { IntegerStamp stamp = (IntegerStamp) s; return JavaConstant.forPrimitiveInt(stamp.getBits(), 0); } @@ -656,7 +681,8 @@ new IntegerConvertOp.ZeroExtend() { @Override - public JavaConstant foldConstant(int inputBits, int resultBits, JavaConstant value) { + public Constant foldConstant(int inputBits, int resultBits, Constant c) { + PrimitiveConstant value = (PrimitiveConstant) c; return JavaConstant.forPrimitiveInt(resultBits, CodeUtil.zeroExtend(value.asLong(), inputBits)); } @@ -685,7 +711,8 @@ new IntegerConvertOp.SignExtend() { @Override - public JavaConstant foldConstant(int inputBits, int resultBits, JavaConstant value) { + public Constant foldConstant(int inputBits, int resultBits, Constant c) { + PrimitiveConstant value = (PrimitiveConstant) c; return JavaConstant.forPrimitiveInt(resultBits, CodeUtil.signExtend(value.asLong(), inputBits)); } @@ -706,7 +733,8 @@ new IntegerConvertOp.Narrow() { @Override - public JavaConstant foldConstant(int inputBits, int resultBits, JavaConstant value) { + public Constant foldConstant(int inputBits, int resultBits, Constant c) { + PrimitiveConstant value = (PrimitiveConstant) c; return JavaConstant.forPrimitiveInt(resultBits, CodeUtil.narrow(value.asLong(), resultBits)); } @@ -744,7 +772,8 @@ new FloatConvertOp(I2F) { @Override - public JavaConstant foldConstant(JavaConstant value) { + public Constant foldConstant(Constant c) { + PrimitiveConstant value = (PrimitiveConstant) c; return JavaConstant.forFloat(value.asInt()); } @@ -759,7 +788,8 @@ new FloatConvertOp(L2F) { @Override - public JavaConstant foldConstant(JavaConstant value) { + public Constant foldConstant(Constant c) { + PrimitiveConstant value = (PrimitiveConstant) c; return JavaConstant.forFloat(value.asLong()); } @@ -774,7 +804,8 @@ new FloatConvertOp(I2D) { @Override - public JavaConstant foldConstant(JavaConstant value) { + public Constant foldConstant(Constant c) { + PrimitiveConstant value = (PrimitiveConstant) c; return JavaConstant.forDouble(value.asInt()); } @@ -789,7 +820,8 @@ new FloatConvertOp(L2D) { @Override - public JavaConstant foldConstant(JavaConstant value) { + public Constant foldConstant(Constant c) { + PrimitiveConstant value = (PrimitiveConstant) c; return JavaConstant.forDouble(value.asLong()); } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/Stamp.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/Stamp.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/Stamp.java Thu Oct 30 13:03:33 2014 +0100 @@ -93,7 +93,7 @@ * If it is not possible to represent single value stamps, this method returns a stamp that * includes c, and is otherwise as narrow as possible. */ - public abstract Stamp constant(JavaConstant c, MetaAccessProvider meta); + public abstract Stamp constant(Constant c, MetaAccessProvider meta); /** * Test whether two stamps have the same base type. @@ -112,7 +112,7 @@ * @return the constant corresponding to the single value of this stamp and null if this stamp * can represent less or more than one value. */ - public JavaConstant asConstant() { + public Constant asConstant() { return null; } } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/VoidStamp.java --- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/VoidStamp.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/VoidStamp.java Thu Oct 30 13:03:33 2014 +0100 @@ -103,7 +103,7 @@ } @Override - public Stamp constant(JavaConstant c, MetaAccessProvider meta) { + public Stamp constant(Constant c, MetaAccessProvider meta) { throw GraalInternalError.shouldNotReachHere("void stamp has no value"); } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FlowSenReduTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FlowSenReduTest.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/FlowSenReduTest.java Thu Oct 30 13:03:33 2014 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -162,7 +162,7 @@ ConstantNode c2 = (ConstantNode) iter.next().result(); assertDeepEquals(c1, c2); - assertDeepEquals(0, c1.getValue().asInt()); + assertDeepEquals(0, c1.asJavaConstant().asInt()); } @Test @@ -222,7 +222,7 @@ ConstantNode c2 = (ConstantNode) iter.next().result(); assertDeepEquals(c1, c2); - Assert.assertTrue(c1.getValue().isNull()); + Assert.assertTrue(c1.asJavaConstant().isNull()); } /* diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/deopt/CompiledMethodTest.java --- a/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/deopt/CompiledMethodTest.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.compiler.test/src/com/oracle/graal/compiler/test/deopt/CompiledMethodTest.java Thu Oct 30 13:03:33 2014 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -56,7 +56,7 @@ new DeadCodeEliminationPhase().apply(graph); for (ConstantNode node : ConstantNode.getConstantNodes(graph)) { - if (node.getKind() == Kind.Object && " ".equals(getSnippetReflection().asObject(node.getValue()))) { + if (node.getKind() == Kind.Object && " ".equals(getSnippetReflection().asObject(node.asJavaConstant()))) { node.replace(graph, ConstantNode.forConstant(getSnippetReflection().forObject("-"), getMetaAccess(), graph)); } } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/gen/DebugInfoBuilder.java Thu Oct 30 13:03:33 2014 +0100 @@ -209,7 +209,7 @@ ValueNode unproxied = GraphUtil.unproxify(value); if (unproxied instanceof ConstantNode) { STATE_CONSTANTS.increment(); - return ((ConstantNode) unproxied).getValue(); + return unproxied.asJavaConstant(); } else if (value != null) { STATE_VARIABLES.increment(); diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/DataPatchInConstantsTest.java --- a/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/DataPatchInConstantsTest.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64.test/src/com/oracle/graal/hotspot/amd64/test/DataPatchInConstantsTest.java Thu Oct 30 13:03:33 2014 +0100 @@ -182,11 +182,11 @@ private static class LoadThroughPatchOp extends LIRInstructionBase { - final JavaConstant c; + final Constant c; final boolean compressed; @Def({REG}) AllocatableValue result; - LoadThroughPatchOp(JavaConstant c, boolean compressed, AllocatableValue result) { + LoadThroughPatchOp(Constant c, boolean compressed, AllocatableValue result) { this.c = c; this.compressed = compressed; this.result = result; diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotCodeCacheProvider.java Thu Oct 30 13:03:33 2014 +0100 @@ -256,7 +256,7 @@ return constant instanceof HotSpotMetaspaceConstant; } - public Data createDataItem(JavaConstant constant) { + public Data createDataItem(Constant constant) { int size; DataBuilder builder; if (constant instanceof VMConstant) { @@ -267,8 +267,9 @@ compressed = HotSpotObjectConstant.isCompressed(constant); raw = 0xDEADDEADDEADDEADL; } else if (constant instanceof HotSpotMetaspaceConstant) { - compressed = constant.getKind() != target.wordKind; - raw = constant.asLong(); + HotSpotMetaspaceConstant meta = (HotSpotMetaspaceConstant) constant; + compressed = meta.getKind() != target.wordKind; + raw = meta.asLong(); } else { throw GraalInternalError.shouldNotReachHere(); } @@ -286,13 +287,14 @@ buffer.putLong(raw); }; } - } else if (constant.isNull()) { + } else if (JavaConstant.isNull(constant)) { boolean compressed = HotSpotObjectConstant.isCompressed(constant); size = target.getSizeInBytes(compressed ? Kind.Int : target.wordKind); builder = DataBuilder.zero(size); } else if (constant instanceof PrimitiveConstant) { - size = target.getSizeInBytes(constant.getKind()); - builder = DataBuilder.primitive((PrimitiveConstant) constant); + PrimitiveConstant prim = (PrimitiveConstant) constant; + size = target.getSizeInBytes(prim.getKind()); + builder = DataBuilder.primitive(prim); } else { throw GraalInternalError.shouldNotReachHere(); } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstant.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstant.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstant.java Thu Oct 30 13:03:33 2014 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,10 @@ */ package com.oracle.graal.hotspot.meta; +import com.oracle.graal.api.meta.*; + /** * Marker interface for hotspot specific constants. */ -public interface HotSpotConstant { +public interface HotSpotConstant extends Constant { } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantReflectionProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantReflectionProvider.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotConstantReflectionProvider.java Thu Oct 30 13:03:33 2014 +0100 @@ -43,7 +43,7 @@ } @Override - public Boolean constantEquals(JavaConstant x, JavaConstant y) { + public Boolean constantEquals(Constant x, Constant y) { return x.equals(y); } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotObjectConstant.java Thu Oct 30 13:03:33 2014 +0100 @@ -48,26 +48,26 @@ } } - public static Object asObject(JavaConstant constant) { - if (constant.isNull()) { + public static Object asObject(Constant constant) { + if (JavaConstant.isNull(constant)) { return null; } else { return ((HotSpotObjectConstant) constant).object; } } - public static Object asBoxedValue(JavaConstant constant) { - if (constant.isNull()) { + public static Object asBoxedValue(Constant constant) { + if (JavaConstant.isNull(constant)) { return null; } else if (constant instanceof HotSpotObjectConstant) { return ((HotSpotObjectConstant) constant).object; } else { - return constant.asBoxedPrimitive(); + return ((JavaConstant) constant).asBoxedPrimitive(); } } - public static boolean isCompressed(JavaConstant constant) { - if (constant.isNull()) { + public static boolean isCompressed(Constant constant) { + if (JavaConstant.isNull(constant)) { return HotSpotCompressedNullConstant.NULL_OBJECT.equals(constant); } else { return ((HotSpotObjectConstant) constant).compressed; diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CompressionNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -73,34 +73,36 @@ return input.graph().unique(CompressionNode.create(CompressionOp.Uncompress, input, encoding)); } - private static JavaConstant compress(JavaConstant c, CompressEncoding encoding) { + private static Constant compress(Constant c, CompressEncoding encoding) { if (JavaConstant.NULL_OBJECT.equals(c)) { return HotSpotCompressedNullConstant.COMPRESSED_NULL; } else if (c instanceof HotSpotObjectConstant) { return ((HotSpotObjectConstant) c).compress(); } else if (c instanceof HotSpotMetaspaceConstant) { - assert c.getKind() == Kind.Long; - return HotSpotMetaspaceConstant.forMetaspaceObject(Kind.Int, encoding.compress(c.asLong()), HotSpotMetaspaceConstant.getMetaspaceObject(c), true); + HotSpotMetaspaceConstant meta = (HotSpotMetaspaceConstant) c; + assert meta.getKind() == Kind.Long; + return HotSpotMetaspaceConstant.forMetaspaceObject(Kind.Int, encoding.compress(meta.asLong()), HotSpotMetaspaceConstant.getMetaspaceObject(meta), true); } else { throw GraalInternalError.shouldNotReachHere("invalid constant input for compress op: " + c); } } - private static JavaConstant uncompress(JavaConstant c, CompressEncoding encoding) { + private static Constant uncompress(Constant c, CompressEncoding encoding) { if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(c)) { return JavaConstant.NULL_OBJECT; } else if (c instanceof HotSpotObjectConstant) { return ((HotSpotObjectConstant) c).uncompress(); } else if (c instanceof HotSpotMetaspaceConstant) { - assert c.getKind() == Kind.Int; - return HotSpotMetaspaceConstant.forMetaspaceObject(Kind.Long, encoding.uncompress(c.asInt()), HotSpotMetaspaceConstant.getMetaspaceObject(c), false); + HotSpotMetaspaceConstant meta = (HotSpotMetaspaceConstant) c; + assert meta.getKind() == Kind.Int; + return HotSpotMetaspaceConstant.forMetaspaceObject(Kind.Long, encoding.uncompress(meta.asInt()), HotSpotMetaspaceConstant.getMetaspaceObject(meta), false); } else { throw GraalInternalError.shouldNotReachHere("invalid constant input for uncompress op: " + c); } } @Override - public JavaConstant convert(JavaConstant c) { + public Constant convert(Constant c) { switch (op) { case Compress: return compress(c, encoding); @@ -112,7 +114,7 @@ } @Override - public JavaConstant reverse(JavaConstant c) { + public Constant reverse(Constant c) { switch (op) { case Compress: return uncompress(c, encoding); diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyCallNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyCallNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ArrayCopyCallNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -193,8 +193,8 @@ // Can treat as disjoint disjoint = true; } - JavaConstant constantSrc = srcPos.stamp().asConstant(); - JavaConstant constantDst = destPos.stamp().asConstant(); + PrimitiveConstant constantSrc = (PrimitiveConstant) srcPos.stamp().asConstant(); + PrimitiveConstant constantDst = (PrimitiveConstant) destPos.stamp().asConstant(); if (constantSrc != null && constantDst != null) { if (!aligned) { aligned = isHeapWordAligned(constantSrc, componentKind) && isHeapWordAligned(constantDst, componentKind); diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/CompilationResultBuilder.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/CompilationResultBuilder.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/asm/CompilationResultBuilder.java Thu Oct 30 13:03:33 2014 +0100 @@ -80,7 +80,7 @@ private List exceptionInfoList; - private final IdentityHashMap dataCache; + private final IdentityHashMap dataCache; public CompilationResultBuilder(CodeCacheProvider codeCache, ForeignCallsProvider foreignCalls, FrameMap frameMap, Assembler asm, FrameContext frameContext, CompilationResult compilationResult) { this.target = codeCache.getTarget(); @@ -177,7 +177,7 @@ return asm.getPlaceholder(); } - public AbstractAddress recordDataReferenceInCode(JavaConstant constant, int alignment) { + public AbstractAddress recordDataReferenceInCode(Constant constant, int alignment) { assert constant != null; Debug.log("Constant reference in code: pos = %d, data = %s", asm.position(), constant); Data data = dataCache.get(constant); diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGenerator.java Thu Oct 30 13:03:33 2014 +0100 @@ -118,11 +118,12 @@ } @Override - public Value emitLoadConstant(LIRKind kind, JavaConstant constant) { - if (canInlineConstant(constant)) { - return constant; + public Value emitLoadConstant(LIRKind kind, Constant constant) { + JavaConstant javaConstant = (JavaConstant) constant; + if (canInlineConstant(javaConstant)) { + return javaConstant; } else { - return emitMove(constant); + return emitMove(javaConstant); } } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java --- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java Thu Oct 30 13:03:33 2014 +0100 @@ -52,7 +52,7 @@ void doBlockEnd(AbstractBlock block); - Value emitLoadConstant(LIRKind kind, JavaConstant constant); + Value emitLoadConstant(LIRKind kind, Constant constant); Value emitLoad(LIRKind kind, Value address, LIRFrameState state); diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/NegateNodeCanonicalizationTest.java --- a/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/NegateNodeCanonicalizationTest.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes.test/src/com/oracle/graal/nodes/test/NegateNodeCanonicalizationTest.java Thu Oct 30 13:03:33 2014 +0100 @@ -48,7 +48,7 @@ for (byte i : a) { ConstantNode node = ConstantNode.forByte(i, graph); JavaConstant expected = JavaConstant.forInt(-i); - assertEquals(expected, ArithmeticOpTable.forStamp(node.stamp()).getNeg().foldConstant(node.asJavaConstant())); + assertEquals(expected, ArithmeticOpTable.forStamp(node.stamp()).getNeg().foldConstant(node.asConstant())); } } @@ -58,7 +58,7 @@ for (char i : a) { ConstantNode node = ConstantNode.forChar(i, graph); JavaConstant expected = JavaConstant.forInt(-i); - assertEquals(expected, ArithmeticOpTable.forStamp(node.stamp()).getNeg().foldConstant(node.asJavaConstant())); + assertEquals(expected, ArithmeticOpTable.forStamp(node.stamp()).getNeg().foldConstant(node.asConstant())); } } @@ -68,7 +68,7 @@ for (short i : a) { ConstantNode node = ConstantNode.forShort(i, graph); JavaConstant expected = JavaConstant.forInt(-i); - assertEquals(expected, ArithmeticOpTable.forStamp(node.stamp()).getNeg().foldConstant(node.asJavaConstant())); + assertEquals(expected, ArithmeticOpTable.forStamp(node.stamp()).getNeg().foldConstant(node.asConstant())); } } @@ -78,7 +78,7 @@ for (int i : a) { ConstantNode node = ConstantNode.forInt(i, graph); JavaConstant expected = JavaConstant.forInt(-i); - assertEquals(expected, ArithmeticOpTable.forStamp(node.stamp()).getNeg().foldConstant(node.asJavaConstant())); + assertEquals(expected, ArithmeticOpTable.forStamp(node.stamp()).getNeg().foldConstant(node.asConstant())); } } @@ -88,7 +88,7 @@ for (long i : a) { ConstantNode node = ConstantNode.forLong(i, graph); JavaConstant expected = JavaConstant.forLong(-i); - assertEquals(expected, ArithmeticOpTable.forStamp(node.stamp()).getNeg().foldConstant(node.asJavaConstant())); + assertEquals(expected, ArithmeticOpTable.forStamp(node.stamp()).getNeg().foldConstant(node.asConstant())); } } @@ -98,7 +98,7 @@ for (float i : a) { ConstantNode node = ConstantNode.forFloat(i, graph); JavaConstant expected = JavaConstant.forFloat(-i); - assertEquals(expected, ArithmeticOpTable.forStamp(node.stamp()).getNeg().foldConstant(node.asJavaConstant())); + assertEquals(expected, ArithmeticOpTable.forStamp(node.stamp()).getNeg().foldConstant(node.asConstant())); } } @@ -108,7 +108,7 @@ for (double i : a) { ConstantNode node = ConstantNode.forDouble(i, graph); JavaConstant expected = JavaConstant.forDouble(-i); - assertEquals(expected, ArithmeticOpTable.forStamp(node.stamp()).getNeg().foldConstant(node.asJavaConstant())); + assertEquals(expected, ArithmeticOpTable.forStamp(node.stamp()).getNeg().foldConstant(node.asConstant())); } } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ConstantNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -36,14 +36,14 @@ import com.oracle.graal.nodes.spi.*; /** - * The {@code ConstantNode} represents a {@link JavaConstant constant}. + * The {@code ConstantNode} represents a {@link Constant constant}. */ @NodeInfo(shortName = "Const", nameTemplate = "Const({p#rawvalue})") public class ConstantNode extends FloatingNode implements LIRLowerable { private static final DebugMetric ConstantNodes = Debug.metric("ConstantNodes"); - protected final JavaConstant value; + protected final Constant value; private static ConstantNode createPrimitive(JavaConstant value) { assert value.getKind() != Kind.Object; @@ -55,11 +55,11 @@ * * @param value the constant */ - public static ConstantNode create(JavaConstant value, Stamp stamp) { + public static ConstantNode create(Constant value, Stamp stamp) { return new ConstantNode(value, stamp); } - protected ConstantNode(JavaConstant value, Stamp stamp) { + protected ConstantNode(Constant value, Stamp stamp) { super(stamp); assert stamp != null; this.value = value; @@ -69,7 +69,7 @@ /** * @return the constant value represented by this node */ - public JavaConstant getValue() { + public Constant getValue() { return value; } @@ -92,7 +92,7 @@ @Override public void generate(NodeLIRBuilderTool gen) { if (onlyUsedInVirtualState()) { - gen.setResult(this, value); + gen.setResult(this, (JavaConstant) value); } else { LIRKind kind = gen.getLIRGeneratorTool().getLIRKind(stamp()); gen.setResult(this, gen.getLIRGeneratorTool().emitLoadConstant(kind, value)); @@ -132,11 +132,11 @@ } } - public static ConstantNode forConstant(Stamp stamp, JavaConstant constant, MetaAccessProvider metaAccess, StructuredGraph graph) { + public static ConstantNode forConstant(Stamp stamp, Constant constant, MetaAccessProvider metaAccess, StructuredGraph graph) { return graph.unique(ConstantNode.create(constant, stamp.constant(constant, metaAccess))); } - public static ConstantNode forConstant(Stamp stamp, JavaConstant constant, MetaAccessProvider metaAccess) { + public static ConstantNode forConstant(Stamp stamp, Constant constant, MetaAccessProvider metaAccess) { return ConstantNode.create(constant, stamp.constant(constant, metaAccess)); } @@ -173,14 +173,16 @@ /** * Returns a node for a primitive of a given type. */ - public static ConstantNode forPrimitive(Stamp stamp, JavaConstant constant) { + public static ConstantNode forPrimitive(Stamp stamp, Constant constant) { if (stamp instanceof IntegerStamp) { - assert constant.getKind().isNumericInteger() && stamp.getStackKind() == constant.getKind().getStackKind(); + PrimitiveConstant primitive = (PrimitiveConstant) constant; + assert primitive.getKind().isNumericInteger() && stamp.getStackKind() == primitive.getKind().getStackKind(); IntegerStamp istamp = (IntegerStamp) stamp; - return forIntegerBits(istamp.getBits(), constant); + return forIntegerBits(istamp.getBits(), primitive); } else if (stamp instanceof FloatStamp) { - assert constant.getKind().isNumericFloat() && stamp.getStackKind() == constant.getKind(); - return forConstant(constant, null); + PrimitiveConstant primitive = (PrimitiveConstant) constant; + assert primitive.getKind().isNumericFloat() && stamp.getStackKind() == primitive.getKind(); + return forConstant(primitive, null); } else { assert !(stamp instanceof AbstractObjectStamp); return ConstantNode.create(constant, stamp.constant(constant, null)); diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/IfNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -279,8 +279,8 @@ assert trueSuccessor().usages().isEmpty() && falseSuccessor().usages().isEmpty(); if (condition() instanceof IntegerLessThanNode) { IntegerLessThanNode lessThan = (IntegerLessThanNode) condition(); - JavaConstant y = lessThan.getY().stamp().asConstant(); - if (y != null && y.asLong() == 0 && falseSuccessor().next() instanceof IfNode) { + Constant y = lessThan.getY().stamp().asConstant(); + if (y instanceof PrimitiveConstant && ((PrimitiveConstant) y).asLong() == 0 && falseSuccessor().next() instanceof IfNode) { IfNode ifNode2 = (IfNode) falseSuccessor().next(); if (ifNode2.condition() instanceof IntegerLessThanNode) { IntegerLessThanNode lessThan2 = (IntegerLessThanNode) ifNode2.condition(); diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/ValueNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -115,7 +115,7 @@ * @return the {@link JavaConstant} represented by this value if it is a constant; {@code null} * otherwise */ - public final JavaConstant asJavaConstant() { + public final Constant asConstant() { if (this instanceof ConstantNode) { return ((ConstantNode) this).getValue(); } else { @@ -123,6 +123,15 @@ } } + public final JavaConstant asJavaConstant() { + Constant value = asConstant(); + if (value instanceof JavaConstant) { + return (JavaConstant) value; + } else { + return null; + } + } + public ValueNode asNode() { return this; } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AddNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AddNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AddNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -72,7 +72,7 @@ } } if (forY.isConstant()) { - JavaConstant c = forY.asJavaConstant(); + Constant c = forY.asConstant(); if (op.isNeutral(c)) { return forX; } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/AndNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -58,13 +58,13 @@ return AndNode.create(forY, forX); } if (forY.isConstant()) { - JavaConstant c = forY.asJavaConstant(); + Constant c = forY.asConstant(); if (getOp(forX, forY).isNeutral(c)) { return forX; } - if (c.getKind().isNumericInteger()) { - long rawY = c.asLong(); + if (c instanceof PrimitiveConstant && ((PrimitiveConstant) c).getKind().isNumericInteger()) { + long rawY = ((PrimitiveConstant) c).asLong(); long mask = CodeUtil.mask(PrimitiveStamp.getBits(stamp())); if ((rawY & mask) == 0) { return ConstantNode.forIntegerStamp(stamp(), 0); diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BinaryArithmeticNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -58,7 +58,7 @@ @Override public ValueNode canonical(CanonicalizerTool tool, ValueNode forX, ValueNode forY) { if (forX.isConstant() && forY.isConstant()) { - JavaConstant ret = getOp(forX, forY).foldConstant(forX.asJavaConstant(), forY.asJavaConstant()); + Constant ret = getOp(forX, forY).foldConstant(forX.asConstant(), forY.asConstant()); return ConstantNode.forPrimitive(stamp(), ret); } return this; diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -62,7 +62,7 @@ */ public abstract boolean unorderedIsTrue(); - private ValueNode optimizeConditional(JavaConstant constant, ConditionalNode conditionalNode, ConstantReflectionProvider constantReflection, Condition cond) { + private ValueNode optimizeConditional(Constant constant, ConditionalNode conditionalNode, ConstantReflectionProvider constantReflection, Condition cond) { JavaConstant trueConstant = conditionalNode.trueValue().asJavaConstant(); JavaConstant falseConstant = conditionalNode.falseValue().asJavaConstant(); @@ -86,7 +86,7 @@ return this; } - protected ValueNode optimizeNormalizeCmp(JavaConstant constant, NormalizeCompareNode normalizeNode, boolean mirrored) { + protected ValueNode optimizeNormalizeCmp(Constant constant, NormalizeCompareNode normalizeNode, boolean mirrored) { throw new GraalInternalError("NormalizeCompareNode connected to %s (%s %s %s)", this, constant, normalizeNode, mirrored); } @@ -97,11 +97,11 @@ } ValueNode result; if (forX.isConstant()) { - if ((result = canonicalizeSymmetricConstant(tool, forX.asJavaConstant(), forY, true)) != this) { + if ((result = canonicalizeSymmetricConstant(tool, forX.asConstant(), forY, true)) != this) { return result; } } else if (forY.isConstant()) { - if ((result = canonicalizeSymmetricConstant(tool, forY.asJavaConstant(), forX, false)) != this) { + if ((result = canonicalizeSymmetricConstant(tool, forY.asConstant(), forX, false)) != this) { return result; } } else if (forX instanceof ConvertNode && forY instanceof ConvertNode) { @@ -116,7 +116,7 @@ protected abstract CompareNode duplicateModified(ValueNode newX, ValueNode newY); - protected ValueNode canonicalizeSymmetricConstant(CanonicalizerTool tool, JavaConstant constant, ValueNode nonConstant, boolean mirrored) { + protected ValueNode canonicalizeSymmetricConstant(CanonicalizerTool tool, Constant constant, ValueNode nonConstant, boolean mirrored) { if (nonConstant instanceof ConditionalNode) { return optimizeConditional(constant, (ConditionalNode) nonConstant, tool.getConstantReflection(), mirrored ? condition().mirror() : condition()); } else if (nonConstant instanceof NormalizeCompareNode) { @@ -135,9 +135,9 @@ return this; } - private ConstantNode canonicalConvertConstant(CanonicalizerTool tool, ConvertNode convert, JavaConstant constant) { + private ConstantNode canonicalConvertConstant(CanonicalizerTool tool, ConvertNode convert, Constant constant) { if (convert.preservesOrder(condition())) { - JavaConstant reverseConverted = convert.reverse(constant); + Constant reverseConverted = convert.reverse(constant); if (convert.convert(reverseConverted).equals(constant)) { return ConstantNode.forConstant(convert.getValue().stamp(), reverseConverted, tool.getMetaAccess()); } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConvertNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConvertNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConvertNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -35,9 +35,9 @@ ValueNode getValue(); - JavaConstant convert(JavaConstant c); + Constant convert(Constant c); - JavaConstant reverse(JavaConstant c); + Constant reverse(Constant c); /** * Check whether a conversion is lossless. diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/DivNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/DivNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/DivNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -51,12 +51,12 @@ } if (forY.isConstant()) { - JavaConstant c = forY.asJavaConstant(); + Constant c = forY.asConstant(); if (getOp(forX, forY).isNeutral(c)) { return forX; } - if (c.getKind().isNumericInteger()) { - long i = c.asLong(); + if (c instanceof PrimitiveConstant && ((PrimitiveConstant) c).getKind().isNumericInteger()) { + long i = ((PrimitiveConstant) c).asLong(); boolean signFlip = false; if (i < 0) { i = -i; diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatConvertNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -55,12 +55,12 @@ } @Override - public JavaConstant convert(JavaConstant c) { + public Constant convert(Constant c) { return getOp(getValue()).foldConstant(c); } @Override - public JavaConstant reverse(JavaConstant c) { + public Constant reverse(Constant c) { FloatConvertOp reverse = ArithmeticOpTable.forStamp(stamp()).getFloatConvert(op.reverse()); return reverse.foldConstant(c); } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -66,12 +66,12 @@ } @Override - public JavaConstant convert(JavaConstant c) { + public Constant convert(Constant c) { return getOp(getValue()).foldConstant(getInputBits(), getResultBits(), c); } @Override - public JavaConstant reverse(JavaConstant c) { + public Constant reverse(Constant c) { IntegerConvertOp reverse = getReverseOp.apply(ArithmeticOpTable.forStamp(stamp())); return reverse.foldConstant(getResultBits(), getInputBits(), c); } @@ -86,7 +86,7 @@ if (inputBits == resultBits) { return value; } else if (value.isConstant()) { - return ConstantNode.forPrimitive(stamp(), convert(forValue.asJavaConstant())); + return ConstantNode.forPrimitive(stamp(), convert(forValue.asConstant())); } else { return this; } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerEqualsNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -61,8 +61,9 @@ } @Override - protected ValueNode optimizeNormalizeCmp(JavaConstant constant, NormalizeCompareNode normalizeNode, boolean mirrored) { - if (constant.getKind() == Kind.Int && constant.asInt() == 0) { + protected ValueNode optimizeNormalizeCmp(Constant constant, NormalizeCompareNode normalizeNode, boolean mirrored) { + PrimitiveConstant primitive = (PrimitiveConstant) constant; + if (primitive.getKind() == Kind.Int && primitive.asInt() == 0) { ValueNode a = mirrored ? normalizeNode.getY() : normalizeNode.getX(); ValueNode b = mirrored ? normalizeNode.getX() : normalizeNode.getY(); @@ -96,8 +97,8 @@ } @Override - protected ValueNode canonicalizeSymmetricConstant(CanonicalizerTool tool, JavaConstant constant, ValueNode nonConstant, boolean mirrored) { - if (constant.asLong() == 0) { + protected ValueNode canonicalizeSymmetricConstant(CanonicalizerTool tool, Constant constant, ValueNode nonConstant, boolean mirrored) { + if (constant instanceof PrimitiveConstant && ((PrimitiveConstant) constant).asLong() == 0) { if (nonConstant instanceof AndNode) { AndNode andNode = (AndNode) nonConstant; return IntegerTestNode.create(andNode.getX(), andNode.getY()); diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -61,9 +61,10 @@ } @Override - protected ValueNode optimizeNormalizeCmp(JavaConstant constant, NormalizeCompareNode normalizeNode, boolean mirrored) { + protected ValueNode optimizeNormalizeCmp(Constant constant, NormalizeCompareNode normalizeNode, boolean mirrored) { + PrimitiveConstant primitive = (PrimitiveConstant) constant; assert condition() == Condition.LT; - if (constant.getKind() == Kind.Int && constant.asInt() == 0) { + if (primitive.getKind() == Kind.Int && primitive.asInt() == 0) { ValueNode a = mirrored ? normalizeNode.getY() : normalizeNode.getX(); ValueNode b = mirrored ? normalizeNode.getX() : normalizeNode.getY(); diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/MulNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/MulNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/MulNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -56,13 +56,13 @@ } if (forY.isConstant()) { BinaryOp op = getOp(forX, forY); - JavaConstant c = forY.asJavaConstant(); + Constant c = forY.asConstant(); if (op.isNeutral(c)) { return forX; } - if (c.getKind().isNumericInteger()) { - long i = c.asLong(); + if (c instanceof PrimitiveConstant && ((PrimitiveConstant) c).getKind().isNumericInteger()) { + long i = ((PrimitiveConstant) c).asLong(); boolean signFlip = false; if (i < 0) { i = -i; diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/OrNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -58,13 +58,13 @@ return create(forY, forX); } if (forY.isConstant()) { - JavaConstant c = forY.asJavaConstant(); + Constant c = forY.asConstant(); if (getOp(forX, forY).isNeutral(c)) { return forX; } - if (c.getKind().isNumericInteger()) { - long rawY = c.asLong(); + if (c instanceof PrimitiveConstant && ((PrimitiveConstant) c).getKind().isNumericInteger()) { + long rawY = ((PrimitiveConstant) c).asLong(); long mask = CodeUtil.mask(PrimitiveStamp.getBits(stamp())); if ((rawY & mask) == mask) { return ConstantNode.forIntegerStamp(stamp(), mask); diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SubNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SubNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SubNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -54,7 +54,7 @@ BinaryOp op = getOp(forX, forY); if (GraphUtil.unproxify(forX) == GraphUtil.unproxify(forY)) { - JavaConstant zero = op.getZero(forX.stamp()); + Constant zero = op.getZero(forX.stamp()); if (zero != null) { return ConstantNode.forPrimitive(stamp(), zero); } @@ -97,7 +97,7 @@ } } if (forY.isConstant()) { - JavaConstant c = forY.asJavaConstant(); + Constant c = forY.asConstant(); if (op.isNeutral(c)) { return forX; } @@ -107,8 +107,8 @@ return reassociated; } } - if (c.getKind().isNumericInteger()) { - long i = c.asLong(); + if (c instanceof PrimitiveConstant && ((PrimitiveConstant) c).getKind().isNumericInteger()) { + long i = ((PrimitiveConstant) c).asLong(); if (i < 0 || ((IntegerStamp) StampFactory.forKind(forY.getKind())).contains(-i)) { // Adding a negative is more friendly to the backend since adds are // commutative, so prefer add when it fits. @@ -116,7 +116,7 @@ } } } else if (forX.isConstant()) { - JavaConstant c = forX.asJavaConstant(); + Constant c = forX.asConstant(); if (ArithmeticOpTable.forStamp(stamp()).getAdd().isNeutral(c)) { /* * Note that for floating point numbers, + and - have different neutral elements. We diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnaryArithmeticNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnaryArithmeticNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/UnaryArithmeticNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -53,7 +53,7 @@ @Override public ValueNode canonical(CanonicalizerTool tool, ValueNode forValue) { if (forValue.isConstant()) { - return ConstantNode.forPrimitive(stamp(), getOp(forValue).foldConstant(forValue.asJavaConstant())); + return ConstantNode.forPrimitive(stamp(), getOp(forValue).foldConstant(forValue.asConstant())); } return this; } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/XorNode.java Thu Oct 30 13:03:33 2014 +0100 @@ -59,13 +59,13 @@ return XorNode.create(forY, forX); } if (forY.isConstant()) { - JavaConstant c = forY.asJavaConstant(); + Constant c = forY.asConstant(); if (getOp(forX, forY).isNeutral(c)) { return forX; } - if (c.getKind().isNumericInteger()) { - long rawY = c.asLong(); + if (c instanceof PrimitiveConstant && ((PrimitiveConstant) c).getKind().isNumericInteger()) { + long rawY = ((PrimitiveConstant) c).asLong(); long mask = CodeUtil.mask(PrimitiveStamp.getBits(stamp())); if ((rawY & mask) == mask) { return NotNode.create(forX); diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/CanonicalizerPhase.java Thu Oct 30 13:03:33 2014 +0100 @@ -196,7 +196,7 @@ if (node instanceof ValueNode) { ValueNode valueNode = (ValueNode) node; boolean improvedStamp = tryInferStamp(valueNode); - JavaConstant constant = valueNode.stamp().asConstant(); + Constant constant = valueNode.stamp().asConstant(); if (constant != null && !(node instanceof ConstantNode)) { valueNode.replaceAtUsages(InputType.Value, ConstantNode.forConstant(valueNode.stamp(), constant, context.getMetaAccess(), graph)); GraphUtil.tryKillUnused(valueNode); diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/ConditionalEliminationPhase.java Thu Oct 30 13:03:33 2014 +0100 @@ -716,7 +716,7 @@ PiNode piNode; if (isNull) { ConstantNode nullObject = ConstantNode.defaultForKind(Kind.Object, graph); - piNode = graph.unique(PiNode.create(nullObject, StampFactory.forConstant(nullObject.getValue(), metaAccess), replacementAnchor.asNode())); + piNode = graph.unique(PiNode.create(nullObject, StampFactory.forConstant(nullObject.asJavaConstant(), metaAccess), replacementAnchor.asNode())); } else { piNode = graph.unique(PiNode.create(object, StampFactory.declared(type, nonNull, true), replacementAnchor.asNode())); } diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/DefaultJavaLoweringProvider.java Thu Oct 30 13:03:33 2014 +0100 @@ -277,7 +277,7 @@ Kind readKind = load.accessKind(); ValueNode[] base = null; ValueNode object = load.object(); - if (object.isConstant() && object.asJavaConstant().isDefaultForKind()) { + if (object.isConstant() && object.asConstant().isDefaultForKind()) { base = new ValueNode[1]; } LocationNode location = createLocation(load, base); @@ -295,7 +295,7 @@ StructuredGraph graph = store.graph(); ValueNode object = store.object(); ValueNode[] base = null; - if (object.isConstant() && object.asJavaConstant().isDefaultForKind()) { + if (object.isConstant() && object.asConstant().isDefaultForKind()) { base = new ValueNode[1]; } LocationNode location = createLocation(store, base); @@ -360,7 +360,7 @@ } if (value == null) { omittedValues.set(valuePos); - } else if (!(value.isConstant() && value.asJavaConstant().isDefaultForKind())) { + } else if (!(value.isConstant() && value.asConstant().isDefaultForKind())) { // Constant.illegal is always the defaultForKind, so it is skipped Kind valueKind = value.getKind(); Kind entryKind = virtual.entryKind(i); diff -r 9619ba4daf4c -r 8652481a1110 graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java --- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java Thu Oct 30 12:21:07 2014 +0100 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java Thu Oct 30 13:03:33 2014 +0100 @@ -93,8 +93,8 @@ if (isWord(node)) { if (node.isConstant()) { ConstantNode oldConstant = (ConstantNode) node; - assert oldConstant.getValue().getKind() == Kind.Object; - WordBase value = (WordBase) snippetReflection.asObject(oldConstant.getValue()); + assert oldConstant.asJavaConstant().getKind() == Kind.Object; + WordBase value = (WordBase) snippetReflection.asObject(oldConstant.asJavaConstant()); ConstantNode newConstant = ConstantNode.forIntegerKind(wordKind, value.rawValue(), node.graph()); graph.replaceFloating(oldConstant, newConstant);