[llvm-commits] [llvm] r122370 - /llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp

Chris Lattner clattner at apple.com
Tue Dec 21 18:06:29 PST 2010


On Dec 21, 2010, at 2:27 PM, Andrew Trick wrote:

> Author: atrick
> Date: Tue Dec 21 16:27:44 2010
> New Revision: 122370
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=122370&view=rev
> Log:
> In DelayForLiveRegsBottomUp, handle instructions that read and write
> the same physical register. Simplifies the fix from the previous
> checkin r122211.

Great, does this happen to fix PR8823?

-Chris

> 
> 
> Modified:
>    llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
> 
> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp?rev=122370&r1=122369&r2=122370&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Tue Dec 21 16:27:44 2010
> @@ -660,9 +660,12 @@
> 
>   SmallSet<unsigned, 4> RegAdded;
>   // If this node would clobber any "live" register, then it's not ready.
> +  //
> +  // If SU is the currently live definition of the same register that it uses,
> +  // then we are free to schedule it.
>   for (SUnit::pred_iterator I = SU->Preds.begin(), E = SU->Preds.end();
>        I != E; ++I) {
> -    if (I->isAssignedRegDep())
> +    if (I->isAssignedRegDep() && LiveRegDefs[I->getReg()] != SU)
>       CheckForLiveRegDef(I->getSUnit(), I->getReg(), LiveRegDefs,
>                          RegAdded, LRegs, TRI);
>   }
> @@ -703,20 +706,6 @@
>       CheckForLiveRegDef(SU, *Reg, LiveRegDefs, RegAdded, LRegs, TRI);
>   }
> 
> -
> -  // Okay, we now know all of the live registers that are defined by an
> -  // immediate predecessor.  It is ok to kill these registers if we are also
> -  // using it.
> -  for (SUnit::succ_iterator I = SU->Succs.begin(), E = SU->Succs.end();
> -       I != E; ++I) {
> -    if (I->isAssignedRegDep() &&
> -        LiveRegCycles[I->getReg()] == I->getSUnit()->getHeight()) {
> -      unsigned Reg = I->getReg();
> -      if (RegAdded.erase(Reg))
> -        LRegs.erase(std::find(LRegs.begin(), LRegs.end(), Reg));
> -    }
> -  }
> -
>   return !LRegs.empty();
> }
> 
> 
> 
> _______________________________________________
> 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