You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
post-opt: add more test cases for visit_conditional_successors (#53642)
This commit fixes the first problem that was found while digging into
#53613. It turns out that the post-domtree constructed
from regular `IRCode` doesn't work for visiting conditional successors
for post-opt analysis in cases like:
```julia
julia> let code = Any[
# block 1
GotoIfNot(Argument(2), 3),
# block 2
ReturnNode(Argument(3)),
# block 3 (we should visit this block)
Expr(:call, throw, "potential throw"),
ReturnNode(), # unreachable
]
ir = make_ircode(code; slottypes=Any[Any,Bool,Bool])
visited = BitSet()
@test !Core.Compiler.visit_conditional_successors(CC.LazyPostDomtree(ir), ir, #=bb=#1) do succ::Int
push!(visited, succ)
return false
end
@test 2 ∉ visited
@test 3 ∈ visited
end
Test Failed at REPL[14]:16
Expression: 2 ∉ visited
Evaluated: 2 ∉ BitSet([2])
```
This might mean that we need to fix on the `postdominates` end, but for
now, this commit tries to get around it by using the augmented post
domtree in `visit_conditional_successors`. Since the augmented post
domtree is enforced to have a single return, we can keep using the
current `postdominates` to fix the issue.
However, this commit isn't enough to fix the NeuralNetworkReachability
segfault as reported in #53613, and we need to tackle the second issue
reported there too
(#53613 (comment)).
0 commit comments