You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
882 B
31 lines
882 B
// IR 构建工具:
|
|
// - 管理插入点(当前基本块/位置)
|
|
// - 提供创建各类指令的便捷接口,降低 IRGen 复杂度
|
|
|
|
#include "ir/IR.h"
|
|
#include <stdexcept>
|
|
|
|
namespace ir {
|
|
|
|
ConstantInt* IRBuilder::CreateConstInt(int v) {
|
|
// 常量不需要挂在基本块里,由 Context 负责去重与生命周期。
|
|
return DefaultContext().GetConstInt(v);
|
|
}
|
|
|
|
BinaryInst* IRBuilder::CreateBinary(Opcode op, Value* lhs, Value* rhs,
|
|
const std::string& name) {
|
|
if (!insertBlock_) {
|
|
throw std::runtime_error("IRBuilder 未设置插入点");
|
|
}
|
|
return insertBlock_->Append<BinaryInst>(op, Type::Int32(), lhs, rhs, name);
|
|
}
|
|
|
|
ReturnInst* IRBuilder::CreateRet(Value* v) {
|
|
if (!insertBlock_) {
|
|
throw std::runtime_error("IRBuilder 未设置插入点");
|
|
}
|
|
return insertBlock_->Append<ReturnInst>(v);
|
|
}
|
|
|
|
} // namespace ir
|