Add new step to copyPropagation to eliminate literal expressions #27525
+135
−66
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.
Adds a new function,
eliminateLiteralExpressions
, which is called by thecopyPropagation
compiler pass to remove evaluate literal expressions and replace them.This new function collapses expressions like
1 + 2 < 4
, which prior to this PR would be generated as-is. Normally we just rely on backend compiler optimizations to handle this, but by handling this in the Chapel compiler we reduce the amount of code we generate. This is especially true when we can eliminate whole blocks by evaluating an if statement's condition. By putting this pass intocopyPropagation
, we can propagate bools before runningdeadCodeElimination
, which enables that poass to remove even more dead blocks.I originally created this to reduce the compiler's memory usage during codegen by reducing the amount of code we generate. I was using a large application (arkouda) and I saw little difference before/after this work (<1% difference), so I am leaving this PR as a draft due to its questionable utility.