diff options
| author | vmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-08-06 15:35:49 +0000 |
|---|---|---|
| committer | vmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-08-06 15:35:49 +0000 |
| commit | 29d51b64c8a7d12e47200e7205b198661fcff96b (patch) | |
| tree | a3338578058625956429ca0a29082737c0d33403 | |
| parent | e892c6256cf6f4bc627c38cb7be0786bb3622a47 (diff) | |
| download | ppe42-gcc-29d51b64c8a7d12e47200e7205b198661fcff96b.tar.gz ppe42-gcc-29d51b64c8a7d12e47200e7205b198661fcff96b.zip | |
2014-08-06 Vladimir Makarov <vmakarov@redhat.com>
PR debug/61923
* haifa-sched.c (advance_one_cycle): Fix dump.
(schedule_block): Don't advance cycle if we are already at the
beginning of the cycle.
2014-08-06 Vladimir Makarov <vmakarov@redhat.com>
PR debug/61923
* gcc.target/i386/pr61923.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_9-branch@213674 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 7 | ||||
| -rw-r--r-- | gcc/haifa-sched.c | 8 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/gcc.target/i386/pr61923.c | 36 |
4 files changed, 53 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 37de306b655..ac91d1880ef 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-08-06 Vladimir Makarov <vmakarov@redhat.com> + + PR debug/61923 + * haifa-sched.c (advance_one_cycle): Fix dump. + (schedule_block): Don't advance cycle if we are already at the + beginning of the cycle. + 2014-08-06 Richard Biener <rguenther@suse.de> PR tree-optimization/61320 diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index 2d66e5cab6a..653cb8272ea 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -2972,7 +2972,7 @@ advance_one_cycle (void) { advance_state (curr_state); if (sched_verbose >= 6) - fprintf (sched_dump, ";;\tAdvanced a state.\n"); + fprintf (sched_dump, ";;\tAdvance the current state.\n"); } /* Update register pressure after scheduling INSN. */ @@ -6007,6 +6007,7 @@ schedule_block (basic_block *target_bb, state_t init_state) modulo_insns_scheduled = 0; ls.modulo_epilogue = false; + ls.first_cycle_insn_p = true; /* Loop until all the insns in BB are scheduled. */ while ((*current_sched_info->schedule_more_p) ()) @@ -6077,7 +6078,6 @@ schedule_block (basic_block *target_bb, state_t init_state) if (must_backtrack) goto do_backtrack; - ls.first_cycle_insn_p = true; ls.shadows_only_p = false; cycle_issued_insns = 0; ls.can_issue_more = issue_rate; @@ -6363,11 +6363,13 @@ schedule_block (basic_block *target_bb, state_t init_state) break; } } + ls.first_cycle_insn_p = true; } if (ls.modulo_epilogue) success = true; end_schedule: - advance_one_cycle (); + if (!ls.first_cycle_insn_p) + advance_one_cycle (); perform_replacements_new_cycle (); if (modulo_ii > 0) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dda4b6a390f..255312f9e19 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-08-06 Vladimir Makarov <vmakarov@redhat.com> + + PR debug/61923 + * gcc.target/i386/pr61923.c: New test. + 2014-08-06 Jakub Jelinek <jakub@redhat.com> PR rtl-optimization/61801 diff --git a/gcc/testsuite/gcc.target/i386/pr61923.c b/gcc/testsuite/gcc.target/i386/pr61923.c new file mode 100644 index 00000000000..458158cc6dc --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr61923.c @@ -0,0 +1,36 @@ +/* PR debug/61923 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fcompare-debug" } */ + +typedef struct +{ + struct + { + struct + { + char head; + } tickets; + }; +} arch_spinlock_t; +struct ext4_map_blocks +{ + int m_lblk; + int m_len; + int m_flags; +}; +int ext4_da_map_blocks_ei_0; +void fn1 (int p1, struct ext4_map_blocks *p2) +{ + int ret; + if (p2->m_flags) + { + ext4_da_map_blocks_ei_0++; + arch_spinlock_t *lock; + switch (sizeof *&lock->tickets.head) + case 1: + asm("" : "+m"(*&lock->tickets.head) : ""(0)); + __asm__(""); + ret = 0; + } + fn2 (p2->m_lblk, p2->m_len); +} |

