llvm::IRBuilderBase 和 llvm::BinaryOperator 中的`Create` API 有什么区别?

linrongbin

我想在我的玩具编程语言中以 LLVM 作为后端实现二进制操作。在 LLVM 文档中,我Createllvm::IRBuilderBase中都找到了API llvm::BinaryOperator

  1. llvm::IRBuilderBase::CreateAdd: https://llvm.org/doxygen/classllvm_1_1IRBuilderBase.html#a928603739e0e70713566011d44052a4f

  2. llvm::BinaryOperator::Create: https://llvm.org/doxygen/classllvm_1_1BinaryOperator.html#a02ce9966395063ac501ecbc1623deda4

我有两个关于CreateAPI 的问题

  1. 似乎这两个 API 都可以实现二进制操作。但我不知道它们之间的区别。

  2. 如果我想使用llvm::IRBuilderBase::CreateAddAPI,我需要构建一个llvm::IRBuilder具有llvm::Contextllvm::Module第一,就象:

llvm::Module module;
llvm::Context context(module);
llvm::IRBuilder<> irBuilder(&context);

然后使用irBuilder.CreateAdd生成二元运算,就像:

llvm::Value *v = irBuilder.CreateAdd(left, right);

如果我要使用llvm::BinaryOperator::CreateAPI,因为它是一个static方法,我可以直接调用它,就像:

llvm::Value *v = llvm::BinaryOperator::Create(llvm::BinaryOps::Add, left, right);

但如何llvm::BinaryOperator知道哪个llvm::Contextllvm::Module它属于?

阿恩特

他们都创建了一个 BinaryOperator 对象;IRBuilder 调用 BinaryOperator::Create()。IRBuilder 只是对很多不同的Something::Create() 的封装,包括BinaryOperator::Create()。我不知道为什么有些人更喜欢使用包装器而其他人则不喜欢。我认为这主要是品味问题。

Create可以使用您给它指令找到相关的模块和上下文insertBefore->getModule()insertBefore->getModule()->getContext()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Julia中的@ code_native,@ code_typed和@code_llvm有什么区别?

LLVM 中的 BasicBlock::getSingleSuccessor() 和 BasicBlock::getUniqueSuccessor() 有什么区别?

clang(和LLVM)与gcc / g ++有什么区别?

MSIL和LLVM位码之间有什么区别?

Apple LLVM和LLVM之间的区别

llvm 中 XXXISelDAGToDAG 和 XXXISelLowering 的区别

“带有Microsoft CodeGen的Clang”和“ LLVM-vs2014”之间有什么区别?

#include <filename>和#inlude特定于LLVM / Clang的“文件名”之间有什么区别?

std :: vector和llvm :: SmallVector有什么区别?何时使用哪一个?

LLVM:指令或值类中“用途”和“用户”之间的区别

API 调用中的“路径”和“查询”有什么区别

RxJs API中的bindCallback和bindNodeCallback有什么区别?

linux中api和设备文件有什么区别?

Class API中的getDeclaredConstructors和getConstructors有什么区别?

Jackson API中的asDouble()和doubleValue()有什么区别?

Web API中的[FromRoute]和[FromBody]有什么区别?

具有LLVM和CMake的LTO

Clang,LLVM和g ++

什么是有序和无序LLVM CmpInst比较指令?

LLVM中的转换是什么?它与LLVM中的通行证有何关系?

Clang / LLVM中的CodeModel指的是什么?

REST和API有什么区别?

wmi和API有什么区别

LLVM中的部分应用

什么是 LLVM ExtractValueInst?

LLVM 比较指针和常量

了解g ++,clang和llvm

MVC中的Web API和REST API之间到底有什么区别?

GoogleAPI例外中的状态码API_UNAVAILABLE和API_NOT_CONNECTED有什么区别?