This adds a new canonicalization rule to replace concats of truncated
negations with a negation of the concatenated truncates, e.g.
(concat_vectors (v4i16 (truncate (not (v4i32)))), (v4i16 (truncate (not (v4i32))))) -> (not (concat_vectors (v4i16 (truncate (v4i32))), (v4i16 (truncate (v4i32)))))
Doing this allows avoiding redundant negations being emitted in
certain cases.
hasOneUse (or N->isOnlyUserOf()) checks?