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());
     }