[llvm-commits] [llvm] r51950 - /llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp

Evan Cheng evan.cheng at apple.com
Wed Jun 4 10:59:28 PDT 2008


Hi Owen,

While you are doing this and cleaning up liveintervals. Can you add  
helper function to liveinterval for creating copy intervals etc.?

Evan

On Jun 4, 2008, at 10:55 AM, Owen Anderson wrote:

>
> +
> +  // Renumber the instructions so that we can perform the index  
> computations
> +  // needed to create new live intervals.
> +  LI.computeNumbering();
> +
> +  // For copies that we inserted at the ends of predecessors, we  
> construct
> +  // live intervals.  This is pretty easy, since we know that the  
> destination
> +  // register cannot have be in live at that point previously.  We  
> just have
> +  // to make sure that, for registers that serve as inputs to more  
> than one
> +  // PHI, we don't create multiple overlapping live intervals.
> +  std::set<unsigned> RegHandled;
> +  for (SmallVector<std::pair<unsigned, MachineInstr*>, 4>::iterator  
> I =
> +       InsertedPHIDests.begin(), E = InsertedPHIDests.end(); I !=  
> E; ++I) {
> +    if (!RegHandled.count(I->first)) {
> +      LiveInterval& Interval = LI.getOrCreateInterval(I->first);
> +      VNInfo* VN = Interval.getNextValue(
> +          LI.getInstructionIndex(I->second) +  
> LiveIntervals::InstrSlots::DEF,
> +                                         I->second,  
> LI.getVNInfoAllocator());
> +      VN->hasPHIKill = true;
> +      VN->kills.push_back(LI.getMBBEndIdx(I->second->getParent()));
> +      LiveRange LR(LI.getInstructionIndex(I->second) +
> +                      LiveIntervals::InstrSlots::DEF,
> +                   LI.getMBBEndIdx(I->second->getParent()) + 1, VN);
> +      Interval.addRange(LR);
> +
> +      RegHandled.insert(I->first);
> +    }
> +  }
> }
>
> /// InsertCopies - insert copies into MBB and all of its successors
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list