13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23 package org.graalvm.compiler.nodes.cfg;
24
25 import java.util.ArrayList;
26 import java.util.Iterator;
27
28 import org.graalvm.compiler.core.common.LocationIdentity;
29 import org.graalvm.compiler.core.common.cfg.AbstractBlockBase;
30 import org.graalvm.compiler.core.common.cfg.AbstractControlFlowGraph;
31 import org.graalvm.compiler.core.common.cfg.Loop;
32 import org.graalvm.compiler.graph.Node;
33 import org.graalvm.compiler.nodes.AbstractBeginNode;
34 import org.graalvm.compiler.nodes.FixedNode;
35 import org.graalvm.compiler.nodes.FixedWithNextNode;
36 import org.graalvm.compiler.nodes.InvokeWithExceptionNode;
37 import org.graalvm.compiler.nodes.LoopBeginNode;
38 import org.graalvm.compiler.nodes.LoopEndNode;
39 import org.graalvm.compiler.nodes.memory.MemoryCheckpoint;
40
41 public final class Block extends AbstractBlockBase<Block> {
42
43 public static final Block[] EMPTY_ARRAY = new Block[0];
44
45 protected final AbstractBeginNode beginNode;
46
47 protected FixedNode endNode;
48
49 protected double probability;
50 protected Loop<Block> loop;
51
52 protected Block postdominator;
53 protected Block distancedDominatorCache;
54 private LocationSet killLocations;
55 private LocationSet killLocationsBetweenThisAndDominator;
56
57 protected Block(AbstractBeginNode node) {
58 this.beginNode = node;
59 }
60
61 public AbstractBeginNode getBeginNode() {
62 return beginNode;
63 }
64
65 public FixedNode getEndNode() {
66 return endNode;
67 }
68
69 @Override
70 public Loop<Block> getLoop() {
71 return loop;
72 }
73
74 public void setLoop(Loop<Block> loop) {
75 this.loop = loop;
76 }
77
165 public Iterator<FixedNode> iterator() {
166 return new NodeIterator();
167 }
168
169 @Override
170 public String toString() {
171 StringBuilder str = new StringBuilder().append('[');
172 for (FixedNode node : this) {
173 str.append(node).append(", ");
174 }
175 if (str.length() > 1) {
176 str.setLength(str.length() - 2);
177 }
178 return str.append(']').toString();
179 }
180 };
181 }
182
183 @Override
184 public String toString() {
185 return "B" + id;
186 }
187
188 @Override
189 public double probability() {
190 return probability;
191 }
192
193 public void setProbability(double probability) {
194 assert probability >= 0 && Double.isFinite(probability);
195 this.probability = probability;
196 }
197
198 @Override
199 public Block getDominator(int distance) {
200 Block result = this;
201 for (int i = 0; i < distance; ++i) {
202 result = result.getDominator();
203 }
204 return result;
205 }
306 newPredSuccs[i] = predSuccs[i];
307 }
308 }
309 pred.setSuccessors(newPredSuccs);
310 }
311
312 ArrayList<Block> newPreds = new ArrayList<>();
313 for (int i = 0; i < next.getPredecessorCount(); i++) {
314 Block curPred = next.getPredecessors()[i];
315 if (curPred == this) {
316 for (Block b : getPredecessors()) {
317 newPreds.add(b);
318 }
319 } else {
320 newPreds.add(curPred);
321 }
322 }
323
324 next.setPredecessors(newPreds.toArray(new Block[0]));
325 }
326 }
|
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23 package org.graalvm.compiler.nodes.cfg;
24
25 import java.util.ArrayList;
26 import java.util.Iterator;
27
28 import org.graalvm.compiler.core.common.LocationIdentity;
29 import org.graalvm.compiler.core.common.cfg.AbstractBlockBase;
30 import org.graalvm.compiler.core.common.cfg.AbstractControlFlowGraph;
31 import org.graalvm.compiler.core.common.cfg.Loop;
32 import org.graalvm.compiler.graph.Node;
33 import org.graalvm.compiler.nodeinfo.Verbosity;
34 import org.graalvm.compiler.nodes.AbstractBeginNode;
35 import org.graalvm.compiler.nodes.FixedNode;
36 import org.graalvm.compiler.nodes.FixedWithNextNode;
37 import org.graalvm.compiler.nodes.InvokeWithExceptionNode;
38 import org.graalvm.compiler.nodes.LoopBeginNode;
39 import org.graalvm.compiler.nodes.LoopEndNode;
40 import org.graalvm.compiler.nodes.memory.MemoryCheckpoint;
41
42 public final class Block extends AbstractBlockBase<Block> {
43
44 public static final Block[] EMPTY_ARRAY = new Block[0];
45
46 protected final AbstractBeginNode beginNode;
47
48 protected FixedNode endNode;
49
50 protected double probability;
51 protected Loop<Block> loop;
52
53 protected Block postdominator;
54 protected Block distancedDominatorCache;
55 private LocationSet killLocations;
56 private LocationSet killLocationsBetweenThisAndDominator;
57
58 public Block(AbstractBeginNode node) {
59 this.beginNode = node;
60 }
61
62 public AbstractBeginNode getBeginNode() {
63 return beginNode;
64 }
65
66 public FixedNode getEndNode() {
67 return endNode;
68 }
69
70 @Override
71 public Loop<Block> getLoop() {
72 return loop;
73 }
74
75 public void setLoop(Loop<Block> loop) {
76 this.loop = loop;
77 }
78
166 public Iterator<FixedNode> iterator() {
167 return new NodeIterator();
168 }
169
170 @Override
171 public String toString() {
172 StringBuilder str = new StringBuilder().append('[');
173 for (FixedNode node : this) {
174 str.append(node).append(", ");
175 }
176 if (str.length() > 1) {
177 str.setLength(str.length() - 2);
178 }
179 return str.append(']').toString();
180 }
181 };
182 }
183
184 @Override
185 public String toString() {
186 return toString(Verbosity.Id);
187 }
188
189 public String toString(Verbosity verbosity) {
190 StringBuilder sb = new StringBuilder();
191 sb.append('B').append(id);
192 if (verbosity != Verbosity.Id) {
193 if (isLoopHeader()) {
194 sb.append(" lh");
195 }
196
197 if (getSuccessorCount() > 0) {
198 sb.append(" ->[");
199 for (int i = 0; i < getSuccessorCount(); ++i) {
200 if (i != 0) {
201 sb.append(',');
202 }
203 sb.append('B').append(getSuccessors()[i].getId());
204 }
205 sb.append(']');
206 }
207
208 if (getPredecessorCount() > 0) {
209 sb.append(" <-[");
210 for (int i = 0; i < getPredecessorCount(); ++i) {
211 if (i != 0) {
212 sb.append(',');
213 }
214 sb.append('B').append(getPredecessors()[i].getId());
215 }
216 sb.append(']');
217 }
218 }
219 return sb.toString();
220 }
221
222 @Override
223 public double probability() {
224 return probability;
225 }
226
227 public void setProbability(double probability) {
228 assert probability >= 0 && Double.isFinite(probability);
229 this.probability = probability;
230 }
231
232 @Override
233 public Block getDominator(int distance) {
234 Block result = this;
235 for (int i = 0; i < distance; ++i) {
236 result = result.getDominator();
237 }
238 return result;
239 }
340 newPredSuccs[i] = predSuccs[i];
341 }
342 }
343 pred.setSuccessors(newPredSuccs);
344 }
345
346 ArrayList<Block> newPreds = new ArrayList<>();
347 for (int i = 0; i < next.getPredecessorCount(); i++) {
348 Block curPred = next.getPredecessors()[i];
349 if (curPred == this) {
350 for (Block b : getPredecessors()) {
351 newPreds.add(b);
352 }
353 } else {
354 newPreds.add(curPred);
355 }
356 }
357
358 next.setPredecessors(newPreds.toArray(new Block[0]));
359 }
360
361 protected void setPostDominator(Block postdominator) {
362 this.postdominator = postdominator;
363 }
364 }
|