什么是 LLVM ExtractValueInst?

苏米克巴苏

我正在研究一个 llvm 代码,在那里我找到了一行,

const ExtractValueInst *EI = cast<ExtractValueInst>(I);
st.setValue(I, st.getValue(EI->getAggregateOperand()));

现在,我明白为什么要使用 cast<...>,但我无法与 ExtarctValueInst 关联,你能给我举个例子,IR 中的这条指令是什么,等价的 C 代码是什么?我也想知道 getAggregateOperand() 函数。先感谢您。

arnt

假设您有一个函数返回一个 32 位整数,该整数实际上不是一个整数,而是一组较小的位域和/或布尔值。也许低六位是 0-63 范围内的整数,第七位是布尔值,等等。

在某个地方你调用了那个函数,在调用下面一点,你有使用 i6 的代码,它是返回值的一部分。因此,您创建一个 extractvalue 以从复合返回值中提取一个值。(如果组合在主内存中,您可能会创建一个 getelementptr/load 对,但由于它很可能在 CPU 寄存器中,您会创建一个提取值。)

这在异常处理中经常使用;catch 子句有一个参数,它是两个东西的组合,catch 子句测试两个组件之一以确定是捕获异常还是传递它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章