简体   繁体   English

用于加法和减法的 LLVM IR

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM