在LLVM中写入或读取指令

时间:2017-01-13 05:00:32

标签: llvm

我只是想确保理解getOperand()。似乎getOperand()以相反的顺序返回操作数:

所以,如果我有:

%1 = mul nsw i32 7, 2          # The c source code is: a = 7; b = a*2
ret i32 %1                     # The c source code is: return a;

如果我错了,请纠正我:

在第一条指令中,getOperand(0)给我'i32'(正在读取的内容)和getOpernad(1)'nsw'(正在写入的内容)。

在第二条指令中,唯一的操作数是正在读取的i32。

所以我想我的问题是,如果指令写入某些内容,它是最后一个操作数吗?

1 个答案:

答案 0 :(得分:1)

mul指令是乘法,所以不,它的操作数与那些C表达式不对应。您看到此指令而不是allocastore,因为Clang发现您的代码是常量表达式并传播它。和AFAIK一样,你无法阻止它 - 即使-O0,Clang也会不断传播。