llvm - llvm::IRBuilderBase 和 llvm::BinaryOperator 中的`Create` API 有什么区别?
问题描述
我想在我的玩具编程语言中以 LLVM 作为其后端来实现 bianry 操作。在 LLVM 文档中,我在和Create
中都找到了 API :llvm::IRBuilderBase
llvm::BinaryOperator
llvm::IRBuilderBase::CreateAdd
:https ://llvm.org/doxygen/classllvm_1_1IRBuilderBase.html#a928603739e0e70713566011d44052a4fllvm::BinaryOperator::Create
:https ://llvm.org/doxygen/classllvm_1_1BinaryOperator.html#a02ce9966395063ac501ecbc1623deda4
我有两个关于Create
API 的问题:
看来这两个 API 都可以实现二进制操作。但我不知道它们之间的区别。
如果我想使用
llvm::IRBuilderBase::CreateAdd
API,我需要先llvm::IRBuilder
用llvm::Context
and构造一个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
解决方案
推荐阅读
- php - Preg 匹配一个字符串以确保它具有 'YmdTH:i:s' 日期结构
- python-3.x - 用 pyomo 计算数值导数
- azure-iot-hub - Azure IoT Edge 模块直接方法响应显示为 [object Object]
- azure-data-lake - 如何在 U-SQL 中抛出错误或引发异常?
- angular - 在已经分支的分支上主变基后的问题
- ubuntu - 在 Ubuntu 中将 ElasticSearch 作为守护程序运行时出错
- javascript - 循环遍历具有相同类的html元素并找到元素的顺序
- freemarker - freemarker中子列表的最后一个值
- ms-access - 通过在 VBA Access 中将查询和格式循环到列中来编写多行电子邮件
- swift - 试图了解 URLSession 身份验证挑战