确定 LLVM IR 指令分配给的 reg
Determine the reg that an LLVM IR instruction assigns to
LLVM Instruction
允许您确定运算符和操作数。您如何确定指令分配给的 reg 的名称?
这个问题:询问是否有办法确定是否是一个LHS分配,答案是“几乎总是”。但是我们如何确定它的名字呢?例如。我们如何区分 %1 = xor i8 %2, i8 %3
和 %5 = xor i8 %2, i8 %3
更新
为了说明,以下 C 编译为以下 IR:
int c1(int a, int b, int c) {
int d, e, f;
if (a < b && b >= c) {
...
如何确定c1
的第一条指令赋值给%4
?
; Function Attrs: norecurse nounwind optsize readnone uwtable
define dso_local i32 @c1(i32 %0, i32 %1, i32 %2) local_unnamed_addr #1 {
%4 = icmp sge i32 %0, %1
...
整个%name = add i32 %lhs, %rhs
是一条指令。通过调用 myInstruction->getName()
检索字符串 name
。如果它没有名称,打印出来时我们会分配从零开始的数字,但该数字仅在打印时计算为 运行 计数。
在您的示例中,%1 = xor i8 %2, i8 %3
是一条指令——它自己的 C++ 对象,在内存中有一个地址——而 %5 = xor i8 %2, i8 %3
是内存中的另一个 C++ llvm::Instruction
对象。
LLVM Instruction
允许您确定运算符和操作数。您如何确定指令分配给的 reg 的名称?
这个问题:%1 = xor i8 %2, i8 %3
和 %5 = xor i8 %2, i8 %3
更新
为了说明,以下 C 编译为以下 IR:
int c1(int a, int b, int c) {
int d, e, f;
if (a < b && b >= c) {
...
如何确定c1
的第一条指令赋值给%4
?
; Function Attrs: norecurse nounwind optsize readnone uwtable
define dso_local i32 @c1(i32 %0, i32 %1, i32 %2) local_unnamed_addr #1 {
%4 = icmp sge i32 %0, %1
...
整个%name = add i32 %lhs, %rhs
是一条指令。通过调用 myInstruction->getName()
检索字符串 name
。如果它没有名称,打印出来时我们会分配从零开始的数字,但该数字仅在打印时计算为 运行 计数。
在您的示例中,%1 = xor i8 %2, i8 %3
是一条指令——它自己的 C++ 对象,在内存中有一个地址——而 %5 = xor i8 %2, i8 %3
是内存中的另一个 C++ llvm::Instruction
对象。