[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