public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* ifcvt pass ordering
@ 2002-10-16 11:24 Jan Hubicka
  2002-10-25 13:57 ` Richard Henderson
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Jan Hubicka @ 2002-10-16 11:24 UTC (permalink / raw)
  To: gcc-patches, rth

Hi,
Robert's patch to disable early ifcvt passes had unwanted effect of
disabling almost all ifcvt with -ftracer.  -ftracer usually duplicates
code to make ifcvt impossible so we must run at least one pass before.
I would like to see this in the mainline too, but technically it is not
regression, so I would be happy with BIB branch too.

Wed Oct 16 20:23:12 CEST 2002  Jan Hubicka  <jh@suse.cz>
	* toplev.c (dump_file_index): Add DFI_ce3.
	(dump_file_info): Likewise.
	(rest_of_compilation): Run first ifcvt pass before tracer.
Index: toplev.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/toplev.c,v
retrieving revision 1.668.4.6
diff -c -3 -p -r1.668.4.6 toplev.c
*** toplev.c	15 Oct 2002 01:33:02 -0000	1.668.4.6
--- toplev.c	16 Oct 2002 18:20:19 -0000
*************** enum dump_file_index
*** 232,242 ****
    DFI_loop,
    DFI_cfg,
    DFI_bp,
    DFI_tracer,
    DFI_cse2,
    DFI_life,
    DFI_combine,
!   DFI_ce,
    DFI_regmove,
    DFI_sched,
    DFI_lreg,
--- 232,243 ----
    DFI_loop,
    DFI_cfg,
    DFI_bp,
+   DFI_ce1,
    DFI_tracer,
    DFI_cse2,
    DFI_life,
    DFI_combine,
!   DFI_ce2,
    DFI_regmove,
    DFI_sched,
    DFI_lreg,
*************** enum dump_file_index
*** 245,251 ****
    DFI_flow2,
    DFI_peephole2,
    DFI_rnreg,
!   DFI_ce2,
    DFI_sched2,
    DFI_stack,
    DFI_bbro,
--- 246,252 ----
    DFI_flow2,
    DFI_peephole2,
    DFI_rnreg,
!   DFI_ce3,
    DFI_sched2,
    DFI_stack,
    DFI_bbro,
*************** static struct dump_file_info dump_file[D
*** 278,290 ****
    { "addressof", 'F', 0, 0, 0 },
    { "gcse",	'G', 1, 0, 0 },
    { "loop",	'L', 1, 0, 0 },
    { "cfg",	'f', 1, 0, 0 },
    { "bp",	'b', 1, 0, 0 },
    { "tracer",	'T', 1, 0, 0 },
    { "cse2",	't', 1, 0, 0 },
    { "life",	'f', 1, 0, 0 },	/* Yes, duplicate enable switch.  */
    { "combine",	'c', 1, 0, 0 },
!   { "ce",	'C', 1, 0, 0 },
    { "regmove",	'N', 1, 0, 0 },
    { "sched",	'S', 1, 0, 0 },
    { "lreg",	'l', 1, 0, 0 },
--- 279,292 ----
    { "addressof", 'F', 0, 0, 0 },
    { "gcse",	'G', 1, 0, 0 },
    { "loop",	'L', 1, 0, 0 },
+   { "ce1",	'C', 1, 0, 0 },
    { "cfg",	'f', 1, 0, 0 },
    { "bp",	'b', 1, 0, 0 },
    { "tracer",	'T', 1, 0, 0 },
    { "cse2",	't', 1, 0, 0 },
    { "life",	'f', 1, 0, 0 },	/* Yes, duplicate enable switch.  */
    { "combine",	'c', 1, 0, 0 },
!   { "ce2",	'C', 1, 0, 0 },
    { "regmove",	'N', 1, 0, 0 },
    { "sched",	'S', 1, 0, 0 },
    { "lreg",	'l', 1, 0, 0 },
*************** static struct dump_file_info dump_file[D
*** 293,299 ****
    { "flow2",	'w', 1, 0, 0 },
    { "peephole2", 'z', 1, 0, 0 },
    { "rnreg",	'n', 1, 0, 0 },
!   { "ce2",	'E', 1, 0, 0 },
    { "sched2",	'R', 1, 0, 0 },
    { "stack",	'k', 1, 0, 0 },
    { "bbro",	'B', 1, 0, 0 },
--- 295,301 ----
    { "flow2",	'w', 1, 0, 0 },
    { "peephole2", 'z', 1, 0, 0 },
    { "rnreg",	'n', 1, 0, 0 },
!   { "ce3",	'E', 1, 0, 0 },
    { "sched2",	'R', 1, 0, 0 },
    { "stack",	'k', 1, 0, 0 },
    { "bbro",	'B', 1, 0, 0 },
*************** rest_of_compilation (decl)
*** 2996,3001 ****
--- 2998,3015 ----
        close_dump_file (DFI_bp, print_rtl_with_bb, insns);
        timevar_pop (TV_BRANCH_PROB);
      }
+   if (flag_if_conversion)
+     {
+       timevar_push (TV_IFCVT);
+       if (rtl_dump_file)
+ 	dump_flow_info (rtl_dump_file);
+       open_dump_file (DFI_ce1, decl);
+       cleanup_cfg (CLEANUP_EXPENSIVE);
+       reg_scan (insns, max_reg_num (), 0);
+       if_convert (0);
+       close_dump_file (DFI_ce1, print_rtl_with_bb, get_insns ());
+       timevar_pop (TV_IFCVT);
+     }
    if (flag_tracer)
      {
        timevar_push (TV_TRACER);
*************** rest_of_compilation (decl)
*** 3020,3035 ****
        if (flag_rerun_cse_after_loop)
  	{
  	  timevar_push (TV_JUMP);
- 
  	  reg_scan (insns, max_reg_num (), 0);
  
- 	  timevar_push (TV_IFCVT);
  	  cleanup_cfg (CLEANUP_EXPENSIVE);
- 	  if (flag_if_conversion)
- 	    if_convert (0);
- 	  timevar_pop (TV_IFCVT);
- 
- 	  timevar_pop (TV_JUMP);
  	  /* CFG is no longer maintained up-to-date.  */
  	  reg_scan (insns, max_reg_num (), 0);
  	  tem = cse_main (insns, max_reg_num (), 1, rtl_dump_file);
--- 3034,3043 ----
        if (flag_rerun_cse_after_loop)
  	{
  	  timevar_push (TV_JUMP);
  	  reg_scan (insns, max_reg_num (), 0);
+ 	  timevar_pop (TV_JUMP);
  
  	  cleanup_cfg (CLEANUP_EXPENSIVE);
  	  /* CFG is no longer maintained up-to-date.  */
  	  reg_scan (insns, max_reg_num (), 0);
  	  tem = cse_main (insns, max_reg_num (), 1, rtl_dump_file);
*************** rest_of_compilation (decl)
*** 3128,3140 ****
    if (flag_if_conversion)
      {
        timevar_push (TV_IFCVT);
!       open_dump_file (DFI_ce, decl);
  
        no_new_pseudos = 0;
        if_convert (1);
        no_new_pseudos = 1;
  
!       close_dump_file (DFI_ce, print_rtl_with_bb, insns);
        timevar_pop (TV_IFCVT);
      }
  
--- 3136,3148 ----
    if (flag_if_conversion)
      {
        timevar_push (TV_IFCVT);
!       open_dump_file (DFI_ce2, decl);
  
        no_new_pseudos = 0;
        if_convert (1);
        no_new_pseudos = 1;
  
!       close_dump_file (DFI_ce2, print_rtl_with_bb, insns);
        timevar_pop (TV_IFCVT);
      }
  
*************** rest_of_compilation (decl)
*** 3410,3420 ****
    if (flag_if_conversion2)
      {
        timevar_push (TV_IFCVT2);
!       open_dump_file (DFI_ce2, decl);
  
        if_convert (1);
  
!       close_dump_file (DFI_ce2, print_rtl_with_bb, insns);
        timevar_pop (TV_IFCVT2);
      }
  #ifdef STACK_REGS
--- 3418,3428 ----
    if (flag_if_conversion2)
      {
        timevar_push (TV_IFCVT2);
!       open_dump_file (DFI_ce3, decl);
  
        if_convert (1);
  
!       close_dump_file (DFI_ce3, print_rtl_with_bb, insns);
        timevar_pop (TV_IFCVT2);
      }
  #ifdef STACK_REGS

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

* Re: ifcvt pass ordering
  2002-10-16 11:24 ifcvt pass ordering Jan Hubicka
@ 2002-10-25 13:57 ` Richard Henderson
  2002-10-25 14:07   ` Jan Hubicka
  2002-10-26 14:57 ` Geoff Keating
  2002-12-10 12:30 ` Eric Botcazou
  2 siblings, 1 reply; 14+ messages in thread
From: Richard Henderson @ 2002-10-25 13:57 UTC (permalink / raw)
  To: Jan Hubicka; +Cc: gcc-patches

On Wed, Oct 16, 2002 at 08:24:14PM +0200, Jan Hubicka wrote:
> 	* toplev.c (dump_file_index): Add DFI_ce3.
> 	(dump_file_info): Likewise.
> 	(rest_of_compilation): Run first ifcvt pass before tracer.

What you're looking for is a run of ifcvt _with_ life data.
I don't think you're going to get what you want without that.


r~

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

* Re: ifcvt pass ordering
  2002-10-25 13:57 ` Richard Henderson
