首页 > 解决方案 > 从 LLVM-IR 中提取高级 CFG 结构

问题描述

我当前的一个项目需要在不使用 goto 语句和太多冗余变量的情况下将一些示例 LLVM IR 转换回 C 代码。我知道不建议将 LLVM 转换回 C,但考虑到时间预算,这是我项目中最快的方法。

https://github.com/JuliaComputing/llvm-cbe这样的 LLVM C 后端通常会生成带有许多 goto 语句的 ac 代码。所以我想知道这是否是因为 LLVM 中的 CFG 不是那么结构化,这意味着后端不知道选择(if-else)何时合并。

我发现了一个名为 StructurizeCFG 的 pass,它带来了很多 bool 变量和 phi 节点,这对我来说可能不是最好的选择。

所以我的问题是,有什么方法可以从 LLVM-IR 中提取高级 CFG(循环合并、选择合并等)?

标签: llvmllvm-ir

解决方案


推荐阅读