[PATCH] ADCE: Remove debug info intrinsics in dead scopes

Duncan P. N. Exon Smith via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 29 22:59:02 PDT 2016


+Mehdi

> On 2016-Mar-29, at 22:29, David Blaikie <dblaikie at gmail.com> wrote:
> 
> Does it make sense to do this in ADCE and ADCE only? Lots of code can remove instructions & could be the place where a scope ceases to exist, so it seems strange to make this change only here, doesn't it?

I thought about the algorithm, and then looked for a pass that was
already doing something similar.  ADCE seemed to be good fit since it
also needed three passes through the function.

I had a look with Mehdi at the pass pipeline, and ADCE is run almost
at the end.  It is run just before exit for -flto=thin, too.

> I'm assuming you want to do this to reduce IR size early on? (pre-(Thin)LTO merge?) Maybe as a separate pass?
> 
> If it's just to reduce debug info output - maybe better to just delay until IR generation? (perhaps we already do this, I forget?)

Open to having a separate pass, but since ADCE was such a good fit
(it similarly needed three passes through the IR, which I could just
piggy-back on) and happened to run at the right times I decided not to
think any further.

> On Tue, Mar 29, 2016 at 12:34 PM, Duncan P. N. Exon Smith <dexonsmith at apple.com> wrote:
> During ADCE, track which debug info scopes still have live references
> from the code, and delete debug info intrinsics for the dead ones.
> 
> These intrinsics describe the locations of variables (in registers or
> stack slots).  If there's no code left corresponding to a variable's
> scope, then there's no way to reference the variable in the debugger and
> it doesn't matter what its value is.
> 
> I add a DEBUG printout when the described location in an SSA register,
> in case it helps some trying to track down why locations get lost.
> However, we still delete these; the root problem is that the scope
> itself isn't attached to any real code.
> 
> 



More information about the llvm-commits mailing list