我是 LLVM 的新手,正在尝试学习基础知识,这本身就够难了。
我现在已经到了尝试用 IR 编写简单程序的地步。该文档对 IR 代码的语法和用法非常清楚。现在,我已经完成了 2 或 3 个教程,当然也被介绍到了构建器框架。然而,这是相当复杂的。
首先,构建器系统有两个接口,C++ 和 C 接口。乍一看,两者似乎都提供了相同的功能。出现的第一个问题当然是,应该使用哪一个?一个比另一个有优势吗?是口味问题吗?我无法找到答案,所以我决定使用 C++ 接口。
坦率地说,这个构建器框架更难理解。所以现在我不仅面临学习 IR 代码以及如何正确使用它,而且在它之上还有构建器界面,这让事情变得更加混乱
例如:根据我对基本 IR 语言的学习,我会天真地去写类似的东西:
%1 = add i32 42, %0
这很清楚。我只花了 3 个小时找出如何使用构建器框架来做到这一点,而我的答案甚至不令人满意,因为我必须首先使用 alloca 调用分配存储,然后留下通过指针写入的代码。
我的理解是,IR 语言和底层 SSA 系统应该使用上述伪寄存器,而不是使用我的代码显式分配的内存地址。
因此,经过相当多的实验后,我认为在我的程序中手动生成 IR 代码可能会更好、更容易。
我的问题是:在 IR 构建器框架中是否有任何主要优势,使得使用它而不是手动方法是非常可取的?或者它只是应该更容易使用,仅此而已?
谢谢