[X86] How to query for Opcode type?


I would like to query the X86InstrInfo tables to determine if a given opcode is a load or store from stack. I see functions isFrameLoadOpcode and isFrameStoreOpcode in lib/Target/X86/X86InstrInfo.cpp that would provide the functionality I am looking for.

However, these functions are static.

What is the recommended way to perform such queries for a MachineInstr - short of replicating the logic from X86InstrInfo.cpp in my tool that links to llvm libraries?



Isn’t X86InstrInfo::isLoadFromStackSlot and X86InstrInfo::isStoreToStackSlot what’s you’re looking for?

I did look at the suggested functions. I am calling those functions on a MachineInstr that I created by hand in my tool.

For example, I created an MachineInstr (whose dump is as follows)

(lldb) call mi.dump()

MOV32mr %RBP, 1, %noreg, -12, %noreg, %EDI

corresponding to

mov dword ptr [rbp - 12], edi

I thought a call subTargetInstrInfo->isStoreToStackSlot(mi, 0); would return true

but X86InstrInfo::isFrameOperand() fails because MI.getOperand(Op + X86::AddrBaseReg).isFI() fails.

May be my construction of the mi (as well as my understanding) is incomplete.

Any additional nudges are very much appreciated.