# HG changeset patch # User Roland Schatz # Date 1394454726 -3600 # Node ID 2a7d7da912e1d8571c9e35dfbeb6583bafa7db97 # Parent 0ddb3b3665bd08418920f0009c7b734c25d98f58 Don't narrow NarrowableArithmetic by default. diff -r 0ddb3b3665bd -r 2a7d7da912e1 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 Mon Mar 10 11:38:30 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerConvertNode.java Mon Mar 10 13:32:06 2014 +0100 @@ -23,6 +23,7 @@ package com.oracle.graal.nodes.calc; import com.oracle.graal.api.meta.*; +import com.oracle.graal.graph.spi.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; @@ -30,7 +31,7 @@ /** * An {@code IntegerConvert} converts an integer to an integer of different width. */ -public abstract class IntegerConvertNode extends ConvertNode implements ArithmeticLIRLowerable { +public abstract class IntegerConvertNode extends ConvertNode implements ArithmeticLIRLowerable, Canonicalizable { private final int resultBits; diff -r 0ddb3b3665bd -r 2a7d7da912e1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NarrowNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NarrowNode.java Mon Mar 10 11:38:30 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/NarrowNode.java Mon Mar 10 13:32:06 2014 +0100 @@ -32,7 +32,7 @@ /** * The {@code NarrowNode} converts an integer to a narrower integer. */ -public class NarrowNode extends IntegerConvertNode implements Simplifiable { +public class NarrowNode extends IntegerConvertNode { public NarrowNode(ValueNode input, int resultBits) { super(StampTool.narrowingConversion(input.stamp(), resultBits), input, resultBits); @@ -64,7 +64,8 @@ return false; } - private ValueNode tryCanonicalize() { + @Override + public Node canonical(CanonicalizerTool tool) { ValueNode ret = canonicalConvert(); if (ret != null) { return ret; @@ -99,35 +100,7 @@ } } - return null; - } - - private boolean tryNarrow(SimplifierTool tool, Stamp stamp, ValueNode node) { - boolean canNarrow = node instanceof NarrowableArithmeticNode && node.usages().count() == 1; - - if (canNarrow) { - for (Node inputNode : node.inputs().snapshot()) { - ValueNode input = (ValueNode) inputNode; - if (!tryNarrow(tool, stamp, input)) { - ValueNode narrow = graph().unique(new NarrowNode(input, getResultBits())); - node.replaceFirstInput(input, narrow); - tool.addToWorkList(narrow); - } - } - node.setStamp(stamp); - } - - return canNarrow; - } - - @Override - public void simplify(SimplifierTool tool) { - ValueNode ret = tryCanonicalize(); - if (ret != null) { - graph().replaceFloating(this, ret); - } else if (tryNarrow(tool, stamp().unrestricted(), getInput())) { - graph().replaceFloating(this, getInput()); - } + return this; } @Override diff -r 0ddb3b3665bd -r 2a7d7da912e1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java Mon Mar 10 11:38:30 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/SignExtendNode.java Mon Mar 10 13:32:06 2014 +0100 @@ -32,7 +32,7 @@ /** * The {@code SignExtendNode} converts an integer to a wider integer using sign extension. */ -public class SignExtendNode extends IntegerConvertNode implements Canonicalizable { +public class SignExtendNode extends IntegerConvertNode { public SignExtendNode(ValueNode input, int resultBits) { super(StampTool.signExtend(input.stamp(), resultBits), input, resultBits); diff -r 0ddb3b3665bd -r 2a7d7da912e1 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ZeroExtendNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ZeroExtendNode.java Mon Mar 10 11:38:30 2014 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/ZeroExtendNode.java Mon Mar 10 13:32:06 2014 +0100 @@ -32,7 +32,7 @@ /** * The {@code ZeroExtendNode} converts an integer to a wider integer using zero extension. */ -public class ZeroExtendNode extends IntegerConvertNode implements Canonicalizable { +public class ZeroExtendNode extends IntegerConvertNode { public ZeroExtendNode(ValueNode input, int resultBits) { super(StampTool.zeroExtend(input.stamp(), resultBits), input, resultBits);