changeset 3017:b4ba003eb11d

Fixed unnecessary node in the graph builder.
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Sat, 18 Jun 2011 14:51:18 +0200
parents 2f5f6ffbafa0
children 5857923e563c
files graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java runfop.sh src/share/vm/runtime/deoptimization.cpp
diffstat 4 files changed, 15 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java	Sat Jun 18 12:19:51 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/gen/LIRGenerator.java	Sat Jun 18 14:51:18 2011 +0200
@@ -980,6 +980,7 @@
     @Override
     public void visitDeoptimize(Deoptimize deoptimize) {
         assert lastState != null : "deoptimize always needs a state";
+        assert lastState.bci != Instruction.SYNCHRONIZATION_ENTRY_BCI : "bci must not be -1 for deopt framestate";
         DeoptimizationStub stub = new DeoptimizationStub(deoptimize.action(), lastState);
         addDeoptimizationStub(stub);
         lir.branch(Condition.TRUE, stub.label, stub.info);
--- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java	Sat Jun 18 12:19:51 2011 +0200
+++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java	Sat Jun 18 14:51:18 2011 +0200
@@ -1048,11 +1048,11 @@
     }
 
     private void genJsr(int dest) {
-        throw new CiBailout("jsr/ret not supported");
+        throw new JSRNotSupportedBailout();
     }
 
     private void genRet(int localIndex) {
-        throw new CiBailout("jsr/ret not supported");
+        throw new JSRNotSupportedBailout();
     }
 
     private void genTableswitch() {
@@ -1292,16 +1292,16 @@
                 Deoptimize deopt = new Deoptimize(DeoptAction.InvalidateRecompile, graph);
                 deopt.setMessage("unresolved " + block.handler.catchType().name());
                 append(deopt);
-                FixedNode nextDispatch = createTarget(nextBlock, frameState);
-                appendGoto(nextDispatch);
+//                FixedNode nextDispatch = createTarget(nextBlock, frameState);
+//                appendGoto(nextDispatch);
             }
         }
     }
 
     private void appendGoto(FixedNode target) {
         if (lastInstr != null) {
-        lastInstr.setNext(target);
-    }
+            lastInstr.setNext(target);
+        }
     }
 
     private void iterateBytecodesForBlock(Block block) {
--- a/runfop.sh	Sat Jun 18 12:19:51 2011 +0200
+++ b/runfop.sh	Sat Jun 18 14:51:18 2011 +0200
@@ -15,4 +15,4 @@
   echo "DACAPO is not defined. It must point to a Dacapo benchmark directory."
   exit 1;
 fi
-${JDK7}/bin/java -client -d64 -graal -Xms1g -Xmx2g -esa -classpath ${DACAPO}/dacapo-9.12-bach.jar $* Harness --preserve -n 5 fop 
+${JDK7}/bin/java -client -d64 -graal -Xms1g -Xmx2g -esa -classpath ${DACAPO}/dacapo-9.12-bach.jar -XX:-GraalBailoutIsFatal $* Harness --preserve -n 5 fop 
--- a/src/share/vm/runtime/deoptimization.cpp	Sat Jun 18 12:19:51 2011 +0200
+++ b/src/share/vm/runtime/deoptimization.cpp	Sat Jun 18 14:51:18 2011 +0200
@@ -1223,13 +1223,18 @@
 
 //    tty->print_cr("trap_request: %08x, cpi: %i, pc: %016x", trap_request, unloaded_class_index, fr.pc());
 
+    
     Events::log("Uncommon trap occurred @" INTPTR_FORMAT " unloaded_class_index = %d", fr.pc(), (int) trap_request);
     vframe*  vf  = vframe::new_vframe(&fr, &reg_map, thread);
     compiledVFrame* cvf = compiledVFrame::cast(vf);
-
+    
     nmethod* nm = cvf->code();
+    ScopeDesc*      trap_scope  = cvf->scope();
+    
+    if (TraceDeoptimization) {
+      tty->print_cr("Deoptimization: bci=%d pc=%d, relative_pc=%d, method=%s", trap_scope->bci(), fr.pc(), fr.pc() - nm->code_begin(), trap_scope->method()->name()->as_C_string());
+    }
 
-    ScopeDesc*      trap_scope  = cvf->scope();
     methodHandle    trap_method = trap_scope->method();
     int             trap_bci    = trap_scope->bci();
     Bytecodes::Code trap_bc     = trap_method->java_code_at(trap_bci);