Mercurial > hg > graal-compiler
changeset 12720:8898d449f95d
Fix wrong conversion in extremum and exit values of induction variables.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Fri, 08 Nov 2013 13:20:09 +0100 |
parents | 895f31682b88 |
children | dac9c1783aed |
files | graal/com.oracle.graal.loop/src/com/oracle/graal/loop/BasicInductionVariable.java |
diffstat | 1 files changed, 8 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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()); }