[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