@ 2002-10-25 14:07   ` Jan Hubicka
  2002-10-25 14:10     ` Richard Henderson
  0 siblings, 1 reply; 14+ messages in thread
From: Jan Hubicka @ 2002-10-25 14:07 UTC (permalink / raw)
  To: Richard Henderson, Jan Hubicka, gcc-patches

> On Wed, Oct 16, 2002 at 08:24:14PM +0200, Jan Hubicka wrote:
> > 	* toplev.c (dump_file_index): Add DFI_ce3.
> > 	(dump_file_info): Likewise.
> > 	(rest_of_compilation): Run first ifcvt pass before tracer.
> 
> What you're looking for is a run of ifcvt _with_ life data.
> I don't think you're going to get what you want without that.

Yes, there is still much less ifcvt than I would wish.  On cfg branch we
did early liveness pass and I've been asking about it for mainline too
before the freeze.  I think it makes sense - we can use it for GCSE code
hoisting with clobbers, for better dead code removal and for better
ifcvt before tracing, but that is something I would like to handle
separately from this simple patch.

Honza
> 
> 
> r~

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

* Re: ifcvt pass ordering
  2002-10-25 14:07   ` Jan Hubicka
@ 2002-10-25 14:10     ` Richard Henderson
  2002-10-25 14:12       ` Jan Hubicka
  0 siblings, 1 reply; 14+ messages in thread
From: Richard Henderson @ 2002-10-25 14:10 UTC (permalink / raw)
  To: Jan Hubicka; +Cc: gcc-patches

> ... but that is something I would like to handle
> separately from this simple patch.

So what does this accomplish that the call during cse2 does not?


r~

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

* Re: ifcvt pass ordering
  2002-10-25 14:10     ` Richard Henderson
