public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Mark Mitchell <mark@codesourcery.com>
To: Alexandre Oliva <aoliva@redhat.com>
Cc: Ian Lance Taylor <iant@google.com>,
	  Richard Guenther <richard.guenther@gmail.com>,
	  gcc-patches@gcc.gnu.org,  gcc@gcc.gnu.org
Subject: Re: Designs for better debug info in GCC
Date: Tue, 13 Nov 2007 10:30:00 -0000	[thread overview]
Message-ID: <473941C5.8090202@codesourcery.com> (raw)
In-Reply-To: <oroddzxsfy.fsf@oliva.athome.lsd.ic.unicamp.br>

Alexandre Oliva wrote:

>> What I don't understand is how it's actually going to work.  What
>> are the notes you're inserting?
> 
> They're always of the form
> 
>   DEBUG user-variable = expression

Good, I understand that now.

Why is this better than associating user variables with assignments?  In
other words, if we have:

  X = E;

where X is the location in which a user variable V is presently being
stored, we could just put a note on the assignment that says "assigns to
user variable V".  If X is, for example, a hard register, and we're now
clobbering the value of a user variable V (so that the value of the
variable is no longer available there), we can add a note that says
"clobbers user variable V".  (The value might still be available
somewhere else; we can figure that out by seeing if any instruction that
is annotated as setting V dominates this instruction, without an
intervening clobbering of that location.)

> That said, growing SET to add to it a list of variables (or components
> thereof) that the variable is assigned to could be made to work, to
> some extent.  But when you optimize away such a set, you'd still have
> to keep the note around

Why?  It seems to me that if we're no longer doing the assignment, then
the location where the value of the user variable can be found (if any)
is not changing at this point.

> (set (reg i) (const_int 3)) ;; assigns to i
> (set (reg P1) (reg i))
> (call (mem f))
> (set (reg i) (const_int 7)) ;; assigns to i
> (set (reg i) (const_int 2)) ;; assigns to i
> (set (reg P1) (reg i))
> (call (mem g))
> 
> could have been optimized to:
> 
> (set (reg P1) (const_int 3))
> (call (mem f))
> (set (reg P1) (const_int 2))
> (call (mem g))
> 
> and then you wouldn't have any debug information left for variable i.

Actually, you would, in the method I'm making up.  In particular, both
of the first two lines in the top example (setting "i" and setting "P1")
would be marked as providing the value of the user variable "i".  The
first line obviously has the value of "i", so we would have a "value of
i" note.  The second would also have a "value of i" note because its
copying a value with such a note.

What I'm suggesting is that this is something akin to a dataflow
problem.  We start by marking user variables, in the original TREE
representation.  Then, any time we copy the value of a user variable, we
know that what we're doing is providing another place where we can find
the value of that user variable.  Then, when generating debug
information, for every program region, we can find the location(s) where
the value of the user variable is available, and we can output any one
of those locations for the debugger.  Now, of course, we can generate
more compact information by trying to use the same location as often as
possible, but that's just an optimization problem.

This method gives us accurate debug information, in the sense that if we
say that the value of V is at location X, then it is in fact there, and
the value there is a value assigned to V.  It does not necessarily give
us complete information, though, in that there may be times when the
value is somewhere and we don't realize it.  Like, if:

  x = y + 3;
  f(x);

is optimized to:

  f(y + 3)

Then, right before the call to "f", we might not know that the value of
"x" is available, or we might say that "x" has a previous value.

As a special case of incompleteness, this fails utterly with respect to
variables whose values are constants if those variables are then
optimized away.  If there's no location holding the constant, then the
method I've proposed will say that the value is unavailable -- rather
than cleverly telling the debugger that the value is a constant.  I
don't see that as an unreasonable limitation when debugging optimized
code, but that's open for debate.

I'm not claiming this is better than what you're suggesting.  I'm just
throwing it out there.

-- 
Mark Mitchell
CodeSourcery
mark@codesourcery.com
(650) 331-3385 x713

  parent reply	other threads:[~2007-11-13  6:19 UTC|newest]

