Skip to content

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.

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information