@ 2002-10-25 14:12       ` Jan Hubicka
  2002-10-25 14:19         ` Richard Henderson
  0 siblings, 1 reply; 14+ messages in thread
From: Jan Hubicka @ 2002-10-25 14:12 UTC (permalink / raw)
  To: Richard Henderson, Jan Hubicka, gcc-patches

> > ... but that is something I would like to handle
> > separately from this simple patch.
> 
> So what does this accomplish that the call during cse2 does not?
The ifcvt pass even without liveness does quite a lot, but once tracing
is done it does almost nothing.  So by reordering ifcvt before cse2 and
tracer results in quite a bit better code (that can be futher improved
if liveness were available before first ifcvt pass)

Honza
> 
> 
> r~

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

* Re: ifcvt pass ordering
  2002-10-25 14:12       ` Jan Hubicka
@ 2002-10-25 14:19         ` Richard Henderson
  2002-10-25 14:27           ` Jan Hubicka
  0 siblings, 1 reply; 14+ messages in thread
From: Richard Henderson @ 2002-10-25 14:19 UTC (permalink / raw)
  To: Jan Hubicka; +Cc: gcc-patches

On Fri, Oct 25, 2002 at 11:12:43PM +0200, Jan Hubicka wrote:
> > So what does this accomplish that the call during cse2 does not?
>
> The ifcvt pass even without liveness does quite a lot, but once tracing
> is done it does almost nothing.  So by reordering ifcvt before cse2 and
> tracer results in quite a bit better code (that can be futher improved
> if liveness were available before first ifcvt pass)

This doesn't answer my question.  The tracer runs after cse2,
correct?  The current non-life ifcvt pass runs after cse2 and
before the tracer, correct?



r~

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

* Re: ifcvt pass ordering
  2002-10-25 14:19         ` Richard Henderson
@ 2002-10-25 14:27           ` Jan Hubicka
  2002-10-25 15:02             ` Richard Henderson
  0 siblings, 1 reply; 14+ messages in thread
From: Jan Hubicka @ 2002-10-25 14:27 UTC (permalink / raw)
  To: Richard Henderson, Jan Hubicka, gcc-patches

> On Fri, Oct 25, 2002 at 11:12:43PM +0200, Jan Hubicka wrote:
> > > So what does this accomplish that the call during cse2 does not?
> >
> > The ifcvt pass even without liveness does quite a lot, but once tracing
> > is done it does almost nothing.  So by reordering ifcvt before cse2 and
> > tracer results in quite a bit better code (that can be futher improved
> > if liveness were available before first ifcvt pass)
> 
> This doesn't answer my question.  The tracer runs after cse2,
> correct?  The current non-life ifcvt pass runs after cse2 and
No, it runs before cse2, so current ifcvt runs only after tracer before
Roger has removed the other invokations.

Honza
> before the tracer, correct?
> 
> 
> 
> r~

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

* Re: ifcvt pass ordering
  2002-10-25 14:27           ` Jan Hubicka
@ 2002-10-25 15:02             ` Richard Henderson
  2002-10-26 10:27               ` Graham Stott
  0 siblings, 1 reply; 14+ messages in thread
From: Richard Henderson @ 2002-10-25 15:02 UTC (permalink / raw)
  To: Jan Hubicka; +Cc: gcc-patches

On Fri, Oct 25, 2002 at 11:26:56PM +0200, Jan Hubicka wrote:
> No, it runs before cse2, so current ifcvt runs only after tracer before
> Roger has removed the other invokations.

Oh.  I mis-read your patch then.

Yeah, this is ok for mainline.


r~

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

* Re: ifcvt pass ordering
  2002-10-25 15:02             ` Richard Henderson
@ 2002-10-26 10:27               ` Graham Stott
  0 siblings, 0 replies; 14+ messages in thread
From: Graham Stott @ 2002-10-26 10:27 UTC (permalink / raw)
  To: Richard Henderson; +Cc: Jan Hubicka, gcc-patches

Richard Henderson wrote:
> On Fri, Oct 25, 2002 at 11:26:56PM +0200, Jan Hubicka wrote:
> 
>>No, it runs before cse2, so current ifcvt runs only after tracer before
>>Roger has removed the other invokations.
> 
> 
> Oh.  I mis-read your patch then.
> 
> Yeah, this is ok for mainline.
> 
> 
> r~
> 

Alas this breaks bootstraps with Ada on i686-pc-linux-gnu.

See messages in the "Ada bootstrap fails on CVS mainline" thread
on the gcc@gcc.gnu.org mailing list.

Graham

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

* Re: ifcvt pass ordering
  2002-10-16 11:24 ifcvt pass ordering Jan Hubicka
  2002-10-25 13:57 ` Richard Henderson
@ 2002-10-26 14:57 ` Geoff Keating
  2002-10-26 15:02   ` Jan Hubicka
  2002-10-26 15:25   ` Fix for " Jan Hubicka
  2002-12-10 12:30 ` Eric Botcazou
  2 siblings, 2 replies; 14+ messages in thread
From: Geoff Keating @ 2002-10-26 14:57 UTC (permalink / raw)
  To: Jan Hubicka; +Cc: gcc-patches, gcc-regression

Jan Hubicka <jh@suse.cz> writes:

