[llvm-dev] Debug Locations for Optimized Code
Hal Finkel via llvm-dev
llvm-dev at lists.llvm.org
Thu Dec 15 07:31:18 PST 2016
----- Original Message -----
> From: "Andrea Di Biagio" <andrea.dibiagio at gmail.com>
> To: "Paul Robinson" <paul.robinson at sony.com>
> Cc: "Hal Finkel" <hfinkel at anl.gov>, "David Blaikie"
> <dblaikie at gmail.com>, llvm-dev at lists.llvm.org
> Sent: Thursday, December 15, 2016 9:05:00 AM
> Subject: Re: [llvm-dev] Debug Locations for Optimized Code
> On Wed, Dec 7, 2016 at 3:39 PM, Robinson, Paul via llvm-dev <
> llvm-dev at lists.llvm.org > wrote:
> > >> I don't know what the right, if any, solution to this is - but I
>
> > >> thought I should bring it up in case you or anyone else wanted
> > >> to
>
> > >> puzzle it over & see if the competing needs/desires might need
> > >> to
> > >> be
>
> > >> considered.
>
> > > One thing that I recall being discussed was changing the way that
> > > we
>
> > > set the is_stmt flag in the DWARF line-table information. As I
>
> > > understand it, we currently set this flag for the first
> > > instruction
> > > in
>
> > > any sequence that is on the same line. This is, in part, why the
>
> > > debugger appears to jump around when stepping through code with
>
> > > speculated instructions, etc. If we did not do this for
> > > out-of-place
>
> > > instructions, then we might be able to keep for debugging
> > > information
>
> > > for tools while still providing a reasonable debugging
> > > experience.
>
> > When we are looking at a situation where an instruction is merely
> > *moved*
>
> > from one place to another, retaining the source location and having
> > a
>
> > less naïve statement-marking tactic could help the debugging
> > experience
>
> > without perturbing other consumers (although one still wonders
> > whether
>
> > profiles will get messed up in cases where e.g. a loop invariant
> > gets
>
> > hoisted out of a cold loop into a hot predecessor).
>
> It would be nice to have a way to mark the debugloc of an instruction
> which has been hoisted or sunk. Marked locations would not be
> treated as "reccomended breakpoint locations". That means, we could
> take advantage of that bit of information to decide how to emit the
> 'is_stmt' flag.
> For the purpose of sample pgo, is_stmt=0 would not be enough. So, it
> would be nice if we could encode that information within the
> discriminator. For example, we could emit a 'special' discriminator
> to notify consumers (example: autofdo) that the location should not
> be used for the purpose of pgo. This is obviously just an idea; not
> sure whether it makes sense, nor if it would negatively affect this
> RFC:
> http://lists.llvm.org/pipermail/llvm-dev/2016-October/106532.html .
I think that you could use that scheme: just encode a duplication factor of zero. Dehao, is that correct?
-Hal
> > When we are looking at a situation where two instructions are
> > *merged* or
>
> > *combined* into one, and the original two instructions had
> > different
>
> > source locations, that's a separate problem. In that case there is
> > no
>
> > single correct source location for the new instruction, and
> > typically
>
> > erasing the source location will give a better debugging experience
> > (also
>
> > a less misleading profile).
>
> For the record: revision 289661 (
> http://llvm.org/viewvc/llvm-project?view=revision&revision=289661 )
> added a new API to obtain a merged/combined location from multiple
> source locations. That said, the new functionality added at that
> revision is just a stub. So, it is still unclear at the moment how
> we could 'use' that in future.
> -Andrea
--
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161215/790fc35e/attachment.html>
More information about the llvm-dev
mailing list