Thread overview: 150+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-05  8:28 [vta] don't let debug insns get in the way of simple vect reduction Alexandre Oliva
2007-11-05 11:27 ` Richard Guenther
2007-11-07  7:52   ` Designs for better debug info in GCC (was: Re: [vta] don't let debug insns get in the way of simple vect reduction) Alexandre Oliva
2007-11-07 16:16     ` Ian Lance Taylor
2007-11-07 19:11       ` Designs for better debug info in GCC Alexandre Oliva
2007-11-07 22:57         ` Ian Lance Taylor
2007-11-07 23:05           ` Daniel Jacobowitz
2007-11-08  0:00           ` Mark Mitchell
2007-11-08  0:15             ` David Edelsohn
2007-11-08  0:35               ` Mark Mitchell
2007-11-08  5:14                 ` Alexandre Oliva
2007-11-08 18:28                   ` Alexandre Oliva
2007-11-22 23:07                 ` Frank Ch. Eigler
2007-11-22 23:13                   ` Richard Guenther
2007-11-23 20:53                     ` Frank Ch. Eigler
2007-11-24  1:53                       ` Alexandre Oliva
2007-11-24 15:02                     ` Robert Dewar
2007-11-08  5:15               ` Alexandre Oliva
2007-11-08 18:18                 ` Alexandre Oliva
2007-11-08 19:46                 ` Andrew Pinski
2007-11-08 20:39                   ` Alexandre Oliva
2007-11-09  8:39                   ` Robert Dewar
2007-11-08  5:44             ` Alexandre Oliva
2007-11-08 18:37               ` Alexandre Oliva
2007-11-08 19:13               ` Mark Mitchell
2007-11-08 19:13                 ` David Daney
2007-11-08 19:17                   ` Mark Mitchell
2007-11-09  2:09                 ` Alexandre Oliva
2007-11-12  4:49                   ` Mark Mitchell
2007-11-12 18:45                     ` Alexandre Oliva
2007-11-12 18:49                       ` Joe Buck
2007-11-25  6:57                         ` Alexandre Oliva
2007-11-25 12:09                           ` Richard Kenner
2007-11-12 18:53                       ` Ian Lance Taylor
2007-11-24  2:12                         ` Alexandre Oliva
2007-11-13 10:30                       ` Mark Mitchell [this message]
2007-11-24  1:54                         ` Alexandre Oliva
2007-11-13 15:30                       ` Michael Matz
2007-11-24  2:00                         ` Alexandre Oliva
2007-11-26 21:01                           ` Michael Matz
2007-11-27  5:31                             ` Alexandre Oliva
2007-11-27 20:31                               ` Michael Matz
2007-11-27 21:44                                 ` Alexandre Oliva
2007-11-08  9:54             ` Richard Guenther
2007-11-08  5:01           ` Alexandre Oliva
2007-11-08 18:15             ` Alexandre Oliva
2007-11-08 19:13             ` Ian Lance Taylor
2007-11-08 20:27               ` Alexandre Oliva
2007-11-08 21:26                 ` Ian Lance Taylor
2007-11-09  9:53                   ` Robert Dewar
2007-11-12  5:36                     ` Mark Mitchell
2007-11-12 17:34                       ` Alexandre Oliva
2007-11-12 17:54                         ` Mark Mitchell
2007-11-24  1:55                           ` Alexandre Oliva
2007-11-26  1:08                             ` Mark Mitchell
2007-12-05 14:22                               ` Diego Novillo
2007-12-05 22:10                                 ` Joe Buck
2007-12-15 21:41                                 ` Alexandre Oliva
2007-12-16  3:15                                   ` Daniel Berlin
2007-12-16 13:09                                     ` Alexandre Oliva
2007-12-17  1:27                                       ` Daniel Berlin
2007-12-17  4:20                                         ` Joe Buck
2007-12-17  8:13                                           ` Geert Bosch
2007-12-18  1:24                                             ` Alexandre Oliva
2007-12-18  1:29                                               ` Joe Buck
2007-12-18  4:40                                                 ` Alexandre Oliva
2007-12-18  7:42                                                   ` Robert Dewar
2007-12-18  8:09                                                     ` Alexandre Oliva
2007-12-18 14:01                                                       ` Robert Dewar
2007-12-18 21:20                                                         ` Alexandre Oliva
2007-12-18  7:35                                               ` Robert Dewar
2007-12-18  8:34                                                 ` Alexandre Oliva
2007-12-17 18:36                                           ` Alexandre Oliva
2007-12-17 17:59                                         ` Alexandre Oliva
2007-12-17 18:02                                           ` Diego Novillo
2007-12-17 20:34                                             ` Alexandre Oliva
2007-12-17 20:45                                               ` Diego Novillo
2007-12-18  1:02                                                 ` Alexandre Oliva
2007-12-18  1:14                                                   ` Diego Novillo
2007-12-18  5:21                                                     ` Alexandre Oliva
2007-12-18  9:10                                                       ` Alexandre Oliva
2007-12-18 13:20                                                         ` Diego Novillo
2007-12-18 15:42                                                           ` Alexandre Oliva
2007-12-18 22:43                                                         ` Daniel Berlin
2007-12-19  6:07                                                           ` Alexandre Oliva
2007-12-19  8:39                                                             ` Daniel Berlin
2007-12-19 16:12                                                               ` Daniel Berlin
2007-12-19 16:36                                                                 ` Andrew MacLeod
2007-12-19 19:49                                                                   ` Daniel Berlin
2007-12-19 20:00                                                                 ` Andrew MacLeod
2007-12-19 20:57                                                                   ` Daniel Berlin
2007-12-19 20:07                                                                 ` Alexandre Oliva
2007-12-19 22:00                                                                   ` Daniel Berlin
2007-12-20  9:26                                                                     ` Alexandre Oliva
2007-12-20 17:04                                                                       ` Ian Lance Taylor
2007-12-20 20:53                                                                         ` Alexandre Oliva
2007-12-19 20:27                                                               ` Alexandre Oliva
2007-12-18 23:35                                                         ` Daniel Berlin
2007-12-19  5:50                                                           ` Alexandre Oliva
2007-12-19 16:35                                                             ` Daniel Berlin
2007-12-19 19:46                                                               ` Alexandre Oliva
2007-12-19 20:39                                                                 ` Daniel Jacobowitz
2007-12-31 15:40                                               ` Richard Guenther
2007-12-16 21:42                                   ` Mark Mitchell
2007-11-09  9:55                   ` Seongbae Park (박성배, 朴成培)
2007-11-09 11:08                     ` Robert Dewar
2007-11-08  8:58           ` Paolo Bonzini
2007-11-07 17:20     ` Designs for better debug info in GCC (was: Re: [vta] don't let debug insns get in the way of simple vect reduction) Michael Matz
2007-11-07 18:45       ` Designs for better debug info in GCC Alexandre Oliva
2007-11-08 10:23         ` Michael Matz
2007-11-08 14:02           ` Robert Dewar
2007-11-08 15:13             ` H.J. Lu
2007-11-08 16:11             ` Michael Matz
2007-11-08 17:48               ` Alexandre Oliva
2007-11-09 12:46                 ` Michael Matz
2007-11-12 18:31                   ` Alexandre Oliva
2007-11-13 13:56                     ` Michael Matz
2007-11-24  2:34                       ` Alexandre Oliva
2007-11-26 20:56                         ` Michael Matz
2007-11-27  5:30                           ` Alexandre Oliva
2007-11-08 16:37             ` Alexandre Oliva
2007-11-09  1:26               ` Robert Dewar
2007-11-12 16:56                 ` Alexandre Oliva
2007-11-09  1:26               ` Joe Buck
2007-11-09 14:53                 ` Daniel Jacobowitz
2007-11-09 17:06                   ` Robert Dewar
2007-11-08 16:32           ` Alexandre Oliva
2007-11-12 21:04 Steven Bosscher
2007-11-24  1:37 ` Alexandre Oliva
2007-11-24  2:35   ` Steven Bosscher
2007-11-24 15:08     ` Alexandre Oliva
2007-11-24 15:18       ` Richard Kenner
2007-11-24 20:11         ` Alexandre Oliva
2007-11-24 20:46           ` Bernd Schmidt
2007-11-25  0:42             ` Alexandre Oliva
2007-11-25  7:19               ` Richard Guenther
2007-11-25 14:30                 ` Alexandre Oliva
2007-11-25 14:46                   ` Richard Guenther
2007-11-26 10:11                     ` Alexandre Oliva
2007-11-26 12:26                       ` Richard Guenther
2007-11-26 18:58                         ` Alexandre Oliva
2007-11-25 14:22               ` Alexandre Oliva
2007-11-24 20:48           ` Richard Kenner
2007-11-25  0:02             ` Alexandre Oliva
2007-11-25 14:23           ` Robert Dewar
2007-12-15 20:32             ` Alexandre Oliva
2007-12-15 21:41               ` Robert Dewar
2007-11-24 16:45       ` Steven Bosscher
2007-11-24 18:50         ` Alexandre Oliva
2007-11-24 20:21           ` Richard Guenther

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=473941C5.8090202@codesourcery.com \
    --to=mark@codesourcery.com \
    --cc=aoliva@redhat.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=gcc@gcc.gnu.org \
    --cc=iant@google.com \
    --cc=richard.guenther@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).