【发布时间】:2011-12-28 04:23:02
【问题描述】:
我正在为我的编译器编写优化,我使用 LLVM IR 作为我的中间语言。我已经解析了输入文件并将其转换为 LLVM IR。在优化期间,我需要检索指令的操作数。我能够在Instruction 类中找到getOpCode(),但无法检索操作数列表。我该怎么办?
【问题讨论】:
标签: llvm
我正在为我的编译器编写优化,我使用 LLVM IR 作为我的中间语言。我已经解析了输入文件并将其转换为 LLVM IR。在优化期间,我需要检索指令的操作数。我能够在Instruction 类中找到getOpCode(),但无法检索操作数列表。我该怎么办?
【问题讨论】:
标签: llvm
有很多操作数访问器,通常由类llvm::User提供,其doxygen页面是:http://llvm.org/doxygen/classllvm_1_1User.html有getNumOperands()和getOperand(unsigned int),还有迭代器式访问器op_begin()和op_end() .
例如,给定指令 %X = add i32 %a, 2,I->getOperand(0) 将为 %a 返回 Value*,I->getOperand(1) 将为 i32 2 返回 Value*(可转换为 ConstantInt)。
【讨论】:
%X?
例如,如果您有Instruction* I1,I1->getOperand(0) 将返回Value* 类型的第一个操作数。您可以更进一步,使用将返回操作数名称的I1->getOperand(0)->getName()。请参阅Value 类方法。
【讨论】: