public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* GCC Status Report (2004-03-21)
@ 2004-03-22  0:49 Mark Mitchell
  2004-03-22  7:56 ` Hans-Peter Nilsson
  2004-03-22 15:27 ` Jan Hubicka
  0 siblings, 2 replies; 12+ messages in thread
From: Mark Mitchell @ 2004-03-22  0:49 UTC (permalink / raw)
  To: gcc, bkoz, jakub, jason, rth, David.Billinghurst


GCC 3.4
=======

If you are in the to-list for this email, I'm hoping that you'll be
able to help with a critical GCC 3.4 problem.

There are now 14 regressions targeted at 3.4.0, which is a substantial
improvement from the 48 as of March 9th.  Some of these have patches
which have been approved for 3.4, but not yet checked in.  So, the
real number is more like 8 or 9.

Some of that is due to retargeting bugs at later releases, but a lot
of it is due to important bugs being fixed. Yay!

Here are the two biggest issues remaining for the 3.4.0 release:

* Benjamin has indicated that he wants to make changes to the V3 ABI
  to future-proof it for changes that have already been made on th
  emainline.  We're waiting for those changes to be completed.

* Eric and I are iterating on fixes for the RTX_UNCHANGING_P
  code-generation problems.

Here is a list of people who I am hoping will help by looking at one
or two remaining GCC 3.4 PRs, which are still very important, although
somewhat secondary compared to the two items mentioned above.

* Jakub Jelinek

  PR 14069 is a case where we go into an infinite loop on invalid
  code.  I asked you to look at this PR on 2004-02-28; do you have any
  news?

* Jason Merill

  PR 13294 is an issue with __attribute__((strong)) for namespaces.
  I'm not sure whether this is really a bug, or not, but since
  Benjamin is striving for library ABI compatibility, we need to know
  one way or the other.  Would you please take a look?

* Richard Henderson

  PR 11527 is a designated initializer problem, apparently relating to
  one of your patches.  Any news?

  Also, would you please review Eric's patch for 13985, which is here:

    http://gcc.gnu.org/ml/gcc-patches/2004-03/msg00672.html

  Please update the PR with your thoughts.

* Jan Hubicka

  PR 13974 relates to cases where GCC 3.4 emits bad debugging
  information.  This is an important PR because it's going to affect
  people's ability to use GCC 3.4 for development.  From looking at
  the PR, it looks like you and Dan Jacobowitz have reached some kind
  of consensus, and on 2004-03-14 you indicated you'd have patch
  "Monday or Tuesday".  Is that patch available?  Has Dan looked it
  over and confirmed it fixes the problem?

* David Billinghurst

  PR 14207 is a problem with building with an o32 multilib in GCC 3.4.
  Can you confirm that this problem have been fixed in GCC 3.4?

Reiterating from last time:

Henceforth, please do not make any non-documentation check-ins to the
3.4 branch without my explicit approval.  To get that approval, please
do *not* send me mail directly.  Instead, add your patch to the
relevant PR, which must be targeted at 3.r, and add me to the CC list
for the PR.  Note that this procedure implies that if there is no PR
targeted at 3.4 I will not accept the patch.

Furthermore, please do not create any new PRs targeted for 3.4 without
my explicit permission.  If it's a regression, target it for 3.4.1.
If you think it might need to be fixed in 3.4, add me to the CC list,
and add a note asking me to move back the target.  Please do not do
this unless the PR is wrong-code, ICE-on-valid, or bootstrap for a
primary target.  New PRs referring to other categories of error are
simply not going to get fixed for 3.4.

GCC 3.5
=======

In a holding pattern until tree-ssa merge is complete.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: GCC Status Report (2004-03-21)
  2004-03-22  0:49 GCC Status Report (2004-03-21) Mark Mitchell
@ 2004-03-22  7:56 ` Hans-Peter Nilsson
  2004-03-23 17:10   ` Mark Mitchell
  2004-03-22 15:27 ` Jan Hubicka
  1 sibling, 1 reply; 12+ messages in thread
From: Hans-Peter Nilsson @ 2004-03-22  7:56 UTC (permalink / raw)
  To: mark; +Cc: gcc

> Date: Sun, 21 Mar 2004 12:27:28 -0800
> From: Mark Mitchell <mark@codesourcery.com>

> Henceforth, please do not make any non-documentation check-ins to the
> 3.4 branch without my explicit approval.  To get that approval, please
> do *not* send me mail directly.  Instead, add your patch to the
> relevant PR, which must be targeted at 3.r, and add me to the CC list
> for the PR.  Note that this procedure implies that if there is no PR
> targeted at 3.4 I will not accept the patch.
> 
> Furthermore, please do not create any new PRs targeted for 3.4 without
> my explicit permission.  If it's a regression, target it for 3.4.1.
> If you think it might need to be fixed in 3.4, add me to the CC list,
> and add a note asking me to move back the target.  Please do not do
> this unless the PR is wrong-code, ICE-on-valid, or bootstrap for a
> primary target.  New PRs referring to other categories of error are
> simply not going to get fixed for 3.4.

Sounds like I made a boo-boo when I created PR target/14676,
then (it's targeted at 3.4.0): libstdc++-v3 broke for cris-*
when massive changes including bugs were imported from main
trunk.  Due to branch restrictions I can't have it trivially
fixed for 3.4.0 because it's not bootstrap on a primary target?
I must be misunderstanding.  Oh well, I moved the target to
3.4.1 as per instructions.  Can't say *I* don't play by the
rules.

On a more productive note, I really suggest trusting target
maintainers for target-local fixes like this.  Please?  Perhaps
even *explicitly* allowing non-regression target-local fixes, as
for the 3.3 branch.  Alternatively, please enforce the check-in
policies, only that'd be vastly less productive.

brgds, H-P

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: GCC Status Report (2004-03-21)
  2004-03-22  0:49 GCC Status Report (2004-03-21) Mark Mitchell
  2004-03-22  7:56 ` Hans-Peter Nilsson
@ 2004-03-22 15:27 ` Jan Hubicka
  2004-03-23 17:25   ` Mark Mitchell
  1 sibling, 1 reply; 12+ messages in thread
From: Jan Hubicka @ 2004-03-22 15:27 UTC (permalink / raw)
  To: Mark Mitchell; +Cc: gcc, bkoz, jakub, jason, rth, David.Billinghurst

> 
> GCC 3.4
> =======
> * Jan Hubicka
> 
>   PR 13974 relates to cases where GCC 3.4 emits bad debugging
>   information.  This is an important PR because it's going to affect
>   people's ability to use GCC 3.4 for development.  From looking at
>   the PR, it looks like you and Dan Jacobowitz have reached some kind
>   of consensus, and on 2004-03-14 you indicated you'd have patch
>   "Monday or Tuesday".  Is that patch available?  Has Dan looked it
>   over and confirmed it fixes the problem?
Sorry for being late, somehow the patch got suck in testing scripts and
I managed to not attach it to the history.

The patch makes debug information with optimization less accurate, at
least in my "gcov" metric right now (I do gcov with and without
optimization and diff the output).  I am not sure how to test the
patch more throroughly as the problem mentioned in PR is not caught by
my testing (the line number is one instruction off that makes no
difference for gcov.  The concept is little bit more safe and of course
i can go other way around and simply modify all the
emit_insn_before/after calls that do not relate to the specified
instruction to use different name.

I am not sure how far we want to go for 3.4.  The patch attached just
modify the existing functions without attempting to do the
classification.

2004-03-22  Jan Hubicka  <jh@suse.cz>
	* emit_rtl.c (emit_*_insn_before, emit_*_insn_after): Set locators
	according to the specified instruction.
Index: emit-rtl.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/emit-rtl.c,v
retrieving revision 1.383
diff -c -3 -p -r1.383 emit-rtl.c
*** emit-rtl.c	6 Mar 2004 01:21:26 -0000	1.383
--- emit-rtl.c	17 Mar 2004 12:14:25 -0000
*************** emit_insn_before (rtx x, rtx before)
*** 3919,3924 ****
--- 3919,3925 ----
  {
    rtx last = before;
    rtx insn;
+   rtx first = PREV_INSN (before);
  
  #ifdef ENABLE_RTL_CHECKING
    if (before == NULL_RTX)
*************** emit_insn_before (rtx x, rtx before)
*** 3957,3962 ****
--- 3958,3976 ----
        add_insn_before (last, before);
        break;
      }
+   if (active_insn_p (before) && INSN_LOCATOR (before))
+     {
+       int loc = INSN_LOCATOR (before);
+       first = NEXT_INSN (first);
+       while (1)
+ 	{
+ 	  if (active_insn_p (first) && ! INSN_LOCATOR (first))
+ 	    INSN_LOCATOR (first) = loc;
+ 	  if (first == last)
+ 	    break;
+ 	  first = NEXT_INSN (first);
+ 	}
+     }
  
    return last;
  }
*************** rtx
*** 3968,3973 ****
--- 3982,3988 ----
  emit_jump_insn_before (rtx x, rtx before)
  {
    rtx insn, last = NULL_RTX;
+   rtx first = PREV_INSN (before);
  
  #ifdef ENABLE_RTL_CHECKING
    if (before == NULL_RTX)
*************** emit_jump_insn_before (rtx x, rtx before
*** 4003,4008 ****
--- 4018,4036 ----
        add_insn_before (last, before);
        break;
      }
+   if (active_insn_p (before) && INSN_LOCATOR (before))
+     {
+       int loc = INSN_LOCATOR (before);
+       first = NEXT_INSN (first);
+       while (1)
+ 	{
+ 	  if (active_insn_p (first) && ! INSN_LOCATOR (first))
+ 	    INSN_LOCATOR (first) = loc;
+ 	  if (first == last)
+ 	    break;
+ 	  first = NEXT_INSN (first);
+ 	}
+     }
  
    return last;
  }
*************** rtx
*** 4014,4019 ****
--- 4042,4048 ----
  emit_call_insn_before (rtx x, rtx before)
  {
    rtx last = NULL_RTX, insn;
+   rtx first = PREV_INSN (before);
  
  #ifdef ENABLE_RTL_CHECKING
    if (before == NULL_RTX)
*************** emit_call_insn_before (rtx x, rtx before
*** 4049,4054 ****
--- 4078,4096 ----
        add_insn_before (last, before);
        break;
      }
+   if (active_insn_p (before) && INSN_LOCATOR (before))
+     {
+       int loc = INSN_LOCATOR (before);
+       first = NEXT_INSN (first);
+       while (1)
+ 	{
+ 	  if (active_insn_p (first) && ! INSN_LOCATOR (first))
+ 	    INSN_LOCATOR (first) = loc;
+ 	  if (first == last)
+ 	    break;
+ 	  first = NEXT_INSN (first);
+ 	}
+     }
  
    return last;
  }
*************** emit_insn_after (rtx x, rtx after)
*** 4176,4181 ****
--- 4218,4235 ----
        add_insn_after (last, after);
        break;
      }
+   if (active_insn_p (after) && INSN_LOCATOR (after))
+     {
+       int loc = INSN_LOCATOR (after);
+       while (1)
+ 	{
+ 	  if (active_insn_p (after) && ! INSN_LOCATOR (after))
+ 	    INSN_LOCATOR (after) = loc;
+ 	  if (after == last)
+ 	    break;
+ 	  after = NEXT_INSN (after);
+ 	}
+     }
  
    return last;
  }
*************** emit_jump_insn_after (rtx x, rtx after)
*** 4232,4237 ****
--- 4286,4303 ----
        add_insn_after (last, after);
        break;
      }
+   if (active_insn_p (after) && INSN_LOCATOR (after))
+     {
+       int loc = INSN_LOCATOR (after);
+       while (1)
+ 	{
+ 	  if (active_insn_p (after) && ! INSN_LOCATOR (after))
+ 	    INSN_LOCATOR (after) = loc;
+ 	  if (after == last)
+ 	    break;
+ 	  after = NEXT_INSN (after);
+ 	}
+     }
  
    return last;
  }
*************** emit_call_insn_after (rtx x, rtx after)
*** 4270,4275 ****
--- 4336,4353 ----
        last = make_call_insn_raw (x);
        add_insn_after (last, after);
        break;
+     }
+   if (active_insn_p (after) && INSN_LOCATOR (after))
+     {
+       int loc = INSN_LOCATOR (after);
+       while (1)
+ 	{
+ 	  if (active_insn_p (after) && ! INSN_LOCATOR (after))
+ 	    INSN_LOCATOR (after) = loc;
+ 	  if (after == last)
+ 	    break;
+ 	  after = NEXT_INSN (after);
+ 	}
      }
  
    return last;

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: GCC Status Report (2004-03-21)
  2004-03-22  7:56 ` Hans-Peter Nilsson
@ 2004-03-23 17:10   ` Mark Mitchell
  0 siblings, 0 replies; 12+ messages in thread
From: Mark Mitchell @ 2004-03-23 17:10 UTC (permalink / raw)
  To: Hans-Peter Nilsson; +Cc: gcc


>On a more productive note, I really suggest trusting target
>maintainers for target-local fixes like this.  Please? 
>
It's not a question of trust; it's a question of responsibility.  I am 
responsible for the release, and therefore I must make sure -- in these 
final stages -- that I know what bits are going in.  I also want to 
discourage people from making changes at the very last minute; we wall 
tend to make mistakes in that situation.  I am, however, quite liberal 
with respect to granting permission to target maintainers to make 
target-specific changes.

