Incremental compilation often spends quite a bit of time computing stable hashes of various things. Profiling shows that a large part of this time is spent hashing AdtDef and Subststy::Slice values. In both cases it is likely that the same values are hashed over and over again. It's worth investigating whether doing some caching here, as we do for macro expansion contexts, is viable and brings speed ups.