From 07160d6128cd517f967749b169d03b3c1ebac0e3 Mon Sep 17 00:00:00 2001 From: "simonpj@microsoft.com" Date: Thu, 12 Oct 2006 16:02:54 +0000 Subject: [PATCH] Comments only --- compiler/stranal/DmdAnal.lhs | 17 ++++++++++++++++- compiler/stranal/WorkWrap.lhs | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/compiler/stranal/DmdAnal.lhs b/compiler/stranal/DmdAnal.lhs index 3fc8477..309cd29 100644 --- a/compiler/stranal/DmdAnal.lhs +++ b/compiler/stranal/DmdAnal.lhs @@ -474,7 +474,22 @@ The thunk_cpr_ok stuff [CPR-AND-STRICTNESS] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If the rhs is a thunk, we usually forget the CPR info, because it is presumably shared (else it would have been inlined, and -so we'd lose sharing if w/w'd it into a function. +so we'd lose sharing if w/w'd it into a function). E.g. + + let r = case expensive of + (a,b) -> (b,a) + in ... + +If we marked r as having the CPR property, then we'd w/w into + + let $wr = \() -> case expensive of + (a,b) -> (# b, a #) + r = case $wr () of + (# b,a #) -> (b,a) + in ... + +But now r is a thunk, which won't be inlined, so we are no further ahead. + However, if the strictness analyser has figured out (in a previous iteration) that it's strict, then we DON'T need to forget the CPR info. diff --git a/compiler/stranal/WorkWrap.lhs b/compiler/stranal/WorkWrap.lhs index 2f5d38c..456f2f0 100644 --- a/compiler/stranal/WorkWrap.lhs +++ b/compiler/stranal/WorkWrap.lhs @@ -317,7 +317,7 @@ splitThunk transforms like this: Now simplifier will transform to case x-rhs of - I# a -> let x* = I# b + I# a -> let x* = I# a in body which is what we want. Now suppose x-rhs is itself a case: -- 1.7.10.4