Optimize expr_safe_replace for quantifiers when all source patterns are vars #7481
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.
I get > 40% speedups in some benchmarks with this patch.
Alive2 calls var_subst to replace var:0 with something else. But if this falls in the
has_quantifier(n)
case, it calls expr_safe_replace.This patch adds a fast path for when all the source exprs are variables by using var_subst, which is much faster than expr_sage_replace (it has multiple fast paths).
@NikolajBjorner could you please check the sanity of this patch? 🙏