gpt4 book ai didi

llvm - 使用 indvars 优化过程在 llvm/opt 中查找规范归纳变量

转载 作者:行者123 更新时间:2023-12-02 00:07:26 24 4
gpt4 key购买 nike

我正在尝试使用 L->getCanonicalInductionVariable() 获取循环传递中循环的规范归纳变量(给定其引用 L*)。

但是我遇到的许多循环都不是规范形式的。例如:

for (int i = 10; i < 20 ; i++) {
....
}

根据llvm文档http://llvm.org/docs/Passes.html#indvars-canonicalize-induction-variables ) ,使用“opt”中的“indvars”传递应该可以通过将循环归纳变量转换为规范形式来实现这一点。我尝试过运行:

opt -mem2reg -indvars < test.bc > optTest.bc

其中“test.bc”是上面 for 循环的位代码格式。但是indvars pass似乎没有效果(我这里省略了汇编代码,但我已经检查过了)。

稍后,使用 L->getCanonicalInductionVariable() 返回 null。我也尝试过将“indvars”与其他 channel (如“loops”、“loop-simplify”)一起使用,但无济于事。

知道如何让它发挥作用吗?

最佳答案

如果您使用的 LLVM 版本早于 r153260,您可以通过添加 -enable-iv-rewrite 命令行选项来启用归纳变量重写,它应该会生成您期望的结果参见。

此选项从 3.0 开始已被弃用,并在上述版本之后完全删除;如果没有它,通行证将不会按照其文档运行。如果你想现在就这样做,那么,我认为你必须添加一个pass来自己实现它——尽管你当然可以使用旧的(已删除的)代码作为引用。我认为它被删除是因为(1)更多的传递被更改为能够在没有规范归纳变量的情况下处理循环,以及(2)规范化导致了其他性能影响;所以我想在添加类似的 channel 之前三思而后行是明智的。

关于llvm - 使用 indvars 优化过程在 llvm/opt 中查找规范归纳变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13831678/

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