[llvm] r200941 - Track register pressure a bit more carefully (weird corner case).
Sean Silva
silvas at purdue.edu
Sat Feb 8 18:12:00 PST 2014
+ }
+ else {
Someone isn't using clang-format... :}
On Thu, Feb 6, 2014 at 2:20 PM, Andrew Trick <atrick at apple.com> wrote:
> Author: atrick
> Date: Thu Feb 6 13:20:41 2014
> New Revision: 200941
>
> URL: http://llvm.org/viewvc/llvm-project?rev=200941&view=rev
> Log:
> Track register pressure a bit more carefully (weird corner case).
>
> This solves a problem where a def machine operand has no uses but has
> not been marked dead. In this case, the initial RP analysis was being
> extra precise and determining from LiveIntervals the the register was
> actually dead. This caused us to omit the register from the RP
> tracker's block live out. That's all good, but the per-instruction
> summary still accounted for it as a valid def. This could cause an
> assertion in the tracker later when we underflow pressure.
>
> This is from a bug report on an out-of-tree target. It is not
> reproducible on well-behaved targets. I'm just making an obvious fix
> without unit test.
>
> Modified:
> llvm/trunk/lib/CodeGen/RegisterPressure.cpp
>
> Modified: llvm/trunk/lib/CodeGen/RegisterPressure.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegisterPressure.cpp?rev=200941&r1=200940&r2=200941&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/RegisterPressure.cpp (original)
> +++ llvm/trunk/lib/CodeGen/RegisterPressure.cpp Thu Feb 6 13:20:41 2014
> @@ -506,7 +506,14 @@ bool RegPressureTracker::recede(SmallVec
> DeadDef = LRQ.isDeadDef();
> }
> }
> - if (!DeadDef) {
> + if (DeadDef) {
> + // LiveIntervals knows this is a dead even though it's
> MachineOperand is
> + // not flagged as such. Since this register will not be recorded as
> + // live-out, increase its PDiff value to avoid underflowing
> pressure.
> + if (PDiff)
> + PDiff->addPressureChange(Reg, false, MRI);
> + }
> + else {
> if (LiveRegs.erase(Reg))
> decreaseRegPressure(Reg);
> else
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140208/6f4cd664/attachment.html>
More information about the llvm-commits
mailing list