[LLVMdev] Possible bug in LiveIntervals (triggered on the XCore target)?

Richard Osborne richard at xmos.com
Tue Jan 13 11:20:01 PST 2009


Roman Levenstein wrote:
> Hi again,
>
> Now, after I fixed the graph coloring regalloc bug that was triggered
> by the ARM target, I continue testing and found another bug, this time
> on the XCore target. First I thought that it is again specific to my
> register allocator, but it seems to be trigerred also by LLVM's
> linearscan register allocator.
>
> I don't know if the XCore target is stable enough in LLVM, or may be I
> should just safely skip it during testing because it is not mature
> yet. Anyway, I report it here - may be it is of some interest.
>
> The crash happens in LiveIntervalsAnalysis, inside the spilling
> function. From what I observe, I'd say it is related to
> rematerializable intervals.
>
> The assertion says:
> /opt/llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h:142:
> llvm::LiveInterval& llvm::LiveIntervals::getInterval(unsigned int):
> Assertion `I != r2iMap_.end() && "Interval does not exist for
> register"' failed.
>
> I attach the BC file generated by bugpoint, so that you can reproduce it.
>
> The command-line I use is:
> llc --regalloc=linearscan --march=xcore  -f bugpoint-reduced-simplified.bc
>
> Any ideas about the reasons of this bug?
>
> Thanks,
>   -Roman
It looks like it is trying to rematerialize a load from fixed stack slot 
(LDWSP instruction). This has an implicit use of the SP register which 
is non allocatable.

rewriteInstructionsForSpills calls getReMatImplicitUse which returns the 
SP register. This is then followed by a call to getInterval for this 
register which fails. The attached patch causes getReMatImplicitUse to 
ignore non allocatable physical registers, which fixes the issue for me. 
Does this look OK?

-- 
Richard Osborne | XMOS
http://www.xmos.com


-------------- next part --------------
A non-text attachment was scrubbed...
Name: bug.patch
Type: text/x-patch
Size: 613 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20090113/d7bee43f/attachment.bin>


More information about the llvm-dev mailing list