Mercurial > hg > graal-compiler
comparison graal/GraalCompiler/src/com/sun/c1x/ir/Throw.java @ 2622:91d3952f7eb7
Framestate work : using stateAFter and reducting the number of nodes with framestates. Intermediate state (does not pass tests)
author | Gilles Duboscq <gilles.duboscq@oracle.com> |
---|---|
date | Tue, 10 May 2011 12:37:46 +0200 |
parents | 3558ca7088c0 |
children | 8e96b2b3a866 |
comparison
equal
deleted
inserted
replaced
2621:dd115f80acf8 | 2622:91d3952f7eb7 |
---|---|
22 */ | 22 */ |
23 package com.sun.c1x.ir; | 23 package com.sun.c1x.ir; |
24 | 24 |
25 import com.oracle.graal.graph.*; | 25 import com.oracle.graal.graph.*; |
26 import com.sun.c1x.debug.*; | 26 import com.sun.c1x.debug.*; |
27 import com.sun.c1x.value.*; | |
28 import com.sun.cri.ci.*; | 27 import com.sun.cri.ci.*; |
29 | 28 |
30 /** | 29 /** |
31 * The {@code Throw} instruction represents a throw of an exception. | 30 * The {@code Throw} instruction represents a throw of an exception. |
32 */ | 31 */ |
33 public final class Throw extends BlockEnd { | 32 public final class Throw extends BlockEnd { |
34 | 33 |
35 private static final int INPUT_COUNT = 2; | 34 private static final int INPUT_COUNT = 1; |
36 private static final int INPUT_EXCEPTION = 0; | 35 private static final int INPUT_EXCEPTION = 0; |
37 private static final int INPUT_STATE_BEFORE = 1; | |
38 | 36 |
39 private static final int SUCCESSOR_COUNT = 0; | 37 private static final int SUCCESSOR_COUNT = 0; |
40 | 38 |
41 @Override | 39 @Override |
42 protected int inputCount() { | 40 protected int inputCount() { |
58 public Value setException(Value n) { | 56 public Value setException(Value n) { |
59 return (Value) inputs().set(super.inputCount() + INPUT_EXCEPTION, n); | 57 return (Value) inputs().set(super.inputCount() + INPUT_EXCEPTION, n); |
60 } | 58 } |
61 | 59 |
62 /** | 60 /** |
63 * The state before this throw would occur. | |
64 */ | |
65 @Override | |
66 public FrameState stateBefore() { | |
67 return (FrameState) inputs().get(super.inputCount() + INPUT_STATE_BEFORE); | |
68 } | |
69 | |
70 private FrameState setStateBefore(FrameState n) { | |
71 return (FrameState) inputs().set(super.inputCount() + INPUT_STATE_BEFORE, n); | |
72 } | |
73 | |
74 /** | |
75 * Creates a new Throw instruction. | 61 * Creates a new Throw instruction. |
76 * @param exception the instruction that generates the exception to throw | 62 * @param exception the instruction that generates the exception to throw |
77 * @param stateAfter the state before the exception is thrown but after the exception object has been popped | 63 * @param stateAfter the state before the exception is thrown but after the exception object has been popped |
78 * @param isSafepoint {@code true} if this instruction is a safepoint instruction | 64 * @param isSafepoint {@code true} if this instruction is a safepoint instruction |
79 * @param graph | 65 * @param graph |
80 */ | 66 */ |
81 public Throw(Value exception, FrameState stateAfter, boolean isSafepoint, Graph graph) { | 67 public Throw(Value exception, boolean isSafepoint, Graph graph) { |
82 super(CiKind.Illegal, null, isSafepoint, 0, INPUT_COUNT, SUCCESSOR_COUNT, graph); | 68 super(CiKind.Illegal, null, isSafepoint, 0, INPUT_COUNT, SUCCESSOR_COUNT, graph); |
83 setStateBefore(stateAfter); | |
84 setException(exception); | 69 setException(exception); |
85 } | 70 } |
86 | 71 |
87 /** | 72 /** |
88 * Checks whether this instruction can trap. | 73 * Checks whether this instruction can trap. |