Mercurial > hg > graal-compiler
changeset 5672:272ad540c464
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
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Thu, 21 Jun 2012 16:29:14 +0200 |
parents | a65b2a11bf34 |
children | d695272dd80a |
files | graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/InsertStateAfterPlaceholderPhase.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/calc/IntegerLessThanNode.java graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java |
diffstat | 3 files changed, 14 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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); } }
--- 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;