Let LiftStructViews lift interstate edge struct accesses to views #1827
+273
−31
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.
LiftStructViews
is a necessary pass for ensuring structure member accesses and container array accesses work correctly, by lifting accesses to them into a 'tower of views' that correctly traces their accesses to the root data container. However, this previously did not consider interstate edges. This PR fixes this by making two changes:LiftStructViews
to lift struct accesses on interstate edges to the correct tower of views, by inserting a lifting state right before the interstate edge, where views are constructed. The interstate edge is then re-written to access the correct view instead.ArrayElimination
to correctly handle these views, which are not directly connected to other nodes, by preventing it from incorrectly merging or removing them. This is done by allowing source/sink view nodes to be merged correctly, i.e., when they are 'the same view', i.e., their view memlets are identical.This shows an example of the constructed tower of views for a complex interstate edge struct access: