• takano-akio's avatar
    Allow top-level string literals in Core (#8472) · d49b2bb2
    takano-akio authored
    This commits relaxes the invariants of the Core syntax so that a
    top-level variable can be bound to a primitive string literal of type
    This commit:
    * Relaxes the invatiants of the Core, and allows top-level bindings whose
      type is Addr# as long as their RHS is either a primitive string literal or
      another variable.
    * Allows the simplifier and the full-laziness transformer to float out
      primitive string literals to the top leve.
    * Introduces the new StgGenTopBinding type to accomodate top-level Addr#
    * Introduces a new type of labels in the object code, with the suffix "_bytes",
      for exported top-level Addr# bindings.
    * Makes some built-in rules more robust. This was necessary to keep them
      functional after the above changes.
    This is a continuation of D2554.
    Rebasing notes:
    This had two slightly suspicious performance regressions:
    * T12425: bytes allocated regressed by roughly 5%
    * T4029: bytes allocated regressed by a bit over 1%
    * T13035: bytes allocated regressed by a bit over 5%
    These deserve additional investigation.
    Rebased by: bgamari.
    Test Plan: ./validate --slow
    Reviewers: goldfire, trofi, simonmar, simonpj, austin, hvr, bgamari
    Reviewed By: trofi, simonpj, bgamari
    Subscribers: trofi, simonpj, gridaphobe, thomie
    Differential Revision: https://phabricator.haskell.org/D2605
    GHC Trac Issues: #8472
PrelRules.hs 60.5 KB