<div dir="ltr"><div><div><div><div>Thanks for your reply Quentin. I do understand that the registers are allocated much later in the pipeline. <br></div>I am assuming that the physical registers are allocated before MipsAsmPrinter class. <br></div>I am doing something like <br>  if (MI->getOpcode() == Mips::OPCODE) {<br>        unsigned n = MI->getNumOperands(); <br>        for(unsigned i=0 ; i < n ; i++) {<br>            const MachineOperand &MO = MI->getOperand(i);<br>            if (MO.isReg())<br>            { <br>                fprintf(stderr,"int i is %u and reg is %d\n",i, MO.getReg());<br>            }<br>        }<br>  } <br><br></div>but I am still getting wrong physical register number. <br><br></div>For eg when the allocated register is 3 in assembly the output given by MO.getReg() is 290.<br><br><div><div><div>Any clues why is this the case?<br><br></div><div>Thanks,<br></div><div>Ambuj<br></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Feb 27, 2015 at 5:46 PM, Quentin Colombet <span dir="ltr"><<a href="mailto:qcolombet@apple.com" target="_blank">qcolombet@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><br>
> On Feb 27, 2015, at 1:59 AM, Ambuj Agrawal <<a href="mailto:ambujbwt@gmail.com">ambujbwt@gmail.com</a>> wrote:<br>
><br>
> Is it possible to get a register number to which the value is allocated to in MIPS in DAGToDAG class?<br>
><br>
> More Specifically:<br>
>                     SDValue Reg3 = Node->getOperand(3);<br>
>                     if (RegisterSDNode *R = dyn_cast<RegisterSDNode>(Reg3))<br>
>                     {<br>
>                         op3 = cast<RegisterSDNode>(Reg3)->getReg();<br>
>                         fprintf(stderr,"Op3 is register and regnum is %d\n",op3);<br>
>                     }<br>
>                     else if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(Reg3))<br>
>                     {<br>
>                         op3 = C->getZExtValue();<br>
>                         fprintf(stderr,"Op3 is constant and value is %d\n",op3);<br>
>                     }<br>
><br>
> When I run this code Reg3 is found out to be a ConstantSDNode but is stored in the register in assembly. I want to store the value in register but also need the register number to which the value is allocated.<br>
<br>
</div></div>The registers are allocated much later in the pipeline. At this stage, these are virtual registers.<br>
<br>
What are you trying to achieved?<br>
<br>
Cheers,<br>
-Quentin<br>
<br>
><br>
> Thanks,<br>
> Ambuj Agrawal<br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br>
</blockquote></div><br></div>