【问题标题】:Getting the operands in an LLVM Instruction获取 LLVM 指令中的操作数
【发布时间】:2011-12-28 04:23:02
【问题描述】:

我正在为我的编译器编写优化,我使用 LLVM IR 作为我的中间语言。我已经解析了输入文件并将其转换为 LLVM IR。在优化期间,我需要检索指令的操作数。我能够在Instruction 类中找到getOpCode(),但无法检索操作数列表。我该怎么办?

【问题讨论】:

    标签: llvm


    【解决方案1】:

    有很多操作数访问器,通常由类llvm::User提供,其doxygen页面是:http://llvm.org/doxygen/classllvm_1_1User.htmlgetNumOperands()getOperand(unsigned int),还有迭代器式访问器op_begin()op_end() .

    例如,给定指令 %X = add i32 %a, 2I->getOperand(0) 将为 %a 返回 Value*I->getOperand(1) 将为 i32 2 返回 Value*(可转换为 ConstantInt)。

    【讨论】:

    • 我如何获得%X
    • 我发现这真的取决于类型。对于 MachineInstrunctions,似乎第零个操作数是返回值,而参数从 1 开始。对于常规指令,它看起来像指令本身是返回类型(可以强制转换为 Value*)。虽然不是 100% 肯定,但这部分并没有真正记录在案,我找不到任何好的信息(除了这个 SO 问题)。
    【解决方案2】:

    例如,如果您有Instruction* I1I1->getOperand(0) 将返回Value* 类型的第一个操作数。您可以更进一步,使用将返回操作数名称的I1->getOperand(0)->getName()。请参阅Value 类方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多