[llvm-commits] [llvm] r54174 - /llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp
Evan Cheng
evan.cheng at apple.com
Wed Jul 30 11:05:21 PDT 2008
There are several LiveInterval methods that merge all the liveranges
of a particular val#. See MergeValueNumberInto and
MergeRangesInAsValue. Can you use those?
Evan
On Jul 29, 2008, at 2:17 PM, Owen Anderson wrote:
> Author: resistor
> Date: Tue Jul 29 16:17:08 2008
> New Revision: 54174
>
> URL: http://llvm.org/viewvc/llvm-project?rev=54174&view=rev
> Log:
> When merging a PHI operand's live interval into the PHI's live
> interval, we need to merge over all liveranges in
> the operand's interval that share the relevant value number, not
> just the range that immediately precedes the PHI.
>
> Modified:
> llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp
>
> Modified: llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp?rev=54174&r1=54173&r2=54174&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp (original)
> +++ llvm/trunk/lib/CodeGen/StrongPHIElimination.cpp Tue Jul 29
> 16:17:08 2008
> @@ -786,21 +786,29 @@
> LiveInterval& RHS = LI.getOrCreateInterval(secondary);
>
> LI.computeNumbering();
> -
> const LiveRange* RangeMergingIn =
> RHS.getLiveRangeContaining(LI.getMBBEndIdx(pred));
> + VNInfo* RHSVN = RangeMergingIn->valno;
> VNInfo* NewVN = LHS.getNextValue(RangeMergingIn->valno->def,
> RangeMergingIn->valno->copy,
> LI.getVNInfoAllocator());
> - NewVN->hasPHIKill = true;
> - LiveRange NewRange(RangeMergingIn->start, RangeMergingIn->end,
> NewVN);
> +
> + for (LiveInterval::iterator RI = RHS.begin(), RE = RHS.end();
> + RI != RE; )
> + if (RI->valno == RHSVN) {
> + NewVN->hasPHIKill = true;
> + LiveRange NewRange(RI->start, RI->end, NewVN);
> + LHS.addRange(NewRange);
> +
> + unsigned start = RI->start;
> + unsigned end = RI->end;
> + ++RI;
> + RHS.removeRange(start, end, true);
> + } else
> + ++RI;
>
> - if (RHS.containsOneValue())
> + if (RHS.begin() == RHS.end())
> LI.removeInterval(RHS.reg);
> - else
> - RHS.removeRange(RangeMergingIn->start, RangeMergingIn->end,
> true);
> -
> - LHS.addRange(NewRange);
> }
>
> bool StrongPHIElimination::runOnMachineFunction(MachineFunction &Fn) {
>
>
> _______________________________________________
> 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