[LLVMdev] Debugging/Fixing 'Interval not live at use' errors

Stephen McGruer stephen.mcgruer at gmail.com
Tue Oct 23 02:10:49 PDT 2012

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.

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:

def LDrli : Pseudo<(outs CPURegs:$dst), (ins MEMrli:$addr),
                    "ld $dst,$addr",
                    [(set CPURegs:$dst, (load ADDRrli:$addr))]>;

Where ADDRrli and MEMrli are:

def ADDRrli : ComplexPattern<i32, 2, "SelectADDRrli", [frameindex], []>;

// Register + long immediate.
def MEMrli : Operand<i32> {
  let PrintMethod = "printMemOperand";
  let MIOperandInfo = (ops CPURegs, limm32);

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?)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20121023/39ca01ff/attachment.html>

More information about the llvm-dev mailing list