<div dir="ltr"><div><div><div><div><div><div><div><div>Hi all,<br><br></div>Can someone please explain me how to use REG_SEQUENCE in tablegen?<br></div>The arch i'm writing backend for has 32-bit regs, and it has a couple of 64-bit load/store instructions which use two neighboring regs at once, which i'm trying to employ using virtual regs with subs.<br><br></div>For example, it I want to move one 64-bit virtual reg to another, I'm trying to use the following pattern:<br><br>def LoReg: OutPatFrag<(ops node:$Rd), (EXTRACT_SUBREG (i64 $Rd), isub_lo)>;<br>def HiReg: OutPatFrag<(ops node:$Rd), (EXTRACT_SUBREG (i64 $Rd), isub_hi)>;<br>def MOVi64rr : Pat<(set GPR64:$Rd, GPR64:$Rn), <br>    (REG_SEQUENCE GPR64, <br>    (MOVi32rr (HiReg GPR64:$Rn)),<br>    isub_hi, <br>    (MOVi32rr (LoReg GPR64:$Rn)),<br>    isub_lo)>;<br><br></div>isub_hi and isub_lo are subregs of a single 64-bit virtual reg.<br></div><br>When trying to compile it, im getting the following error:<br>MOVi64rr:       (set GPR64:i64:$Rd, GPR64:i64:$Rn)<br>MOVi64rr:       (REG_SEQUENCE:<empty> GPR64:i32, (MOVi32rr:i32 (EXTRACT_SUBREG:i32 GPR64:i64:$Rn, isub_hi:i32)), isub_hi:i32, (MOVi32rr:i32 (EXTRACT_SUBREG:i32 GPR64:i64:$Rn, isub_lo:i32)), isub_lo:i32)<br>error: In MOVi64rr: Could not infer all types in pattern result!<br>Assertion `SDNodes.count(R) && "Unknown node!"' failed.<br><br></div>If i'll specify the type for REG_SEQUENCE, i.e. (i64 (REG_SEQUENCE ...)), it doesn't say anything about types, but it fails exactly at the same place with Assertion `SDNodes.count(R) && "Unknown node!"' failed.<br><br></div>Thanks,<br></div>Petr<br><div><div><div><div><br></div></div></div></div></div>