comparison graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/InvokeNode.java @ 8956:74725f2f6122

Add a deoptState for invokes so that they can loose their stateAfter
author Gilles Duboscq <duboscq@ssw.jku.at>
date Tue, 09 Apr 2013 16:27:59 +0200
parents 2c0c708a0ad6
children 055d555d5378
comparison
equal deleted inserted replaced
8955:f84f5112869e 8956:74725f2f6122
36 */ 36 */
37 @NodeInfo(nameTemplate = "Invoke#{p#targetMethod/s}") 37 @NodeInfo(nameTemplate = "Invoke#{p#targetMethod/s}")
38 public final class InvokeNode extends AbstractStateSplit implements StateSplit, Node.IterableNodeType, Invoke, LIRLowerable, MemoryCheckpoint { 38 public final class InvokeNode extends AbstractStateSplit implements StateSplit, Node.IterableNodeType, Invoke, LIRLowerable, MemoryCheckpoint {
39 39
40 @Input private final CallTargetNode callTarget; 40 @Input private final CallTargetNode callTarget;
41 @Input private FrameState deoptState;
41 private final int bci; 42 private final int bci;
42 private boolean polymorphic; 43 private boolean polymorphic;
43 private boolean useForInlining; 44 private boolean useForInlining;
44 private double inliningRelevance; 45 private double inliningRelevance;
45 46
186 return null; 187 return null;
187 } 188 }
188 189
189 @Override 190 @Override
190 public FrameState getDeoptimizationState() { 191 public FrameState getDeoptimizationState() {
191 return stateDuring(); 192 if (deoptState == null) {
193 FrameState stateDuring = stateDuring();
194 updateUsages(deoptState, stateDuring);
195 deoptState = stateDuring;
196 }
197 return deoptState;
192 } 198 }
193 199
194 @Override 200 @Override
195 public void setDeoptimizationState(FrameState f) { 201 public void setDeoptimizationState(FrameState f) {
196 throw new IllegalStateException(); 202 throw new IllegalStateException();