<div dir="ltr">Howdy<div><br></div><div>My backend needs a scratch location for copying a value between two specialized registers (it's rather non-homogeneous and lacks "MOV XDest, XSrc", instead needing the pair "MOV GenReg, XSrc; MOV XDest, GenReg" where GenReg is a register from a general class). </div><div><br></div><div>I anticipate using a pseudo instruction for "MOV XDest XSrc" but this means that in </div><div>expandPostRAPseudo() a suitable GenReg needs to already have been assigned, e.g. I guess it would look like another "ins" for the instruction selection, except that it isn't an explicit operand with a source, just an available register from a certain class. So something like:<br></div><div><br></div><div>let isPseudo = 1 in {</div><div><div>def MOVXX  : ToyInst<bit_pattern,</div><div>                   (outs xRegs:$dst), (ins xRegs:$src, genRegs:$SCRATCH),</div><div>                   "movxx {$dst, $src}",</div><div>                   [(set xRegs:$dst, (xRegs:$src, genRegs:$SCRATCH))]>;</div></div><div>}</div><div><br></div><div>and then in expandPostRAPseudo():</div><div><br></div><div><div>    auto scratchReg = MI->getOperand(2).getReg();</div></div><div><br></div><div><br></div><div>I haven't yet seen (or perhaps not understood...) such a case in the documentation or existing target codebases - would welcome any guidance.</div><div><br></div><div>--Tyro</div></div>