我想在我的玩具编程语言中以 LLVM 作为后端实现二进制操作。在 LLVM 文档中,我Create
在llvm::IRBuilderBase
和中都找到了API llvm::BinaryOperator
:
llvm::IRBuilderBase::CreateAdd
: https://llvm.org/doxygen/classllvm_1_1IRBuilderBase.html#a928603739e0e70713566011d44052a4f
llvm::BinaryOperator::Create
: https://llvm.org/doxygen/classllvm_1_1BinaryOperator.html#a02ce9966395063ac501ecbc1623deda4
我有两个关于Create
API 的问题:
似乎这两个 API 都可以实现二进制操作。但我不知道它们之间的区别。
如果我想使用llvm::IRBuilderBase::CreateAdd
API,我需要构建一个llvm::IRBuilder
具有llvm::Context
与llvm::Module
第一,就象:
llvm::Module module;
llvm::Context context(module);
llvm::IRBuilder<> irBuilder(&context);
然后使用irBuilder.CreateAdd
生成二元运算,就像:
llvm::Value *v = irBuilder.CreateAdd(left, right);
如果我要使用llvm::BinaryOperator::Create
API,因为它是一个static
方法,我可以直接调用它,就像:
llvm::Value *v = llvm::BinaryOperator::Create(llvm::BinaryOps::Add, left, right);
但如何llvm::BinaryOperator
知道哪个llvm::Context
或llvm::Module
它属于?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句