mirror of
https://github.com/github/codeql.git
synced 2026-04-29 02:35:15 +02:00
Merge pull request #1289 from jbj/dominanceFrontier-iterated-ir
Approved by dave-bartolomeo
This commit is contained in:
@@ -11,11 +11,12 @@ predicate blockDominates(Graph::Block dominator, Graph::Block block) {
|
||||
blockStrictlyDominates(dominator, block) or dominator = block
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
Graph::Block getDominanceFrontier(Graph::Block dominator) {
|
||||
exists(Graph::Block pred |
|
||||
Graph::blockSuccessor(pred, result) and
|
||||
blockDominates(dominator, pred) and
|
||||
not blockStrictlyDominates(dominator, result)
|
||||
Graph::blockSuccessor(dominator, result) and
|
||||
not blockImmediatelyDominates(dominator, result)
|
||||
or
|
||||
exists(Graph::Block prev | result = getDominanceFrontier(prev) |
|
||||
blockImmediatelyDominates(dominator, prev) and
|
||||
not blockImmediatelyDominates(dominator, result)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -11,11 +11,12 @@ predicate blockDominates(Graph::Block dominator, Graph::Block block) {
|
||||
blockStrictlyDominates(dominator, block) or dominator = block
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
Graph::Block getDominanceFrontier(Graph::Block dominator) {
|
||||
exists(Graph::Block pred |
|
||||
Graph::blockSuccessor(pred, result) and
|
||||
blockDominates(dominator, pred) and
|
||||
not blockStrictlyDominates(dominator, result)
|
||||
Graph::blockSuccessor(dominator, result) and
|
||||
not blockImmediatelyDominates(dominator, result)
|
||||
or
|
||||
exists(Graph::Block prev | result = getDominanceFrontier(prev) |
|
||||
blockImmediatelyDominates(dominator, prev) and
|
||||
not blockImmediatelyDominates(dominator, result)
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user