# HG changeset patch # User Roland Schatz # Date 1383913209 -3600 # Node ID 8898d449f95d8e5beed1adb271359554a4ae01f5 # Parent 895f31682b88e015bf3d75f169e14d5c1daf6497 Fix wrong conversion in extremum and exit values of induction variables. diff -r 895f31682b88 -r 8898d449f95d graal/com.oracle.graal.loop/src/com/oracle/graal/loop/BasicInductionVariable.java --- a/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/BasicInductionVariable.java Fri Nov 08 12:10:15 2013 +0100 +++ b/graal/com.oracle.graal.loop/src/com/oracle/graal/loop/BasicInductionVariable.java Fri Nov 08 13:20:09 2013 +0100 @@ -123,19 +123,25 @@ Kind fromKind = phi.kind(); StructuredGraph graph = graph(); ValueNode stride = strideNode(); - ValueNode maxTripCount = loop.counted().maxTripCountNode(assumePositiveTripCount); ValueNode initNode = this.initNode(); if (fromKind != kind) { stride = graph.unique(new ConvertNode(fromKind, kind, stride)); - maxTripCount = graph.unique(new ConvertNode(fromKind, kind, maxTripCount)); initNode = graph.unique(new ConvertNode(fromKind, kind, initNode)); } + ValueNode maxTripCount = loop.counted().maxTripCountNode(assumePositiveTripCount); + if (maxTripCount.kind() != kind) { + maxTripCount = graph.unique(new ConvertNode(maxTripCount.kind(), kind, maxTripCount)); + } return IntegerArithmeticNode.add(graph, IntegerArithmeticNode.mul(graph, stride, IntegerArithmeticNode.sub(graph, maxTripCount, ConstantNode.forIntegerKind(kind, 1, graph))), initNode); } @Override public ValueNode exitValueNode() { + Kind kind = phi.kind(); ValueNode maxTripCount = loop.counted().maxTripCountNode(false); + if (maxTripCount.kind() != kind) { + maxTripCount = graph().unique(new ConvertNode(maxTripCount.kind(), kind, maxTripCount)); + } return IntegerArithmeticNode.add(graph(), IntegerArithmeticNode.mul(graph(), strideNode(), maxTripCount), initNode()); }