[CIR] Split cir-simplify into two passes #868
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR splits the old
cir-simplify
pass into two new passes, namelycir-canonicalize
andcir-simplify
(the newcir-simplify
). Thecir-canonicalize
pass runs transformations that do not affect CIR-to-source fidelity much, such as operation folding and redundant operation elimination. On the other hand, the newcir-simplify
pass runs transformations that may significantly change the code and break high-level code analysis passes, such as more aggresive code optimizations.This PR also updates the CIR-to-CIR pipeline to fit these two new passes. The
cir-canonicalize
pass is moved to the very front of the pipeline, while the newcir-simplify
pass is moved to the back of the pipeline (but still before lowering prepare of course). Additionally, the newcir-simplify
now only runs when the user specifies a non-zero optimization level on the frontend.Also fixed some typos and resolved some
clang-tidy
complaints along the way.Resolves #827 .