diff graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/EscapeAnalysisPhase.java @ 3092:f34c90b89f54

fixes to escape analysis: propagation of VirtualObject
author Lukas Stadler <lukas.stadler@jku.at>
date Tue, 28 Jun 2011 19:54:51 +0200
parents 536528f48708
children 2fb14099d069
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/EscapeAnalysisPhase.java	Tue Jun 28 19:22:42 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/EscapeAnalysisPhase.java	Tue Jun 28 19:54:51 2011 +0200
@@ -111,10 +111,15 @@
                     } else {
                         List<Block> predecessors = block.getPredecessors();
                         Set<EscapeField> mergedFields = new HashSet<EscapeField>();
+
+                        BlockExitState predState = exitStates.get(predecessors.get(0));
+                        state.obj = predState == null ? null : predState.obj;
+
                         for (int i = 0; i < predecessors.size(); i++) {
                             BlockExitState exitState = exitStates.get(predecessors.get(i));
                             if (exitState == null) {
                                 mergedFields.addAll(fields.values());
+                                state.obj = null;
                                 break;
                             } else {
                                 for (EscapeField field : fields.values()) {