-- 
Mark Mitchell
CodeSourcery, LLC
(916) 791-8304
mark@codesourcery.com

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: GCC Status Report (2004-03-21)
  2004-03-22 15:27 ` Jan Hubicka
@ 2004-03-23 17:25   ` Mark Mitchell
  2004-03-23 19:06     ` Daniel Jacobowitz
  0 siblings, 1 reply; 12+ messages in thread
From: Mark Mitchell @ 2004-03-23 17:25 UTC (permalink / raw)
  To: Jan Hubicka; +Cc: gcc, bkoz, jakub, jason, rth, David.Billinghurst, dan

Jan Hubicka wrote:

>>GCC 3.4
>>=======
>>* Jan Hubicka
>>
>>  PR 13974 relates to cases where GCC 3.4 emits bad debugging
>>  information.  This is an important PR because it's going to affect
>>  people's ability to use GCC 3.4 for development.  From looking at
>>  the PR, it looks like you and Dan Jacobowitz have reached some kind
>>  of consensus, and on 2004-03-14 you indicated you'd have patch
>>  "Monday or Tuesday".  Is that patch available?  Has Dan looked it
>>  over and confirmed it fixes the problem?
>>    
>>
>Sorry for being late, somehow the patch got suck in testing scripts and
>I managed to not attach it to the history.
>  
>
Dan (Jacobowitz), what say you about this patch and/or its empirical 
behavior in GDB-land?

>2004-03-22  Jan Hubicka  <jh@suse.cz>
>	* emit_rtl.c (emit_*_insn_before, emit_*_insn_after): Set locators
>	according to the specified instruction.
>Index: emit-rtl.c
>===================================================================
>RCS file: /cvs/gcc/gcc/gcc/emit-rtl.c,v
>retrieving revision 1.383
>diff -c -3 -p -r1.383 emit-rtl.c
>*** emit-rtl.c	6 Mar 2004 01:21:26 -0000	1.383
>--- emit-rtl.c	17 Mar 2004 12:14:25 -0000
>*************** emit_insn_before (rtx x, rtx before)
>*** 3919,3924 ****
>--- 3919,3925 ----
>  {
>    rtx last = before;
>    rtx insn;
>+   rtx first = PREV_INSN (before);
>  
>  #ifdef ENABLE_RTL_CHECKING
>    if (before == NULL_RTX)
>*************** emit_insn_before (rtx x, rtx before)
>*** 3957,3962 ****
>--- 3958,3976 ----
>        add_insn_before (last, before);
>        break;
>      }
>+   if (active_insn_p (before) && INSN_LOCATOR (before))
>+     {
>+       int loc = INSN_LOCATOR (before);
>+       first = NEXT_INSN (first);
>+       while (1)
>+ 	{
>+ 	  if (active_insn_p (first) && ! INSN_LOCATOR (first))
>+ 	    INSN_LOCATOR (first) = loc;
>+ 	  if (first == last)
>+ 	    break;
>+ 	  first = NEXT_INSN (first);
>+ 	}
>+     }
>  
>    return last;
>  }
>*************** rtx
>*** 3968,3973 ****
>--- 3982,3988 ----
>  emit_jump_insn_before (rtx x, rtx before)
>  {
>    rtx insn, last = NULL_RTX;
>+   rtx first = PREV_INSN (before);
>  
>  #ifdef ENABLE_RTL_CHECKING
>    if (before == NULL_RTX)
>*************** emit_jump_insn_before (rtx x, rtx before
>*** 4003,4008 ****
>--- 4018,4036 ----
>        add_insn_before (last, before);
>        break;
>      }
>+   if (active_insn_p (before) && INSN_LOCATOR (before))
>+     {
>+       int loc = INSN_LOCATOR (before);
>+       first = NEXT_INSN (first);
>+       while (1)
>+ 	{
>+ 	  if (active_insn_p (first) && ! INSN_LOCATOR (first))
>+ 	    INSN_LOCATOR (first) = loc;
>+ 	  if (first == last)
>+ 	    break;
>+ 	  first = NEXT_INSN (first);
>+ 	}
>+     }
>  
>    return last;
>  }
>*************** rtx
>*** 4014,4019 ****
>--- 4042,4048 ----
>  emit_call_insn_before (rtx x, rtx before)
>  {
>    rtx last = NULL_RTX, insn;
>+   rtx first = PREV_INSN (before);
>  
>  #ifdef ENABLE_RTL_CHECKING
>    if (before == NULL_RTX)
>*************** emit_call_insn_before (rtx x, rtx before
>*** 4049,4054 ****
>--- 4078,4096 ----
>        add_insn_before (last, before);
>        break;
>      }
>+   if (active_insn_p (before) && INSN_LOCATOR (before))
>+     {
>+       int loc = INSN_LOCATOR (before);
>+       first = NEXT_INSN (first);
>+       while (1)
>+ 	{
>+ 	  if (active_insn_p (first) && ! INSN_LOCATOR (first))
>+ 	    INSN_LOCATOR (first) = loc;
>+ 	  if (first == last)
>+ 	    break;
>+ 	  first = NEXT_INSN (first);
>+ 	}
>+     }
>  
>    return last;
>  }
>*************** emit_insn_after (rtx x, rtx after)
>*** 4176,4181 ****
>--- 4218,4235 ----
>        add_insn_after (last, after);
>        break;
>      }
>+   if (active_insn_p (after) && INSN_LOCATOR (after))
>+     {
>+       int loc = INSN_LOCATOR (after);
>+       while (1)
>+ 	{
>+ 	  if (active_insn_p (after) && ! INSN_LOCATOR (after))
>+ 	    INSN_LOCATOR (after) = loc;
>+ 	  if (after == last)
>+ 	    break;
>+ 	  after = NEXT_INSN (after);
>+ 	}
>+     }
>  
>    return last;
>  }
>*************** emit_jump_insn_after (rtx x, rtx after)
>*** 4232,4237 ****
>--- 4286,4303 ----
>        add_insn_after (last, after);
>        break;
>      }
>+   if (active_insn_p (after) && INSN_LOCATOR (after))
>+     {
>+       int loc = INSN_LOCATOR (after);
>+       while (1)
>+ 	{
>+ 	  if (active_insn_p (after) && ! INSN_LOCATOR (after))
>+ 	    INSN_LOCATOR (after) = loc;
>+ 	  if (after == last)
>+ 	    break;
>+ 	  after = NEXT_INSN (after);
>+ 	}
>+     }
>  
>    return last;
>  }
>*************** emit_call_insn_after (rtx x, rtx after)
>*** 4270,4275 ****
>--- 4336,4353 ----
>        last = make_call_insn_raw (x);
>        add_insn_after (last, after);
>        break;
>+     }
>+   if (active_insn_p (after) && INSN_LOCATOR (after))
>+     {
>+       int loc = INSN_LOCATOR (after);
>+       while (1)
>+ 	{
>+ 	  if (active_insn_p (after) && ! INSN_LOCATOR (after))
>+ 	    INSN_LOCATOR (after) = loc;
>+ 	  if (after == last)
>+ 	    break;
>+ 	  after = NEXT_INSN (after);
>+ 	}
>      }
>  
>    return last;
>  
>


-- 
Mark Mitchell
CodeSourcery, LLC
(916) 791-8304
mark@codesourcery.com

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: GCC Status Report (2004-03-21)
  2004-03-23 17:25   ` Mark Mitchell
@ 2004-03-23 19:06     ` Daniel Jacobowitz
  2004-03-23 19:20       ` Jan Hubicka
  0 siblings, 1 reply; 12+ messages in thread
From: Daniel Jacobowitz @ 2004-03-23 19:06 UTC (permalink / raw)
  To: Jan Hubicka, Mark Mitchell; +Cc: gcc

