1

我是 LLVM 的新手,正在尝试学习基础知识,这本身就够难了。

我现在已经到了尝试用 IR 编写简单程序的地步。该文档对 IR 代码的语法和用法非常清楚。现在,我已经完成了 2 或 3 个教程,当然也被介绍到了构建器框架。然而,这是相当复杂的。

首先,构建器系统有两个接口,C++ 和 C 接口。乍一看,两者似乎都提供了相同的功能。出现的第一个问题当然是,应该使用哪一个?一个比另一个有优势吗?是口味问题吗?我无法找到答案,所以我决定使用 C++ 接口。

坦率地说,这个构建器框架更难理解。所以现在我不仅面临学习 IR 代码以及如何正确使用它,而且在它之上还有构建器界面,这让事情变得更加混乱

例如:根据我对基本 IR 语言的学习,我会天真地去写类似的东西:

%1 = add i32 42, %0 

这很清楚。我只花了 3 个小时找出如何使用构建器框架来做到这一点,而我的答案甚至不令人满意,因为我必须首先使用 alloca 调用分配存储,然后留下通过指针写入的代码。

我的理解是,IR 语言和底层 SSA 系统应该使用上述伪寄存器,而不是使用我的代码显式分配的内存地址。

因此,经过相当多的实验后,我认为在我的程序中手动生成 IR 代码可能会更好、更容易。

我的问题是:在 IR 构建器框架中是否有任何主要优势,使得使用它而不是手动方法是非常可取的?或者它只是应该更容易使用,仅此而已?

谢谢

4

1 回答 1

3

IR 构建器应该使 IR 构建更容易,仅此而已。它跟踪基本块中的插入点,通常使用它会导致代码更短。

但不要太担心:也完全有可能只使用普通的 C++ API 调用来创建 IR。您还应该熟悉 LLVM 中的 C++ 后端,它将 IR 转换为构建它所需的 C++ API 调用序列——它非常有用。例如,请参阅此在线 Clang 演示- 选择“LLVM C++ API 代码”作为目标。

于 2015-03-23T12:02:35.140 回答