我正在使用LLVM IR代码。我想创建一个新的store
指令(例如:store i32 %add, i32* %temp1, align 4
),我需要在特定指令之后插入它,比如在add
指令之后。我的意图是,加法运算(某些指针)的结果存储在%add
中,我需要在 temperory变量中说%temp1
保留相同的副本。
为此,我首先创建了一个名为temp1
的变量(%temp1 = alloca i32, align 4
)。现在我想将加法指令(%add = add nsw i32 %0, %1
)的结果,即%add
存储到temp1
。然后最终的存储指令将是这样的:store i32 %add, i32* %temp1, align 4
。怎么做?
对一些例子有任何帮助吗?
答案 0 :(得分:1)
为了创建%temp1 = alloca i32, align 4
指令,我使用了以下语句:
AllocaInst* pa = new AllocaInst(llvm::Type::getInt32Ty(getGlobalContext()), 0, 4,"temp1");
用于创建和插入新的store
指令:
StoreInst *str = new StoreInst(i, pa); // i -> current instruction pointer which represents %add ( source of store instruction ), pa -> destination. i.e., temp1
BB->getInstList().insert(ib, str); // ib -> instruction address before which you want to insert this store instruction
答案 1 :(得分:0)
几点说明: