gpt4 book ai didi

swift - 如何查看编译器对我的 Swift 代码应用的优化?

转载 作者:搜寻专家 更新时间:2023-10-30 22:18:27 24 4
gpt4 key购买 nike

具体来说,我有一些 Swift 3.0 日志记录函数,它们将所有语句包装在 if 中,仅当对从 ObjC 桥接的两个 static const 值进行操作时才执行有一个非零结果。

func logStuff(_ message: @autoclosure () -> String) {
if a & b != 0 {
// log stuff here...
}
}

变量 ab 在我的桥接 header 中声明如下:

static const NSUInteger a = <some literal>;
static const NSUInteger b = <some literal>;

a & b 的结果为零并启用整个模块优化时,编译器是否会忽略对 logStuff() 的整个调用?

将不胜感激对这个问题的具体回答,但理想的方法是轻松查看 LLVM 在任何情况下实际应用了哪些优化。

最佳答案

如果您使用自己的通过检测编译的 LLVM 构建自己的 Swift 编译器,您应该能够按照 LLVM 文档中的描述转储该信息 Writing an LLVM Pass .

但是优化过程是相互作用的,可以运行多次,并且可能并不总是按照您的预期进行。因此,您最好通过实验检查您关注的特定情况,然后检查生成的二进制文件。

因为它是一个日志记录函数并且可能很容易被动态触发,一个(可能更简单的)编译器输出静态检查的替代方法是在调试器下运行可执行文件,在你期望的函数上设置断点不应该调用,然后在可执行文件中执行一个操作,如果调用未被优化,该操作将触发调用。

然后,在应用程序的整个生命周期中重复验证,因为编译器和源代码不断变化。 (或者决定这不是一个值得如此努力的重要问题。)

关于swift - 如何查看编译器对我的 Swift 代码应用的优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40406098/

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