CorePrep's `floatableTick` and `tickishFloatable` don't agree on their semantics.
A few months ago I pulled the inline conditions used for tick floating into corePrep out into a function floatableTick
which is defined as such:
floatableTick :: GenTickish pass -> Bool
floatableTick tickish =
tickishPlace tickish == PlaceNonLam &&
tickish `tickishScopesLike` SoftScope
This behaves not quite the same as tickishFloatable:
tickishFloatable :: GenTickish pass -> Bool
tickishFloatable t = t `tickishScopesLike` SoftScope && not (tickishCounts t)
At a glance it seems the main difference is that CorePrep would not consider non-counting cost centre annotations to be floatable. Most (all?) of which would have been floated in some earlier core pass already anyway so I don't think it's horrible. But we should probably just use tickishFloatable
in CorePrep as well. I don't expect anything to go wrong by doing so.