Make record selection look cheap
authorsimonpj@microsoft.com <unknown>
Wed, 6 Sep 2006 11:52:42 +0000 (11:52 +0000)
committersimonpj@microsoft.com <unknown>
Wed, 6 Sep 2006 11:52:42 +0000 (11:52 +0000)
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

index 69f78fa..c59c751 100644 (file)
@@ -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