# HG changeset patch # User Roland Schatz # Date 1376041120 -7200 # Node ID 1e07d93034208443488c4d90d1c02163a175e52e # Parent 153a347e54c41d962e08940968cab8d64d1e4acb Marker interface for primitive arithmetic nodes. diff -r 153a347e54c4 -r 1e07d9303420 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Architecture.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Architecture.java Fri Aug 09 11:36:13 2013 +0200 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Architecture.java Fri Aug 09 11:38:40 2013 +0200 @@ -188,11 +188,11 @@ * * @param kind the kind of the individual vector elements * @param maxLength the maximum length that should be returned - * @param arithmetic whether the vector length needs to support arithmetic operations or just - * load and store + * @param arithmetic the arithmetic operation for which the vector size should be determined, or + * null if no arithmetic needs to be performed on the vector * @return a supported vector size, but at most {@code maxLength} */ - public int getSupportedVectorLength(Kind kind, int maxLength, boolean arithmetic) { + public int getSupportedVectorLength(Kind kind, int maxLength, ArithmeticOperation arithmetic) { return 1; } diff -r 153a347e54c4 -r 1e07d9303420 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/ArithmeticOperation.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/ArithmeticOperation.java Fri Aug 09 11:38:40 2013 +0200 @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2013, 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.code; + +/** + * An {@code ArithmeticOperation} is an operation that does primitive value arithmetic without side + * effect. + */ +public interface ArithmeticOperation { +} diff -r 153a347e54c4 -r 1e07d9303420 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BitLogicNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BitLogicNode.java Fri Aug 09 11:36:13 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/BitLogicNode.java Fri Aug 09 11:38:40 2013 +0200 @@ -22,6 +22,7 @@ */ package com.oracle.graal.nodes.calc; +import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; @@ -29,7 +30,7 @@ /** * The {@code LogicNode} class definition. */ -public abstract class BitLogicNode extends BinaryNode { +public abstract class BitLogicNode extends BinaryNode implements ArithmeticOperation { /** * Constructs a new logic operation node. diff -r 153a347e54c4 -r 1e07d9303420 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 Fri Aug 09 11:36:13 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ConvertNode.java Fri Aug 09 11:38:40 2013 +0200 @@ -24,6 +24,7 @@ import static com.oracle.graal.api.meta.Kind.*; +import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; @@ -33,7 +34,7 @@ /** * The {@code ConvertNode} class represents a conversion between primitive types. */ -public final class ConvertNode extends FloatingNode implements Canonicalizable, LIRLowerable, Lowerable { +public final class ConvertNode extends FloatingNode implements Canonicalizable, LIRLowerable, Lowerable, ArithmeticOperation { public static enum Op { I2L(Int, Long, true), diff -r 153a347e54c4 -r 1e07d9303420 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatArithmeticNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatArithmeticNode.java Fri Aug 09 11:36:13 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/FloatArithmeticNode.java Fri Aug 09 11:38:40 2013 +0200 @@ -22,10 +22,11 @@ */ package com.oracle.graal.nodes.calc; +import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.nodes.*; -public abstract class FloatArithmeticNode extends BinaryNode { +public abstract class FloatArithmeticNode extends BinaryNode implements ArithmeticOperation { private final boolean isStrictFP; diff -r 153a347e54c4 -r 1e07d9303420 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerArithmeticNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerArithmeticNode.java Fri Aug 09 11:36:13 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerArithmeticNode.java Fri Aug 09 11:38:40 2013 +0200 @@ -22,11 +22,12 @@ */ package com.oracle.graal.nodes.calc; +import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; -public abstract class IntegerArithmeticNode extends BinaryNode { +public abstract class IntegerArithmeticNode extends BinaryNode implements ArithmeticOperation { public IntegerArithmeticNode(Kind kind, ValueNode x, ValueNode y) { super(kind, x, y); diff -r 153a347e54c4 -r 1e07d9303420 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NegateNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NegateNode.java Fri Aug 09 11:36:13 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NegateNode.java Fri Aug 09 11:38:40 2013 +0200 @@ -22,6 +22,7 @@ */ package com.oracle.graal.nodes.calc; +import com.oracle.graal.api.code.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; @@ -29,7 +30,7 @@ /** * The {@code NegateNode} node negates its operand. */ -public final class NegateNode extends FloatingNode implements Canonicalizable, LIRLowerable { +public final class NegateNode extends FloatingNode implements Canonicalizable, LIRLowerable, ArithmeticOperation { @Input private ValueNode x; diff -r 153a347e54c4 -r 1e07d9303420 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ShiftNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ShiftNode.java Fri Aug 09 11:36:13 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ShiftNode.java Fri Aug 09 11:38:40 2013 +0200 @@ -22,13 +22,14 @@ */ package com.oracle.graal.nodes.calc; +import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.nodes.*; /** * The {@code ShiftOp} class represents shift operations. */ -public abstract class ShiftNode extends BinaryNode { +public abstract class ShiftNode extends BinaryNode implements ArithmeticOperation { /** * Creates a new shift operation. diff -r 153a347e54c4 -r 1e07d9303420 graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java Fri Aug 09 11:36:13 2013 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/MathIntrinsicNode.java Fri Aug 09 11:38:40 2013 +0200 @@ -22,6 +22,7 @@ */ package com.oracle.graal.replacements.nodes; +import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.gen.*; import com.oracle.graal.compiler.target.*; @@ -32,7 +33,7 @@ import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; -public class MathIntrinsicNode extends FloatingNode implements Canonicalizable, LIRGenLowerable { +public class MathIntrinsicNode extends FloatingNode implements Canonicalizable, LIRGenLowerable, ArithmeticOperation { @Input private ValueNode x; private final Operation operation;