Bound the recursion depth of heuristic size_stmt
in RTLgen
#519
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.
The
more_likely
heuristic used in the RTLgen pass takes time O(n) where n is the size of the function and is called m times, where m = O(n) is the number of if-then-else statements in the function. This can result in O(n^2) behavior.This PR avoids this problem by limiting the depth of recursive calls on if-then-else statements. It also puts a fixed upper limit on the return value of
size_stmt
, since comparing the sizes of two large statements is meaningless. (The interesting case performance-wise is when one of the statements is small.)