gpt4 book ai didi

LLVM -stats 选项

转载 作者:行者123 更新时间:2023-12-01 13:47:32 24 4
gpt4 key购买 nike

我在一个简单的 C 程序上使用单独的 LLVM 优化传递“mem2reg”。

opt <test>.bc -mem2reg -instcount -o <test>.bc -stats

执行后我看到 stats 选项没有显示收集的统计数据,似乎为了使用“-stats”选项,LLVM 必须在启用断言的情况下编译。我不明白,谁能帮我解决这个问题。

最佳答案

没有什么特别的。仅在 +Assert 构建中收集统计信息是一项设计决策。如果你看看 llvm/ADT/Statistic.h , Statistic 类如下所示:

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 模式下),会收集统计信息LLVM_ENABLE_STATS 被定义时,无论构建类型如何。

在打印统计信息的代码中反射(reflect)了相同的结构。

您只能通过重建来重新启用统计数据。如果您不需要或不需要 +Asserts 构建的开销,只需在(重新)生成 Makefile 时将 -DLLVM_ENABLE_STATS 添加到 CFLAGS 或等效项。您可以在 How To Release LLVM 中找到有关启用断言的更多信息文档页面。

关于为什么在发布版本中禁用统计信息,此行为已在 commit fa785cb22d 中引入(2013 年 3 月,它登陆 3.3),可能是为了消除一个功能引入的内存和性能开销,除非你在 LLVM 本身上工作,否则这个功能很少有趣。

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

关于LLVM -stats 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34804240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com