The post-optimisations sometimes produce sub-optimal code when optimising top-level programs, because movements can be pruned differently depending on which cells are visited first at the start of a program. The movements are in an undefined order due to underlying use of a rust stdlib hashmap.