> Hi,
> Robert's patch to disable early ifcvt passes had unwanted effect of
> disabling almost all ifcvt with -ftracer.  -ftracer usually duplicates
> code to make ifcvt impossible so we must run at least one pass before.
> I would like to see this in the mainline too, but technically it is not
> regression, so I would be happy with BIB branch too.
> 
> Wed Oct 16 20:23:12 CEST 2002  Jan Hubicka  <jh@suse.cz>
> 	* toplev.c (dump_file_index): Add DFI_ce3.
> 	(dump_file_info): Likewise.
> 	(rest_of_compilation): Run first ifcvt pass before tracer.

This also causes a bunch of regressions on Darwin; at least, it's all
the following:

native gcc.sum gcc.c-torture/compile/20000802-1.c,
native gcc.sum gcc.c-torture/compile/20020604-1.c,
native gcc.sum gcc.c-torture/compile/900407-1.c,
native gcc.sum gcc.c-torture/compile/920501-4.c,
native gcc.sum gcc.c-torture/compile/921011-1.c,
native gcc.sum gcc.c-torture/compile/921013-1.c,
native gcc.sum gcc.c-torture/compile/921206-1.c,
native gcc.sum gcc.c-torture/compile/930523-1.c,
native gcc.sum gcc.c-torture/compile/980329-1.c,
native gcc.sum gcc.c-torture/compile/980506-2.c,
native gcc.sum gcc.c-torture/execute/20000412-4.c
native gcc.sum gcc.c-torture/execute/20000503-1.c
native gcc.sum gcc.c-torture/execute/20000511-1.c
native gcc.sum gcc.c-torture/execute/20020406-1.c
native gcc.sum gcc.c-torture/execute/20020716-1.c
native gcc.sum gcc.c-torture/execute/930123-1.c
native gcc.sum gcc.c-torture/execute/931012-1.c

The symptom is (this is for 980506-2.c at -O1):

