Simplify `GHC.Core.Utils.mkTick`

Tickets: #26878 (closed) #26941 (closed) #27121 (closed)

This MR simplifies GHC.Core.Utils.mkTick, removing the accumulating parameter rest which was suspiciously treating a bunch of different ticks as a group, and moving the group as a whole around the AST, ignoring that the ticks in the group might have different placement properties.

The most important change is that we revert the logic (added in 85b0aae2) that allowed ticks to be placed around coercions, which caused serious issues (e.g. #27121 (closed)). It was just a mistake, as it doesn't make sense to put a tick around a coercion.

Also adds Note [Pushing SCCs inwards] which clarifies the logic for pushing SCCs into lambdas, constructor applications, and dropping SCCs around non-function variables (in particular the treatment of splittable ticks).

A few other changes are also implemented:

  • simplify can_split predicate (no functional change)
  • combine profiling ticks into one when possible
Edited by sheaf

Merge request reports

Loading