使用LLVM实现高水平的优化是否容易?
举一个具体的例子,让我们假设我有一个简单的语言,我想编写一个编译器。
我可以很容易地创建compilation-to-C后端并依赖clang -O3。 为此目的使用LLVM API是否容易?
答案 0 :(得分:6)
除了一些高级别(例如,知道高级语言特性或未在LLVM IR中编码的细节)优化之外,Clang的后端仅仅生成简单的IR并运行一些LLVM优化传递给它。所有这些(或至少大多数)应该通过opt
命令可用,并且在使用构建所有LLVM工具的C ++库时也可以作为API调用。有关简单示例,请参阅tutorial。我看到了几个优点:
#define
,隐藏的编曲码,插入或命令行选项)来提供它们。我正在谈论像向量,保证(好吧,比在C中更多 - AFAIK,一些代码生成器忽略它们)尾调用,纯/只读函数,对内存布局和类型转换的更多控制(例如零扩展与符号扩展)。当然,你可能不需要其中的大多数。答案 1 :(得分:0)
LLVM具有内置的优化过程,因此您可以使用API实现类似O3的优化。