Note [arityType for recursive let-bindings]
For /recursive/ bindings it's more difficult, to call arityType (as we do in Note [arityType for non-recursive let-bindings]) because we don't have an ArityType to put in the envt for the recursively bound Ids. So for we satisfy ourselves with whizzing up up an ArityType from the idArity of the function, via idArityType. That is nearly equivalent to deleting the binder from the envt, at which point we'll call idArityType at the occurrences. But doing it here means (a) we only call idArityType once, no matter how many occurrences, and (b) we can check (in the arityType (Var v) case) that we don't mention free join-point Ids. See Note [No free join points in arityType]. But see Note [Arity for recursive join bindings] in GHC.Core.Opt.Simplify.Utils for dark corners.
References 3
- Arity for recursive join bindings GHC.Core.Opt.Arity
- arityType for non-recursive let-bindings GHC.Core.Opt.Arity
- No free join points in arityType GHC.Core.Opt.Arity
Referenced by 2
- GHC.Core.Opt.Arity call site ×2