在LLVM中写入或读取指令

在LLVM中写入或读取指令,llvm,Llvm,我只是想确保我正确理解GetOperator()。GetOperator()似乎以相反的顺序返回操作数: 因此,如果我有: %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; 如果我错了,请纠正我: 在第一条指令中,GetOperator(0)给出“i32”(正在读取的内容)和g

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

因此,如果我有:

%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;
如果我错了,请纠正我:

在第一条指令中,GetOperator(0)给出“i32”(正在读取的内容)和getOpernad(1)给出“nsw”(正在写入的内容)

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


所以我想我的问题是,如果指令在写什么,它是最后一个操作数吗

mul指令是乘法指令,因此不是,它的操作数与那些C表达式不对应。您看到的是此指令,而不是
alloca
s和
store
s,因为Clang发现您的代码是常量表达式并传播了它。此外,您无法阻止它-即使使用
-O0
,Clang也会执行持续传播