<div dir="ltr">Hi there, <div><br></div><div>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 <span class="gmail-Apple-converted-space" style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0);font-family:Menlo;font-size:11px"> </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0);font-family:Menlo;font-size:11px">X86II::getMemoryOperandNo() and </span><span style="font-variant-ligatures:no-common-ligatures;color:rgb(0,0,0);font-family:Menlo;font-size:11px">X86II::getOperandBias() </span><span style="color:rgb(0,0,0);font-variant-ligatures:no-common-ligatures"><font face="arial, helvetica, sans-serif" style="">to get the index of the base_reg MachineOperand.  This seems to work fine for most instructions, until I saw the following instruction: </font></span></div><div><span style="color:rgb(0,0,0);font-variant-ligatures:no-common-ligatures"><font face="arial, helvetica, sans-serif" style=""><br></font></span></div><div><span id="gmail-docs-internal-guid-4d73ef36-7fff-a314-9ac9-88f751e55cea"><span style="font-size:9pt;font-family:Consolas;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">X86: pushq  </span><span style="font-size:9pt;font-family:Consolas;color:rgb(0,102,102);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">0x20</span><span style="font-size:9pt;font-family:Consolas;color:rgb(102,102,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">(%</span><span style="font-size:9pt;font-family:Consolas;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">rbx)</span></span><br></div><div><span><span style="font-size:9pt;font-family:Consolas;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">MIR: </span></span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap"> PUSH64rmm renamable $rbx</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(102,102,0);vertical-align:baseline;white-space:pre-wrap">,</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap"> </span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(0,102,102);vertical-align:baseline;white-space:pre-wrap">1</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(102,102,0);vertical-align:baseline;white-space:pre-wrap">,</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap"> $noreg</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(102,102,0);vertical-align:baseline;white-space:pre-wrap">,</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap"> </span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(0,102,102);vertical-align:baseline;white-space:pre-wrap">32</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(102,102,0);vertical-align:baseline;white-space:pre-wrap">,</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap"> $noreg</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(102,102,0);vertical-align:baseline;white-space:pre-wrap">,</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap"> </span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(0,0,136);vertical-align:baseline;white-space:pre-wrap">implicit</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(102,102,0);vertical-align:baseline;white-space:pre-wrap">-</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(0,0,136);vertical-align:baseline;white-space:pre-wrap">def</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap"> $rsp</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(102,102,0);vertical-align:baseline;white-space:pre-wrap">,</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap"> </span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(0,0,136);vertical-align:baseline;white-space:pre-wrap">implicit</span><span style="background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;font-size:9pt;font-family:Consolas;color:rgb(0,0,0);vertical-align:baseline;white-space:pre-wrap"> $rsp</span></div><div><br></div><div>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? </div><div><br></div><div>Thanks!</div><div>Yuanfeng Peng</div>











</div>