From 061d33c9923500d169570171947335053b63755f Mon Sep 17 00:00:00 2001 From: "simonpj@microsoft.com" Date: Wed, 6 Sep 2006 11:52:42 +0000 Subject: [PATCH] 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. --- compiler/coreSyn/CoreUtils.lhs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 -- 1.7.10.4