[GHC] #5000: Eliminate absent arguments in non-strict positions

2011-03-07 Thread GHC
#5000: Eliminate absent arguments in non-strict positions
-+--
Reporter:  batterseapower|   Owner: 
Type:  feature request   |  Status:  new
Priority:  normal|   Component:  Compiler   
 Version:  7.0.2 |Keywords: 
Testcase:|   Blockedby: 
  Os:  Unknown/Multiple  |Blocking: 
Architecture:  Unknown/Multiple  | Failure:  Runtime performance bug
-+--
 One of my programs has this is the output of GHC -O2:

 {{{
 Rec {
 h28_s14N
   :: forall t_aMK t_aML.
  Main.Nat - t_aMK - t_aML - Main.Nat - Main.Nat
 [LclId,
  Arity=4,
  Unf=Unf{Src=vanilla, TopLvl=True, Arity=4, Value=True,
  ConLike=True, Cheap=True, Expandable=True,
  Guidance=IF_ARGS [0 0 0 0] 6 2}]
 h28_s14N =
   \ (@ t_aMK)
 (@ t_aML)
 (az94z94z941_u439_amh :: Main.Nat)
 (awS1_u462_ami :: t_aMK)
 (awS1_u466_amj :: t_aML)
 (x_u590_amk :: Main.Nat) -
 Main.S
   (h29_s14O
  @ t_aMK
  @ t_aML
  az94z94z941_u439_amh
  awS1_u462_ami
  awS1_u466_amj
  x_u590_amk)

 h29_s14O [Occ=LoopBreaker]
   :: forall t_aMK t_aML.
  Main.Nat - t_aMK - t_aML - Main.Nat - Main.Nat
 [LclId,
  Arity=4,
  Unf=Unf{Src=vanilla, TopLvl=True, Arity=4, Value=True,
  ConLike=True, Cheap=True, Expandable=True,
  Guidance=IF_ARGS [0 0 0 5] 9 0}]
 h29_s14O =
   \ (@ t_aMK)
 (@ t_aML)
 (az94z94z941_u439_amm :: Main.Nat)
 (awS1_u462_amn :: t_aMK)
 (awS1_u466_amo :: t_aML)
 (x_u590_amp :: Main.Nat) -
 case x_u590_amp of _ {
   Main.Z - h21'_al8 @ Main.Nat az94z94z941_u439_amm;
   Main.S x_u595_amq -
 h28_s14N
   @ t_aMK
   @ t_aML
   az94z94z941_u439_amm
   awS1_u462_amn
   awS1_u466_amo
   x_u595_amq
 }
 end Rec }
 }}}

 This is ridiculous because the two awS1 arguments are totally dead. This
 greatly increases allocations made by the program.

 I speculate that this occurs because the recursive call to h29 is guarded
 by a use of the S constructor, making it non-strict.

-- 
Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/5000
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] #5000: Eliminate absent arguments in non-strict positions

2011-03-07 Thread GHC
#5000: Eliminate absent arguments in non-strict positions
-+--
Reporter:  batterseapower|   Owner: 
Type:  feature request   |  Status:  new
Priority:  normal|   Component:  Compiler   
 Version:  7.0.2 |Keywords: 
Testcase:|   Blockedby: 
  Os:  Unknown/Multiple  |Blocking: 
Architecture:  Unknown/Multiple  | Failure:  Runtime performance bug
-+--
Description changed by batterseapower:

