Re: [GHC] #4945: Another SpecConstr infelicity

2011-02-15 Thread GHC
#4945: Another SpecConstr infelicity
-+--
  Reporter:  batterseapower  |  Owner:  
  Type:  bug | Status:  closed  
  Priority:  normal  |  Milestone:  7.0.2   
 Component:  Compiler|Version:  7.0.1   
Resolution:  fixed   |   Keywords:  
  Testcase:  simplCore/should_compile/T4945  |  Blockedby:  
Difficulty:  | Os:  Unknown/Multiple
  Blocking:  |   Architecture:  Unknown/Multiple
   Failure:  Runtime performance bug |  
-+--
Changes (by igloo):

  * status:  merge = closed
  * resolution:  = fixed


Comment:

 Only performance, and not a regression since 7.0.1 at least, so not
 merging at this stage of the release cycle.

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


Re: [GHC] #4945: Another SpecConstr infelicity

2011-02-13 Thread GHC
#4945: Another SpecConstr infelicity
-+--
Reporter:  batterseapower|Owner:
Type:  bug   |   Status:  merge 
Priority:  normal|Milestone:  7.0.2 
   Component:  Compiler  |  Version:  7.0.1 
Keywords:| Testcase:  simplCore/should_compile/T4935
   Blockedby:|   Difficulty:
  Os:  Unknown/Multiple  | Blocking:
Architecture:  Unknown/Multiple  |  Failure:  Runtime performance bug   
-+--
Changes (by igloo):

  * milestone:  = 7.0.2


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


Re: [GHC] #4945: Another SpecConstr infelicity

2011-02-09 Thread GHC
#4945: Another SpecConstr infelicity
-+--
Reporter:  batterseapower|Owner:
Type:  bug   |   Status:  merge 
Priority:  normal|Milestone:
   Component:  Compiler  |  Version:  7.0.1 
Keywords:| Testcase:  simplCore/should_compile/T4935
   Blockedby:|   Difficulty:
  Os:  Unknown/Multiple  | Blocking:
Architecture:  Unknown/Multiple  |  Failure:  Runtime performance bug   
-+--
Changes (by simonpj):

  * status:  new = merge
  * testcase:  = simplCore/should_compile/T4935


Comment:

 Right.  I came to the same conclusion.
 {{{
 Mon Feb  7 10:25:37 GMT 2011  simo...@microsoft.com
   * Fix Trac #4945: another SpecConstr infelicity

   Well, more a plain bug really, which led to SpecConstr
   missing some obvious opportunities for specialisation.

   Thanks to Max Bolingbroke for spotting this.

 M ./compiler/specialise/SpecConstr.lhs -21 +35
 }}}
 Simon

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


Re: [GHC] #4945: Another SpecConstr infelicity

2011-02-04 Thread GHC
#4945: Another SpecConstr infelicity
-+--
Reporter:  batterseapower|   Owner: 
Type:  bug   |  Status:  new
Priority:  normal|   Component:  Compiler   
 Version:  7.0.1 |Keywords: 
Testcase:|   Blockedby: 
  Os:  Unknown/Multiple  |Blocking: 
Architecture:  Unknown/Multiple  | Failure:  Runtime performance bug
-+--

Comment(by batterseapower):

 OK, I got it. All you need to do is replace varUsage with:

 {{{
 varUsage :: ScEnv - OutVar - ArgOcc - ScUsage
 varUsage env v use = case lookupHowBound env v of
 Just RecArg - SCU { scu_calls = emptyVarEnv
, scu_occs = unitVarEnv v use }
 Just RecFun - SCU { scu_calls = unitVarEnv v [(emptyVarEnv, [])] --
 Added so we get specialisations even if function used in trivial way (i.e.
 as a variable)
, scu_occs = emptyVarEnv }
 Nothing - nullUsage
 }}}

 Otherwise the pattern guard on (lookupVarEnv bind_calls fn) in specialise
 fails, so we don't even get to call callsToPats.

 I think this is the right change, because it should also mean that we get
 call pattern specialisations for locally-bound functions that are e.g.
 stored inside a data structure.

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


[GHC] #4945: Another SpecConstr infelicity

2011-02-03 Thread GHC
#4945: Another SpecConstr infelicity
-+--
Reporter:  batterseapower|   Owner: 
Type:  bug   |  Status:  new
Priority:  normal|   Component:  Compiler   
 Version:  7.0.1 |Keywords: 