Program received signal EXC_BAD_ACCESS, Could not access memory.
0x000e4e1c in init_alias_analysis () at /Network/Servers/cauchy/homes/thorin/gkeating/co/egcs-mainline/gcc/gcc/alias.c:2814
2814                      else if (REG_N_SETS (regno) == 1
(gdb) bt
#0  0x000e4e1c in init_alias_analysis () at /Network/Servers/cauchy/homes/thorin/gkeating/co/egcs-mainline/gcc/gcc/alias.c:2814
#1  0x0019328c in life_analysis (f=0xe1a480, file=0x0, flags=383) at /Network/Servers/cauchy/homes/thorin/gkeating/co/egcs-mainline/gcc/gcc/flow.c:452
#2  0x00099670 in rest_of_compilation (decl=0x17f) at /Network/Servers/cauchy/homes/thorin/gkeating/co/egcs-mainline/gcc/gcc/toplev.c:3061
#3  0x0002295c in c_expand_body (fndecl=0xe49150, nested_p=671089216, can_defer_p=3454324) at /Network/Servers/cauchy/homes/thorin/gkeating/co/egcs-mainline/gcc/gcc/c-decl.c:6519
#4  0x000224ec in finish_function (nested=0, can_defer_p=1) at /Network/Servers/cauchy/homes/thorin/gkeating/co/egcs-mainline/gcc/gcc/c-decl.c:6390
#5  0x00002b18 in yyparse () at c-parse.y:403
#6  0x000106c0 in c_common_parse_file (set_yydebug=173) at /Network/Servers/cauchy/homes/thorin/gkeating/co/egcs-mainline/gcc/gcc/c-lex.c:159
#7  0x000985d4 in compile_file () at /Network/Servers/cauchy/homes/thorin/gkeating/co/egcs-mainline/gcc/gcc/toplev.c:2121
#8  0x0009dad0 in do_compile () at /Network/Servers/cauchy/homes/thorin/gkeating/co/egcs-mainline/gcc/gcc/toplev.c:5334
#9  0x0009db9c in toplev_main (argc=23, argv=0xbffffa80) at /Network/Servers/cauchy/homes/thorin/gkeating/co/egcs-mainline/gcc/gcc/toplev.c:5364
#10 0x00001920 in _start (argc=23, argv=0xbffffa80, envp=0xbffffae0) at /SourceCache/Csu/Csu-45/crt.c:267
#11 0x000017a0 in start ()


-- 
- Geoffrey Keating <geoffk@geoffk.org>

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

* Re: ifcvt pass ordering
  2002-10-26 14:57 ` Geoff Keating
@ 2002-10-26 15:02   ` Jan Hubicka
  2002-10-26 15:25   ` Fix for " Jan Hubicka
  1 sibling, 0 replies; 14+ messages in thread
From: Jan Hubicka @ 2002-10-26 15:02 UTC (permalink / raw)
  To: Geoff Keating; +Cc: Jan Hubicka, gcc-patches, gcc-regression

> Jan Hubicka <jh@suse.cz> writes:
> 
> > Hi,
> > Robert's patch to disable early ifcvt passes had unwanted effect of
> > disabling almost all ifcvt with -ftracer.  -ftracer usually duplicates
> > code to make ifcvt impossible so we must run at least one pass before.
> > I would like to see this in the mainline too, but technically it is not
> > regression, so I would be happy with BIB branch too.
> > 
> > Wed Oct 16 20:23:12 CEST 2002  Jan Hubicka  <jh@suse.cz>
> > 	* toplev.c (dump_file_index): Add DFI_ce3.
> > 	(dump_file_info): Likewise.
> > 	(rest_of_compilation): Run first ifcvt pass before tracer.
> 
> This also causes a bunch of regressions on Darwin; at least, it's all
> the following:
I am just looking into it.  I guess regscan pass got lost somewhere,
that is curious since I am quite sure I was moving it before ifcvt.
Let me check.

Honza

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

* Fix for ifcvt pass ordering
  2002-10-26 14:57 ` Geoff Keating
  2002-10-26 15:02   ` Jan Hubicka
@ 2002-10-26 15:25   ` Jan Hubicka
  2002-10-29  6:30     ` Richard Henderson
  1 sibling, 1 reply; 14+ messages in thread
From: Jan Hubicka @ 2002-10-26 15:25 UTC (permalink / raw)
  To: Geoff Keating; +Cc: Jan Hubicka, gcc-patches, gcc-regression, rth

> Jan Hubicka <jh@suse.cz> writes:
> 
> > Hi,
> > Robert's patch to disable early ifcvt passes had unwanted effect of
> > disabling almost all ifcvt with -ftracer.  -ftracer usually duplicates
> > code to make ifcvt impossible so we must run at least one pass before.
> > I would like to see this in the mainline too, but technically it is not
> > regression, so I would be happy with BIB branch too.
> > 
> > Wed Oct 16 20:23:12 CEST 2002  Jan Hubicka  <jh@suse.cz>
> > 	* toplev.c (dump_file_index): Add DFI_ce3.
> > 	(dump_file_info): Likewise.
> > 	(rest_of_compilation): Run first ifcvt pass before tracer.
> 
> This also causes a bunch of regressions on Darwin; at least, it's all
> the following:
> 
> native gcc.sum gcc.c-torture/compile/20000802-1.c,
> native gcc.sum gcc.c-torture/compile/20020604-1.c,
> native gcc.sum gcc.c-torture/compile/900407-1.c,
> native gcc.sum gcc.c-torture/compile/920501-4.c,
> native gcc.sum gcc.c-torture/compile/921011-1.c,
> native gcc.sum gcc.c-torture/compile/921013-1.c,
> native gcc.sum gcc.c-torture/compile/921206-1.c,
> native gcc.sum gcc.c-torture/compile/930523-1.c,
> native gcc.sum gcc.c-torture/compile/980329-1.c,
> native gcc.sum gcc.c-torture/compile/980506-2.c,
> native gcc.sum gcc.c-torture/execute/20000412-4.c
> native gcc.sum gcc.c-torture/execute/20000503-1.c
> native gcc.sum gcc.c-torture/execute/20000511-1.c
> native gcc.sum gcc.c-torture/execute/20020406-1.c
> native gcc.sum gcc.c-torture/execute/20020716-1.c
> native gcc.sum gcc.c-torture/execute/930123-1.c
> native gcc.sum gcc.c-torture/execute/931012-1.c

Hi,
the problem has been uncovered latent bug - we didn't run reg-scan pass in all
ocasions when cse2 has been disabled but used the info in final pass by
enabling alias analysis.  I am just testing the attached patch that makes the
ifcvt1 pass to finish with reg_scan data valid and all the subsequent passes to
update it as needed.

I've verified it to test the testcase, bootstrap in progress.  OK if it passes?

I apologize for the breakage.  Since I didn't expected the patch to
change something I must've missed the failures somehow.

Honza
Sun Oct 27 00:20:08 CEST 2002  Jan Hubicka  <jh@suse.cz>
	* toplev.c (rest_of_compilation): Reorganize way reg_scan is called
	before final pass.
Index: toplev.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/toplev.c,v
retrieving revision 1.684
diff -c -3 -p -r1.684 toplev.c
*** toplev.c	25 Oct 2002 23:46:06 -0000	1.684
--- toplev.c	26 Oct 2002 22:19:53 -0000
*************** rest_of_compilation (decl)
*** 2987,3003 ****
        close_dump_file (DFI_bp, print_rtl_with_bb, insns);
        timevar_pop (TV_BRANCH_PROB);
      }
!   if (flag_if_conversion)
      {
-       timevar_push (TV_IFCVT);
-       if (rtl_dump_file)
- 	dump_flow_info (rtl_dump_file);
        open_dump_file (DFI_ce1, decl);
        cleanup_cfg (CLEANUP_EXPENSIVE);
        reg_scan (insns, max_reg_num (), 0);
!       if_convert (0);
        close_dump_file (DFI_ce1, print_rtl_with_bb, get_insns ());
-       timevar_pop (TV_IFCVT);
      }
    if (flag_tracer)
      {
--- 2987,3010 ----
        close_dump_file (DFI_bp, print_rtl_with_bb, insns);
        timevar_pop (TV_BRANCH_PROB);
      }
!   if (optimize >= 0)
      {
        open_dump_file (DFI_ce1, decl);
+       if (flag_if_conversion)
+ 	{
+ 	  timevar_push (TV_IFCVT);
+ 	  if (rtl_dump_file)
+ 	    dump_flow_info (rtl_dump_file);
+ 	  cleanup_cfg (CLEANUP_EXPENSIVE);
+ 	  reg_scan (insns, max_reg_num (), 0);
+ 	  if_convert (0);
+ 	  timevar_pop (TV_IFCVT);
+ 	}
+       timevar_push (TV_JUMP);
        cleanup_cfg (CLEANUP_EXPENSIVE);
        reg_scan (insns, max_reg_num (), 0);
!       timevar_pop (TV_JUMP);
        close_dump_file (DFI_ce1, print_rtl_with_bb, get_insns ());
      }
    if (flag_tracer)
      {
*************** rest_of_compilation (decl)
*** 3005,3051 ****
        open_dump_file (DFI_tracer, decl);
        if (rtl_dump_file)
  	dump_flow_info (rtl_dump_file);
-       cleanup_cfg (CLEANUP_EXPENSIVE);
        tracer ();
        cleanup_cfg (CLEANUP_EXPENSIVE);
        close_dump_file (DFI_tracer, print_rtl_with_bb, get_insns ());
        timevar_pop (TV_TRACER);
-       reg_scan (get_insns (), max_reg_num (), 0);
      }
  
!   if (optimize > 0)
      {
        timevar_push (TV_CSE2);
        open_dump_file (DFI_cse2, decl);
        if (rtl_dump_file)
  	dump_flow_info (rtl_dump_file);
  
!       if (flag_rerun_cse_after_loop)
  	{
  	  timevar_push (TV_JUMP);
! 	  reg_scan (insns, max_reg_num (), 0);
! 	  timevar_pop (TV_JUMP);
! 
  	  cleanup_cfg (CLEANUP_EXPENSIVE);
! 	  /* CFG is no longer maintained up-to-date.  */
! 	  reg_scan (insns, max_reg_num (), 0);
! 	  tem = cse_main (insns, max_reg_num (), 1, rtl_dump_file);
! 	  purge_all_dead_edges (0);
! 	  delete_trivially_dead_insns (insns, max_reg_num ());
! 
! 	  if (tem)
! 	    {
! 	      timevar_push (TV_JUMP);
! 	      rebuild_jump_labels (insns);
! 	      cleanup_cfg (CLEANUP_EXPENSIVE);
! 	      timevar_pop (TV_JUMP);
! 	    }
  	}
! 
        close_dump_file (DFI_cse2, print_rtl_with_bb, insns);
-       timevar_pop (TV_CSE2);
- 
        ggc_collect ();
      }
  
    cse_not_expected = 1;
--- 3012,3046 ----
        open_dump_file (DFI_tracer, decl);
        if (rtl_dump_file)
  	dump_flow_info (rtl_dump_file);
        tracer ();
        cleanup_cfg (CLEANUP_EXPENSIVE);
+       reg_scan (insns, max_reg_num (), 0);
        close_dump_file (DFI_tracer, print_rtl_with_bb, get_insns ());
        timevar_pop (TV_TRACER);
      }
  
!   if (flag_rerun_cse_after_loop)
      {
        timevar_push (TV_CSE2);
        open_dump_file (DFI_cse2, decl);
        if (rtl_dump_file)
  	dump_flow_info (rtl_dump_file);
+       /* CFG is no longer maintained up-to-date.  */
+       tem = cse_main (insns, max_reg_num (), 1, rtl_dump_file);
+       purge_all_dead_edges (0);
+       delete_trivially_dead_insns (insns, max_reg_num ());
  
!       if (tem)
  	{
  	  timevar_push (TV_JUMP);
! 	  rebuild_jump_labels (insns);
  	  cleanup_cfg (CLEANUP_EXPENSIVE);
! 	  timevar_pop (TV_JUMP);
  	}
!       reg_scan (insns, max_reg_num (), 0);
        close_dump_file (DFI_cse2, print_rtl_with_bb, insns);
        ggc_collect ();
+       timevar_pop (TV_CSE2);
      }
  
    cse_not_expected = 1;

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

* Re: Fix for ifcvt pass ordering
  2002-10-26 15:25   ` Fix for " Jan Hubicka
@ 2002-10-29  6:30     ` Richard Henderson
  0 siblings, 0 replies; 14+ messages in thread
From: Richard Henderson @ 2002-10-29  6:30 UTC (permalink / raw)
  To: Jan Hubicka; +Cc: Geoff Keating, gcc-patches, gcc-regression

On Sun, Oct 27, 2002 at 12:24:57AM +0200, Jan Hubicka wrote:
> 	* toplev.c (rest_of_compilation): Reorganize way reg_scan is called
> 	before final pass.

Ok.


r~

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

* Re: ifcvt pass ordering
  2002-10-16 11:24 ifcvt pass ordering Jan Hubicka
  2002-10-25 13:57 ` Richard Henderson
  2002-10-26 14:57 ` Geoff Keating
@ 2002-12-10 12:30 ` Eric Botcazou
  2 siblings, 0 replies; 14+ messages in thread
From: Eric Botcazou @ 2002-12-10 12:30 UTC (permalink / raw)
  To: Jan Hubicka; +Cc: gcc-patches

> Wed Oct 16 20:23:12 CEST 2002  Jan Hubicka  <jh@suse.cz>
> 	* toplev.c (dump_file_index): Add DFI_ce3.
> 	(dump_file_info): Likewise.
> 	(rest_of_compilation): Run first ifcvt pass before tracer.

As the reporter of PR optimization/8848 says, it would be nice if you updated 
the docs accordingly, i.e mentioned the new pass and shifted the pass index 
numbers.

-- 
Eric Botcazou

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

end of thread, other threads:[~2002-12-10 20:30 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-10-16 11:24 ifcvt pass ordering Jan Hubicka
2002-10-25 13:57 ` Richard Henderson
2002-10-25 14:07   ` Jan Hubicka
2002-10-25 14:10     ` Richard Henderson
2002-10-25 14:12       ` Jan Hubicka
2002-10-25 14:19         ` Richard Henderson
2002-10-25 14:27           ` Jan Hubicka
2002-10-25 15:02             ` Richard Henderson
2002-10-26 10:27               ` Graham Stott
2002-10-26 14:57 ` Geoff Keating
2002-10-26 15:02   ` Jan Hubicka
2002-10-26 15:25   ` Fix for " Jan Hubicka
2002-10-29  6:30     ` Richard Henderson
2002-12-10 12:30 ` Eric Botcazou

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