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); }