comparison graal/com.oracle.graal.virtual/src/com/oracle/graal/virtual/phases/ea/VirtualizerToolImpl.java @ 9942:de3653e68738

proper assertions in VirtualizerToolImpl.setVirtualEntry
author Lukas Stadler <lukas.stadler@jku.at>
date Fri, 07 Jun 2013 13:44:00 +0200
parents 063a712fe8d8
children eef9281ec13b
comparison
equal deleted inserted replaced
9941:8448a4e15f95 9942:de3653e68738
85 @Override 85 @Override
86 public void setVirtualEntry(State objectState, int index, ValueNode value) { 86 public void setVirtualEntry(State objectState, int index, ValueNode value) {
87 ObjectState obj = (ObjectState) objectState; 87 ObjectState obj = (ObjectState) objectState;
88 assert obj != null && obj.isVirtual() : "not virtual: " + obj; 88 assert obj != null && obj.isVirtual() : "not virtual: " + obj;
89 ObjectState valueState = state.getObjectState(value); 89 ObjectState valueState = state.getObjectState(value);
90 ValueNode newValue = value;
90 if (valueState == null) { 91 if (valueState == null) {
91 obj.setEntry(index, getReplacedValue(value)); 92 newValue = getReplacedValue(value);
92 } else { 93 assert obj.getEntry(index) == null || obj.getEntry(index).kind() == newValue.kind() || (isObjectEntry(obj.getEntry(index)) && isObjectEntry(newValue));
93 ValueNode newValue = value; 94 } else {
94 if (valueState.getState() != EscapeState.Virtual) { 95 if (valueState.getState() != EscapeState.Virtual) {
95 newValue = valueState.getMaterializedValue(); 96 newValue = valueState.getMaterializedValue();
97 assert newValue.kind() == Kind.Object;
98 } else {
99 newValue = valueState.getVirtualObject();
96 } 100 }
97 assert obj.getEntry(index) == null || obj.getEntry(index).kind() == newValue.kind(); 101 assert obj.getEntry(index) == null || isObjectEntry(obj.getEntry(index));
98 obj.setEntry(index, newValue); 102 }
99 } 103 obj.setEntry(index, newValue);
104 }
105
106 private static boolean isObjectEntry(ValueNode value) {
107 return value.kind() == Kind.Object || value instanceof VirtualObjectNode;
100 } 108 }
101 109
102 @Override 110 @Override
103 public ValueNode getMaterializedValue(ValueNode value) { 111 public ValueNode getMaterializedValue(ValueNode value) {
104 ObjectState obj = state.getObjectState(value); 112 ObjectState obj = state.getObjectState(value);