<div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div><span></span></div></div></blockquote><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><br><br><div><span class=""><blockquote type="cite"><div><div dir="ltr"><div class="gmail_extra"><br>def SDTX86CmpPTest : SDTypeProfile<1, 2, [SDTCisVT<0, i32>,<br>                                          SDTCisVec<1>,<br>                                          SDTCisSameAs<2, 1>]>;<br><br></div><div class="gmail_extra">This is confusing to me. This tells me that there is 1 result but and 2 operands. But then it says that operands 2 and 1 are of the same type, SDTCisSameAs<2, 1>. Given that operand numbering starts at 0, how can there be operands 2 and 1? <br></div></div></div></blockquote><div><br></div></span><div>The results are numbered starting from 0. In this case with 1 result, 0 is the output operand, and 1 and 2 are the inputs.</div><span class=""><div><br></div><br><blockquote type="cite"><div><div dir="ltr"><div class="gmail_extra"><br></div><div class="gmail_extra">Based on the previous answer my understanding is that LLVM is complaining because it doesn't know what register to use. What is unclear to me is why? I already had 2 register classes before and everything was working. All I've done is that I had added an extra class. After that LLVM started to complain. And this is what puzzles me.<br></div></div></div></blockquote></span><div>Did you add a register class for a special condition register? Did you set it as isAllocatable = 0?</div></div></div></blockquote><div> </div><div>I think I'm slowly getting it. To answer your question, no I did not set isAllocaable = 0 for the new register class. But I'm still confused. Original instruction does not have an output register. It sets a flag in the special purpose register. So why creating a new register class would cause a problem? In other words, since there is no output register, why would LLVM start complaining. Below I'm repeating some code for reference. Any help is appreciated.<br></div><div><br>def SDT_EscalaSetFlag      : SDTypeProfile<0, 3, [SDTCisSameAs<0, 1>]>;<br><br>def Esenciasetflag     : SDNode<"EsenciaISD::SET_FLAG", SDT_EsenciaSetFlag,<br>                             [SDNPOutGlue]>;<br><br>class SF_RI<bits<5> op2Val, string asmstr, PatLeaf Cond><br>  : InstRI<0xf, (outs), (ins GPR:$rA, s16imm:$imm),<br>           !strconcat(asmstr, "i\t$rA, $imm"),<br>           [(Escalasetflag (i32 GPR:$rA), immSExt16:$imm, Cond)]> {<br>  bits<5> op2;<br>  bits<5> rA;<br>  bits<16> imm;<br><br>  let Inst{25-21} = op2;<br>  let Inst{20-16} = rA;<br>  let Inst{15-0} = imm;<br><br>  let format = AFrm;<br>  let op2 = op2Val;<br>}<br> </div></div>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Rail Shafigulin<br></div>Software Engineer <br>Esencia Technologies<br></div></div></div></div>
</div></div>