This commit adds extra state to `ConversionPatternRewriterImpl` to store all modified / newly-created operations and moved / newly-created blocks in separate lists on a per-pattern basis. This is in preparation of the One-Shot Dialect Conversion refactoring: the new driver will no longer maintain a list of all IR rewrites, so information about newly-created operations (which is needed to trigger recursive legalization) must be retained in a different data structure. This commit is also expected to improve the performance of the existing driver. The previous implementation iterated over all new IR modifications and then filtered them by type. It also required an additional pointer indirection (through `std::unique_ptr<IRRewrite>`) to retrieve the operation/block pointer.
Multi-Level Intermediate Representation
See https://mlir.llvm.org/ for more information.