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