Repository : ssh://darcs.haskell.org//srv/darcs/ghc

On branch  : master

http://hackage.haskell.org/trac/ghc/changeset/c588395719241c4b5756bd8d60dbf822915dfc5b

>---------------------------------------------------------------

commit c588395719241c4b5756bd8d60dbf822915dfc5b
Author: Simon Marlow <marlo...@gmail.com>
Date:   Thu Oct 25 16:18:36 2012 +0100

    Fix a bug in CmmSink exposed by a recent optimisation (#7366)

>---------------------------------------------------------------

 compiler/cmm/CmmSink.hs |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/compiler/cmm/CmmSink.hs b/compiler/cmm/CmmSink.hs
index 9565fec..7553e37 100644
--- a/compiler/cmm/CmmSink.hs
+++ b/compiler/cmm/CmmSink.hs
@@ -384,6 +384,7 @@ tryToInline dflags live node assigs = go usages node [] 
assigs
                 -- usages of the regs on the RHS to 2.
 
         cannot_inline = skipped `regsUsedIn` rhs -- Note [dependent 
assignments]
+                        || l `elem` skipped
                         || not (okToInline dflags rhs node)
 
         occurs_once = not (l `elemRegSet` live)
@@ -415,6 +416,15 @@ tryToInline dflags live node assigs = go usages node [] 
assigs
 --
 -- For now we do nothing, because this would require putting
 -- everything inside UniqSM.
+--
+-- One more variant of this (#7366):
+--
+--   [ y = e, y = z ]
+--
+-- If we don't want to inline y = e, because y is used many times, we
+-- might still be tempted to inline y = z (because we always inline
+-- trivial rhs's).  But of course we can't, because y is equal to e,
+-- not z.
 
 addUsage :: UniqFM Int -> LocalReg -> UniqFM Int
 addUsage m r = addToUFM_C (+) m r 1



_______________________________________________
Cvs-ghc mailing list
Cvs-ghc@haskell.org
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to