在 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表达式。你看到这条指令而不是 alloca
s 和 store
s 因为 Clang 发现你的代码是常量表达式并传播它。而且 AFAIK,您无法阻止它 - 即使 -O0
.
,Clang 也会执行持续传播
我只是想确保我正确理解 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表达式。你看到这条指令而不是 alloca
s 和 store
s 因为 Clang 发现你的代码是常量表达式并传播它。而且 AFAIK,您无法阻止它 - 即使 -O0
.