Legalization tends to create anyext(trunc) patterns. This should always be combined - into either a single trunc, a single ext, or nothing if the types match exactly. But if we happen to combine the trunc first, we may pull the trunc away from the anyext or make it implicit (e.g. the truncate(extract) -> extract(bitcast) fold). To prevent this, we can avoid doing the fold, similarly to how we already handle fpround(fpextend).
This is somewhat ugly, but the alternative is to try to undo this later when we combine the anyext, and that gets painful.
Should we limit this to AfterLegalizeTypes or later?