comparison graal/GraalCompiler/src/com/sun/c1x/alloc/RegisterVerifier.java @ 2707:7ed72769d51a

exception handling related changes: * changed blockPredecessors to list of Instructions, instead of Blocks * removed explicit predecessor management in BlockBegin, now using predecessors from Graph structure * replaced generated LIR exception entries with exception dispatch chains in IR * added Unwind and ExceptionDispatch instructions * removed ExceptionEntry flag in BlockBegin and all code depending on it * removed exceptionHandler list from Instruction, replaced by exception Edge on Invoke and Throw * replaced list of ExceptionHandlers with single exception edge in debug info misc: * changed GraphvizPrinter layout (smaller ports on large nodes) * removed defunct run config
author Lukas Stadler <lukas.stadler@jku.at>
date Wed, 18 May 2011 18:09:20 +0200
parents 4a36a0bd6d18
children c1ce2a53d6c3
comparison
equal deleted inserted replaced
2677:0ea5f12e873a 2707:7ed72769d51a
132 for (BlockBegin succ : block.end().blockSuccessors()) { 132 for (BlockBegin succ : block.end().blockSuccessors()) {
133 processSuccessor(succ, inputState); 133 processSuccessor(succ, inputState);
134 } 134 }
135 } 135 }
136 136
137 void processXhandler(ExceptionHandler xhandler, Interval[] inputState) { 137 void processXhandler(BlockBegin xhandler, Interval[] inputState) {
138 if (C1XOptions.TraceLinearScanLevel >= 2) { 138 if (C1XOptions.TraceLinearScanLevel >= 2) {
139 TTY.println("processXhandler B%d", xhandler.entryBlock().blockID); 139 TTY.println("processXhandler B%d", xhandler.blockID);
140 } 140 }
141 141
142 // must copy state because it is modified 142 // must copy state because it is modified
143 inputState = copy(inputState); 143 inputState = copy(inputState);
144 144
145 if (xhandler.entryCode() != null) { 145 if (xhandler.lir() != null) {
146 processOperations(xhandler.entryCode(), inputState); 146 processOperations(xhandler.lir(), inputState);
147 } 147 }
148 processSuccessor(xhandler.entryBlock(), inputState); 148 processSuccessor(xhandler, inputState);
149 } 149 }
150 150
151 void processSuccessor(BlockBegin block, Interval[] inputState) { 151 void processSuccessor(BlockBegin block, Interval[] inputState) {
152 Interval[] savedState = stateForBlock(block); 152 Interval[] savedState = stateForBlock(block);
153 153
258 statePut(inputState, r.asValue(), null); 258 statePut(inputState, r.asValue(), null);
259 } 259 }
260 } 260 }
261 261
262 // process xhandler before output and temp operands 262 // process xhandler before output and temp operands
263 List<ExceptionHandler> xhandlers = op.exceptionEdges(); 263 if (op.exceptionEdge() != null) {
264 n = xhandlers.size(); 264 processXhandler(op.exceptionEdge(), inputState);
265 for (int k = 0; k < n; k++) {
266 processXhandler(xhandlers.get(k), inputState);
267 } 265 }
268 266
269 // set temp operands (some operations use temp operands also as output operands, so can't set them null) 267 // set temp operands (some operations use temp operands also as output operands, so can't set them null)
270 n = op.operandCount(LIRInstruction.OperandMode.Temp); 268 n = op.operandCount(LIRInstruction.OperandMode.Temp);
271 for (int j = 0; j < n; j++) { 269 for (int j = 0; j < n; j++) {