void cone_of_influencet::cone_of_influence( const goto_programt::instructiont &i, const expr_sett &curr, expr_sett &next) { next.insert(curr.begin(), curr.end()); if(i.is_assign()) { const code_assignt &assignment=to_code_assign(i.code); expr_sett lhs_syms; bool care=false; gather_rvalues(assignment.lhs(), lhs_syms); for(const auto &expr : lhs_syms) if(curr.find(expr)!=curr.end()) { care=true; break; } next.erase(assignment.lhs()); if(care) { gather_rvalues(assignment.rhs(), next); } } }
void cone_of_influencet::gather_rvalues(const exprt &expr, expr_sett &rvals) { if (expr.id() == ID_symbol || expr.id() == ID_index || expr.id() == ID_member || expr.id() == ID_dereference) { rvals.insert(expr); } else { forall_operands(it, expr) { gather_rvalues(*it, rvals); } }
void acceleration_utilst::gather_rvalues(const exprt &expr, expr_sett &rvalues) { if (expr.id() == ID_symbol || expr.id() == ID_index || expr.id() == ID_member || expr.id() == ID_dereference) { rvalues.insert(expr); } else { forall_operands(it, expr) { gather_rvalues(*it, rvalues); } }