Getting MachineInstr opcode mnemonics as strings

Hello all,

Is there an easy way to get the human-readable opcode mnemonic (e.g., "MOV32ri64", "CMP32ri8", "JLE_1") for a MachineInstr? I am writing a backend analysis pass for security research, where the idea is for a researcher to examine the output of my pass and identify instructions from it for use in an attack. Right now I'm representing unique instructions with nondescript numeric symbols, like "i28" for the 28th instruction; but it would be nice to give the reader something more helpful like "i28_MOV32ri64".

MachineInstr doesn't have a getName() function like many other LLVM IR/MachineIR objects; is there anything roughly equivalent to this? I'm already using MachineInstr::print() for debugging output, but it's far too verbose for this purpose. I thought about trying to parse the opcode mnemonic out of the print() output, until I realized just how nasty that would be (not to mention that it prints to a raw_ostream, not an in-memory string).

Sincerely,
Ethan Johnson

Hello all,

Is there an easy way to get the human-readable opcode mnemonic (e.g.,
"MOV32ri64", "CMP32ri8", "JLE_1") for a MachineInstr? I am writing a
backend analysis pass for security research, where the idea is for a
researcher to examine the output of my pass and identify instructions from
it for use in an attack. Right now I'm representing unique instructions
with nondescript numeric symbols, like "i28" for the 28th instruction; but
it would be nice to give the reader something more helpful like
"i28_MOV32ri64".

MachineInstr doesn't have a getName() function like many other LLVM
IR/MachineIR objects; is there anything roughly equivalent to this? I'm
already using MachineInstr::print() for debugging output, but it's far too
verbose for this purpose. I thought about trying to parse the opcode
mnemonic out of the print() output, until I realized just how nasty that
would be (not to mention that it prints to a raw_ostream, not an in-memory
string).

The name (as well as some other information) is in MCInstrInfo; if you have
any kind of *InstrInfo (as, e.g., X86InstrInfo isa TargetInstrInfo isa
MCInstrInfo), you should be able to do:

  TII->getName(MI->getOpcode());

-Ahmed

That’s exactly what I was looking for - thanks!

Ethan Johnson