From: simonpj@microsoft.com Date: Wed, 6 Sep 2006 11:52:42 +0000 (+0000) Subject: Make record selection look cheap X-Git-Tag: Before_FC_branch_merge~62 X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=061d33c9923500d169570171947335053b63755f Make record selection look cheap exprIsCheap was already making record selection look cheap, esp for dictionary selection; e.g. (==) dEq The idea is to allow those record selections to migrate inside a lambda, because on the whole it's more expensive to share than repeat them. But sometimes dictionary selection is nested; e.g. (==) ($p1Num dNum) This turned out to make a (fragile) rewrite rule fire a little more robustly, but it seems like a good idea in any case. This patch makes nested record selections also look cheap. --- diff --git a/compiler/coreSyn/CoreUtils.lhs b/compiler/coreSyn/CoreUtils.lhs index 69f78fa..c59c751 100644 --- a/compiler/coreSyn/CoreUtils.lhs +++ b/compiler/coreSyn/CoreUtils.lhs @@ -476,7 +476,7 @@ exprIsCheap other_expr -- Applications and variables -- to bother to check the number of args -------------- - go_sel [arg] = exprIsTrivial arg -- I'm experimenting with making record selection + go_sel [arg] = exprIsCheap arg -- I'm experimenting with making record selection go_sel other = False -- look cheap, so we will substitute it inside a -- lambda. Particularly for dictionary field selection. -- BUT: Take care with (sel d x)! The (sel d) might be cheap, but