comparison graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/schedule/IdentifyBlocksPhase.java @ 3003:a7a7e87ad230

Moved some code in the scheduler to the right place.
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Thu, 16 Jun 2011 16:19:36 +0200
parents bf14154d5b14
children 6264ecd38bc2
comparison
equal deleted inserted replaced
3002:bf14154d5b14 3003:a7a7e87ad230
120 120
121 // Connect blocks. 121 // Connect blocks.
122 for (Block block : blocks) { 122 for (Block block : blocks) {
123 Node n = block.firstNode(); 123 Node n = block.firstNode();
124 if (n instanceof Merge) { 124 if (n instanceof Merge) {
125 for (Node usage : n.usages()) {
126 if (usage instanceof Phi || usage instanceof LoopCounter) {
127 nodeToBlock.set(usage, block);
128 }
129 }
130 Merge m = (Merge) n; 125 Merge m = (Merge) n;
131 for (int i = 0; i < m.endCount(); ++i) { 126 for (int i = 0; i < m.endCount(); ++i) {
132 EndNode end = m.endAt(i); 127 EndNode end = m.endAt(i);
133 Block predBlock = nodeToBlock.get(end); 128 Block predBlock = nodeToBlock.get(end);
134 predBlock.addSuccessor(block); 129 predBlock.addSuccessor(block);
232 } 227 }
233 228
234 Block prevBlock = nodeToBlock.get(n); 229 Block prevBlock = nodeToBlock.get(n);
235 if (prevBlock != null) { 230 if (prevBlock != null) {
236 return prevBlock; 231 return prevBlock;
232 }
233
234 if (n instanceof Phi) {
235 Block block = nodeToBlock.get(((Phi) n).merge());
236 nodeToBlock.set(n, block);
237 }
238
239 if (n instanceof LoopCounter) {
240 Block block = nodeToBlock.get(((LoopCounter) n).loopBegin());
241 nodeToBlock.set(n, block);
237 } 242 }
238 243
239 Block block = null; 244 Block block = null;
240 for (Node succ : n.successors()) { 245 for (Node succ : n.successors()) {
241 block = getCommonDominator(block, assignLatestPossibleBlockToNode(succ)); 246 block = getCommonDominator(block, assignLatestPossibleBlockToNode(succ));