<div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote"><span class=""></span>It does have an output register, it's just an implicit flag register. It still has a DAG output. I'm not sure if the allocatable bit matters at this point for selection purposes, but it does later. Not adding a type to the register class can also be problematic (e.g. a flag register should have i1 added to regTypes for its class).<span class=""></span><br><span class=""><font color="#888888">
</font></span><br><span class=""></span><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=""><font color="#888888">
-Matt<br>
</font></span></blockquote></div><br></div><div class="gmail_extra">Does LLVM make an assumption that there is an implicit register output if there are no outputs given to the pattern? I'm also curious about how did LLVM know that an output of this instruction was setting a flag in a special purpose register rather than a GPR? When I look at the DAG pattern for the instruction, (Escalasetflag (i32 GPR:$rA), immSExt16:$imm, Cond), I can't find anything saying that it sets a flag in the special purpose register. <br><br>I'm reposting code for convenience.<br><br>def SDT_EscalaSetFlag      : SDTypeProfile<0, 3, [SDTCisSameAs<0, 1>]>;<br><br>def Escalatflag     : SDNode<"EscalaISD::SET_FLAG", SDT_EscalaSetFlag,<br>                             [SDNPOutGlue]>;<br><br>def Escala_CC_EQ  : PatLeaf<(imm),<br>                  [{return (N->getZExtValue() == ISD::SETEQ);}]>;<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><br></div><div class="gmail_extra">multiclass SF<bits<5> op2Val, string asmstr, PatLeaf Cond> {<br>  def _rr : SF_RR<op2Val, asmstr, Cond>;<br>  def _ri : SF_RI<op2Val, asmstr, Cond>;<br>}<br><br>defm SFEQ  : SF<0x0, "l.sfeq",  Escala_CC_EQ>;<br><br></div><div class="gmail_extra"><br>-- <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>