-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Ssa: Trim the use-use relation to skip irrelevant nodes #19044
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 1 commit
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
5aa7029
SSA: Add support for skipping WriteDefinitions in use-use.
aschackmull 7c82f51
Java: Skip SSA definition nodes in data flow.
aschackmull c778bf6
SSA: Rename SsaInputDefinitionExt
aschackmull 669f926
SSA: Skip irrelevant phi input nodes.
aschackmull 4e2ad97
SSA: Skip phi nodes with unique successor.
aschackmull 36532bc
SSA: Skip identity steps.
aschackmull 0162b84
SSA: Fix a poor join-order and avoid SSA recomputation.
aschackmull b3bea97
C#: Accept test changes.
aschackmull f27e819
Java: Accept test changes.
aschackmull e7e5f75
Ruby: Accept test changes.
aschackmull ae47339
Rust: Accept test changes.
aschackmull 4d04391
C++: Keep all phi input back edges.
aschackmull d5d0274
Java/SSA: Keep proper distinction between cached stages.
aschackmull 8749bdb
C++: Accept test changes.
aschackmull c6cee48
SSA: Address review comments.
aschackmull 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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -1502,6 +1502,12 @@ module Make<LocationSig Location, InputSig<Location> Input> { | |
| * definition. | ||
| */ | ||
| default predicate includeWriteDefsInFlowStep() { any() } | ||
|
|
||
| /** | ||
| * Holds if barrier guards should be supported on input edges to phi | ||
| * nodes. Disable this only if barrier guards are not going to be used. | ||
| */ | ||
| default predicate supportBarrierGuardsOnPhiEdges() { any() } | ||
| } | ||
|
|
||
| /** | ||
|
|
@@ -1533,6 +1539,29 @@ module Make<LocationSig Location, InputSig<Location> Input> { | |
| ) | ||
| } | ||
|
|
||
| /** | ||
| * Holds if the input to `phi` from the block `input` might be relevant for | ||
| * barrier guards as a separately synthesized `TSsaInputNode`. | ||
| */ | ||
| private predicate relevantPhiInputNode(SsaPhiExt phi, BasicBlock input) { | ||
| DfInput::supportBarrierGuardsOnPhiEdges() and | ||
| // If the input isn't explicitly read then a guard cannot check it. | ||
| exists(DfInput::getARead(getAPhiInputDef(phi, input))) and | ||
| ( | ||
| exists(DfInput::Guard g | g.controlsBranchEdge(input, phi.getBasicBlock(), _)) | ||
| or | ||
| exists(BasicBlock prev | | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this could deserve a comment with an example |
||
| AdjacentSsaRefs::adjacentRefPhi(prev, _, input, phi.getBasicBlock(), | ||
| phi.getSourceVariable()) and | ||
| prev != input and | ||
| exists(DfInput::Guard g, boolean branch | | ||
| DfInput::guardControlsBlock(g, input, branch) and | ||
| not DfInput::guardControlsBlock(g, prev, branch) | ||
| ) | ||
| ) | ||
| ) | ||
| } | ||
|
|
||
| private newtype TNode = | ||
| TParamNode(DfInput::Parameter p) { | ||
| exists(WriteDefinition def | DfInput::ssaDefInitializesParam(def, p)) | ||
|
|
@@ -1546,7 +1575,7 @@ module Make<LocationSig Location, InputSig<Location> Input> { | |
| ) | ||
| } or | ||
| TSsaDefinitionNode(DefinitionExt def) or | ||
| TSsaInputNode(SsaPhiExt phi, BasicBlock input) { exists(getAPhiInputDef(phi, input)) } | ||
| TSsaInputNode(SsaPhiExt phi, BasicBlock input) { relevantPhiInputNode(phi, input) } | ||
|
|
||
| /** | ||
| * A data flow node that we need to reference in the value step relation. | ||
|
|
@@ -1822,8 +1851,12 @@ module Make<LocationSig Location, InputSig<Location> Input> { | |
| // Flow from definition/read to phi input | ||
| exists(BasicBlock input, BasicBlock bbPhi, DefinitionExt phi | | ||
| AdjacentSsaRefs::adjacentRefPhi(bb1, i1, input, bbPhi, v) and | ||
| nodeTo = TSsaInputNode(phi, input) and | ||
| phi.definesAt(v, bbPhi, -1, _) | ||
| | | ||
| nodeTo = TSsaInputNode(phi, input) | ||
| or | ||
| not relevantPhiInputNode(phi, input) and | ||
| nodeTo.(SsaDefinitionExtNodeImpl).getDefExt() = phi | ||
| ) | ||
| } | ||
|
|
||
|
|
||
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.
So this means that for
we will not generate an input edge from the
elseblock?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.
Yes.