LLVM:从函数中的循环中删除后沿

时间:2015-07-11 10:22:22

标签: loops llvm


我使用以下命令在文件opt -loops -loop-rotate -loop-simplify -loop-unroll -unroll-count=3 -unroll-allow-partial -debug a.bc -o a.loop.bc内展开了循环:
F
现在,我需要从所有循环中删除后边缘在函数内部,比如{{1}}。我想创建一个llvm传递,它将从循环中找到出口块(假设只有1个出口块),然后将边缘替换为每个循环的出口块的边缘。
是否存在直线前进的方式呢?

1 个答案:

答案 0 :(得分:0)

所以,如果我没有弄错,你想为所有循环设置一个独特的出口块吗?如果你的所有循环都有恒定的行程计数,那么在出口块上没有任何phi节点,因此很容易连接它们,否则有一些退出phi节点,那么你应该重建它们以保持SSA的优势属性,这可能不是直截了当的,你可以在本书的第5章找到不同的方法(你可以下载这本书): SSA book