#1592: Unexpected boxing in generated code
-----------------------+----------------------------------------------------
  Reporter:  neil      |          Owner:         
      Type:  bug       |         Status:  new    
  Priority:  normal    |      Milestone:         
 Component:  Compiler  |        Version:  6.6.1  
  Severity:  minor     |       Keywords:         
Difficulty:  Unknown   |             Os:  Unknown
  Testcase:            |   Architecture:  Unknown
-----------------------+----------------------------------------------------
argument being passed around, but that GHC 6.6.1 isn't unboxing. In
 the following example both functions take a GHC.Base.Int, which I
 think should be an Int#.

 {{{
 Rec {
 f60_rS5 :: GHC.Prim.State# GHC.Prim.RealWorld -> GHC.Base.Int ->
 GHC.Base.Int
 [GlobalId]
 [Arity 2
  NoCafRefs
  Str: DmdType LL]
 f60_rS5 =
  \ (v1_aWH :: GHC.Prim.State# GHC.Prim.RealWorld) (v2_aWI :: GHC.Base.Int)
 ->
    case $wccall_r2kv v1_aWH of wild_X2j { (# ds_d1V4, ds1_d1V3 #) ->
    case ds1_d1V3 of wild1_X2L {
      __DEFAULT -> f60_rS5 ds_d1V4 v2_aWI;
      (-1) -> v2_aWI;
      10 -> f561_r2kx ds_d1V4 v2_aWI
    }
    }
 f561_r2kx :: GHC.Prim.State# GHC.Prim.RealWorld -> GHC.Base.Int ->
 GHC.Base.Int
 [GlobalId]
 [Arity 2
  NoCafRefs
  Str: DmdType LL]
 f561_r2kx =
  \ (v1_aWm :: GHC.Prim.State# GHC.Prim.RealWorld) (v2_aWn :: GHC.Base.Int)
 ->
    case $wccall_r2kv v1_aWm of wild_X2j { (# ds_d1V4, ds1_d1V3 #) ->
    case ds1_d1V3 of wild1_X2P {
      __DEFAULT ->
        case v2_aWn of wild2_a2du { GHC.Base.I# x_a2dw ->
        case wild1_X2P of wild3_X35 {
          __DEFAULT -> f60_rS5 ds_d1V4 (GHC.Base.I# (GHC.Prim.+# x_a2dw
 1));
          10 -> f561_r2kx ds_d1V4 (GHC.Base.I# (GHC.Prim.+# x_a2dw 1))
        }
        };
      (-1) -> v2_aWn
    }
    }
 end Rec }
 }}}

 This code comes from a line counting program, I have attached the
 entire source. My character counting program does infer the correct
 strictness, although that is based on a single self-recursive
 function. The largest obvious difference is that the strictness
 depends on the two functions which call each other - does this impeed
 GHC's strictness analysis?

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/1592>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to