Mercurial > hg > graal-compiler
diff 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 |
line wrap: on
line diff
--- a/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java Fri May 27 14:20:30 2011 +0200 +++ b/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java Fri May 27 15:41:10 2011 +0200 @@ -34,7 +34,7 @@ import com.oracle.max.asm.*; import com.sun.c1x.*; import com.sun.c1x.alloc.*; -import com.sun.c1x.alloc.OperandPool.*; +import com.sun.c1x.alloc.OperandPool.VariableFlag; import com.sun.c1x.debug.*; import com.sun.c1x.globalstub.*; import com.sun.c1x.graph.*; @@ -43,10 +43,16 @@ import com.sun.c1x.util.*; import com.sun.c1x.value.*; import com.sun.cri.bytecode.*; +import com.sun.cri.bytecode.Bytecodes.MemoryBarriers; import com.sun.cri.ci.*; import com.sun.cri.ri.*; +import com.sun.cri.xir.CiXirAssembler.XirConstant; +import com.sun.cri.xir.CiXirAssembler.XirInstruction; +import com.sun.cri.xir.CiXirAssembler.XirOperand; +import com.sun.cri.xir.CiXirAssembler.XirParameter; +import com.sun.cri.xir.CiXirAssembler.XirRegister; +import com.sun.cri.xir.CiXirAssembler.XirTemp; import com.sun.cri.xir.*; -import com.sun.cri.xir.CiXirAssembler.*; /** * This class traverses the HIR instructions and generates LIR instructions from them. @@ -253,7 +259,7 @@ } } } - if (block.blockSuccessors().size() == 1 && (block.getInstructions().size() == 0 || !(block.getInstructions().get(block.getInstructions().size() - 1) instanceof BlockEnd))) { + if (block.blockSuccessors().size() >= 1 && (block.getInstructions().size() == 0 || !jumpsToNextBlock(block.getInstructions().get(block.getInstructions().size() - 1)))) { moveToPhi(); block.lir().jump(block.blockSuccessors().get(0)); } @@ -267,6 +273,10 @@ blockDoEpilog(); } + private static boolean jumpsToNextBlock(Instruction instr) { + return instr instanceof BlockEnd; + } + @Override public void visitArrayLength(ArrayLength x) { emitArrayLength(x); @@ -400,7 +410,7 @@ } @Override - public void visitGoto(Anchor x) { + public void visitAnchor(Anchor x) { setNoResult(x); // emit phi-instruction moves after safepoint since this simplifies