#5237: Inefficient code generated for x^2
--------------------------------------+-------------------------------------
  Reporter:  scpmw                    |          Owner:                
      Type:  bug                      |         Status:  new           
  Priority:  normal                   |      Milestone:  7.4.1         
 Component:  libraries/base           |        Version:  7.0.3         
Resolution:                           |       Keywords:                
  Testcase:                           |      Blockedby:                
Difficulty:                           |             Os:  Linux         
  Blocking:                           |   Architecture:  x86_64 (amd64)
   Failure:  Runtime performance bug  |  
--------------------------------------+-------------------------------------

Comment(by simonpj):

 I finally get it.  What we ''want'' to say is
 {{{
 {-# RULES "^^^2/Integer" forall x. x ^^^ (2 :: Integer) = x * x #-}
 {-# SPECIALISE [1] (^^^) :: Integer -> Integer -> Integer #-}
 }}}
 Note the `[1]` for SPECIALISE, saying "only run the specialise rule in
 phase 1 and later. So the RULE gets a chance to run in the earlier phase
 2.

 This is the right way to solve this, not by making rules override
 specialisation; that's far too fragile.

 But on looking at GHC I see that SPECIALISE pragmas don't let you specify
 a phase in which they become active. That's just a stupid oversight; like
 any RULE or INLINE pragma, it should definitely have a phase control.
 That would let you solve the problem, right?

 Simon

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5237#comment:17>
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