diff graal/GraalCompiler/src/com/sun/c1x/asm/AbstractAssembler.java @ 2671:d8601d421b96

New Deoptimize node, remove ResolveClass node and replace it with deoptimization
author Gilles Duboscq <gilles.duboscq@oracle.com>
date Thu, 12 May 2011 17:17:50 +0200
parents 46586c77b129
children
line wrap: on
line diff
--- a/graal/GraalCompiler/src/com/sun/c1x/asm/AbstractAssembler.java	Thu May 12 17:00:09 2011 +0200
+++ b/graal/GraalCompiler/src/com/sun/c1x/asm/AbstractAssembler.java	Thu May 12 17:17:50 2011 +0200
@@ -44,6 +44,7 @@
     public final CiTarget target;
     public final CiTargetMethod targetMethod;
     public List<ExceptionInfo> exceptionInfoList;
+    protected int lastSafepointPos;
 
     public AbstractAssembler(CiTarget target) {
         this.target = target;
@@ -162,6 +163,8 @@
     public void recordImplicitException(int pcOffset, LIRDebugInfo info) {
         // record an implicit exception point
         if (info != null) {
+            assert lastSafepointPos < pcOffset;
+            lastSafepointPos = pcOffset;
             targetMethod.recordSafepoint(pcOffset, info.debugInfo());
             recordExceptionHandlers(pcOffset, info);
         }
@@ -169,17 +172,23 @@
 
     protected void recordDirectCall(int posBefore, int posAfter, Object target, LIRDebugInfo info) {
         CiDebugInfo debugInfo = info != null ? info.debugInfo() : null;
+        assert lastSafepointPos < posAfter;
+        lastSafepointPos = posAfter;
         targetMethod.recordCall(posBefore, target, debugInfo, true);
     }
 
     protected void recordIndirectCall(int posBefore, int posAfter, Object target, LIRDebugInfo info) {
         CiDebugInfo debugInfo = info != null ? info.debugInfo() : null;
+        assert lastSafepointPos < posAfter;
+        lastSafepointPos = posAfter;
         targetMethod.recordCall(posBefore, target, debugInfo, false);
     }
 
     public void recordSafepoint(int pos, LIRDebugInfo info) {
         // safepoints always need debug info
         CiDebugInfo debugInfo = info.debugInfo();
+        assert lastSafepointPos < pos;
+        lastSafepointPos = pos;
         targetMethod.recordSafepoint(pos, debugInfo);
     }
 
@@ -227,4 +236,8 @@
     public void blockComment(String s) {
         targetMethod.addAnnotation(new CodeComment(codeBuffer.position(), s));
     }
+
+    public int lastSafepointPos() {
+        return lastSafepointPos;
+    }
 }