在 LLVM 中写入或读取指令

Write or Read Instructions in LLVM

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

所以如果我有:

%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。

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

mul指令是乘法,所以不是,它的操作数不对应那些C表达式。你看到这条指令而不是 allocas 和 stores 因为 Clang 发现你的代码是常量表达式并传播它。而且 AFAIK,您无法阻止它 - 即使 -O0.

,Clang 也会执行持续传播