将 LLVM-IR 转换为类似 C 的语言

Posted

技术标签:

【中文标题】将 LLVM-IR 转换为类似 C 的语言【英文标题】:Converting LLVM-IR into a C like language 【发布时间】:2013-10-16 18:59:23 【问题描述】:

我正在做一个项目,我必须编写将 LLVM-IR 转换为类 C 语言的代码。这种语言的结构与 C 非常相似。经过一番调查,我发现 LLVM 的 3.0 版本之前存在一个名为 CBackend.cpp 的文件,负责将 LLVM-IR 转换为 C 代码。我要检查的是在我的 LLVM-IR 输入文件上运行这个 CBackend.cpp 文件并生成 C 代码。

为此的命令是:llc -march=c -o code.c code.ll

其中 code.ll 文件是包含输入 llvm-ir 的输入文件,code.c 是包含结果 C 代码的输出文件。

我面临的是,我的 ubuntu 系统上安装了 LLVM 版本 3.4svn,并且此版本中没有 CBackend.cpp 文件,因为该文件已升级为 CppBackend.cpp(将 LLVM-IR 转换为 C++) .我可以使用哪个命令在我的 LLVM-IR 输入文件上运行此 CBackend.cpp 文件以获取 LLVM 3.4svn 版本中的相应 C 代码?

提前致谢。

【问题讨论】:

此线程表明它可能已损坏 - lists.cs.uiuc.edu/pipermail/llvmdev/2012-April/049124.html。如果您仍然想要它,为什么不从这里下载旧版本 - llvm.org/releases/download.html ? @Leeor:实际上我不会升级我的 llvm。我从一开始就安装了 3.4svn 版本,它没有 CBackend 文件。他们似乎从 3.0 之后的版本中删除了它。所以,我希望命令在我的版本上运行这个文件。 @Leeor:我有那个 CBackend.cpp 文件。我只想要命令在我的版本上运行这个文件。因为现在安装较低版本对我来说不是正确的解决方案。 【参考方案1】:

C 后端在 3.1 版中被删除,因为它没有得到维护并开始开发代码腐烂,成为一种负担。由于没有维护者加强,它被从树中删除。来自release notes of 3.1:

C 后端已被移除。它有很多问题,到了这一点 无法编译任何重要的程序。

2012 年 8 月,thread on llvmdev 讨论了恢复 C 后端,但我认为它最终没有任何用处。

您仍然可以下载 LLVM 3.0 版(来自 releases page),构建它并查看 C 后端的运行情况,研究其代码等。针对您的特定目的 - 查看代码并弄清楚它是如何工作的, 3.0 C 的后端应该够用了。

【讨论】:

和***.com/questions/5180914/…

以上是关于将 LLVM-IR 转换为类似 C 的语言的主要内容,如果未能解决你的问题,请参考以下文章

c语言中,如何将字符串数组中的52提取出来,并转换为int类型

获取指向 LLVM-IR 中数组第一个元素的指针

C语言如何把一个字符串转换成数字?

求c语言将十进制数转换为16进制的函数

C语言,ASCII码怎么转换为字符?

C语言中如何把浮点型转换为字符型