21 const cfgt::nodet &node,
27 dep_graph[dep_graph[node.PC].get_node_id()];
29 for(dependence_grapht::edgest::const_iterator
33 add_to_queue(queue, dep_node_to_cfg[it->first], node.PC);
37 const cfgt::nodet &node,
41 goto_functionst::function_mapt::const_iterator f_it=
45 assert(!f_it->second.body.instructions.empty());
47 f_it->second.body.instructions.begin();
49 cfgt::entry_mapt::const_iterator entry=
53 for(cfgt::edgest::const_iterator
54 it=
cfg[entry->second].
in.begin();
55 it!=
cfg[entry->second].
in.end();
61 const cfgt::nodet &node,
72 for(find_symbols_sett::const_iterator
77 decl_deadt::iterator entry=decl_dead.find(*it);
78 if(entry==decl_dead.end())
81 while(!entry->second.empty())
87 decl_dead.erase(entry);
121 jumpst::iterator next=it;
136 for( ; !lex_succ->is_end_function(); ++lex_succ)
138 cfgt::entry_mapt::const_iterator entry=
142 if(
cfg[entry->second].node_required)
145 if(lex_succ->is_end_function())
154 cfg_post_dominatorst::cfgt::entry_mapt::const_iterator e=
163 if(n.dominators.find(lex_succ)==n.dominators.end())
173 std::size_t post_dom_size=0;
174 for(cfg_dominatorst::target_sett::const_iterator
175 d_it=n.dominators.begin();
176 d_it!=n.dominators.end();
179 cfgt::entry_mapt::const_iterator entry=
183 if(
cfg[entry->second].node_required)
185 const irep_idt id2=(*d_it)->function;
187 "goto/jump expected to be within a single function");
189 cfg_post_dominatorst::cfgt::entry_mapt::const_iterator e2=
197 if(n2.dominators.size()>post_dom_size)
200 post_dom_size=n2.dominators.
size();
204 if(nearest!=lex_succ)
222 std::vector<cfgt::entryt> dep_node_to_cfg;
223 dep_node_to_cfg.reserve(dep_graph.
size());
226 cfgt::entry_mapt::const_iterator entry=
230 dep_node_to_cfg.push_back(entry->second);
234 while(!queue.empty())
236 while(!queue.empty())
243 if(node.node_required)
247 node.node_required=
true;
268 const irep_idt &statement=target->code.get_statement();
269 if(statement==ID_array_copy)
272 if(!target->is_assign())
276 if(a.
lhs().
id()!=ID_symbol)
299 for(cfgt::entry_mapt::iterator
304 if(criterion(e_it->first))
308 else if((e_it->first->is_goto() && e_it->first->guard.is_true()) ||
309 e_it->first->is_throw())
310 jumps.push_back(e_it->second);
311 else if(e_it->first->is_decl())
314 decl_dead[s.get_identifier()].push(e_it->second);
316 else if(e_it->first->is_dead())
319 decl_dead[s.get_identifier()].push(e_it->second);
325 dep_graph(goto_functions, ns);
328 fixedpoint(goto_functions, queue, jumps, decl_dead, dep_graph);
334 if(f_it->second.body_available())
339 if(!i_it->is_end_function() &&
340 !
cfg[e].node_required)
342 #ifdef DEBUG_FULL_SLICERT
347 for(std::set<unsigned>::const_iterator
348 req_it=
cfg[e].required_by.begin();
349 req_it!=
cfg[e].required_by.end();
352 if(req_it!=
cfg[e].required_by.begin())
356 i_it->source_location.set_column(c);
357 i_it->source_location.set_comment(c);
393 const std::list<std::string> &properties)
401 const std::list<std::string> &properties)