我只是想确保理解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。
所以我想我的问题是,如果指令写入某些内容,它是最后一个操作数吗?
答案 0 :(得分:1)
mul
指令是乘法,所以不,它的操作数与那些C表达式不对应。您看到此指令而不是alloca
和store
,因为Clang发现您的代码是常量表达式并传播它。和AFAIK一样,你无法阻止它 - 即使-O0
,Clang也会不断传播。