virtualprocess: implement a better control flow selection logic #631
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.
The goal of this commit is to refine
add_control_flow!
, which requestsconcretization of the minimal necessary control flow to evaluate
statements whose concretization have already been requested.
The basic approach is to check if there are any active successors for
each basic block, and if there is an active successor and the terminator
is not a fall-through, then request the concretization of that terminator.
Additionally, for conditional terminators, a simple optimization using
post-domination analysis is also performed: we can ignore the control
flow of a conditional terminator and treat it as a fall-through if only
one of its successors is active and the active block post-dominates the
inactive one, since the post-domination ensures that the active basic
block will be reached regardless of the control flow.