<div dir="ltr">Hi all, <div><br></div><div>Suppose I have two basic blocks A->B and I want to insert a new basic block C between A and B, so that A->C->B. Right now I'm able to insert the block and correctly update the SlotIndexes. But I'm having trouble updating the LiveIntervals, so at very least I have to make sure all registers that are live in into B are live through C.</div><div><br></div><div>Suppose after inserting C the Slot Index range for the 3 blocks are </div><div><br></div><div>A [0, 20]</div><div>C [28, 40]</div><div>B [44, 60]</div><div><br></div><div>and the liveInterval of %verg 1 is (4r, 52r). So right now the liveInterval already covers C, but later I'm failing an assertion in LiveIntervals::shrinkToUses() function.</div><div><br></div><div>// Make sure VNI is live-out from the predecessors.                                                                                                    <br></div><div>      for (MachineBasicBlock::const_pred_iterator PI = MBB->pred_begin(),</div><div>           PE = MBB->pred_end(); PI != PE; ++PI) {</div><div>        if (!LiveOut.insert(*PI))</div><div>          continue;</div><div>        SlotIndex Stop = getMBBEndIdx(*PI);</div><div> <font color="#ff0000">       assert(li->getVNInfoBefore(Stop) == VNI &&</font></div><div><font color="#ff0000">               "Wrong value out of predecessor");</font></div><div>        WorkList.push_back(std::make_pair(Stop, VNI));</div><div>      }</div><div><br></div><div>so I print out li here and it's (4r, 28B) [44B, 52r), so at some point the live interval of %vreg 1 is split and LLVM has no idea that register live through C, which means I must have missed updating something when I create C. </div><div><br></div><div>I'm doing this in MachineScheduler Pass,</div><div><br></div><div>Dear Cameron, I CC you because when I google to find some clue, I noticed you submit a patch for MachineBasicBlock::SplitCriticalEdge() on updating liveIntervals, so I thought maybe you might be able to help me. I tried the same method you did but still did not pass that assertion.</div><div><br></div><div>Thanks in advance,</div><div>Patrick  </div><div><br></div></div>