我想从一个部分复制这些指令集并粘贴到 IR 中的另一部分
%0 = load i32, i32* @x, align 4
%1 = load i32, i32* @y, align 4
%add = add nsw i32 %0, %1
%2 = load i32, i32* @n, align 4
%cmp = icmp slt i32 %add, %2
%conv = zext i1 %cmp to i32
假设你正在使用 C++ API,你只需要clone https://github.com/llvm-mirror/llvm/blob/1afcae44d92c906c595bd0b2b365dfd58b8657f9/include/llvm/IR/Instruction.h#L505每条指令分别固定参考 https://github.com/llvm-mirror/llvm/blob/1afcae44d92c906c595bd0b2b365dfd58b8657f9/include/llvm/Transforms/Utils/ValueMapper.h它们之间。像下面这样:
llvm::ValueToValueMapTy vmap;
for (auto *inst: instructions_to_clone) {
auto *new_inst = inst->clone();
new_inst->insertBefore(insertion_pos);
vmap[inst] = new_inst;
llvm::RemapInstruction(new_inst, vmap,
RF_NoModuleLevelChanges | RF_IgnoreMissingLocals);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)