don't print bit-pattern for NaNs, as there are many.
also don't simplify ops on consts as they are simplified automatically
MODIFY
ir/type.cpp
ir/type.cpp
@@ -437,16 +437,18 @@ pair<expr, vector<expr>> FloatType::mkInput(State &s, const char *name) const {
}
void FloatType::printVal(ostream &os, State &s, const expr &e) const {
+ if (e.isNaN().isTrue()) {
+ os << "NaN";
+ return;
+ }
e.float2BV().printHexadecimal(os);
os << " (";
- if (e.isNaN().simplify().isTrue()) {
- os << "NaN";
- } else if (e.isFPZero().simplify().isTrue()) {
- os << (e.isFPNeg().simplify().isTrue() ? "-0.0" : "+0.0");
- } else if (e.isInf().simplify().isTrue()) {
- os << (e.isFPNeg().simplify().isTrue() ? "-oo" : "+oo");
+ if (e.isFPZero().isTrue()) {
+ os << (e.isFPNeg().isTrue() ? "-0.0" : "+0.0");
+ } else if (e.isInf().isTrue()) {
+ os << (e.isFPNeg().isTrue() ? "-oo" : "+oo");
} else {
- os << e.float2Real().simplify().numeral_string();
+ os << e.float2Real().numeral_string();
}
os << ')';
}

MODIFY
tools/transform.cpp
tools/transform.cpp
@@ -55,13 +55,13 @@ static void print_single_varval(ostream &os, State &st, const Model &m,
assert(n == 0);
}
- expr partial = m.eval(val.value).simplify();
+ expr partial = m.eval(val.value);
if (is_undef(partial)) {
os << "undef";
return;
}
- type.printVal(os, st, m.eval(val.value, true).simplify());
+ type.printVal(os, st, m.eval(val.value, true));
// undef variables may not have a model since each read uses a copy
// TODO: add intervals of possible values for ints at least?

don't print bit-pattern for NaNs, as there are many.
also don't simplify ops on consts as they are simplified automatically