This move is useful for a few reasons:
- It is easier to see what the intrinsic lowering is doing when the operations it creates are not immediately lowered
- When lowering a HLFIR intrinsic generates an operation which needs to be lowered by another pattern matcher in the same pass, MLIR will run that other substitution before validating and finalizing the original changes. This means that the erasure of operations is not yet visible to subsequent matchers, which hugely complicates transformations (in this case, hlfir.exprs cannot be rewritten because they are still used by the now-erased HLFIR intrinsic op.
There seems to be a clang-format issue in this file.