本文整理汇总了C++中CFG::getFunctionList方法的典型用法代码示例。如果您正苦于以下问题:C++ CFG::getFunctionList方法的具体用法?C++ CFG::getFunctionList怎么用?C++ CFG::getFunctionList使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CFG
的用法示例。
在下文中一共展示了CFG::getFunctionList方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: print_debug_stats
//-- print number of CFG nodes, max and average fact size
void MBU::print_debug_stats(CFG& cfg, FILE * outf)
{
int num_nodes = 0;
int tot_facts = 0;
int max_facts = 0;
suco_iterator<CFGfunction *> fli(cfg.getFunctionList());
while(fli.Iterate()){
if(flag_use_bblocks){
suco_iterator<CFGbblock *> bbi(fli.Current()->getBBlist());
while(bbi.Iterate()){
CFGbblock& bb = *bbi.Current();
//-- count facts
MBUfact& mf = bb.getMBUfact();
int len = mf.length();
num_nodes++;
tot_facts += len;
if(max_facts < len){
max_facts = len;
}
}
} else {
suco_iterator<PgmStmt *> sti(fli.Current()->getStmtList());
while(sti.Iterate()){
PgmStmt& st = *sti.Current();
//-- count facts
MBUfact& mf = st.getMBUfact();
int len = mf.length();
num_nodes++;
tot_facts += len;
if(max_facts < len){
max_facts = len;
}
}
}
}
if(flag_verbose == 4){
static fmapentry * func_map = 0;
static int num_funcs = 0;
int i;
if(!func_map){
//-- one-time initialization of func_map
num_funcs = cfg.getFunctionList().Length();
func_map = new struct fmapentry[num_funcs];
for(i = 0; i < num_funcs; ++i){
func_map[i].fptr = 0;
func_map[i].count = 0;
func_map[i].oldcount = 0;
}
}
for(i = 0; i < num_funcs; ++i){
func_map[i].oldcount = func_map[i].count;
func_map[i].count = 0;
}
suco_iterator<CFGnode *> wli(this->worklist.list);
while(wli.Iterate()){
CFGfunction * fptr = &wli.Current()->getParentFunction();
for(i = 0; i < num_funcs; ++i){
if(!func_map[i].fptr){
func_map[i].fptr = fptr;
func_map[i].count = 1;
break;
} else if(func_map[i].fptr == fptr){
func_map[i].count++;
break;
}
}
}
qsort(func_map, num_funcs, sizeof(struct fmapentry), fme_compare);
int mode = 0;
fprintf(outf, "Worklist content: top 5 functions:\n\t");
for(i = 0; i < num_funcs && func_map[i].count; ++i){
if(i == 5){ // switch mode to active delta
mode = 1;
fprintf(outf, "\nRemaining active with deltas:");
}
if(mode == 0){
fprintf(outf, " %s(%d/%d)", func_map[i].fptr->getId().getPid().getname(),
func_map[i].count, func_map[i].count - func_map[i].oldcount);
} else if(func_map[i].count - func_map[i].oldcount){
if(!((mode-1) % 5)) fprintf(outf, "\n\t");
mode++;
fprintf(outf, " %s(%d/%d)", func_map[i].fptr->getId().getPid().getname(),
func_map[i].count, func_map[i].count - func_map[i].oldcount);
}
}
fprintf(outf, "\n");
}
fprintf(outf, "Facts: total %d, per %s %.2f, max = %d\n",
tot_facts, flag_use_bblocks?"bblock":"stmt",
(num_nodes)?((float)tot_facts/(float)num_nodes):((float)tot_facts),
max_facts);
}