[GHC] #15155: How untagged pointers sneak into banged fields

GHC ghc-devs at haskell.org
Tue May 15 15:10:11 UTC 2018


#15155: How untagged pointers sneak into banged fields
-------------------------------------+-------------------------------------
        Reporter:  heisenbug         |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:  8.6.1
       Component:  Compiler          |              Version:  8.4.2
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:  14677
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by heisenbug):

 Replying to [comment:1 simonpj]:
 > I'm lost in a maze of twisty passages.  We have

 Sorry, but this was how the story unfolded with time. Believe me, I am
 also starting to get lost. Will try to clarify the relations, to my best
 knowledge, below.

 >
 > * #14677 Code generator does not correctly tag a pointer.  I'm not sure
 if this is a serious bug, or just the loss of a potential optimisation.
 (I think the latter.)

 Performance-only bug. Leads to unnecessarily generated code and extra
 runtime because closures are entered redundantly.

 >
 > * #14626 No need to enter a scrutinised value.  Apparently blocked on
 #14677

 Does not seem to block #14373 but could make it more effective.

 >
 > * #14373 Introduce PTR-tagging for big constructor families.   This has
 Phab:D4267.  I think it may be blocked (in some way) on #15155.

 All the above is about making pointer tagging more expressive and reducing
 closure entries.

 The very bottom of this stack is

 * #13861 Take more advantage of STG representation invariance (follows up
 #9291)


 >
 > * #15155 (this ticket).
 >
 > I'm not sure how these tickets inter-relate beyond the blocking notes
 I've put here.  Which is most urgent?  Gabor, are you actively working on
 any of them?

 I think #15155 (this ticket) is the one that needs to be resolved first,
 so that #14677 can land. Then #14626 and #14373 can be resolved, unless
 new problems surface. #13861 has a proof-of-concept implementation, which
 will need some love, but with extended PTR-tagging (#14373) it'd cover
 more cases.

 Since I dreamed up the "conservative" solution just last night, I have no
 fix for this one yet, but could start with an implementation in early June
 latest. (In January I implemented intra-module "hardlinks" in the NCG.) I
 think it would be nice to have a discussion about `IND_STATIC` closures
 too, resp. their elimination.

 Overall I think it is worrisome that strict fields get initialised with
 non-tagged pointers, even if the compiler statically knows that the
 corresponding data is in WHNF.

 TL/DR: This is a stack of mostly dependent tickets (newer ones need to be
 resolved before older ones), each unlocking a new optimisation in its own
 right. Hopefully no more monsters lurking.

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


More information about the ghc-tickets mailing list