[英]LLVM IR for addition and subtraction
I use "builder->CreateSub" and "builder->CreateAdd" to generate LLVM-IR for subtraction and addition.我使用“builder->CreateSub”和“builder->CreateAdd”来生成 LLVM-IR 用于减法和加法。
left = this->builder->CreateAlloca(llvm::Type::getInt32Ty(*this->llvm_context), nullptr, std::string("a1"));
right = this->builder->CreateAlloca(llvm::Type::getInt32Ty(*this->llvm_context), nullptr, std::string("b2"));
builder->CreateSub(left, right, "sub");
builder->CreateAdd(left, right, "add");
However, the generated IR (shown below) cannot be compiled/interpreted by LLVM (lli)但是,LLVM (lli) 无法编译/解释生成的 IR(如下所示)
%a1 = alloca i32, align 4
store i32 100, ptr %a1, align 4
%b2 = alloca i32, align 4
store i32 10, ptr %b2, align 4
%add = add ptr %a1, %b2
%sub = sub ptr %c3, i32 2
%sub1 = sub ptr %add, %sub
Which gives error (on ptr):这给出了错误(在ptr上):
lli: lli: test.ll:14:14: error: invalid operand type for instruction
%add = add ptr %a1, %b2
As pointed out by Nick Lewycky, we need load instruction to read memory from stack where alloca vars are stored.正如 Nick Lewycky 所指出的,我们需要加载指令来从存储 alloca 变量的堆栈中读取 memory。 I added CreateLoad for left and right variables above.
我为上面的左右变量添加了 CreateLoad。
builder->CreateLoad(llvm::Type::getInt32Ty(*this->llvm_context), alloca);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.