Testcase:|   Blockedby: 
  Os:  Unknown/Multiple  |Blocking: 
Architecture:  Unknown/Multiple  | Failure:  Runtime performance bug
-+--
 I'm beginning to sound like a broken record, but SpecConstr still doesn't
 seem to be right! The last problem has been fixed, but I've found a new
 one.

 Please observe the output of compiling the attached code with:

 {{{
 ./ghc -fforce-recomp -c -dverbose-core2core -O2 -fno-liberate-case
 STUArray-Rewrite2.hs
 }}}

 In the output of SpecConstr we have a local letrec:

 {{{
 (letrec {
$wa_s1G7 [Occ=LoopBreaker]
  :: forall s_aJm.
 Data.Array.Base.STUArray
   s_aJm GHC.Types.Int GHC.Types.Int
 - GHC.Prim.Int#
 - GHC.Prim.State# s_aJm
 - (# GHC.Prim.State# s_aJm, () #)
[LclId, Arity=3, Str=DmdType LLL]
$wa_s1G7 =
  \ (@ s_aJm)
(w_s1FS
   :: Data.Array.Base.STUArray
s_aJm GHC.Types.Int GHC.Types.Int)
(ww_s1FV :: GHC.Prim.Int#)
(w_s1FX :: GHC.Prim.State# s_aJm) -
case GHC.Prim.# ww_s1FV ww_s1FN
of wild_Xj [Dmd=Just A] {
  GHC.Types.False -
case w_s1FS
of wild_aTj [Dmd=Just L]
{ Data.Array.Base.STUArray ds1_aTl [Dmd=Just U]
   ds2_aTm [Dmd=Just U]
   n_aTn [Dmd=Just U(L)]
   ds3_aTo [Dmd=Just A] -
case n_aTn
of wild_aTs [Dmd=Just A]
{ GHC.Types.I# x_aTu [Dmd=Just L] -
case $wa_s1G0
   @ s_aJm
   w_s1FS
   (GHC.Types.I# ww_s1FV)
   0
   (GHC.Prim.-# x_aTu 1)
   w_s1FX
of wild_XUw [Dmd=Just A]
{ (# new_s_XUB [Dmd=Just L], r_XUD [Dmd=Just A] #) -
$wa_s1G7
  @ s_aJm w_s1FS (GHC.Prim.+# ww_s1FV 1) new_s_XUB
}
}
};
  GHC.Types.True - (# w_s1FX, GHC.Unit.() #)
}; } in
  $wa_s1G7)
 }}}

 This is a local recursive loop with an invariant first argument (w_s1FS)
 that is recrutinised every time! This seems deeply uncool.

 This is with HEAD (7.1.20110203, incorporating the patch Fix typo in
 SpecConstr that made it not work at all)

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


Re: [GHC] #4945: Another SpecConstr infelicity

2011-02-03 Thread GHC
#4945: Another SpecConstr infelicity
-+--
Reporter:  batterseapower|   Owner: 
Type:  bug   |  Status:  new
Priority:  normal|   Component:  Compiler   
 Version:  7.0.1 |Keywords: 
Testcase:|   Blockedby: 
  Os:  Unknown/Multiple  |Blocking: 
Architecture:  Unknown/Multiple  | Failure:  Runtime performance bug
-+--

Comment(by batterseapower):

 I see what is going on here. Since this is a local letrec, you don't
 generate any specialisations from the RHS call patterns unless at least
 one call pattern is boring. However, since the body doesn't apply *any*
 arguments at all to the function, SpecConstr doesn't detect any calls! How
 amusing :-)

 A quick and easy hack that would probably solve it would be to replace
 SpecConstr:1486 with:

 {{{
 any isNothing mb_pats || null mb_pats
 }}}

 I can't test this right now.

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


Re: [GHC] #4945: Another SpecConstr infelicity

2011-02-03 Thread GHC
#4945: Another SpecConstr infelicity
-+--
Reporter:  batterseapower|   Owner: 
Type:  bug   |  Status:  new
Priority:  normal|   Component:  Compiler   
 Version:  7.0.1 |Keywords: 
Testcase:|   Blockedby: 
  Os:  Unknown/Multiple  |Blocking: 
Architecture:  Unknown/Multiple  | Failure:  Runtime performance bug
-+--

Comment(by batterseapower):

 OK, I did actually manage to try my fix, and I'm still not getting
 specialisation of that function. That observation might be part of the
 problem, but it's not the whole story.

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