# HG changeset patch # User Gilles Duboscq # Date 1340288954 -7200 # Node ID 272ad540c4649b1b2651d14a4e83b9905c22e878 # Parent a65b2a11bf343a718d89ca554e5d2916dc372541 Canoncialize < to |<| for positive values Canoncialize IndexedLocation even for long constant index if the final displacement fits in an int remove PlaceHolderNodes when they don't hold a state diff -r a65b2a11bf34 -r 272ad540c464 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/InsertStateAfterPlaceholderPhase.java --- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/InsertStateAfterPlaceholderPhase.java Thu Jun 21 16:26:59 2012 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/InsertStateAfterPlaceholderPhase.java Thu Jun 21 16:29:14 2012 +0200 @@ -29,7 +29,7 @@ public class InsertStateAfterPlaceholderPhase extends Phase { - private static class PlaceholderNode extends AbstractStateSplit implements StateSplit, Node.IterableNodeType, LIRLowerable { + private static class PlaceholderNode extends AbstractStateSplit implements StateSplit, Node.IterableNodeType, LIRLowerable, Canonicalizable { public PlaceholderNode() { super(StampFactory.forVoid()); } @@ -43,6 +43,14 @@ public boolean hasSideEffect() { return false; } + + @Override + public ValueNode canonical(CanonicalizerTool tool) { + if (stateAfter() == null) { + return null; + } + return this; + } } @Override diff -r a65b2a11bf34 -r 272ad540c464 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 Jun 21 16:26:59 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java Thu Jun 21 16:29:14 2012 +0200 @@ -77,6 +77,9 @@ } else if (x().integerStamp().lowerBound() >= y().integerStamp().upperBound()) { return ConstantNode.forBoolean(false, graph()); } + if (x().integerStamp().lowerBound() >= 0 && y().integerStamp().lowerBound() >= 0) { + return graph().unique(new IntegerBelowThanNode(x(), y())); + } return super.canonical(tool); } } diff -r a65b2a11bf34 -r 272ad540c464 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java Thu Jun 21 16:26:59 2012 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java Thu Jun 21 16:29:14 2012 +0200 @@ -69,8 +69,8 @@ @Override public ValueNode canonical(CanonicalizerTool tool) { Constant constantIndex = index.asConstant(); - if (constantIndex != null && constantIndex.kind.stackKind().isInt()) { - long constantIndexLong = constantIndex.asInt(); + if (constantIndex != null) { + long constantIndexLong = constantIndex.asLong(); if (indexScalingEnabled) { if (tool.target() == null) { return this;