<div dir="ltr"><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">No, this would have to be a void side effecting instruction which is a bit different. </blockquote><div><br></div><div> What do you mean by "void side effecting instruction"? I'm not sure I fully understand what you mean.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">The flag register is an implicit register added to the selected MachineInstr's operands.</blockquote><div><br></div><div>Is this something that is always done by LLVM? Is it me who is telling to LLVM to do it? I'd appreciate if you could point out where in the code this is happening.</div><div><br></div><div><br></div><div>I've also followed your advice and added i1 as a type for my SPR<br><br>def SPR : RegisterClass<"Esencia", [i1,i32], 32, (add SR)> {<br>  let CopyCost = -1;  // Don't allow copying of special purpose registers.<br>  let isAllocatable = 0;<br>}<br><br></div><div>Then I changed an instruction class to return an explicit value<br><br>class SF_RR<bits<5> op2Val, string asmstr, PatLeaf Cond>  : <br>    InstRR<0x9, (outs), (ins GPR:$rA, GPR:$rB),<br>                !strconcat(asmstr, "\t$rA, $rB"),<br>                [(set SPR:$rC, (Esenciasetflag (i32 GPR:$rA), (i32 GPR:$rB), Cond))]> {<br>  bits<5> op2;<br>  bits<5> rA;<br>  bits<5> rB;<br><br>  let Inst{25-21} = op2;<br>  let Inst{20-16} = rA;<br>  let Inst{15-11} = rB;<br><br>  let op2 = op2Val;<br>}<br><br></div><div>Naturally LLVM didn't like it. I'm getting stack dumps when I compile it. I'm assuming this is happening because LLVM is not expecting to see an explicit output. As far as I understand my options are:<br><br></div><div>1. Have an instruction return an explicit value, but then I will have to do a lot of work to change a large chunk of the backend.<br></div><div>2. Continue working with an implicit value being set by an instruction.<br><br></div><div>I'd like to introduce as little changes as I can. So option 2 seems to be a reasonable one, however I can't figure out where and what I need to change. As most people on this list, I'm also learning "on the fly"<br><br></div><div>I'd really appreciate any help on this. <br></div><div><br></div></div>-- <br><div><div dir="ltr"><div><div dir="ltr"><div>Rail Shafigulin<br></div>Software Engineer <br>Esencia Technologies<br></div></div></div></div>
</div></div>