当前位置: 首页>>代码示例>>C++>>正文


C++ CFG::getFunctionList方法代码示例

本文整理汇总了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);
}
开发者ID:igstan,项目名称:rtc,代码行数:100,代码来源:mbu.cpp


注:本文中的CFG::getFunctionList方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。