-
Notifications
You must be signed in to change notification settings - Fork 13.4k
[MemCpyOpt] Fix the invalid code modification for GEP #68479
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
Conversation
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.
Instead of rolling back, we should not do the change until we know the transform will succeed. The simplest way to do that would be to move this check to the end. (Setting a variable to perform the move later would also work.)
@nikic According to this modification(https://reviews.llvm.org/D89623), which claim that "When performing a call slot optimization to a GEP dest, it will currently usually not apply, because the GEP is directly before the memcpy and as such does not dominate the call. We should move it above the call if that satisfies the domination requirement." It seems that it is better to apply this move before some further checks. Is it proper to do RAII for GEP inst instead of roll back? |
ff0f90f
to
a6cd812
Compare
The further checks do not depend on the instruction being moved. It just needs to be moved at some point if the transform is applied, it does not have to be at that specific place in the sequence of checks. |
a6cd812
to
ee996e2
Compare
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.
LGTM
602591c
to
40084e5
Compare
please update commit message too. |
Relocate the GEP modification to a later stage of the function performCallSlotOption, ensuring that the code remains unchanged if the optimization fails.
40084e5
to
ab78cf1
Compare
Relocate the GEP modification to a later stage of the function performCallSlotOption, ensuring that the code remains unchanged if the optimization fails.