void local_SSAt::build_cond(locationt loc) { // anything to be built? if(!loc->is_goto() && !loc->is_assume()) return; // produce a symbol for the renamed branching condition equal_exprt equality(cond_symbol(loc), read_rhs(loc->guard, loc)); nodes[loc].equalities.push_back(equality); }
exprt local_SSAt::edge_guard(locationt from, locationt to) const { if(from->is_goto()) { // big question: taken or not taken? if(to==from->get_target()) return and_exprt(guard_symbol(from), cond_symbol(from)); else return and_exprt(guard_symbol(from), not_exprt(cond_symbol(from))); } else if(from->is_assume()) { return and_exprt(guard_symbol(from), cond_symbol(from)); } else return guard_symbol(from); }
expr2tc abstract_domain_baset::get_guard( locationt from, locationt to) const { if(!from->is_goto()) return true_expr; locationt next=from; next++; if(next==to) { expr2tc tmp = not2tc(from->guard); return tmp; } return from->guard; }
exprt static_analysis_baset::get_guard( locationt from, locationt to) { if(!from->is_goto()) return true_exprt(); locationt next=from; next++; if(next==to) { exprt tmp(from->guard); tmp.make_not(); return tmp; } return from->guard; }
exprt flow_insensitive_abstract_domain_baset::get_guard( locationt from, locationt to) const { if(!from->is_goto()) return true_exprt(); locationt next=from; next++; if(next==to) { exprt tmp(from->guard); tmp.make_not(); return tmp; } return from->guard; }