ZAM support for keeping "assert" statements

This commit is contained in:
Vern Paxson 2024-12-03 10:37:38 -07:00
parent a328185a8f
commit 908e8a3a27
8 changed files with 113 additions and 17 deletions

View file

@ -1070,11 +1070,36 @@ StmtPtr InitStmt::DoReduce(Reducer* c) {
return ThisPtr();
}
StmtPtr AssertStmt::Duplicate() { return SetSucc(new AssertStmt(cond->Duplicate(), msg ? msg->Duplicate() : nullptr)); }
StmtPtr AssertStmt::Duplicate() { return SetSucc(new AssertStmt(e->Duplicate(), msg ? msg->Duplicate() : nullptr)); }
bool AssertStmt::IsReduced(Reducer* c) const { return false; }
bool AssertStmt::IsReduced(Reducer* c) const {
if ( ! analysis_options.keep_asserts )
return false;
StmtPtr AssertStmt::DoReduce(Reducer* c) { return TransformMe(make_intrusive<NullStmt>(), c); }
return e->IsSingleton(c) && (! msg || msg->IsSingleton(c));
}
StmtPtr AssertStmt::DoReduce(Reducer* c) {
if ( ! analysis_options.keep_asserts )
return TransformMe(make_intrusive<NullStmt>(), c);
if ( c->Optimizing() ) {
e = c->OptExpr(e);
if ( msg )
msg = c->OptExpr(msg);
return ThisPtr();
}
else if ( IsReduced(c) )
return ThisPtr();
StmtPtr red_stmt;
e = e->ReduceToSingleton(c, red_stmt);
if ( msg )
msg = msg->ReduceToSingleton(c, msg_setup_stmt);
auto sl = with_location_of(make_intrusive<StmtList>(red_stmt, ThisPtr()), this);
return sl->Reduce(c);
}
bool WhenInfo::HasUnreducedIDs(Reducer* c) const {
for ( auto& cp : *cl ) {