我当前的一个项目需要在不使用goto语句和太多冗余变量的情况下将一些示例LLVM IR转换回C代码。我知道不建议将LLVM转换回C,但这是我的项目中最快的方法(因为有时间预算)。
像https://github.com/JuliaComputing/llvm-cbe这样的LLVM C后端通常会生成带有许多goto语句的c代码。所以我想知道这是否是因为LLVM中的CFG没有那么结构化,这意味着后端不知道何时合并选择(if-else)。
我找到了一个名为StructurizeCFG的过程,该过程带来了很多布尔变量和phi节点,这对我而言可能不是最佳选择。
所以我的问题是,有什么方法可以从LLVM-IR中提取高级CFG(循环合并,选择合并等)?