mirror of
https://github.com/Z3Prover/z3
synced 2025-04-27 19:05:51 +00:00
experimental non-reuse of XOR vars in theory_str
This commit is contained in:
parent
599cc1e75d
commit
fd1bf65b64
1 changed files with 10 additions and 12 deletions
|
@ -2815,13 +2815,12 @@ void theory_str::process_concat_eq_type1(expr * concatAst1, expr * concatAst2) {
|
|||
if (entry1InScope) {
|
||||
t1 = varForBreakConcat[key1][0];
|
||||
t2 = varForBreakConcat[key1][1];
|
||||
xorFlag = varForBreakConcat[key1][2];
|
||||
xorFlag = mk_internal_xor_var();
|
||||
} else {
|
||||
t1 = varForBreakConcat[key2][0];
|
||||
t2 = varForBreakConcat[key2][1];
|
||||
xorFlag = varForBreakConcat[key2][2];
|
||||
xorFlag = mk_internal_xor_var();
|
||||
}
|
||||
// TODO do I need to refresh the xorFlag, which is an integer var, and if so, how?
|
||||
refresh_theory_var(t1);
|
||||
refresh_theory_var(t2);
|
||||
}
|
||||
|
@ -3141,12 +3140,11 @@ void theory_str::process_concat_eq_type2(expr * concatAst1, expr * concatAst2) {
|
|||
} else {
|
||||
if (entry1InScope) {
|
||||
temp1 = varForBreakConcat[key1][0];
|
||||
xorFlag = varForBreakConcat[key1][1];
|
||||
xorFlag = mk_internal_xor_var();
|
||||
} else if (entry2InScope) {
|
||||
temp1 = varForBreakConcat[key2][0];
|
||||
xorFlag = varForBreakConcat[key2][1];
|
||||
xorFlag = mk_internal_xor_var();
|
||||
}
|
||||
// TODO refresh xorFlag?
|
||||
refresh_theory_var(temp1);
|
||||
}
|
||||
|
||||
|
@ -3451,10 +3449,10 @@ void theory_str::process_concat_eq_type3(expr * concatAst1, expr * concatAst2) {
|
|||
} else {
|
||||
if (entry1InScope) {
|
||||
temp1 = varForBreakConcat[key1][0];
|
||||
xorFlag = varForBreakConcat[key1][1];
|
||||
xorFlag = mk_internal_xor_var();
|
||||
} else if (varForBreakConcat.find(key2) != varForBreakConcat.end()) {
|
||||
temp1 = varForBreakConcat[key2][0];
|
||||
xorFlag = varForBreakConcat[key2][1];
|
||||
xorFlag = mk_internal_xor_var();
|
||||
}
|
||||
refresh_theory_var(temp1);
|
||||
}
|
||||
|
@ -3948,10 +3946,10 @@ void theory_str::process_concat_eq_type6(expr * concatAst1, expr * concatAst2) {
|
|||
} else {
|
||||
if (entry1InScope) {
|
||||
commonVar = (entry1->second)[0];
|
||||
xorFlag = (entry1->second)[1];
|
||||
xorFlag = mk_internal_xor_var();
|
||||
} else {
|
||||
commonVar = (entry2->second)[0];
|
||||
xorFlag = (entry2->second)[1];
|
||||
xorFlag = mk_internal_xor_var();
|
||||
}
|
||||
refresh_theory_var(commonVar);
|
||||
}
|
||||
|
@ -6113,9 +6111,9 @@ void theory_str::solve_concat_eq_str(expr * concat, expr * str) {
|
|||
xorFlag = mk_internal_xor_var();
|
||||
varForBreakConcat[key1][0] = xorFlag;
|
||||
} else if (entry1InScope) {
|
||||
xorFlag = varForBreakConcat[key1][0];
|
||||
xorFlag = mk_internal_xor_var();
|
||||
} else { // entry2InScope
|
||||
xorFlag = varForBreakConcat[key2][0];
|
||||
xorFlag = mk_internal_xor_var();
|
||||
}
|
||||
|
||||
int concatStrLen = const_str.length();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue