Loops LLVM:删除函数中循环的后边缘

Loops LLVM:删除函数中循环的后边缘,loops,llvm,Loops,Llvm,我使用以下命令展开了文件a.bc中的循环:opt-loops-loop rotate-loop simplify-loop unroll-unroll count=3-unroll allow partial-debug a.bc-o a.loop.bc现在,我需要从函数中的所有循环中删除后边缘,比如F。我想创建一个llvm过程,它将从一个循环中找到出口块(假设只有一个出口块),然后用每个循环的出口块的边替换后边。有没有一种直接的方法呢?因此,如果我没有弄错的话,您希望所有循环都有一个唯一的出口


我使用以下命令展开了文件
a.bc
中的循环:
opt-loops-loop rotate-loop simplify-loop unroll-unroll count=3-unroll allow partial-debug a.bc-o a.loop.bc现在,我需要从函数中的所有循环中删除后边缘,比如
F
。我想创建一个llvm过程,它将从一个循环中找到出口块(假设只有一个出口块),然后用每个循环的出口块的边替换后边。
有没有一种直接的方法呢?

因此,如果我没有弄错的话,您希望所有循环都有一个唯一的出口块吗?如果您的所有回路都具有恒定的跳闸计数,则出口块处没有任何phi节点,因此连接它们相当容易,否则存在一些出口phi节点,则您应重建它们以保留SSA的主导属性,这可能不是直接的,您可以在本书第5章找到不同的方法(您可以下载本书):

如果我没有弄错的话,您希望所有循环都有一个唯一的退出块吗?如果您的所有回路都具有恒定的跳闸计数,则出口块处没有任何phi节点,因此连接它们相当容易,否则存在一些出口phi节点,则您应重建它们以保留SSA的主导属性,这可能不是直接的,您可以在本书第5章找到不同的方法(您可以下载本书):