-
Notifications
You must be signed in to change notification settings - Fork 444
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
Do not recompute write sets for equal child nodes belonging to a given IR::Vector
#4810
base: main
Are you sure you want to change the base?
Conversation
See #4811 |
…ctors Signed-off-by: Kyle Cripps <[email protected]>
b8d1d8e
to
7d80973
Compare
Not particularly fond of this API. Seems built just to hide this particular bug. |
@mihaibudiu By API do you mean Also, this PR is not "hiding" any bug. It is one of several steps needed to fix the root problem that has been previously discussed. |
This is @ChrisDodd's territory, so he should decide the fate of this API |
(sorry I missed this PR when it first came around) How do we get IR::Vectors with duplicate nodes in them? In all the cases where you're calling For example, a BlockStatement like
that might be represented as the same Statement repeated twice, but the effect of each will be independent -- in particular, the use/defs of each will be different. This would imply that if this is a DAG with the same child appearing twice, we need to include the |
built on top of #4797
Title and discussion in #4797 are self-explanatory.
This still does not fully fix the problem described in #4797 (but it is yet another incremental improvement).
ComputeWriteSet
'scallingContext
is not properly updated during the IR traversal, soProgramPoint
s are not correct in many places. This can be fixed by either:ComputeWriteSet
'scallingContext
is properly updated andProgramPoint
s created correctly everywhere, orProgramPoint
s withloc_t
, so that updating the calling context is the responsibility of theVisitor
overhead, rather than ofComputeWriteSet
.Neither of these are trivial, but the latter is probably the most invasive option.