Mercurial > hg > graal-compiler
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; + } }