remove unnecessary stg_noForceIO (#3508)
authorSimon Marlow <marlowsd@gmail.com>
Fri, 24 Sep 2010 15:02:02 +0000 (15:02 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Fri, 24 Sep 2010 15:02:02 +0000 (15:02 +0000)
rts/Exception.cmm
rts/Interpreter.c
rts/RtsAPI.c
rts/StgStartup.cmm

index 7d1bf39..f85e2e9 100644 (file)
@@ -494,10 +494,9 @@ retry_pop_stack:
             // be per-thread.
             CInt[rts_stop_on_exception] = 0;
             ("ptr" ioAction) = foreign "C" deRefStablePtr (W_[rts_breakpoint_io_action] "ptr") [];
-            Sp = Sp - WDS(7);
-            Sp(6) = exception;
-            Sp(5) = stg_raise_ret_info;
-            Sp(4) = stg_noforceIO_info;    // required for unregisterised
+            Sp = Sp - WDS(6);
+            Sp(5) = exception;
+            Sp(4) = stg_raise_ret_info;
             Sp(3) = exception;             // the AP_STACK
             Sp(2) = ghczmprim_GHCziBool_True_closure; // dummy breakpoint info
             Sp(1) = ghczmprim_GHCziBool_True_closure; // True <=> a breakpoint
index 5a564ba..9a38a7e 100644 (file)
@@ -884,21 +884,15 @@ run_BCO:
                   // in a reasonable state for the GC and so that
                   // execution of this BCO can continue when we resume
                   ioAction = (StgClosure *) deRefStablePtr (rts_breakpoint_io_action);
-                  Sp -= 9;
-                  Sp[8] = (W_)obj;   
-                  Sp[7] = (W_)&stg_apply_interp_info;
-                  Sp[6] = (W_)&stg_noforceIO_info;     // see [unreg] below
+                  Sp -= 8;
+                  Sp[7] = (W_)obj;
+                  Sp[6] = (W_)&stg_apply_interp_info;
                   Sp[5] = (W_)new_aps;                 // the AP_STACK
                   Sp[4] = (W_)BCO_PTR(arg3_freeVars);  // the info about local vars of the breakpoint
                   Sp[3] = (W_)False_closure;            // True <=> a breakpoint
                   Sp[2] = (W_)&stg_ap_pppv_info;
                   Sp[1] = (W_)ioAction;                // apply the IO action to its two arguments above
                   Sp[0] = (W_)&stg_enter_info;         // get ready to run the IO action
-                  // Note [unreg]: in unregisterised mode, the return
-                  // convention for IO is different.  The
-                  // stg_noForceIO_info stack frame is necessary to
-                  // account for this difference.
-
                   // set the flag in the TSO to say that we are now
                   // stopping at a breakpoint so that when we resume
                   // we don't stop on the same breakpoint that we
index fb9c010..53628dc 100644 (file)
@@ -394,7 +394,6 @@ createIOThread (Capability *cap, nat stack_size,  StgClosure *closure)
 {
   StgTSO *t;
   t = createThread (cap, stack_size);
-  pushClosure(t, (W_)&stg_noforceIO_info);
   pushClosure(t, (W_)&stg_ap_v_info);
   pushClosure(t, (W_)closure);
   pushClosure(t, (W_)&stg_enter_info);
index c3c0bc3..f8940c4 100644 (file)
@@ -151,22 +151,6 @@ INFO_TABLE_RET( stg_forceIO, RET_SMALL)
 }
 
 /* -----------------------------------------------------------------------------
-    Non-strict IO application.
-
-    This stack frame works like stg_forceIO_info except that it
-    doesn't evaluate the return value.  We need the layer because the
-    return convention for an IO action differs depending on whether R1
-    is a register or not.
-    ------------------------------------------------------------------------- */
-
-INFO_TABLE_RET( stg_noforceIO, RET_SMALL )
-
-{
-  Sp_adj(1);
-  jump %ENTRY_CODE(Sp(0));
-}
-
-/* -----------------------------------------------------------------------------
    Special STG entry points for module registration.
    -------------------------------------------------------------------------- */