[GHC] #14283: Remove the special case for tagToEnum# in the code generator?

GHC ghc-devs at haskell.org
Wed Sep 27 05:22:32 UTC 2017


#14283: Remove the special case for tagToEnum# in the code generator?
-------------------------------------+-------------------------------------
           Reporter:  dfeuer         |             Owner:  (none)
               Type:  task           |            Status:  new
           Priority:  normal         |         Milestone:  8.4.1
          Component:  Compiler       |           Version:  8.2.1
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 The only remaining primop (aside from `unsafeCoerce#` and `seq`) that
 produces an enumeration type is `tagToEnum#`. There is some magic in the
 code generator to make garbage collection relating to this work as it has
 historically. We want to get rid of the special case. Simply removing it
 altogether actually does seem to work, but the code we generate likely
 isn't quite the same. The challenge here is that (despite what I thought
 earlier) we definitely ''can'' end up in code generation, under certain
 circumstances, with

 {{{#!hs
 case tagToEnum# @t x of
   ...
 }}}

 How does this happen? After all, in `caseRules` we carefully remove every
 case on `tagToEnum#` and `dataToTag#` applications! The trouble comes when
 CorePrep puts everything in A-normal form. Strict function applications
 are transformed into `case` forms, so

 {{{#!hs
 f (tagToEnum# x)
 }}}

 will become

 {{{#!hs
 case tagToEnum# x of y
   DEFAULT -> f y
 }}}

 Suddenly we have that ugly case! Hmph.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14283>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list