[PATCH] D49454: [DebugInfo] LowerDbgDeclare: Add derefs when handling CallInst users

Reid Kleckner via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 26 11:07:07 PDT 2018


rnk accepted this revision.
rnk added a comment.
This revision is now accepted and ready to land.

lgtm



================
Comment at: lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:4965-4971
   if (auto *FISDN = dyn_cast<FrameIndexSDNode>(N.getNode())) {
     // Construct a FrameIndexDbgValue for FrameIndexSDNodes so we can describe
     // stack slot locations as such instead of as indirectly addressed
     // locations.
-    return DAG.getFrameIndexDbgValue(Variable, Expr, FISDN->getIndex(), dl,
-                                     DbgSDNodeOrder);
+    return DAG.getFrameIndexDbgValue(Variable, Expr, FISDN->getIndex(),
+                                     /*IsIndirect*/ false, dl, DbgSDNodeOrder);
   }
----------------
vsk wrote:
> rnk wrote:
> > So, this should only be called in the case where the value of the variable is the address of some stack location, i.e. `int x = 0; int *px = &x;`, after optimization, we'll have this direct frame index dbg.value for px. I think that source fragment in a comment would help clarify why IsIndirect is false.
> Isn't there one more case, where the value of the variable lives inside of some stack location?
> 
> To build on your example, I think the case you described looks like this:
> 
>   dbg.value(i32* %px, !"int *px", !DIExpression())
> 
> And the one I'm pointing out looks like this:
> 
>   dbg.value(i32* %px, !"int x", !DIExpression(DW_OP_deref))
Right, yes, which is the original motivating example for inserting dbg.values before calls.


https://reviews.llvm.org/D49454





More information about the llvm-commits mailing list