Old description:

 One of my programs has this is the output of GHC -O2:

 {{{
 Rec {
 h28_s14N
   :: forall t_aMK t_aML.
  Main.Nat - t_aMK - t_aML - Main.Nat - Main.Nat
 [LclId,
  Arity=4,
  Unf=Unf{Src=vanilla, TopLvl=True, Arity=4, Value=True,
  ConLike=True, Cheap=True, Expandable=True,
  Guidance=IF_ARGS [0 0 0 0] 6 2}]
 h28_s14N =
   \ (@ t_aMK)
 (@ t_aML)
 (az94z94z941_u439_amh :: Main.Nat)
 (awS1_u462_ami :: t_aMK)
 (awS1_u466_amj :: t_aML)
 (x_u590_amk :: Main.Nat) -
 Main.S
   (h29_s14O
  @ t_aMK
  @ t_aML
  az94z94z941_u439_amh
  awS1_u462_ami
  awS1_u466_amj
  x_u590_amk)

 h29_s14O [Occ=LoopBreaker]
   :: forall t_aMK t_aML.
  Main.Nat - t_aMK - t_aML - Main.Nat - Main.Nat
 [LclId,
  Arity=4,
  Unf=Unf{Src=vanilla, TopLvl=True, Arity=4, Value=True,
  ConLike=True, Cheap=True, Expandable=True,
  Guidance=IF_ARGS [0 0 0 5] 9 0}]
 h29_s14O =
   \ (@ t_aMK)
 (@ t_aML)
 (az94z94z941_u439_amm :: Main.Nat)
 (awS1_u462_amn :: t_aMK)
 (awS1_u466_amo :: t_aML)
 (x_u590_amp :: Main.Nat) -
 case x_u590_amp of _ {
   Main.Z - h21'_al8 @ Main.Nat az94z94z941_u439_amm;
   Main.S x_u595_amq -
 h28_s14N
   @ t_aMK
   @ t_aML
   az94z94z941_u439_amm
   awS1_u462_amn
   awS1_u466_amo
   x_u595_amq
 }
 end Rec }
 }}}

 This is ridiculous because the two awS1 arguments are totally dead. This
 greatly increases allocations made by the program.

 I speculate that this occurs because the recursive call to h29 is guarded
 by a use of the S constructor, making it non-strict.

New description:

 One of my programs has this is the output of the post-worker/wrapper
 simplification:

 {{{
 Rec {
 h28_s14N
   :: forall t_aMK t_aML.
  Main.Nat - t_aMK - t_aML - Main.Nat - Main.Nat
 [LclId,
  Arity=4,
  Str=DmdType ,
  Unf=Unf{Src=vanilla, TopLvl=True, Arity=4, Value=True,
  ConLike=True, Cheap=True, Expandable=True,
  Guidance=IF_ARGS [0 0 0 0] 6 2}]
 h28_s14N =
   \ (@ t_aMK)
 (@ t_aML)
 (az94z94z941_u439_amh :: Main.Nat)
 (awS1_u462_ami :: t_aMK)
 (awS1_u466_amj :: t_aML)
 (x_u590_amk :: Main.Nat) -
 Main.S
   (h29_s14O
  @ t_aMK
  @ t_aML
  az94z94z941_u439_amh
  awS1_u462_ami
  awS1_u466_amj
  x_u590_amk)

 h29_s14O [Occ=LoopBreaker]
   :: forall t_aMK t_aML.
  Main.Nat - t_aMK - t_aML - Main.Nat - Main.Nat
 [LclId,
  Arity=4,
  Str=DmdType LLLS,
  Unf=Unf{Src=vanilla, TopLvl=True, Arity=4, Value=True,
  ConLike=True, Cheap=True, Expandable=True,
  Guidance=IF_ARGS [0 0 0 3] 7 0}]
 h29_s14O =
   \ (@ t_aMK)
 (@ t_aML)
 (az94z94z941_u439_amm :: Main.Nat)
 (awS1_u462_amn :: t_aMK)
 (awS1_u466_amo :: t_aML)
 (x_u590_amp :: Main.Nat) -
 case x_u590_amp of _ {
   Main.Z - az94z94z941_u439_amm;
   Main.S x_u595_amq [Dmd=Just L] -
 h28_s14N
   @ t_aMK
   @ t_aML
   az94z94z941_u439_amm
   awS1_u462_amn
   awS1_u466_amo
   x_u595_amq
 }
 end Rec }
 }}}

 This is ridiculous because the two awS1 arguments are totally dead. This
 greatly increases allocations made by the program.

 These absent arguments should be removed by the strictness analyser,
 However I speculate that this occurs because the recursive call to h29 is
 guarded by a use of the S constructor, making it non-strict.

--

-- 
Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/5000#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] #5000: Eliminate absent arguments in non-strict positions

2011-03-07 Thread GHC
#5000: Eliminate absent arguments in non-strict positions
-+--
 Reporter:  batterseapower   |  Owner:  
 Type:  feature request  | Status:  closed  
 Priority:  normal   |  Component:  Compiler
  Version:  7.0.2| Resolution:  worksforme  
 Keywords:   |   Testcase:  
Blockedby:   | Os:  Unknown/Multiple
 Blocking:   |   Architecture:  Unknown/Multiple
  Failure:  Runtime performance bug  |  
-+--
Changes (by batterseapower):

  * status:  new = closed
  * resolution:  = worksforme


Comment:

 Urk, never mind: this was fixed sometime between 7.0.1.20101215 and HEAD

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