Mercurial > hg > graal-compiler
comparison graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java @ 2822:530366123e46
Invoke is a block end
author | Gilles Duboscq <gilles.duboscq@oracle.com> |
---|---|
date | Fri, 27 May 2011 15:41:10 +0200 |
parents | d6bf240963fb |
children | ac4b086cbd72 |
comparison
equal
deleted
inserted
replaced
2798:58e65eb6bb5d | 2822:530366123e46 |
---|---|
32 | 32 |
33 import com.oracle.graal.graph.*; | 33 import com.oracle.graal.graph.*; |
34 import com.oracle.max.asm.*; | 34 import com.oracle.max.asm.*; |
35 import com.sun.c1x.*; | 35 import com.sun.c1x.*; |
36 import com.sun.c1x.alloc.*; | 36 import com.sun.c1x.alloc.*; |
37 import com.sun.c1x.alloc.OperandPool.*; | 37 import com.sun.c1x.alloc.OperandPool.VariableFlag; |
38 import com.sun.c1x.debug.*; | 38 import com.sun.c1x.debug.*; |
39 import com.sun.c1x.globalstub.*; | 39 import com.sun.c1x.globalstub.*; |
40 import com.sun.c1x.graph.*; | 40 import com.sun.c1x.graph.*; |
41 import com.sun.c1x.ir.*; | 41 import com.sun.c1x.ir.*; |
42 import com.sun.c1x.lir.*; | 42 import com.sun.c1x.lir.*; |
43 import com.sun.c1x.util.*; | 43 import com.sun.c1x.util.*; |
44 import com.sun.c1x.value.*; | 44 import com.sun.c1x.value.*; |
45 import com.sun.cri.bytecode.*; | 45 import com.sun.cri.bytecode.*; |
46 import com.sun.cri.bytecode.Bytecodes.MemoryBarriers; | |
46 import com.sun.cri.ci.*; | 47 import com.sun.cri.ci.*; |
47 import com.sun.cri.ri.*; | 48 import com.sun.cri.ri.*; |
49 import com.sun.cri.xir.CiXirAssembler.XirConstant; | |
50 import com.sun.cri.xir.CiXirAssembler.XirInstruction; | |
51 import com.sun.cri.xir.CiXirAssembler.XirOperand; | |
52 import com.sun.cri.xir.CiXirAssembler.XirParameter; | |
53 import com.sun.cri.xir.CiXirAssembler.XirRegister; | |
54 import com.sun.cri.xir.CiXirAssembler.XirTemp; | |
48 import com.sun.cri.xir.*; | 55 import com.sun.cri.xir.*; |
49 import com.sun.cri.xir.CiXirAssembler.*; | |
50 | 56 |
51 /** | 57 /** |
52 * This class traverses the HIR instructions and generates LIR instructions from them. | 58 * This class traverses the HIR instructions and generates LIR instructions from them. |
53 */ | 59 */ |
54 public abstract class LIRGenerator extends ValueVisitor { | 60 public abstract class LIRGenerator extends ValueVisitor { |
251 TTY.println(stateAfter.toString()); | 257 TTY.println(stateAfter.toString()); |
252 } | 258 } |
253 } | 259 } |
254 } | 260 } |
255 } | 261 } |
256 if (block.blockSuccessors().size() == 1 && (block.getInstructions().size() == 0 || !(block.getInstructions().get(block.getInstructions().size() - 1) instanceof BlockEnd))) { | 262 if (block.blockSuccessors().size() >= 1 && (block.getInstructions().size() == 0 || !jumpsToNextBlock(block.getInstructions().get(block.getInstructions().size() - 1)))) { |
257 moveToPhi(); | 263 moveToPhi(); |
258 block.lir().jump(block.blockSuccessors().get(0)); | 264 block.lir().jump(block.blockSuccessors().get(0)); |
259 } | 265 } |
260 | 266 |
261 if (C1XOptions.TraceLIRGeneratorLevel >= 1) { | 267 if (C1XOptions.TraceLIRGeneratorLevel >= 1) { |
263 } | 269 } |
264 | 270 |
265 block.setLastState(lastState); | 271 block.setLastState(lastState); |
266 this.currentBlock = null; | 272 this.currentBlock = null; |
267 blockDoEpilog(); | 273 blockDoEpilog(); |
274 } | |
275 | |
276 private static boolean jumpsToNextBlock(Instruction instr) { | |
277 return instr instanceof BlockEnd; | |
268 } | 278 } |
269 | 279 |
270 @Override | 280 @Override |
271 public void visitArrayLength(ArrayLength x) { | 281 public void visitArrayLength(ArrayLength x) { |
272 emitArrayLength(x); | 282 emitArrayLength(x); |
398 XirSnippet snippet = xir.genExceptionObject(site(x)); | 408 XirSnippet snippet = xir.genExceptionObject(site(x)); |
399 emitXir(snippet, x, stateFor(x), null, true); | 409 emitXir(snippet, x, stateFor(x), null, true); |
400 } | 410 } |
401 | 411 |
402 @Override | 412 @Override |
403 public void visitGoto(Anchor x) { | 413 public void visitAnchor(Anchor x) { |
404 setNoResult(x); | 414 setNoResult(x); |
405 | 415 |
406 // emit phi-instruction moves after safepoint since this simplifies | 416 // emit phi-instruction moves after safepoint since this simplifies |
407 // describing the state at the safepoint. | 417 // describing the state at the safepoint. |
408 | 418 |