gpt4 book ai didi

c++ - -loop-unroll pass 是否强制 LLVM 展开循环?

转载 作者:行者123 更新时间:2023-11-28 04:54:21 42 4
gpt4 key购买 nike

我有一段代码,我希望 LLVM 按特定因子展开其中的所有循环。我正在使用以下命令:

opt -mem2reg -simplifycfg -loops -lcssa -loop-simplify -loop-rotate -loop-unroll -unroll-count=3 -unroll-allow-partial -debug TrainingCode/trainingCode.ll -o TrainingCode/unrolledTrainingCode.bc

具体来说,-loop-unroll-unroll-count=3 处理循环展开的东西——剩下的只是转换代码,以便 LLVM 可以展开代码.

此命令是否保证所有循环都展开 3 倍?或者它更像是在 GCC 中使用 pragma 语句,如果编译器认为它不是最佳的,它可以选择忽略它?换句话说,执行 -loop-unroll-unroll-count=3 传递 force 编译器使用展开因子 3 或它更像是编译器可以选择忽略的“提示”吗?

最佳答案

Does this command guarantee that all loops will be unrolled by a factor of 3?

简短的回答是否定的。

首先要看循环。例如,如果它是一个指针追踪循环,那就是一个主要的抑制因素。展开的一个决定因素是能够在编译时计算行程计数。因此,循环展开的一个主要帮助是执行 indvars 传递。

仔细查看 LoopUnroll.cppLoopUnrollPass.cpp 可能很有启发性。除此之外,还有像 NumCompletelyUnrolledNumUnrolled 这样的统计数据,可以提供粗略的整体状态。接下来,可以将元数据作为提示考虑在内(搜索 GetLoopUnrollMetadata,它补充了@schaiba 所写的内容)。 pass 源文件中要遵循的另一件事是 TripCount 以及如何使用它来确定展开循环的确切策略。

PS:我的笔记是基于LLVM 3.7 源代码树,所以我在描述中不是很确定。 YMMV 取决于您正在使用的版本,但这些东西大部分都在最新的主干 (6.0.0) 中。

关于c++ - -loop-unroll pass 是否强制 LLVM 展开循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47503542/

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