Mercurial > hg > graal-compiler
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++) { |