[llvm] r217260 - Set the parent pointer of cloned DBG_VALUE instructions correctly.

David Blaikie dblaikie at gmail.com
Fri Sep 5 10:31:48 PDT 2014


On Sep 5, 2014 10:22 AM, "Adrian Prantl" <aprantl at apple.com> wrote:
>
> Author: adrian
> Date: Fri Sep  5 12:10:10 2014
> New Revision: 217260
>
> URL: http://llvm.org/viewvc/llvm-project?rev=217260&view=rev
> Log:
> Set the parent pointer of cloned DBG_VALUE instructions correctly.
> Fixes PR20523.
>
> When spilling variables onto the stack, spillVirtReg() is setting the
> parent pointer of the cloned DBG_VALUE intrinsic for the stack location
> to the parent pointer of the original intrinsic. MachineInstr parent
> pointers should however always point to the parent basic block.
>
> MBB is shadowing the MBB member variable. The instruction still ends up
> being inserted into the right basic block, because it's inserted after MI
> which serves as the iterator.

Perhaps we should assert that the iterator within the basic block?

> I failed at constructing a reliable testcase for this, see
> http://llvm.org/bugs/show_bug.cgi?id=20523 for a large testcases.
>
> Modified:
>     llvm/trunk/lib/CodeGen/RegAllocFast.cpp
>
> Modified: llvm/trunk/lib/CodeGen/RegAllocFast.cpp
> URL:
http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocFast.cpp?rev=217260&r1=217259&r2=217260&view=diff
>
==============================================================================
> --- llvm/trunk/lib/CodeGen/RegAllocFast.cpp (original)
> +++ llvm/trunk/lib/CodeGen/RegAllocFast.cpp Fri Sep  5 12:10:10 2014
> @@ -309,10 +309,10 @@ void RAFast::spillVirtReg(MachineBasicBl
>          DL = (--EI)->getDebugLoc();
>        } else
>          DL = MI->getDebugLoc();
> -      MachineBasicBlock *MBB = DBG->getParent();
>        MachineInstr *NewDV =
>            BuildMI(*MBB, MI, DL, TII->get(TargetOpcode::DBG_VALUE))
>                .addFrameIndex(FI).addImm(Offset).addMetadata(MDPtr);
> +      assert(NewDV->getParent() == MBB && "dangling parent pointer");

Maybe this assertion (in some form) could be moved into a more central
location so this invariant (that BuildMI functions are passed an iterator
into the same MBB - but maybe even below the build function, in the
insertion itself)

>        (void)NewDV;
>        DEBUG(dbgs() << "Inserting debug info due to spill:" << "\n" <<
*NewDV);
>      }
>
>
> _______________________________________________
> 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/20140905/7ced3e1a/attachment.html>


More information about the llvm-commits mailing list