<div dir="ltr">I believe the sorting is handled by LessRecordRegister in include/llvm/TableGen/Record.h<div><br></div><div>Register names are broken down into parts that contain either digits or non-digits. Registers with fewest parts come first. Then it is sorted by the non-digit parts. If those are all equal, it will be sorted by the digit parts.<div><br><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Nov 26, 2020 at 1:25 AM Simon de Vegt via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="NL">
<div class="gmail-m_630452196026221569WordSection1">
<p class="MsoNormal">Hi all,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><span lang="EN-US">Can anyone explain how the order of the registers in XXXGenRegisterInfo.inc is determined?<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">E.g. for RISCV:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">namespace RISCV {<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">enum {<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">  NoRegister,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"> X0 = 1,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">  X1 = 2,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">  // (…)<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">  F31_F = 96,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">  NUM_TARGET_REGS // 97<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">};<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">}<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">How does this relate to the content of the XXXRegisterInfo.td file? It seems like the enum is generated with the same ordering as the register records appear when running llvm-tblgen.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">I have shuffled with my definitions but don’t seem to be able to influence this order.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span lang="EN-US">Root issue:<u></u><u></u></span></b></p>
<p class="MsoNormal"><span lang="EN-US">My architecture has specific registers for constants, a separate register class. I run a pre-regalloc allocator to allocate constants to registers from that class (because they need to be persistent and not be reused
 etc).<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">I can simply ‘MO.setReg(constRegId++)’ in my allocator but then I would need to know the number of the register, which apparently is not the same as the one defined in my XXXRegisterInfo.td file:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">foreach regid = 447-510 in {<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">  def C#regid : XXXConstReg<regid, "c"#regid, ["c"#regid]>, DwarfRegNum<[regid]>;<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">}<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">If there is a way to get the register range for a certain register class such that I can allocate machine operands to a physical register in that class, then that would solve my issue.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US">Mvg Simon de Vegt<u></u><u></u></span></p>
</div>
</div>

_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>