Mercurial > hg > graal-compiler
comparison graal/GraalCompiler/src/com/sun/c1x/graph/IR.java @ 2835:c1c8a0291771
merge
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Tue, 31 May 2011 13:37:45 +0200 |
parents | bfce42cd9c07 1cd59ca9ac86 |
children | adc4b3ec0a8c 75e0d39833a0 |
comparison
equal
deleted
inserted
replaced
2834:bfce42cd9c07 | 2835:c1c8a0291771 |
---|---|
94 List<Block> blocks = schedule.getBlocks(); | 94 List<Block> blocks = schedule.getBlocks(); |
95 List<LIRBlock> lirBlocks = new ArrayList<LIRBlock>(); | 95 List<LIRBlock> lirBlocks = new ArrayList<LIRBlock>(); |
96 Map<Block, LIRBlock> map = new HashMap<Block, LIRBlock>(); | 96 Map<Block, LIRBlock> map = new HashMap<Block, LIRBlock>(); |
97 for (Block b : blocks) { | 97 for (Block b : blocks) { |
98 LIRBlock block = new LIRBlock(b.blockID()); | 98 LIRBlock block = new LIRBlock(b.blockID()); |
99 block.setExceptionEntry(b.isExceptionEntry()); | |
100 map.put(b, block); | 99 map.put(b, block); |
101 block.setInstructions(b.getInstructions()); | 100 block.setInstructions(b.getInstructions()); |
102 block.setLinearScanNumber(b.blockID()); | 101 block.setLinearScanNumber(b.blockID()); |
103 | 102 |
104 block.setFirstInstruction(b.firstNode()); | 103 block.setFirstInstruction(b.firstNode()); |
106 lirBlocks.add(block); | 105 lirBlocks.add(block); |
107 } | 106 } |
108 | 107 |
109 for (Block b : blocks) { | 108 for (Block b : blocks) { |
110 for (Block succ : b.getSuccessors()) { | 109 for (Block succ : b.getSuccessors()) { |
111 if (succ.isExceptionEntry()) { | 110 map.get(b).blockSuccessors().add(map.get(succ)); |
112 map.get(b).getExceptionHandlerSuccessors().add(map.get(succ)); | |
113 } else { | |
114 map.get(b).blockSuccessors().add(map.get(succ)); | |
115 } | |
116 } | 111 } |
117 | 112 |
118 for (Block pred : b.getPredecessors()) { | 113 for (Block pred : b.getPredecessors()) { |
119 map.get(b).blockPredecessors().add(map.get(pred)); | 114 map.get(b).blockPredecessors().add(map.get(pred)); |
120 } | 115 } |
121 } | 116 } |
122 | 117 |
123 | |
124 // TODO(tw): Schedule nodes within a block. | |
125 | |
126 | |
127 CriticalEdgeFinder finder = new CriticalEdgeFinder(lirBlocks, compilation.graph); | 118 CriticalEdgeFinder finder = new CriticalEdgeFinder(lirBlocks, compilation.graph); |
128 finder.splitCriticalEdges(); | 119 finder.splitCriticalEdges(); |
129 | 120 |
130 | |
131 orderedBlocks = lirBlocks; | 121 orderedBlocks = lirBlocks; |
132 | |
133 valueToBlock = new HashMap<Node, LIRBlock>(); | 122 valueToBlock = new HashMap<Node, LIRBlock>(); |
134 for (LIRBlock b : orderedBlocks) { | 123 for (LIRBlock b : orderedBlocks) { |
135 for (Node i : b.getInstructions()) { | 124 for (Node i : b.getInstructions()) { |
136 valueToBlock.put(i, b); | 125 valueToBlock.put(i, b); |
137 } | 126 } |