-
Notifications
You must be signed in to change notification settings - Fork 15.2k
[IR][JumpThreading] Fix infinite recursion on compare self-reference [updated] #129501
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 20 commits
Commits
Show all changes
22 commits
Select commit
Hold shift + click to select a range
b1b2f0a
[IR] Avoid self-referencing values caused by PHI node removal
ro-i c97a6c6
implement feedback
ro-i d9e764f
implement another approach
ro-i e0ccb61
replace undef
ro-i 35aa07d
implement another approach; reset existing tests
ro-i 573c2a9
fix formatting
ro-i 24a1fca
more precise naming
ro-i f2355f5
Revert "more precise naming"
ro-i 452e7c0
Revert "fix formatting"
ro-i e35945f
Revert "implement another approach; reset existing tests"
ro-i 2a419cb
Revert "replace undef"
ro-i e0b9786
Revert "implement another approach"
ro-i 13e3598
Revert "implement feedback"
ro-i 9fe2146
Revert "[IR] Avoid self-referencing values caused by PHI node removal"
ro-i a488438
[IR][JumpThreading] Fix infinite recursion on compare self-reference
ro-i 548f359
fix formatting
ro-i 03ae290
implement feedback
ro-i 60f2856
public -> private
ro-i de6ae29
implemented feedback
ro-i b611801
implement feedback
ro-i 643cb86
insert and double check at function start
ro-i 1ae1449
use make_scope_exit
ro-i File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it would be cleaner to do these checks in evaluateOnPredecessorEdge(), not at each call to evaluateOnPredecessorEdge. Doesn't really matter right now, but will make sure this keeps getting handled if this code handles more than icmp in the future.
Please also combine the contains and insert calls by using the return value of insert.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I adapted the code to insert and double check at the start of evaluateOnPredecessorEdge, see my latest commit. However, there still needs to be a
containsbefore each call because, otherwise, the caller doesn't know whether it's allowed/required to erase the Value after the call.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can also handle the erase in the same place, e.g. by adding a
auto _ = make_scope_exit([V]() { Visited.erase(V); });There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I didn't know
make_scope_exit, thanks!