我有这样一种基本的机器功能传递:
bool Foo::runOnMachineFunction(MachineFunction &Fn) {
for (auto &BB : Fn) {
for (MachineBasicBlock::iterator I = BB.begin(), E = BB.end(); I != E;
++I) {
if (I->isPseudo())
continue;
// inspect opcode of I here
}
}
}
return true;
}
在这个循环中,我想检查每条指令的实际x86操作码(=字节数组)。 I->getOpcode()
只给出一个似乎由llvm在内部使用的整数。
我一直在浏览llvm源代码一小时而没有找到解决方案。我想我需要以某种方式将I
从MachineInstr
降低到MCInst
才能建立起来。我也看过void X86MCCodeEmitter::EncodeInstruction(...)
可能有用。然而,llvm是一个非常复杂的野兽,我没有设法连接点。