I have a target backend which is currently causing live interval analysis to throw 'Interval not live at use' errors for many of my benchmarks. I imagine that this is caused by missing information for my target (probably in the instructioninfo tablegen?), but I am having difficulties in both debugging and fixing this problem, and would appreciate any advice or help anyone can give.<div>
<br></div><div>I'm unsure if it's actually relevant, but the particular MachineInstr that is involved when the assertion is thrown is always a LDrli (load from an address given by a register + 32-bit immediate, to a register), which is defined as:</div>
<div><br></div><div><div><font face="courier new, monospace">def LDrli : Pseudo<(outs CPURegs:$dst), (ins MEMrli:$addr),</font></div><div><font face="courier new, monospace">                    "ld $dst,$addr",</font></div>
<div><font face="courier new, monospace">                    [(set CPURegs:$dst, (load ADDRrli:$addr))]>;</font></div></div><div><br></div><div>Where ADDRrli and MEMrli are:</div><div><br></div><div><div><font face="courier new, monospace">def ADDRrli : ComplexPattern<i32, 2, "SelectADDRrli", [frameindex], []>;</font></div>
</div><div><br></div><div><div><font face="courier new, monospace">// Register + long immediate.</font></div><div><font face="courier new, monospace">def MEMrli : Operand<i32> {</font></div><div><font face="courier new, monospace">  let PrintMethod = "printMemOperand";</font></div>
<div><font face="courier new, monospace">  let MIOperandInfo = (ops CPURegs, limm32);</font></div><div><font face="courier new, monospace">}</font></div></div><div><br></div><div><br></div><div>Does anyone have any suggestions on how to debug this issue, or what information a target must be giving to allow live interval analysis to work ok? (Possibly register clobbering information or the like?)</div>
<div><br></div><div>Thanks,<br>Stephen</div>