1. 04 Aug, 2021 3 commits
    • sheaf's avatar
      Use Reductions to keep track of rewritings · 9ff20c5b
      sheaf authored
      We define Reduction = Reduction Coercion !Type.
      A reduction of the form 'Reduction co new_ty' witnesses an
      equality ty ~co~> new_ty.
      That is, the rewriting happens left-to-right: the right-hand-side
      type of the coercion is the rewritten type, and the left-hand-side
      type the original type.
      Sticking to this convention makes the codebase more consistent,
      helping to avoid certain applications of SymCo.
      
      This replaces the parts of the codebase which represented reductions as
      pairs, (Coercion,Type) or (Type,Coercion).
      
      Reduction being strict in the Type argument improves performance
      in some programs that rewrite many type families (such as T9872).
      
      Fixes #20161
      
      -------------------------
      Metric Decrease:
        T5321Fun
          T9872a
          T9872b
          T9872c
          T9872d
      -------------------------
      9ff20c5b
    • Krzysztof Gogolewski's avatar
      Linear types: fix linting of multiplicities (#19165) · 9b719549
      Krzysztof Gogolewski authored
      The previous version did not substitute the type used in the scrutinee.
      9b719549
    • Krzysztof Gogolewski's avatar
  2. 03 Aug, 2021 12 commits
    • Sylvain Henry's avatar
      Don't store tmpDir in Settings · 4f672677
      Sylvain Henry authored
      There was no point in doing this as indicated by the TODO.
      4f672677
    • Sylvain Henry's avatar
      Fix ASSERTS_ENABLED CPP · 6ad25367
      Sylvain Henry authored
      6ad25367
    • Luite Stegeman's avatar
      move bytecode preparation into the STG pipeline · 3403c028
      Luite Stegeman authored
      this makes it possible to combine passes to compute free variables
      more efficiently in a future change
      3403c028
    • Tito Sacchi's avatar
      Correctly unload libs on GHCi with external iserv · 9744c6f5
      Tito Sacchi authored
      Fix #17669
      
      `hostIsDynamic` is basically a compile-time constant embedded
      in the RTS. Therefore, GHCi didn't unload object files
      properly when used with an external interpreter built in a
      different way.
      9744c6f5
    • Zubin's avatar
      Handle OverloadedRecordDot in TH (#20185) · 5155eafa
      Zubin authored
      5155eafa
    • Andreas Klebinger's avatar
      bd287400
    • Krzysztof Gogolewski's avatar
      Add "fast-ci" label, for skipping most builds (#19280) · c0e66524
      Krzysztof Gogolewski authored
      If "fast-ci" is present, only the following parts of full-build are run:
      - validate-x86_64-linux-deb9-debug
      - validate-x86_64-windows-hadrian
      - validate-x86_64-linux-deb9-unreg-hadrian
      c0e66524
    • Matthew Pickering's avatar
      Remove eager forcing of RuleInfo in substRuleInfo · 694ec53b
      Matthew Pickering authored
      substRuleInfo updates the IdInfo for an Id, therefore it is important to not
      force said IdInfo whilst updating it, otherwise we end up in an infinite
      loop. This is what happened in #20112 where `mkTick` forced the IdInfo being
      updated by checking the arity in isSaturatedConApp. The fix is to stop
      the expression being forced so early by removing the call to
      seqRuleInfo.
      
      The call sequence looked something like:
      
      * `substRecBndrs`
      * `substIdBndr`
      * `substIdInfo`
      * `substRuleInfo`
      * `substRule`
      * `substExpr`
      * `mkTick`
      * `isSaturatedConApp`
      * Look at `IdInfo` for thing we are currently substituting because the rule is attached to `transpose` and mentions it in the `RHS` of the rule.
      
      Which arose because the `transpose` Id had a rule attached where the RHS
      of the rule also mentioned `transpose`.
      
      This call to seqRuleInfo was introduced in 4e7d56fd
      where it was explained
      
      >  I think there are now *too many* seqs, and they waste work, but I don't have
      >  time to find which ones.
      
      We also observe that there is the ominous note on `substRule` about
      making sure substExpr is called lazily.
      
      > {- Note [Substitute lazily]
      > ~~~~~~~~~~~~~~~~~~~~~~~~~~~
      > The functions that substitute over IdInfo must be pretty lazy, because
      > they are knot-tied by substRecBndrs.
      >
      > One case in point was #10627 in which a rule for a function 'f'
      > referred to 'f' (at a different type) on the RHS.  But instead of just
      > substituting in the rhs of the rule, we were calling simpleOptExpr, which
      > looked at the idInfo for 'f'; result <<loop>>.
      >
      > In any case we don't need to optimise the RHS of rules, or unfoldings,
      > because the simplifier will do that.
      
      Before `seqRuleInfo` was removed, this note was pretty much ignored in
      the `substSpec` case because the expression was immediately forced after
      `substRule` was called.
      
      Unfortunately it's a bit tricky to add a test for this as the failure
      only manifested (for an unknown reason) with a dwarf enabled compiler
      *AND* compiling with -g3. Fortunatley there is currently a CI
      configuration which builds a dwarf compiler to test this.
      
      Also, for good measure, finish off the work started in
      840df336 which renamed SpecInfo to
      RuleInfo but then didn't rename 'substSpec' to 'substRuleInfo'.
      
      Fixes #20112
      694ec53b
    • Ben Gamari's avatar
      Bump process submodule · d22ec8a9
      Ben Gamari authored
      d22ec8a9
    • Zubin's avatar
      Properly escape arguments in ghc-cabal · 9807350a
      Zubin authored
      9807350a
    • Zubin's avatar
      Remove hschooks.c and -no-hs-main for ghc-bin · bbee89dd
      Zubin authored
      bbee89dd
    • Jens Petersen's avatar
      include README in hadrian.cabal · c248e7cc
      Jens Petersen authored
      [skip ci]
      c248e7cc
  3. 02 Aug, 2021 19 commits
  4. 29 Jul, 2021 6 commits