[llvm-dev] [X86 MIR] Get memory address read in PUSH64rmm (original) (raw)
Anton Korobeynikov via llvm-dev llvm-dev at lists.llvm.org
Sun Feb 24 11:59:17 PST 2019
- Previous message: [llvm-dev] [X86 MIR] Get memory address read in PUSH64rmm
- Next message: [llvm-dev] Ericsson is Hiring LLAM Developers in Austin!
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hello
Well, I'm afraid I had to disappoint you. The memory operands are always optional, you cannot rely on their presence. And it's perfectly fine to have instructions that access memory but do not have memory operands.
On Sun, Feb 24, 2019 at 10:51 PM Yuanfeng Peng via llvm-dev <llvm-dev at lists.llvm.org> wrote:
Hi there, I'm working on an MIR transformation for X86, and I need to get all memory addresses accessed by any X86 instruction. I've been using MachineInstr::memoperands() to iterate over all MachineMemOperands and using X86II::getMemoryOperandNo() and X86II::getOperandBias() to get the index of the basereg MachineOperand. This seems to work fine for most instructions, until I saw the following instruction: X86: pushq 0x20(%rbx) MIR: PUSH64rmm renamable rbx,1,rbx, 1, rbx,1,noreg, 32, noreg,implicit−defnoreg, implicit-def noreg,implicit−defrsp, implicit $rsp For the above MachineInstr, MachineInstr::getNumMemOperands() returns 0: there's no MachineMemOperands. However, this instruction clearly accesses the memory address specified by [%rbx + 0x20]. I wonder how I can get the memory addresses for instructions like this? Thanks! Yuanfeng Peng
LLVM Developers mailing list llvm-dev at lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-- With best regards, Anton Korobeynikov Department of Statistical Modelling, Saint Petersburg State University
- Previous message: [llvm-dev] [X86 MIR] Get memory address read in PUSH64rmm
- Next message: [llvm-dev] Ericsson is Hiring LLAM Developers in Austin!
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]