This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/22100] [4.1 regression] internal compiler error: in tree_verify_flow_info
- From: "hubicka at ucw dot cz" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 19 Jun 2005 16:58:50 -0000
- Subject: [Bug tree-optimization/22100] [4.1 regression] internal compiler error: in tree_verify_flow_info
- References: <20050617060017.22100.fxcoudert@gcc.gnu.org>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From hubicka at ucw dot cz 2005-06-19 16:58 -------
Subject: Re: [4.1 regression] internal compiler error: in tree_verify_flow_info
Hi,
this is patch I am testing...
2005-06-19 Jan Hubicka <jh@suse.cz>
* cfgloop.h (DLTHE_RECORD_COPY_NUMBER): New flag.
* cfgloopmanip.c (duplicate_loop_to_header_edge): Set aux flags only
when asked for.
* loop-unroll.c (peel_loop_completely, unroll_loop_constant_iterations,
unroll_loop_runtime_iterations, peel_loop_simple, unroll_loop_stupid):
Update call of duplicate_loop_to_header_edge.
(apply_opt_in_copies): Clear out aux pointers.
Index: cfgloop.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfgloop.h,v
retrieving revision 1.46
diff -c -3 -p -r1.46 cfgloop.h
*** cfgloop.h 2 Jun 2005 10:19:12 -0000 1.46
--- cfgloop.h 19 Jun 2005 14:47:09 -0000
*************** extern bool can_duplicate_loop_p (struct
*** 296,301 ****
--- 296,303 ----
#define DLTHE_FLAG_UPDATE_FREQ 1 /* Update frequencies in
duplicate_loop_to_header_edge. */
+ #define DLTHE_RECORD_COPY_NUMBER 2 /* Record copy number in the aux
+ field of newly create BB. */
extern struct loop * duplicate_loop (struct loops *, struct loop *,
struct loop *);
Index: cfgloopmanip.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cfgloopmanip.c,v
retrieving revision 1.48
diff -c -3 -p -r1.48 cfgloopmanip.c
*** cfgloopmanip.c 15 Jun 2005 23:05:19 -0000 1.48
--- cfgloopmanip.c 19 Jun 2005 14:47:09 -0000
*************** duplicate_loop_to_header_edge (struct lo
*** 982,992 ****
/* Copy bbs. */
copy_bbs (bbs, n, new_bbs, spec_edges, 2, new_spec_edges, loop);
! for (i = 0; i < n; i++)
! {
! gcc_assert (!new_bbs[i]->aux);
! new_bbs[i]->aux = (void *)(size_t)(j + 1);
! }
/* Note whether the blocks and edges belong to an irreducible loop. */
if (add_irreducible_flag)
--- 982,993 ----
/* Copy bbs. */
copy_bbs (bbs, n, new_bbs, spec_edges, 2, new_spec_edges, loop);
! if (flags & DLTHE_RECORD_COPY_NUMBER)
! for (i = 0; i < n; i++)
! {
! gcc_assert (!new_bbs[i]->aux);
! new_bbs[i]->aux = (void *)(size_t)(j + 1);
! }
/* Note whether the blocks and edges belong to an irreducible loop. */
if (add_irreducible_flag)
Index: loop-unroll.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/loop-unroll.c,v
retrieving revision 1.34
diff -c -3 -p -r1.34 loop-unroll.c
*** loop-unroll.c 15 Jun 2005 23:05:22 -0000 1.34
--- loop-unroll.c 19 Jun 2005 14:47:09 -0000
*************** peel_loop_completely (struct loops *loop
*** 519,525 ****
loops, npeel,
wont_exit, desc->out_edge,
remove_edges, &n_remove_edges,
! DLTHE_FLAG_UPDATE_FREQ);
gcc_assert (ok);
free (wont_exit);
--- 519,527 ----
loops, npeel,
wont_exit, desc->out_edge,
remove_edges, &n_remove_edges,
! DLTHE_FLAG_UPDATE_FREQ
! | (opt_info
! ? DLTHE_RECORD_COPY_NUMBER : 0));
gcc_assert (ok);
free (wont_exit);
*************** unroll_loop_constant_iterations (struct
*** 717,723 ****
loops, exit_mod,
wont_exit, desc->out_edge,
remove_edges, &n_remove_edges,
! DLTHE_FLAG_UPDATE_FREQ);
gcc_assert (ok);
if (opt_info && exit_mod > 1)
--- 719,728 ----
loops, exit_mod,
wont_exit, desc->out_edge,
remove_edges, &n_remove_edges,
! DLTHE_FLAG_UPDATE_FREQ
! | (opt_info && exit_mod > 1
! ? DLTHE_RECORD_COPY_NUMBER
! : 0));
gcc_assert (ok);
if (opt_info && exit_mod > 1)
*************** unroll_loop_constant_iterations (struct
*** 753,759 ****
loops, exit_mod + 1,
wont_exit, desc->out_edge,
remove_edges, &n_remove_edges,
! DLTHE_FLAG_UPDATE_FREQ);
gcc_assert (ok);
if (opt_info && exit_mod > 0)
--- 758,767 ----
loops, exit_mod + 1,
wont_exit, desc->out_edge,
remove_edges, &n_remove_edges,
! DLTHE_FLAG_UPDATE_FREQ
! | (opt_info && exit_mod > 0
! ? DLTHE_RECORD_COPY_NUMBER
! : 0));
gcc_assert (ok);
if (opt_info && exit_mod > 0)
*************** unroll_loop_constant_iterations (struct
*** 777,783 ****
loops, max_unroll,
wont_exit, desc->out_edge,
remove_edges, &n_remove_edges,
! DLTHE_FLAG_UPDATE_FREQ);
gcc_assert (ok);
if (opt_info)
--- 785,794 ----
loops, max_unroll,
wont_exit, desc->out_edge,
remove_edges, &n_remove_edges,
! DLTHE_FLAG_UPDATE_FREQ
! | (opt_info
! ? DLTHE_RECORD_COPY_NUMBER
! : 0));
gcc_assert (ok);
if (opt_info)
*************** unroll_loop_runtime_iterations (struct l
*** 1097,1103 ****
loops, max_unroll,
wont_exit, desc->out_edge,
remove_edges, &n_remove_edges,
! DLTHE_FLAG_UPDATE_FREQ);
gcc_assert (ok);
if (opt_info)
--- 1108,1117 ----
loops, max_unroll,
wont_exit, desc->out_edge,
remove_edges, &n_remove_edges,
! DLTHE_FLAG_UPDATE_FREQ
! | (opt_info
! ? DLTHE_RECORD_COPY_NUMBER
! : 0));
gcc_assert (ok);
if (opt_info)
*************** peel_loop_simple (struct loops *loops, s
*** 1274,1280 ****
ok = duplicate_loop_to_header_edge (loop, loop_preheader_edge (loop),
loops, npeel, wont_exit,
NULL, NULL,
! NULL, DLTHE_FLAG_UPDATE_FREQ);
gcc_assert (ok);
free (wont_exit);
--- 1288,1297 ----
ok = duplicate_loop_to_header_edge (loop, loop_preheader_edge (loop),
loops, npeel, wont_exit,
NULL, NULL,
! NULL, DLTHE_FLAG_UPDATE_FREQ
! | (opt_info
! ? DLTHE_RECORD_COPY_NUMBER
! : 0));
gcc_assert (ok);
free (wont_exit);
*************** unroll_loop_stupid (struct loops *loops,
*** 1422,1428 ****
ok = duplicate_loop_to_header_edge (loop, loop_latch_edge (loop),
loops, nunroll, wont_exit,
NULL, NULL, NULL,
! DLTHE_FLAG_UPDATE_FREQ);
gcc_assert (ok);
if (opt_info)
--- 1439,1448 ----
ok = duplicate_loop_to_header_edge (loop, loop_latch_edge (loop),
loops, nunroll, wont_exit,
NULL, NULL, NULL,
! DLTHE_FLAG_UPDATE_FREQ
! | (opt_info
! ? DLTHE_RECORD_COPY_NUMBER
! : 0));
gcc_assert (ok);
if (opt_info)
*************** apply_opt_in_copies (struct opt_info *op
*** 2064,2069 ****
--- 2084,2090 ----
duplicate_loop_to_header_edge. */
delta = determine_split_iv_delta ((size_t)bb->aux, n_copies,
unrolling);
+ bb->aux = 0;
orig_insn = BB_HEAD (orig_bb);
for (insn = BB_HEAD (bb); insn != NEXT_INSN (BB_END (bb)); insn = next)
{
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22100