【发布时间】:2017-11-27 03:28:09
【问题描述】:
我有一段代码,我希望 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 是否传递强制编译器使用 3 的展开因子,或者它更像是编译器可以选择忽略的“提示”?
【问题讨论】:
标签: c++ c compiler-construction llvm compiler-optimization