首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LLVM -stats选项

LLVM -stats选项
EN

Stack Overflow用户
提问于 2016-01-15 04:07:03
回答 1查看 1.4K关注 0票数 3

我使用一个单独的LLVM优化传递'mem2reg‘在一个简单的c-程序。

代码语言:javascript
复制
opt <test>.bc -mem2reg -instcount -o <test>.bc -stats

执行完后,我看到stats选项没有显示收集到的统计信息,而且为了使用‘-stats’选项,必须使用启用断言的方法编译LLVM。我不明白,有人能帮我一下吗?

EN

回答 1

Stack Overflow用户

发布于 2016-01-21 15:10:20

它没有什么特别之处。只在+Assert构建中收集统计信息是一个设计决策。如果您查看llvm/ADT/Statistic.hStatistic类如下所示:

代码语言:javascript
复制
class Statistic {
public:
  // Initialization stuff
#if !defined(NDEBUG) || defined(LLVM_ENABLE_STATS)
  // Actually keeping track of the stat
#else
  // Dummy ops that will be optimized away
#endif
};

如您所见,当NDEBUG未定义时(即在使用断言进行构建时(例如在Release+Assers或Debug+Asserts模式下)时,不管构建类型如何,都会收集统计信息。

相同的结构在打印统计信息的代码中被镜像。

只有通过重新构建,才能重新启用状态。如果您不需要或不想要+断言构建的开销,只需将-DLLVM_ENABLE_STATS添加到CFLAGS或在(重新)生成Makefile时将其等效。您可以在如何发布LLVM文档页面中找到有关启用断言的更多信息。

至于为什么在发布版本中禁用统计数据,这种行为是在提交fa785cb22d中引入的(2013年3月,它在3.3中登陆),这可能是为了消除由一个特性引入的内存和性能开销,除非您正在处理LLVM本身,否则这个特性很少有趣。

也就是说,像Clang这样的基于LLVM的编译器的大多数用户只想将他们的源代码转换成一个可执行文件,并可能得到有意义的诊断,而且他们肯定希望编译器在这样做的时候尽可能快。他们不太关心LLVM实现这个目标的确切方式,这是完全可以理解的。然而,这只是一个推测,因为我在邮件列表档案中找不到任何相关的讨论。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34804240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档