This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] Add discriminators to DWARF line table

On Tue, Apr 21, 2009 at 04:16:00PM -0700, Cary Coutant wrote:
> This patch adds a discriminator field to the basic block structure,
> and assigns discriminators during gimplification. Whenever we add an
> edge between two basic blocks where the end of the "from" block and
> the entry of the "to" block have the same source position, we assign a
> new discriminator to the "to" block. This value gets picked up at the
> end of the compilation and added to the .loc directive in the assembly
> output. I've added a configure check to make sure that discriminator
> support is available in the target assembler.

Why is this only necessary when the edge source and destination are
part of the same line?  Imagine a conditional branch on line 5:

line 5 -> line 6 first half -> line 7
line 5 -> line 6 second half -> line 7

If we don't discriminate between the two 'line 6' blocks, then
profiling won't tell us which edge was taken out of line 5.  I
don't have a straightforward C example, but I'm sure one could be
constructed given optimization.  Perhaps:

  x = (y > 0);
  j = x ? foo () : bar ();
  done ();

Anyway, you get the picture.

Daniel Jacobowitz

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]