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