diff options
author | Jakub Jelinek <jakub@redhat.com> | 2012-02-04 17:51:31 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-02-04 17:51:31 +0100 |
commit | 224394819201a731590dd3ca72ee56565618063b (patch) | |
tree | c1ddc4eafc802a109e3102c8c4937f75196f0bbb /gcc | |
parent | d5785e7634e1269fdb5c710c93d9bc05d5c6130f (diff) | |
download | gcc-224394819201a731590dd3ca72ee56565618063b.zip gcc-224394819201a731590dd3ca72ee56565618063b.tar.gz gcc-224394819201a731590dd3ca72ee56565618063b.tar.bz2 |
re PR rtl-optimization/52095 (ICE compiling gcc.dg/sms-7.c: SEGV in fprintf)
PR rtl-optimization/52095
* modulo-sched.c (dump_insn_locator): New function.
(loop_canon_p, sms_schedule): Use it.
From-SVN: r183895
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/modulo-sched.c | 68 |
2 files changed, 44 insertions, 28 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0dba808..997ee5f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2012-02-04 Jakub Jelinek <jakub@redhat.com> + PR rtl-optimization/52095 + * modulo-sched.c (dump_insn_locator): New function. + (loop_canon_p, sms_schedule): Use it. + PR rtl-optimization/52113 * lower-subreg.c (decompose_multiword_subregs): Call recog_memoized even for decomposable shift/zext insns. diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c index 969b273..b1b1af3 100644 --- a/gcc/modulo-sched.c +++ b/gcc/modulo-sched.c @@ -1,5 +1,5 @@ /* Swing Modulo Scheduling implementation. - Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 + Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. Contributed by Ayal Zaks and Mustafa Hagog <zaks,mustafa@il.ibm.com> @@ -1246,6 +1246,19 @@ loop_single_full_bb_p (struct loop *loop) return true; } +/* Dump file:line from INSN's location info to dump_file. */ + +static void +dump_insn_locator (rtx insn) +{ + if (dump_file && INSN_LOCATOR (insn)) + { + const char *file = insn_file (insn); + if (file) + fprintf (dump_file, " %s:%i", file, insn_line (insn)); + } +} + /* A simple loop from SMS point of view; it is a loop that is composed of either a single basic block or two BBs - a header and a latch. */ #define SIMPLE_SMS_LOOP_P(loop) ((loop->num_nodes < 3 ) \ @@ -1271,9 +1284,9 @@ loop_canon_p (struct loop *loop) { rtx insn = BB_END (loop->header); - fprintf (dump_file, "SMS loop many exits "); - fprintf (dump_file, " %s %d (file, line)\n", - insn_file (insn), insn_line (insn)); + fprintf (dump_file, "SMS loop many exits"); + dump_insn_locator (insn); + fprintf (dump_file, "\n"); } return false; } @@ -1284,9 +1297,9 @@ loop_canon_p (struct loop *loop) { rtx insn = BB_END (loop->header); - fprintf (dump_file, "SMS loop many BBs. "); - fprintf (dump_file, " %s %d (file, line)\n", - insn_file (insn), insn_line (insn)); + fprintf (dump_file, "SMS loop many BBs."); + dump_insn_locator (insn); + fprintf (dump_file, "\n"); } return false; } @@ -1407,13 +1420,13 @@ sms_schedule (void) } if (dump_file) - { - rtx insn = BB_END (loop->header); - - fprintf (dump_file, "SMS loop num: %d, file: %s, line: %d\n", - loop->num, insn_file (insn), insn_line (insn)); + { + rtx insn = BB_END (loop->header); - } + fprintf (dump_file, "SMS loop num: %d", loop->num); + dump_insn_locator (insn); + fprintf (dump_file, "\n"); + } if (! loop_canon_p (loop)) continue; @@ -1440,9 +1453,8 @@ sms_schedule (void) { if (dump_file) { - fprintf (dump_file, " %s %d (file, line)\n", - insn_file (tail), insn_line (tail)); - fprintf (dump_file, "SMS single-bb-loop\n"); + dump_insn_locator (tail); + fprintf (dump_file, "\nSMS single-bb-loop\n"); if (profile_info && flag_branch_probabilities) { fprintf (dump_file, "SMS loop-count "); @@ -1543,14 +1555,15 @@ sms_schedule (void) continue; if (dump_file) - { - rtx insn = BB_END (loop->header); + { + rtx insn = BB_END (loop->header); - fprintf (dump_file, "SMS loop num: %d, file: %s, line: %d\n", - loop->num, insn_file (insn), insn_line (insn)); + fprintf (dump_file, "SMS loop num: %d", loop->num); + dump_insn_locator (insn); + fprintf (dump_file, "\n"); - print_ddg (dump_file, g); - } + print_ddg (dump_file, g); + } get_ebb_head_tail (loop->header, loop->header, &head, &tail); @@ -1561,9 +1574,8 @@ sms_schedule (void) if (dump_file) { - fprintf (dump_file, " %s %d (file, line)\n", - insn_file (tail), insn_line (tail)); - fprintf (dump_file, "SMS single-bb-loop\n"); + dump_insn_locator (tail); + fprintf (dump_file, "\nSMS single-bb-loop\n"); if (profile_info && flag_branch_probabilities) { fprintf (dump_file, "SMS loop-count "); @@ -1705,9 +1717,9 @@ sms_schedule (void) if (dump_file) { - fprintf (dump_file, - "%s:%d SMS succeeded %d %d (with ii, sc)\n", - insn_file (tail), insn_line (tail), ps->ii, stage_count); + dump_insn_locator (tail); + fprintf (dump_file, " SMS succeeded %d %d (with ii, sc)\n", + ps->ii, stage_count); print_partial_schedule (ps, dump_file); } |