On Mon, Mar 22, 2004 at 12:37:21PM +0100, Jan Hubicka wrote:
> > 
> > GCC 3.4
> > =======
> > * Jan Hubicka
> > 
> >   PR 13974 relates to cases where GCC 3.4 emits bad debugging
> >   information.  This is an important PR because it's going to affect
> >   people's ability to use GCC 3.4 for development.  From looking at
> >   the PR, it looks like you and Dan Jacobowitz have reached some kind
> >   of consensus, and on 2004-03-14 you indicated you'd have patch
> >   "Monday or Tuesday".  Is that patch available?  Has Dan looked it
> >   over and confirmed it fixes the problem?
> Sorry for being late, somehow the patch got suck in testing scripts and
> I managed to not attach it to the history.
> 
> The patch makes debug information with optimization less accurate, at
> least in my "gcov" metric right now (I do gcov with and without
> optimization and diff the output).  I am not sure how to test the
> patch more throroughly as the problem mentioned in PR is not caught by
> my testing (the line number is one instruction off that makes no
> difference for gcov.  The concept is little bit more safe and of course
> i can go other way around and simply modify all the
> emit_insn_before/after calls that do not relate to the specified
> instruction to use different name.
> 
> I am not sure how far we want to go for 3.4.  The patch attached just
> modify the existing functions without attempting to do the
> classification.
> 
> 2004-03-22  Jan Hubicka  <jh@suse.cz>
> 	* emit_rtl.c (emit_*_insn_before, emit_*_insn_after): Set locators
> 	according to the specified instruction.

One comment on the patch itself: we should make a decision about how to
approach this, one way or the other; this leaves us with both the base
and _sameloc versions of these functions.

On Tue, Mar 23, 2004 at 12:52:16AM -0800, Mark Mitchell wrote:
> Dan (Jacobowitz), what say you about this patch and/or its empirical 
> behavior in GDB-land?

It does fix the regression.  The resulting line number information
makes more logical sense to me, also.  But I would like to understand
what Jan means by "less accurate"; could you give a testcase so that I
can examine the output myself, Jan?

We may want to use this patch for now and mark this for further
investigation in 3.5.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: GCC Status Report (2004-03-21)
  2004-03-23 19:06     ` Daniel Jacobowitz
@ 2004-03-23 19:20       ` Jan Hubicka
  2004-03-23 19:23         ` Jan Hubicka
  0 siblings, 1 reply; 12+ messages in thread
From: Jan Hubicka @ 2004-03-23 19:20 UTC (permalink / raw)
  To: Jan Hubicka, Mark Mitchell, gcc

> On Mon, Mar 22, 2004 at 12:37:21PM +0100, Jan Hubicka wrote:
> > > 
> > > GCC 3.4
> > > =======
> > > * Jan Hubicka
> > > 
> > >   PR 13974 relates to cases where GCC 3.4 emits bad debugging
> > >   information.  This is an important PR because it's going to affect
> > >   people's ability to use GCC 3.4 for development.  From looking at
> > >   the PR, it looks like you and Dan Jacobowitz have reached some kind
> > >   of consensus, and on 2004-03-14 you indicated you'd have patch
> > >   "Monday or Tuesday".  Is that patch available?  Has Dan looked it
> > >   over and confirmed it fixes the problem?
> > Sorry for being late, somehow the patch got suck in testing scripts and
> > I managed to not attach it to the history.
> > 
> > The patch makes debug information with optimization less accurate, at
> > least in my "gcov" metric right now (I do gcov with and without
> > optimization and diff the output).  I am not sure how to test the
> > patch more throroughly as the problem mentioned in PR is not caught by
> > my testing (the line number is one instruction off that makes no
> > difference for gcov.  The concept is little bit more safe and of course
> > i can go other way around and simply modify all the
> > emit_insn_before/after calls that do not relate to the specified
> > instruction to use different name.
> > 
> > I am not sure how far we want to go for 3.4.  The patch attached just
> > modify the existing functions without attempting to do the
> > classification.
> > 
> > 2004-03-22  Jan Hubicka  <jh@suse.cz>
> > 	* emit_rtl.c (emit_*_insn_before, emit_*_insn_after): Set locators
> > 	according to the specified instruction.
> 
> One comment on the patch itself: we should make a decision about how to
> approach this, one way or the other; this leaves us with both the base
> and _sameloc versions of these functions.

I am just testing version that kills the _sameloc, invents _noloc
versions and updates uses in the cfg code that cause most of noise.  It
is roughly 20Kb patch however. (so newly invented basic blocks and code
inserted into edges don't have random line number infromation attached
to them)
> 
> On Tue, Mar 23, 2004 at 12:52:16AM -0800, Mark Mitchell wrote:
> > Dan (Jacobowitz), what say you about this patch and/or its empirical 
> > behavior in GDB-land?
> 
> It does fix the regression.  The resulting line number information
> makes more logical sense to me, also.  But I would like to understand
> what Jan means by "less accurate"; could you give a testcase so that I
> can examine the output myself, Jan?

What I do is to simply compile GCC with optimization and coverage
testing.

Honza
> 
> We may want to use this patch for now and mark this for further
> investigation in 3.5.
> 
> -- 
> Daniel Jacobowitz
> MontaVista Software                         Debian GNU/Linux Developer

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: GCC Status Report (2004-03-21)
  2004-03-23 19:20       ` Jan Hubicka
@ 2004-03-23 19:23         ` Jan Hubicka
  2004-03-23 19:24           ` Daniel Jacobowitz
  2004-03-24  5:37           ` Mark Mitchell
  0 siblings, 2 replies; 12+ messages in thread
From: Jan Hubicka @ 2004-03-23 19:23 UTC (permalink / raw)
  To: Jan Hubicka; +Cc: Mark Mitchell, gcc

> > On Mon, Mar 22, 2004 at 12:37:21PM +0100, Jan Hubicka wrote:
> > > > 
> > > > GCC 3.4
> > > > =======
> > > > * Jan Hubicka
> > > > 
> > > >   PR 13974 relates to cases where GCC 3.4 emits bad debugging
> > > >   information.  This is an important PR because it's going to affect
> > > >   people's ability to use GCC 3.4 for development.  From looking at
> > > >   the PR, it looks like you and Dan Jacobowitz have reached some kind
> > > >   of consensus, and on 2004-03-14 you indicated you'd have patch
> > > >   "Monday or Tuesday".  Is that patch available?  Has Dan looked it
> > > >   over and confirmed it fixes the problem?
> > > Sorry for being late, somehow the patch got suck in testing scripts and
> > > I managed to not attach it to the history.
> > > 
> > > The patch makes debug information with optimization less accurate, at
> > > least in my "gcov" metric right now (I do gcov with and without
> > > optimization and diff the output).  I am not sure how to test the
> > > patch more throroughly as the problem mentioned in PR is not caught by
> > > my testing (the line number is one instruction off that makes no
> > > difference for gcov.  The concept is little bit more safe and of course
> > > i can go other way around and simply modify all the
> > > emit_insn_before/after calls that do not relate to the specified
> > > instruction to use different name.
> > > 
> > > I am not sure how far we want to go for 3.4.  The patch attached just
> > > modify the existing functions without attempting to do the
> > > classification.
> > > 
> > > 2004-03-22  Jan Hubicka  <jh@suse.cz>
> > > 	* emit_rtl.c (emit_*_insn_before, emit_*_insn_after): Set locators
> > > 	according to the specified instruction.
> > 
> > One comment on the patch itself: we should make a decision about how to
> > approach this, one way or the other; this leaves us with both the base
> > and _sameloc versions of these functions.
> 
> I am just testing version that kills the _sameloc, invents _noloc
> versions and updates uses in the cfg code that cause most of noise.  It
> is roughly 20Kb patch however. (so newly invented basic blocks and code
> inserted into edges don't have random line number infromation attached
> to them)
> > 
> > On Tue, Mar 23, 2004 at 12:52:16AM -0800, Mark Mitchell wrote:
> > > Dan (Jacobowitz), what say you about this patch and/or its empirical 
> > > behavior in GDB-land?
> > 
> > It does fix the regression.  The resulting line number information
> > makes more logical sense to me, also.  But I would like to understand
> > what Jan means by "less accurate"; could you give a testcase so that I
> > can examine the output myself, Jan?
> 
> What I do is to simply compile GCC with optimization and coverage
> testing.

Hi,
here is the updated patch.  It bootstraped i686-pc-gnu-linux and I am
running full testing on mainline and branch i686/ppc now.
It fixes the problems with wrong gcov counts caused by BB manipulation
and hope it will be acceptable for Daniel too.  I worry relatively
little about what direction the defaults are, obviously we need to
revisit most of the emit* calls anyway.

Honza

2004-03-23  Jan Hubicka  <jh@suse.cz>
	* cfgrtl.c (try_redirect_by_replacing_jump,
	force_nonfallthru_and_redirect, commit_one_edge_insertion,
	cfg_layout_merge_blocks):  Do not attach any line number information
	to newly inserted instructions.
	* emit-rtl.c (emit_insn*_before, emit_insn*_after): Rename to
	emit_insn_*_noloc.
	(emit_*insn_before, emit_insn*_after): New.
	(emit_*insn_before_setloc, emit_*insn_after_setloc): Do not overwrite
	existing locators.
	* rtl.h (emit_*insn_before_noloc, emit_*insn_after_noloc): Declare.
	(emit_*insn_before_sameloc, emit_*insn_after_sameloc): Kill.
Index: cfgrtl.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfgrtl.c,v
retrieving revision 1.114
diff -c -3 -p -r1.114 cfgrtl.c
*** cfgrtl.c	22 Mar 2004 02:57:26 -0000	1.114
--- cfgrtl.c	23 Mar 2004 16:06:08 -0000
*************** try_redirect_by_replacing_jump (edge e, 
*** 749,755 ****
        rtx target_label = block_label (target);
        rtx barrier, label, table;
  
!       emit_jump_insn_after (gen_jump (target_label), insn);
        JUMP_LABEL (BB_END (src)) = target_label;
        LABEL_NUSES (target_label)++;
        if (dump_file)
--- 749,755 ----
        rtx target_label = block_label (target);
        rtx barrier, label, table;
  
!       emit_jump_insn_after_noloc (gen_jump (target_label), insn);
        JUMP_LABEL (BB_END (src)) = target_label;
        LABEL_NUSES (target_label)++;
        if (dump_file)
*************** force_nonfallthru_and_redirect (edge e, 
*** 1084,1097 ****
    if (target == EXIT_BLOCK_PTR)
      {
        if (HAVE_return)
! 	emit_jump_insn_after (gen_return (), BB_END (jump_block));
        else
  	abort ();
      }
    else
      {
        rtx label = block_label (target);
!       emit_jump_insn_after (gen_jump (label), BB_END (jump_block));
        JUMP_LABEL (BB_END (jump_block)) = label;
        LABEL_NUSES (label)++;
      }
--- 1084,1097 ----
    if (target == EXIT_BLOCK_PTR)
      {
        if (HAVE_return)
! 	emit_jump_insn_after_noloc (gen_return (), BB_END (jump_block));
        else
  	abort ();
      }
    else
      {
        rtx label = block_label (target);
!       emit_jump_insn_after_noloc (gen_jump (label), BB_END (jump_block));
        JUMP_LABEL (BB_END (jump_block)) = label;
        LABEL_NUSES (label)++;
      }
*************** commit_one_edge_insertion (edge e, int w
*** 1529,1539 ****
  
    if (before)
      {
!       emit_insn_before (insns, before);
        last = prev_nonnote_insn (before);
      }
    else
!     last = emit_insn_after (insns, after);
  
    if (returnjump_p (last))
      {
--- 1529,1539 ----
  
    if (before)
      {
!       emit_insn_before_noloc (insns, before);
        last = prev_nonnote_insn (before);
      }
    else
!     last = emit_insn_after_noloc (insns, after);
  
    if (returnjump_p (last))
      {
*************** cfg_layout_merge_blocks (basic_block a, 
*** 2591,2597 ****
      {
        rtx first = BB_END (a), last;
  
!       last = emit_insn_after (b->rbi->header, BB_END (a));
        delete_insn_chain (NEXT_INSN (first), last);
        b->rbi->header = NULL;
      }
--- 2591,2597 ----
      {
        rtx first = BB_END (a), last;
  
!       last = emit_insn_after_noloc (b->rbi->header, BB_END (a));
        delete_insn_chain (NEXT_INSN (first), last);
        b->rbi->header = NULL;
      }
*************** cfg_layout_merge_blocks (basic_block a, 
*** 2601,2607 ****
      {
        rtx first = unlink_insn_chain (BB_HEAD (b), BB_END (b));
  
!       emit_insn_after (first, BB_END (a));
        /* Skip possible DELETED_LABEL insn.  */
        if (!NOTE_INSN_BASIC_BLOCK_P (first))
  	first = NEXT_INSN (first);
--- 2601,2607 ----
      {
        rtx first = unlink_insn_chain (BB_HEAD (b), BB_END (b));
  
!       emit_insn_after_noloc (first, BB_END (a));
        /* Skip possible DELETED_LABEL insn.  */
        if (!NOTE_INSN_BASIC_BLOCK_P (first))
  	first = NEXT_INSN (first);
Index: emit-rtl.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/emit-rtl.c,v
retrieving revision 1.386
diff -c -3 -p -r1.386 emit-rtl.c
*** emit-rtl.c	22 Mar 2004 00:40:43 -0000	1.386
--- emit-rtl.c	23 Mar 2004 16:06:09 -0000
*************** remove_unnecessary_notes (void)
*** 3904,3910 ****
  /* Make X be output before the instruction BEFORE.  */
  
  rtx
! emit_insn_before (rtx x, rtx before)
  {
    rtx last = before;
    rtx insn;
--- 3904,3910 ----
  /* Make X be output before the instruction BEFORE.  */
  
  rtx
! emit_insn_before_noloc (rtx x, rtx before)
  {
    rtx last = before;
    rtx insn;
*************** emit_insn_before (rtx x, rtx before)
*** 3954,3960 ****
     and output it before the instruction BEFORE.  */
  
  rtx
! emit_jump_insn_before (rtx x, rtx before)
  {
    rtx insn, last = NULL_RTX;
  
--- 3954,3960 ----
     and output it before the instruction BEFORE.  */
  
  rtx
! emit_jump_insn_before_noloc (rtx x, rtx before)
  {
    rtx insn, last = NULL_RTX;
  
*************** emit_jump_insn_before (rtx x, rtx before
*** 4000,4006 ****
     and output it before the instruction BEFORE.  */
  
  rtx
! emit_call_insn_before (rtx x, rtx before)
  {
    rtx last = NULL_RTX, insn;
  
--- 4000,4006 ----
     and output it before the instruction BEFORE.  */
  
  rtx
! emit_call_insn_before_noloc (rtx x, rtx before)
  {
    rtx last = NULL_RTX, insn;
  
*************** emit_insn_after_1 (rtx first, rtx after)
*** 4131,4137 ****
  /* Make X be output after the insn AFTER.  */
  
  rtx
! emit_insn_after (rtx x, rtx after)
  {
    rtx last = after;
  
--- 4131,4137 ----
  /* Make X be output after the insn AFTER.  */
  
  rtx
! emit_insn_after_noloc (rtx x, rtx after)
  {
    rtx last = after;
  
*************** emit_insn_after_with_line_notes (rtx x, 
*** 4190,4196 ****
     and output it after the insn AFTER.  */
  
  rtx
! emit_jump_insn_after (rtx x, rtx after)
  {
    rtx last;
  
--- 4190,4196 ----
     and output it after the insn AFTER.  */
  
  rtx
! emit_jump_insn_after_noloc (rtx x, rtx after)
  {
    rtx last;
  
*************** emit_jump_insn_after (rtx x, rtx after)
*** 4229,4235 ****
     and output it after the instruction AFTER.  */
  
  rtx
! emit_call_insn_after (rtx x, rtx after)
  {
    rtx last;
  
--- 4229,4235 ----
     and output it after the instruction AFTER.  */
  
  rtx
! emit_call_insn_after_noloc (rtx x, rtx after)
  {
    rtx last;
  
*************** emit_note_copy_after (rtx orig, rtx afte
*** 4331,4349 ****
    return note;
  }
  \f
! /* Like emit_insn_after, but set INSN_LOCATOR according to SCOPE.  */
  rtx
  emit_insn_after_setloc (rtx pattern, rtx after, int loc)
  {
!   rtx last = emit_insn_after (pattern, after);
  
!   if (pattern == NULL_RTX)
      return last;
  
    after = NEXT_INSN (after);
    while (1)
      {
!       if (active_insn_p (after))
  	INSN_LOCATOR (after) = loc;
        if (after == last)
  	break;
--- 4331,4349 ----
    return note;
  }
  \f
! /* Like emit_insn_after_noloc, but set INSN_LOCATOR according to SCOPE.  */
  rtx
  emit_insn_after_setloc (rtx pattern, rtx after, int loc)
  {
!   rtx last = emit_insn_after_noloc (pattern, after);
  
!   if (pattern == NULL_RTX || !loc)
      return last;
  
    after = NEXT_INSN (after);
    while (1)
      {
!       if (active_insn_p (after) && !INSN_LOCATOR (after))
  	INSN_LOCATOR (after) = loc;
        if (after == last)
  	break;
*************** emit_insn_after_setloc (rtx pattern, rtx
*** 4352,4370 ****
    return last;
  }
  
! /* Like emit_jump_insn_after, but set INSN_LOCATOR according to SCOPE.  */
  rtx
  emit_jump_insn_after_setloc (rtx pattern, rtx after, int loc)
  {
!   rtx last = emit_jump_insn_after (pattern, after);
  
!   if (pattern == NULL_RTX)
      return last;
  
    after = NEXT_INSN (after);
    while (1)
      {
!       if (active_insn_p (after))
  	INSN_LOCATOR (after) = loc;
        if (after == last)
  	break;
--- 4352,4380 ----
    return last;
  }
  
! /* Like emit_insn_after_noloc, but set INSN_LOCATOR according to AFTER.  */
! rtx
! emit_insn_after (rtx pattern, rtx after)
! {
!   if (INSN_P (after))
!     return emit_insn_after_setloc (pattern, after, INSN_LOCATOR (after));
!   else
!     return emit_insn_after_noloc (pattern, after);
! }
! 
! /* Like emit_jump_insn_after_noloc, but set INSN_LOCATOR according to SCOPE.  */
  rtx
  emit_jump_insn_after_setloc (rtx pattern, rtx after, int loc)
  {
!   rtx last = emit_jump_insn_after_noloc (pattern, after);
  
!   if (pattern == NULL_RTX || !loc)
      return last;
  
    after = NEXT_INSN (after);
    while (1)
      {
!       if (active_insn_p (after) && !INSN_LOCATOR (after))
  	INSN_LOCATOR (after) = loc;
        if (after == last)
  	break;
*************** emit_jump_insn_after_setloc (rtx pattern
*** 4373,4391 ****
    return last;
  }
  
! /* Like emit_call_insn_after, but set INSN_LOCATOR according to SCOPE.  */
  rtx
  emit_call_insn_after_setloc (rtx pattern, rtx after, int loc)
  {
!   rtx last = emit_call_insn_after (pattern, after);
  
!   if (pattern == NULL_RTX)
      return last;
  
    after = NEXT_INSN (after);
    while (1)
      {
!       if (active_insn_p (after))
  	INSN_LOCATOR (after) = loc;
        if (after == last)
  	break;
--- 4383,4411 ----
    return last;
  }
  
! /* Like emit_jump_insn_after_noloc, but set INSN_LOCATOR according to AFTER.  */
! rtx
! emit_jump_insn_after (rtx pattern, rtx after)
! {
!   if (INSN_P (after))
!     return emit_jump_insn_after_setloc (pattern, after, INSN_LOCATOR (after));
!   else
!     return emit_jump_insn_after_noloc (pattern, after);
! }
! 
! /* Like emit_call_insn_after_noloc, but set INSN_LOCATOR according to SCOPE.  */
  rtx
  emit_call_insn_after_setloc (rtx pattern, rtx after, int loc)
  {
!   rtx last = emit_call_insn_after_noloc (pattern, after);
  
!   if (pattern == NULL_RTX || !loc)
      return last;
  
    after = NEXT_INSN (after);
    while (1)
      {
!       if (active_insn_p (after) && !INSN_LOCATOR (after))
  	INSN_LOCATOR (after) = loc;
        if (after == last)
  	break;
*************** emit_call_insn_after_setloc (rtx pattern
*** 4394,4405 ****
    return last;
  }
  
! /* Like emit_insn_before, but set INSN_LOCATOR according to SCOPE.  */
  rtx
  emit_insn_before_setloc (rtx pattern, rtx before, int loc)
  {
    rtx first = PREV_INSN (before);
!   rtx last = emit_insn_before (pattern, before);
  
    if (pattern == NULL_RTX)
      return last;
--- 4414,4499 ----
    return last;
  }
  
! /* Like emit_call_insn_after_noloc, but set INSN_LOCATOR according to AFTER.  */
! rtx
! emit_call_insn_after (rtx pattern, rtx after)
! {
!   if (INSN_P (after))
!     return emit_call_insn_after_setloc (pattern, after, INSN_LOCATOR (after));
!   else
!     return emit_call_insn_after_noloc (pattern, after);
! }
! 
! /* Like emit_insn_before_noloc, but set INSN_LOCATOR according to SCOPE.  */
  rtx
  emit_insn_before_setloc (rtx pattern, rtx before, int loc)
  {
    rtx first = PREV_INSN (before);
!   rtx last = emit_insn_before_noloc (pattern, before);
! 
!   if (pattern == NULL_RTX || !loc)
!     return last;
! 
!   first = NEXT_INSN (first);
!   while (1)
!     {
!       if (active_insn_p (first) && !INSN_LOCATOR (first))
! 	INSN_LOCATOR (first) = loc;
!       if (first == last)
! 	break;
!       first = NEXT_INSN (first);
!     }
!   return last;
! }
! 
! /* Like emit_insn_before_noloc, but set INSN_LOCATOR according to BEFORE.  */
! rtx
! emit_insn_before (rtx pattern, rtx before)
! {
!   if (INSN_P (before))
!     return emit_insn_before_setloc (pattern, before, INSN_LOCATOR (before));
!   else
!     return emit_insn_before_noloc (pattern, before);
! }
! 
! /* like emit_insn_before_noloc, but set insn_locator according to scope.  */
! rtx
! emit_jump_insn_before_setloc (rtx pattern, rtx before, int loc)
! {
!   rtx first = PREV_INSN (before);
!   rtx last = emit_jump_insn_before_noloc (pattern, before);
! 
!   if (pattern == NULL_RTX)
!     return last;
! 
!   first = NEXT_INSN (first);
!   while (1)
!     {
!       if (active_insn_p (first) && !INSN_LOCATOR (first))
! 	INSN_LOCATOR (first) = loc;
!       if (first == last)
! 	break;
!       first = NEXT_INSN (first);
!     }
!   return last;
! }
! 
! /* Like emit_jump_insn_before_noloc, but set INSN_LOCATOR according to BEFORE.  */
! rtx
! emit_jump_insn_before (rtx pattern, rtx before)
! {
!   if (INSN_P (before))
!     return emit_jump_insn_before_setloc (pattern, before, INSN_LOCATOR (before));
!   else
!     return emit_jump_insn_before_noloc (pattern, before);
! }
! 
! /* like emit_insn_before_noloc, but set insn_locator according to scope.  */
! rtx
! emit_call_insn_before_setloc (rtx pattern, rtx before, int loc)
! {
!   rtx first = PREV_INSN (before);
!   rtx last = emit_call_insn_before_noloc (pattern, before);
  
    if (pattern == NULL_RTX)
      return last;
*************** emit_insn_before_setloc (rtx pattern, rt
*** 4407,4419 ****
    first = NEXT_INSN (first);
    while (1)
      {
!       if (active_insn_p (first))
  	INSN_LOCATOR (first) = loc;
        if (first == last)
  	break;
        first = NEXT_INSN (first);
      }
    return last;
  }
  \f
  /* Take X and emit it at the end of the doubly-linked
--- 4501,4524 ----
    first = NEXT_INSN (first);
    while (1)
      {
!       if (active_insn_p (first) && !INSN_LOCATOR (first))
  	INSN_LOCATOR (first) = loc;
        if (first == last)
  	break;
        first = NEXT_INSN (first);
      }
    return last;
+ }
+ 
+ /* like emit_call_insn_before_noloc,
+    but set insn_locator according to before.  */
+ rtx
+ emit_call_insn_before (rtx pattern, rtx before)
+ {
+   if (INSN_P (before))
+     return emit_call_insn_before_setloc (pattern, before, INSN_LOCATOR (before));
+   else
+     return emit_call_insn_before_noloc (pattern, before);
  }
  \f
  /* Take X and emit it at the end of the doubly-linked
Index: gcse.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/gcse.c,v
retrieving revision 1.297
diff -c -3 -p -r1.297 gcse.c
*** gcse.c	22 Mar 2004 02:57:26 -0000	1.297
--- gcse.c	23 Mar 2004 16:06:10 -0000
*************** insert_insn_end_bb (struct expr *expr, b
*** 5303,5309 ****
  	}
  #endif
        /* FIXME: What if something in cc0/jump uses value set in new insn?  */
!       new_insn = emit_insn_before (pat, insn);
      }
  
    /* Likewise if the last insn is a call, as will happen in the presence
--- 5303,5309 ----
  	}
  #endif
        /* FIXME: What if something in cc0/jump uses value set in new insn?  */
!       new_insn = emit_insn_before_noloc (pat, insn);
      }
  
    /* Likewise if the last insn is a call, as will happen in the presence
*************** insert_insn_end_bb (struct expr *expr, b
*** 5342,5351 ****
  	     || NOTE_INSN_BASIC_BLOCK_P (insn))
  	insn = NEXT_INSN (insn);
  
!       new_insn = emit_insn_before (pat, insn);
      }
    else
!     new_insn = emit_insn_after (pat, insn);
  
    while (1)
      {
--- 5342,5351 ----
  	     || NOTE_INSN_BASIC_BLOCK_P (insn))
  	insn = NEXT_INSN (insn);
  
!       new_insn = emit_insn_before_noloc (pat, insn);
      }
    else
!     new_insn = emit_insn_after_noloc (pat, insn);
  
    while (1)
      {
*************** insert_insn_start_bb (rtx insn, basic_bl
*** 7669,7675 ****
        before = NEXT_INSN (before);
      }
  
!   insn = emit_insn_after (insn, prev);
  
    if (gcse_file)
      {
--- 7669,7675 ----
        before = NEXT_INSN (before);
      }
  
!   insn = emit_insn_after_noloc (insn, prev);
  
    if (gcse_file)
      {
Index: reload1.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/reload1.c,v
retrieving revision 1.432
diff -c -3 -p -r1.432 reload1.c
*** reload1.c	5 Mar 2004 10:17:40 -0000	1.432
--- reload1.c	23 Mar 2004 16:06:11 -0000
*************** emit_reload_insns (struct insn_chain *ch
*** 7024,7048 ****
       reloads for the operand.  The RELOAD_OTHER output reloads are
       output in descending order by reload number.  */
  
!   emit_insn_before_sameloc (other_input_address_reload_insns, insn);
!   emit_insn_before_sameloc (other_input_reload_insns, insn);
  
    for (j = 0; j < reload_n_operands; j++)
      {
!       emit_insn_before_sameloc (inpaddr_address_reload_insns[j], insn);
!       emit_insn_before_sameloc (input_address_reload_insns[j], insn);
!       emit_insn_before_sameloc (input_reload_insns[j], insn);
      }
  
!   emit_insn_before_sameloc (other_operand_reload_insns, insn);
!   emit_insn_before_sameloc (operand_reload_insns, insn);
  
    for (j = 0; j < reload_n_operands; j++)
      {
!       rtx x = emit_insn_after_sameloc (outaddr_address_reload_insns[j], insn);
!       x = emit_insn_after_sameloc (output_address_reload_insns[j], x);
!       x = emit_insn_after_sameloc (output_reload_insns[j], x);
!       emit_insn_after_sameloc (other_output_reload_insns[j], x);
      }
  
    /* For all the spill regs newly reloaded in this instruction,
--- 7024,7048 ----
       reloads for the operand.  The RELOAD_OTHER output reloads are
       output in descending order by reload number.  */
  
!   emit_insn_before (other_input_address_reload_insns, insn);
!   emit_insn_before (other_input_reload_insns, insn);
  
    for (j = 0; j < reload_n_operands; j++)
      {
!       emit_insn_before (inpaddr_address_reload_insns[j], insn);
!       emit_insn_before (input_address_reload_insns[j], insn);
!       emit_insn_before (input_reload_insns[j], insn);
      }
  
!   emit_insn_before (other_operand_reload_insns, insn);
!   emit_insn_before (operand_reload_insns, insn);
  
    for (j = 0; j < reload_n_operands; j++)
      {
!       rtx x = emit_insn_after (outaddr_address_reload_insns[j], insn);
!       x = emit_insn_after (output_address_reload_insns[j], x);
!       x = emit_insn_after (output_reload_insns[j], x);
!       emit_insn_after (other_output_reload_insns[j], x);
      }
  
    /* For all the spill regs newly reloaded in this instruction,
Index: rtl.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/rtl.h,v
retrieving revision 1.466
diff -c -3 -p -r1.466 rtl.h
*** rtl.h	20 Mar 2004 23:08:57 -0000	1.466
--- rtl.h	23 Mar 2004 16:06:11 -0000
*************** extern rtx assign_temp (tree, int, int, 
*** 1656,1674 ****
--- 1656,1680 ----
  
  /* In emit-rtl.c */
  extern rtx emit_insn_before (rtx, rtx);
+ extern rtx emit_insn_before_noloc (rtx, rtx);
  extern rtx emit_insn_before_setloc (rtx, rtx, int);
  extern rtx emit_jump_insn_before (rtx, rtx);
+ extern rtx emit_jump_insn_before_noloc (rtx, rtx);
  extern rtx emit_jump_insn_before_setloc (rtx, rtx, int);
  extern rtx emit_call_insn_before (rtx, rtx);
+ extern rtx emit_call_insn_before_noloc (rtx, rtx);
  extern rtx emit_call_insn_before_setloc (rtx, rtx, int);
  extern rtx emit_barrier_before (rtx);
  extern rtx emit_label_before (rtx, rtx);
  extern rtx emit_note_before (int, rtx);
  extern rtx emit_insn_after (rtx, rtx);
+ extern rtx emit_insn_after_noloc (rtx, rtx);
  extern rtx emit_insn_after_setloc (rtx, rtx, int);
  extern rtx emit_jump_insn_after (rtx, rtx);
+ extern rtx emit_jump_insn_after_noloc (rtx, rtx);
  extern rtx emit_jump_insn_after_setloc (rtx, rtx, int);
  extern rtx emit_call_insn_after (rtx, rtx);
+ extern rtx emit_call_insn_after_noloc (rtx, rtx);
  extern rtx emit_call_insn_after_setloc (rtx, rtx, int);
  extern rtx emit_barrier_after (rtx);
  extern rtx emit_label_after (rtx, rtx);
*************** extern rtx prev_label (rtx);
*** 1698,1716 ****
  extern rtx next_label (rtx);
  extern rtx next_cc0_user (rtx);
  extern rtx prev_cc0_setter (rtx);
- 
- #define emit_insn_before_sameloc(INSN, BEFORE) \
-   emit_insn_before_setloc (INSN, BEFORE, INSN_LOCATOR (BEFORE))
- #define emit_jump_insn_before_sameloc(INSN, BEFORE) \
-   emit_jump_insn_before_setloc (INSN, BEFORE, INSN_LOCATOR (BEFORE))
- #define emit_call_insn_before_sameloc(INSN, BEFORE) \
-   emit_call_insn_before_setloc (INSN, BEFORE, INSN_LOCATOR (BEFORE))
- #define emit_insn_after_sameloc(INSN, AFTER) \
-   emit_insn_after_setloc (INSN, AFTER, INSN_LOCATOR (AFTER))
- #define emit_jump_insn_after_sameloc(INSN, AFTER) \
-   emit_jump_insn_after_setloc (INSN, AFTER, INSN_LOCATOR (AFTER))
- #define emit_call_insn_after_sameloc(INSN, AFTER) \
-   emit_call_insn_after_setloc (INSN, AFTER, INSN_LOCATOR (AFTER))
  
  /* In cfglayout.c  */
  extern tree choose_inner_scope (tree, tree);
--- 1704,1709 ----

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: GCC Status Report (2004-03-21)
  2004-03-23 19:23         ` Jan Hubicka
@ 2004-03-23 19:24           ` Daniel Jacobowitz
  2004-03-23 19:37             ` Jan Hubicka
  2004-03-24  5:37           ` Mark Mitchell
  1 sibling, 1 reply; 12+ messages in thread
From: Daniel Jacobowitz @ 2004-03-23 19:24 UTC (permalink / raw)
  To: Jan Hubicka; +Cc: Mark Mitchell, gcc

On Tue, Mar 23, 2004 at 06:10:42PM +0100, Jan Hubicka wrote:
> Hi,
> here is the updated patch.  It bootstraped i686-pc-gnu-linux and I am
> running full testing on mainline and branch i686/ppc now.
> It fixes the problems with wrong gcov counts caused by BB manipulation
> and hope it will be acceptable for Daniel too.  I worry relatively
> little about what direction the defaults are, obviously we need to
> revisit most of the emit* calls anyway.
> 
> Honza
> 
> 2004-03-23  Jan Hubicka  <jh@suse.cz>
> 	* cfgrtl.c (try_redirect_by_replacing_jump,
> 	force_nonfallthru_and_redirect, commit_one_edge_insertion,
> 	cfg_layout_merge_blocks):  Do not attach any line number information
> 	to newly inserted instructions.
> 	* emit-rtl.c (emit_insn*_before, emit_insn*_after): Rename to
> 	emit_insn_*_noloc.
> 	(emit_*insn_before, emit_insn*_after): New.
> 	(emit_*insn_before_setloc, emit_*insn_after_setloc): Do not overwrite
> 	existing locators.
> 	* rtl.h (emit_*insn_before_noloc, emit_*insn_after_noloc): Declare.
> 	(emit_*insn_before_sameloc, emit_*insn_after_sameloc): Kill.

Works for me.  I had an interesting discussion a couple of days ago
about actually expressing "no line number" in the dwarf output; it's
not clear what the debugger can do with this information, but there are
some possibilities.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: GCC Status Report (2004-03-21)
  2004-03-23 19:24           ` Daniel Jacobowitz
@ 2004-03-23 19:37             ` Jan Hubicka
  0 siblings, 0 replies; 12+ messages in thread
From: Jan Hubicka @ 2004-03-23 19:37 UTC (permalink / raw)
  To: Jan Hubicka, Mark Mitchell, gcc

> On Tue, Mar 23, 2004 at 06:10:42PM +0100, Jan Hubicka wrote:
> > Hi,
> > here is the updated patch.  It bootstraped i686-pc-gnu-linux and I am
> > running full testing on mainline and branch i686/ppc now.
> > It fixes the problems with wrong gcov counts caused by BB manipulation
> > and hope it will be acceptable for Daniel too.  I worry relatively
> > little about what direction the defaults are, obviously we need to
> > revisit most of the emit* calls anyway.
> > 
> > Honza
> > 
> > 2004-03-23  Jan Hubicka  <jh@suse.cz>
> > 	* cfgrtl.c (try_redirect_by_replacing_jump,
> > 	force_nonfallthru_and_redirect, commit_one_edge_insertion,
> > 	cfg_layout_merge_blocks):  Do not attach any line number information
> > 	to newly inserted instructions.
> > 	* emit-rtl.c (emit_insn*_before, emit_insn*_after): Rename to
> > 	emit_insn_*_noloc.
> > 	(emit_*insn_before, emit_insn*_after): New.
> > 	(emit_*insn_before_setloc, emit_*insn_after_setloc): Do not overwrite
> > 	existing locators.
> > 	* rtl.h (emit_*insn_before_noloc, emit_*insn_after_noloc): Declare.
> > 	(emit_*insn_before_sameloc, emit_*insn_after_sameloc): Kill.
> 
> Works for me.  I had an interesting discussion a couple of days ago
> about actually expressing "no line number" in the dwarf output; it's
> not clear what the debugger can do with this information, but there are
> some possibilities.

The main motivation for having instructions with no line number is to
avoid false line number markers in dwarf2 output after those
instructions (doing something unrelated) has been moved across the
instruction stream to strange location.  This shows up nicely in gcov
output as the line numbers then get artifically high count (and GDB
would stop program unnecesarily often if the breakpoint were put to such
a line)

I am not sure if gdb can do something usefull with knowing that this
instruction does not belong to any statement but has been constructed
artifically by itself.

With current strategy we simply bundle the instruction with the
preceeding line that won't make breakpoints to be missplaced and thus
everything should work relatively well.

Honza
> 
> -- 
> Daniel Jacobowitz
> MontaVista Software                         Debian GNU/Linux Developer

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: GCC Status Report (2004-03-21)
  2004-03-23 19:23         ` Jan Hubicka
  2004-03-23 19:24           ` Daniel Jacobowitz
@ 2004-03-24  5:37           ` Mark Mitchell
  1 sibling, 0 replies; 12+ messages in thread
From: Mark Mitchell @ 2004-03-24  5:37 UTC (permalink / raw)
  To: Jan Hubicka; +Cc: gcc

Jan Hubicka wrote:

>here is the updated patch.  It bootstraped i686-pc-gnu-linux and I am
>running full testing on mainline and branch i686/ppc now.
>It fixes the problems with wrong gcov counts caused by BB manipulation
>and hope it will be acceptable for Daniel too.  I worry relatively
>little about what direction the defaults are, obviously we need to
>revisit most of the emit* calls anyway.
>
OK for 3.4.0.

-- 
Mark Mitchell
CodeSourcery, LLC
(916) 791-8304
mark@codesourcery.com

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: GCC Status Report (2004-03-21)
@ 2004-03-22  6:03 Billinghurst, David (CALCRTS)
  0 siblings, 0 replies; 12+ messages in thread
From: Billinghurst, David (CALCRTS) @ 2004-03-22  6:03 UTC (permalink / raw)
  To: mark, gcc

> GCC 3.4
> =======
> 
> If you are in the to-list for this email, I'm hoping that you'll be
> able to help with a critical GCC 3.4 problem.
> * David Billinghurst
> 
>   PR 14207 is a problem with building with an o32 multilib in GCC 3.4.
>   Can you confirm that this problem have been fixed in GCC 3.4?

This problem does not occur with GCC 3.4
see http://gcc.gnu.org/ml/gcc-testresults/2004-03/msg01107.html

There is a problem with GCC 3.5.

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2004-03-23 21:28 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-03-22  0:49 GCC Status Report (2004-03-21) Mark Mitchell
2004-03-22  7:56 ` Hans-Peter Nilsson
2004-03-23 17:10   ` Mark Mitchell
2004-03-22 15:27 ` Jan Hubicka
2004-03-23 17:25   ` Mark Mitchell
2004-03-23 19:06     ` Daniel Jacobowitz
2004-03-23 19:20       ` Jan Hubicka
2004-03-23 19:23         ` Jan Hubicka
2004-03-23 19:24           ` Daniel Jacobowitz
2004-03-23 19:37             ` Jan Hubicka
2004-03-24  5:37           ` Mark Mitchell
2004-03-22  6:03 Billinghurst, David (CALCRTS)

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).