Llvm 查找循环终止条件变量
我想找到用于检查循环终止的变量,Llvm 查找循环终止条件变量,llvm,Llvm,我想找到用于检查循环终止的变量, 例如,在下面的循环中,我应该得到“%n”: 有没有直接的方法可以得到这个值? 我可以做的一个方法是,迭代指令并检查icmp指令。但我认为这不是一个合适的方法。 请给我推荐一种方法。 提前感谢。不幸的是,没有通用的解决方案。您的问题是停顿问题的一个实例,经证明没有通用解决方案: 如果你能把问题空间缩减到非常简单的地方,使用一个不是图灵完全的操作子集(http://en.wikipedia.org/wiki/Turing-complete),您可能会想出一个解决方案
例如,在下面的循环中,我应该得到“%n”: 有没有直接的方法可以得到这个值?
我可以做的一个方法是,迭代指令并检查icmp指令。但我认为这不是一个合适的方法。
请给我推荐一种方法。
提前感谢。不幸的是,没有通用的解决方案。您的问题是停顿问题的一个实例,经证明没有通用解决方案:
如果你能把问题空间缩减到非常简单的地方,使用一个不是图灵完全的操作子集(http://en.wikipedia.org/wiki/Turing-complete),您可能会想出一个解决方案。但是没有通用的解决方案。不幸的是,没有通用的解决方案。您的问题是停顿问题的一个实例,经证明没有通用解决方案:
如果你能把问题空间缩减到非常简单的地方,使用一个不是图灵完全的操作子集(http://en.wikipedia.org/wiki/Turing-complete),您可能会想出一个解决方案。但是没有通用的解决方案。虽然对于通用循环没有办法做到这一点,但在某些情况下可以找到这一点。在LLVM中有一个名为'-indvars:Canonicalize inclusion Variables'的过程,它被描述为 此转换分析和转换归纳变量 (以及由此导出的计算)转换为更简单的形式,适用于 随后的分析和转换 此转换使用 可识别归纳变量:
for (i = 7; i*i < 1000; ++i)
听起来它正是您所需要的。虽然对于一般循环没有办法做到这一点,但在某些情况下可能会发现这一点。在LLVM中有一个名为'-indvars:Canonicalize inclusion Variables'的过程,它被描述为 此转换分析和转换归纳变量 (以及由此导出的计算)转换为更简单的形式,适用于 随后的分析和转换 此转换使用 可识别归纳变量:
for (i = 7; i*i < 1000; ++i)
for (i = 0; i != 25; ++i)