[LLVMdev] How to update LiveInterval information of newly inserted machine basic block

Andrew Trick atrick at apple.com
Tue Dec 31 12:36:21 PST 2013


On Dec 31, 2013, at 3:52 AM, Haishan <hndxvon at 163.com> wrote:

> Hi,
>   I insert a new machine basic block(MBB) before Greedy Register Allocation, after Simple Register Coalescing. But I encounter a fatal 
> error "regalloc = ... not currently supported with -O0". I use command line with opt level O2, not O0.
> The probable reason of this error is that no LiveInterval information for newly MBB which is used by Register Allocation.
> And, LiveIntervals depend on LiveVariables which require the machine function to be in SSA form.
> However, in this case, the modified machine function(including newly inserted MBB) is not SSA form any more.
> So, how to update LiveInterval information of newly MBB?
> Could someone help me with that?
> Thank you very much in advance.
> -Haishan

Yes, I think error that means LiveIntervals have been invalidated. It is supposed to be user-friendly but should probably be changed to be more specific.

If you schedule a new pass between coalescing and regalloc, it needs to preserve LiveIntervals analysis. There are utilities to recompute live intervals for individual virtual registers. See LiveIntervals::computeVirtRegs. LiveVariables is not actually needed to update live intervals. It is only added as a requirement to make sure it runs before the 2-address pass.

-Andy

> 
> 
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131231/2d5d3244/attachment.html>


More information about the llvm-dev mailing list