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

Haishan hndxvon at 163.com
Sat Jan 4 04:38:31 PST 2014


 At 2014-01-04 06:11:38,"Jakob Stoklund Olesen" <stoklund at 2pi.dk> wrote:


On Jan 3, 2014, at 1:52 PM, Andrew Trick <atrick at apple.com> wrote:


He really just wants to rerun LiveIntervals analysis, but LiveVariables is no longer available. Would it work just to clear all the intervals rerun LiveIntervals::computeVirtRegs after all the CFG transforms are complete?


Yes, I should think so.


/jakob



Thank you very much for your talk.
I think I could append more information about updating LiveIntervals.
1. It works well if I just use from step1 to step3, without step4.
2. In step4, I firstly use UnreachableBlockElim pass to delete OldMBB.
Then, remove all intervals and recompute all the virtual registers' LiveIntervals.
3. I debug source code in LiveRangeCalc.cpp and copy partial code shown following.
/// LiveRangeCalc.cpp
...
#ifndef NDEBUG
    if (MBB->pred_empty()) {
      MBB->getParent()->verify();
      llvm_unreachable("Use not jointly dominated by defs.");
    }
...
/// LiveRangeCalc.cpp
This MBB is the first block of MachineFunction. That's to say, This MBB doesn't have predecessor. It is reasonable?
From debug information, this unreachable error is generated from recompute a virtual register which isn't used or defined in this MBB. But this virtual register, in NewMBB,  is defined in a machine instruction which is copied from OldMBB.
So I am puzzled. 
Then, I do as Andy's suggestion, but it doesn't work, and it has same error.
Could you have any suggestion?
Thank you very much again.
-Haishan

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140104/43e7a1a4/attachment.html>


More information about the llvm-dev mailing list