Improve expression simplification by running it twice #3811
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.
Draft as it builds on #3741Which issue does this PR close?
re #3740
re #1160
Rationale for this change
There are some fairly simple expressions that should be simplified but yet are not because additional simplifications are unlocked by the constant propagator.
For example
is only simplified to
Because the flow is
(i * 0) > 5
which can not do anything,(i * 0) > 5
and rewrites to0 > 5
Now, if the constant evaluator can run again it will result in
false
which is great. However, it is not run again and thus there is the issue.I hit the same basic embarrassment while making the example in re #1160
The challenges with a fully general solution to this issue are described #1160. However, we have had good luck in IOx simply running the simplification / constant prop twice
What changes are included in this PR?
Are there any user-facing changes?
Better constant propagation