changeset 5486:85986efe747e

Check edge types for replacements in addDuplicate
author Gilles Duboscq <duboscq@ssw.jku.at>
date Mon, 04 Jun 2012 16:15:56 +0200
parents 62767a364197
children 9743ae819f73
files graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java
diffstat 1 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java	Mon Jun 04 16:01:40 2012 +0200
+++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeClass.java	Mon Jun 04 16:15:56 2012 +0200
@@ -941,7 +941,12 @@
                     Node replacement = replacements.replacement(input);
                     if (replacement != input) {
                         replacementsMap.put(input, replacement);
-                        target = replacement;
+                        Class< ? > edgeType = node.getNodeClass().inputTypes[pos.index];
+                        if (edgeType != null && !edgeType.isAssignableFrom(replacement.getClass())) {
+                            target = null;
+                        } else {
+                            target = replacement;
+                        }
                     } else {
                         target = newNodes.get(input);
                     }
@@ -974,7 +979,12 @@
                 Node replacement = replacements.replacement(succ);
                 if (replacement != succ) {
                     replacementsMap.put(succ, replacement);
-                    target = replacement;
+                    Class< ? > edgeType = node.getNodeClass().successorTypes[pos.index];
+                    if (edgeType != null && !edgeType.isAssignableFrom(replacement.getClass())) {
+                        target = null;
+                    } else {
+                        target = replacement;
+                    }
                 } else {
                     target = newNodes.get(succ);
                 }