Allow join point Ids to occur below ticks & casts
Tickets:
- #14242 (closed), #26157, #26642 (closed), #26693 (closed): join points under profiling ticks
- #14610, #21716 (closed), #26422: join points under casts
This MR classifies all join points into two categories:
- true join points
- quasi join points
A quasi join point is a join point in which one of the binders occurs under more profiling ticks or casts than its binding site.
The only operational difference is that, for quasi join points, we
cannot perform the case-of-case transformation described in
Note [Join points and case-of-case] in GHC.Core.Opt.Simplify.Iteration.
All of this is explained in detail in Note [Quasi join points].
Edited by sheaf