#4081: Strict constructor fields inspected in loop
---------------------------------+------------------------------------------
    Reporter:  rl                |        Owner:                         
        Type:  bug               |       Status:  new                    
    Priority:  normal            |    Milestone:  7.0.2                  
   Component:  Compiler          |      Version:  6.13                   
    Keywords:                    |     Testcase:                         
   Blockedby:                    |   Difficulty:                         
          Os:  Unknown/Multiple  |     Blocking:                         
Architecture:  Unknown/Multiple  |      Failure:  Runtime performance bug
---------------------------------+------------------------------------------

Comment(by simonpj):

 I'm pretty certain we can fix this.  My plan is simply to extend the let-
 floater to float out `(case x of I# y ->  ...)`, where x is known to be
 evaluated.  (Of course, for any product type, not just Int.)

 How might x be known to be evaluated? The usual way is by an enclosing
 'case', but that won't happen here because the inner case would simply
 vanish. No, it'll be because you pattern match on a strict constructor
 {{{
   case v of
     C x -> ....(case x of I# y -> ...) ...
 }}}
 where
 {{{
   data C a = C !a
 }}}
 I believe that these strict constructors are the cases you are concerned
 about, correct?

 Simon

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4081#comment:7>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to