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 }