# HG changeset patch # User Lukas Stadler # Date 1397721567 -7200 # Node ID 94874b2fc509aca44d59415c8c5f4270a590d1ad # Parent b862cf4381ef07816c077484c0455c7d241d1289 common superclass for binary logic nodes diff -r b862cf4381ef -r 94874b2fc509 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BinaryLogicNode.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/BinaryLogicNode.java Thu Apr 17 09:59:27 2014 +0200 @@ -0,0 +1,71 @@ +/* + * 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 + * 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.nodes; + +import com.oracle.graal.nodes.extended.*; +import com.oracle.graal.nodes.spi.*; + +public abstract class BinaryLogicNode extends LogicNode implements LIRLowerable, MemoryArithmeticLIRLowerable { + + @Input private ValueNode x; + @Input private ValueNode y; + + public ValueNode x() { + return x; + } + + public ValueNode y() { + return y; + } + + protected void setX(ValueNode x) { + updateUsages(this.x, x); + this.x = x; + } + + protected void setY(ValueNode y) { + updateUsages(this.y, y); + this.y = y; + } + + public BinaryLogicNode(ValueNode x, ValueNode y) { + assert x != null && y != null && x.getKind() == y.getKind(); + this.x = x; + this.y = y; + } + + @Override + public boolean verify() { + assertTrue(x.stamp().isCompatible(y.stamp()), "stamps not compatible: %s, %s", x.stamp(), y.stamp()); + return super.verify(); + } + + @Override + public void generate(NodeLIRBuilderTool gen) { + } + + @Override + public boolean generate(MemoryArithmeticLIRLowerer gen, Access access) { + return false; + } +} diff -r b862cf4381ef -r 94874b2fc509 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 Apr 17 09:59:27 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/CompareNode.java Thu Apr 17 09:59:27 2014 +0200 @@ -26,8 +26,6 @@ import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.spi.*; /* TODO (thomaswue/gdub) For high-level optimization purpose the compare node should be a boolean *value* (it is currently only a helper node) * But in the back-end the comparison should not always be materialized (for example in x86 the comparison result will not be in a register but in a flag) @@ -35,49 +33,32 @@ * Compare should probably be made a value (so that it can be canonicalized for example) and in later stages some Compare usage should be transformed * into variants that do not materialize the value (CompareIf, CompareGuard...) */ -public abstract class CompareNode extends LogicNode implements Canonicalizable, LIRLowerable, MemoryArithmeticLIRLowerable { - - @Input private ValueNode x; - @Input private ValueNode y; - - public ValueNode x() { - return x; - } - - public ValueNode y() { - return y; - } +public abstract class CompareNode extends BinaryLogicNode implements Canonicalizable { /** * Constructs a new Compare instruction. - * + * * @param x the instruction producing the first input to the instruction * @param y the instruction that produces the second input to this instruction */ public CompareNode(ValueNode x, ValueNode y) { - assert x != null && y != null && x.getKind() == y.getKind(); - this.x = x; - this.y = y; + super(x, y); } /** * Gets the condition (comparison operation) for this instruction. - * + * * @return the condition */ public abstract Condition condition(); /** * Checks whether unordered inputs mean true or false (only applies to float operations). - * + * * @return {@code true} if unordered inputs produce true */ public abstract boolean unorderedIsTrue(); - @Override - public void generate(NodeLIRBuilderTool gen) { - } - private LogicNode optimizeConditional(Constant constant, ConditionalNode conditionalNode, ConstantReflectionProvider constantReflection, Condition cond) { Constant trueConstant = conditionalNode.trueValue().asConstant(); Constant falseConstant = conditionalNode.falseValue().asConstant(); @@ -102,16 +83,6 @@ return this; } - protected void setX(ValueNode x) { - updateUsages(this.x, x); - this.x = x; - } - - protected void setY(ValueNode y) { - updateUsages(this.y, y); - this.y = y; - } - protected LogicNode optimizeNormalizeCmp(Constant constant, NormalizeCompareNode normalizeNode, boolean mirrored) { throw new GraalInternalError("NormalizeCompareNode connected to %s (%s %s %s)", this, constant, normalizeNode, mirrored); } @@ -193,14 +164,4 @@ return graph.unique(comparison); } - - public boolean generate(MemoryArithmeticLIRLowerer gen, Access access) { - return false; - } - - @Override - public boolean verify() { - assertTrue(x.stamp().isCompatible(y.stamp()), "stamps not compatible: %s, %s", x.stamp(), y.stamp()); - return super.verify(); - } } diff -r b862cf4381ef -r 94874b2fc509 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java Thu Apr 17 09:59:27 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerTestNode.java Thu Apr 17 09:59:27 2014 +0200 @@ -25,8 +25,6 @@ import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.extended.*; -import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; /** @@ -34,33 +32,16 @@ * expression "(x & y) == 0", meaning that it will return true if (and only if) no bit is set in * both x and y. */ -public class IntegerTestNode extends LogicNode implements Canonicalizable, LIRLowerable, MemoryArithmeticLIRLowerable { - - @Input private ValueNode x; - @Input private ValueNode y; - - public ValueNode x() { - return x; - } - - public ValueNode y() { - return y; - } +public class IntegerTestNode extends BinaryLogicNode implements Canonicalizable { /** * Constructs a new Test instruction. - * + * * @param x the instruction producing the first input to the instruction * @param y the instruction that produces the second input to this instruction */ public IntegerTestNode(ValueNode x, ValueNode y) { - assert x != null && y != null && x.stamp().isCompatible(y.stamp()); - this.x = x; - this.y = y; - } - - @Override - public void generate(NodeLIRBuilderTool gen) { + super(x, y); } @Override @@ -77,9 +58,4 @@ } return this; } - - @Override - public boolean generate(MemoryArithmeticLIRLowerer gen, Access access) { - return false; - } }