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

Richard Osborne richard at xmos.com
Wed Jan 14 03:14:35 PST 2009


Evan Cheng wrote:
> On Jan 13, 2009, at 11:20 AM, Richard Osborne <richard at xmos.com> wrote:
>
>   
>> 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?
>>     
>
> This patch assumes non allocatable registers are available at any  
> point. I don't think that's a safe. Can you change LDWSP so it doesn't  
> implicitly use sp? Once the frame index object is lowered by PEI, it  
> can be rewritten to explicitly use sp. Would that work?
>
> Evan
OK, that make sense, I'll take a look at changing this. I've added a bug 
for the issue:

http://llvm.org/bugs/show_bug.cgi?id=3324

There is currently no Backend: XCore component in bugzilla so I've put 
it under new-bugs. Could someone add this component for me.

Thanks

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





More information about the llvm-dev mailing list