[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