| 388 | |

| 389 | == Noppy proc-points == |

| 390 | |

| 391 | Consider |

| 392 | |

| 393 | {{{ |

| 394 | f :: Int -> Int -> Int -> Int |

| 395 | f a b c |

| 396 | = let x = a + b |

| 397 | y = b + c |

| 398 | z = a + c |

| 399 | in x `seq` case g x y z of |

| 400 | True -> x |

| 401 | False -> 0 |

| 402 | |

| 403 | {-# NOINLINE g #-} |

| 404 | g :: Int -> Int -> Int -> Bool |

| 405 | g x y 0 = x == y |

| 406 | g _ _ _ = False |

| 407 | }}} |

| 408 | |

| 409 | {{{ |

| 410 | cnm: |

| 411 | // directEntry else |

| 412 | // emitCall: Sequel: Assign |

| 413 | I32[(young<cmM> + 8)] = base_GHCziNum_zdfNumInt_closure; |

| 414 | I32[(young<cmM> + 4)] = cmM; |

| 415 | call base_GHCziNum_zp_info(...) returns to Just cmM (8) (4) with update frame 4; |

| 416 | cmM: |

| 417 | _cmN::I32 = R1; |

| 418 | // slow_call for _cmN::I32 with pat stg_ap_pp |

| 419 | R1 = _cmN::I32; |

| 420 | // emitCall: Sequel: Assign |

| 421 | I32[(young<cmP> + 8)] = _skO::I32; |

| 422 | I32[(young<cmP> + 12)] = _skN::I32; |

| 423 | I32[(young<cmP> + 4)] = cmP; |

| 424 | call stg_ap_pp_fast(...) returns to Just cmP (12) (4) with update frame 4; |

| 425 | }}} |

| 426 | |

| 427 | We generate an extra proc-point for ``cmM``, where in theory we ought to be able to stick the subsequent ``stg_ap_pp_fast`` onto the stack as another return point. |