changeset 9946:3d09efebcc8e

do not assign FrameStates to ForeignCallNodes that have no side effect and cannot deoptimize
author Lukas Stadler <lukas.stadler@jku.at>
date Fri, 07 Jun 2013 16:36:13 +0200
parents abf8c6cc5f50
children f8a4c5011a10
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java
diffstat 1 files changed, 8 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java	Fri Jun 07 16:34:44 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ForeignCallNode.java	Fri Jun 07 16:36:13 2013 +0200
@@ -105,10 +105,15 @@
     @Override
     public void setDeoptimizationState(FrameState f) {
         updateUsages(deoptState, f);
-        if (deoptState != null) {
-            throw new IllegalStateException(toString(Verbosity.Debugger));
+        assert deoptState == null && canDeoptimize() : "shouldn't assign deoptState to " + this;
+        deoptState = f;
+    }
+
+    @Override
+    public void setStateAfter(FrameState x) {
+        if (hasSideEffect() || canDeoptimize()) {
+            super.setStateAfter(x);
         }
-        deoptState = f;
     }
 
     @Override