LLVM IR中的“移动”操作码是什么?

时间:2015-06-27 18:01:41

标签: llvm llvm-ir llc

我是LLVM IR的新手,我正在尝试在LLVM IR中模拟一些x86指令。

这是一个简单的案例:

move %eax, %ebx

但是,在查看herehere处的资料后,我没有找到任何相应的mov操作码。

所以我的问题是:

  1. 如果我想使用LLVM IR模拟mov操作码?我该怎么办?

  2. 我是LLVM IR的新手,可能我会在这个“模拟”工作上花费很长时间,关于LLVM IR的最佳参考应该是什么?

  3. 如果有人能给我一些帮助,我真的很感激。谢谢!

2 个答案:

答案 0 :(得分:5)

没有与mov指令等效的内容。 LLVM IR位于SSA (Static Single Assignment) form,这意味着每个寄存器只分配一次值。有无限数量的(虚拟)寄存器 - 每个操作都会根据需要创建一个新的寄存器。

通过模拟x86指令不清楚你的意思,但如果它适合你,你可以在堆栈上为每个寄存器的局部变量分配内存(使用alloca指令),并使用loadstore指令可在它们之间复制值。

答案 1 :(得分:0)

如果您需要将一个 LLVM IR 寄存器的值移动到另一个,您可以使用 bitcast 指令:

; %a contains 64bit integer value
%a = i64 ...

; Copy / move the value of %a into %b
%b = bitcast i64 %a to i64

有关详细信息,请参阅:https://llvm.org/docs/LangRef.html#bitcast-to-instruction