diff graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java @ 2633:721a45190d6d

Merge.
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Tue, 10 May 2011 18:12:26 +0200
parents 776e026f2e15 569228710be8
children 4dd0573f510b
line wrap: on
line diff
--- a/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java	Tue May 10 17:17:28 2011 +0200
+++ b/graal/GraalCompiler/src/com/sun/c1x/gen/LIRGenerator.java	Tue May 10 18:12:26 2011 +0200
@@ -27,7 +27,6 @@
 import static com.sun.cri.ci.CiCallingConvention.Type.*;
 import static com.sun.cri.ci.CiValue.*;
 
-import java.lang.reflect.*;
 import java.util.*;
 
 import com.sun.c1x.*;
@@ -43,7 +42,6 @@
 import com.sun.c1x.util.*;
 import com.sun.c1x.value.*;
 import com.sun.c1x.value.FrameState.PhiProcedure;
-import com.sun.cri.bytecode.*;
 import com.sun.cri.bytecode.Bytecodes.MemoryBarriers;
 import com.sun.cri.ci.*;
 import com.sun.cri.ri.*;
@@ -268,6 +266,10 @@
 
     @Override
     public void visitBase(Base x) {
+        // emit phi-instruction move after safepoint since this simplifies
+        // describing the state at the safepoint.
+        //moveToPhi();
+
         // all blocks with a successor must end with an unconditional jump
         // to the successor even if they are consecutive
         lir.jump(x.defaultSuccessor());
@@ -295,7 +297,7 @@
 
     @Override
     public void visitResolveClass(ResolveClass i) {
-        LIRDebugInfo info = stateFor(i);
+        LIRDebugInfo info = stateFor(i, i.stateAfter());
         XirSnippet snippet = xir.genResolveClass(site(i), i.type, i.portion);
         emitXir(snippet, i, info, null, true);
     }
@@ -443,29 +445,25 @@
         lir.cmove(i.condition(), tVal, fVal, reg);
     }
 
-    /*protected FrameState stateBeforeInvoke(Invoke invoke) {
+    protected FrameState stateBeforeInvoke(Invoke invoke) {
         FrameState stateAfter = invoke.stateAfter();
         FrameStateBuilder builder = new FrameStateBuilder(compilation.method, invoke.graph());
-        System.out.println("stateBeforeInvoke(" + invoke + "); maxStack=" + compilation.method.maxStackSize());
-        System.out.println("stateAfter=" + stateAfter);
         builder.initializeFrom(stateAfter);
         if (invoke.kind != CiKind.Void) {
-            Value pop = builder.pop(invoke.kind);
-            System.out.println("pop " + pop);
+            builder.pop(invoke.kind);
         }
         int argumentCount = invoke.argumentCount(); // invoke.arguments() iterable?
         for (int i = 0; i < argumentCount; i++) {
             Value arg = invoke.argument(i);
-            System.out.println("push " + arg);
             builder.push(arg.kind, arg);
         }
         return builder.create(invoke.bci());
-    }*/
+    }
 
     @Override
     public void visitInvoke(Invoke x) {
         RiMethod target = x.target();
-        LIRDebugInfo info = stateFor(x);
+        LIRDebugInfo info = stateFor(x, stateBeforeInvoke(x));
 
         XirSnippet snippet = null;
 
@@ -1001,14 +999,18 @@
         return operand;
     }
 
+    private FrameState stateBeforeRegisterFinalizer(RegisterFinalizer rf) {
+        Value object = rf.object();
+        FrameStateBuilder builder = new FrameStateBuilder(compilation.method, rf.graph());
+        builder.initializeFrom(rf.stateAfter());
+        builder.push(object.kind, object);
+        return builder.create(rf.bci());
+    }
+
     @Override
     public void visitRegisterFinalizer(RegisterFinalizer x) {
-        Value object = x.object();
-        CiValue receiver = load(object);
-        FrameStateBuilder builder = new FrameStateBuilder(compilation.method, x.graph());
-        builder.initializeFrom(x.stateAfter());
-        builder.push(object.kind, object);
-        LIRDebugInfo info = stateFor(x, builder.create(x.bci()));
+        CiValue receiver = load(x.object());
+        LIRDebugInfo info = stateFor(x, stateBeforeRegisterFinalizer(x));
         callRuntime(CiRuntimeCall.RegisterFinalizer, info, receiver);
         setNoResult(x);
     }
@@ -1463,10 +1465,10 @@
     }
 
     protected LIRDebugInfo maybeStateFor(Instruction x) {
-        if (lastState == null) {
+        if (x.stateAfter() == null) {
             return null;
         }
-        return stateFor(x, lastState);
+        return stateFor(x, x.stateAfter());
     }
 
     protected LIRDebugInfo stateFor(Instruction x) {
@@ -1638,16 +1640,9 @@
             return "XirSupport<" + current + ">";
         }
 
+
     }
 
-    private CiValue emitInvokeKnown(RiMethod method, FrameState stateBefore, Value... args) {
-        boolean isStatic = Modifier.isStatic(method.accessFlags());
-        Invoke invoke = new Invoke(isStatic ? Bytecodes.INVOKESTATIC : Bytecodes.INVOKESPECIAL, method.signature().returnKind(), args, method, null, stateBefore, null);
-        visitInvoke(invoke);
-        return invoke.operand();
-    }
-
-
     @Override
     public void visitFrameState(FrameState i) {
         // nothing to do for now