aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2014-08-06 15:40:26 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2014-08-06 15:40:26 +0000
commitf50d71ec0f18c0ddf82c3127cab50e816e64c838 (patch)
tree91829d1585b1f5c879ae27113c00a1e222ecca95
parent9d6171dce1c59155448881139181fbe158fd3a60 (diff)
downloadgcc-f50d71ec0f18c0ddf82c3127cab50e816e64c838.zip
gcc-f50d71ec0f18c0ddf82c3127cab50e816e64c838.tar.gz
gcc-f50d71ec0f18c0ddf82c3127cab50e816e64c838.tar.bz2
re PR debug/61923 (-fcompare-debug errors while building Linux kernel.)
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. From-SVN: r213675
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/haifa-sched.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr61923.c36
4 files changed, 53 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 741f0ac..d54b5b8 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 Martin Jambor <mjambor@suse.cz>
PR ipa/61393
diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c
index f93fe4c..fb15e0d 100644
--- a/gcc/haifa-sched.c
+++ b/gcc/haifa-sched.c
@@ -2970,7 +2970,7 @@ advance_one_cycle (void)
{
advance_state (curr_state);
if (sched_verbose >= 4)
- fprintf (sched_dump, ";;\tAdvanced a state.\n");
+ fprintf (sched_dump, ";;\tAdvance the current state.\n");
}
/* Update register pressure after scheduling INSN. */
@@ -6052,6 +6052,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) ())
@@ -6122,7 +6123,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;
@@ -6409,11 +6409,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 096c489..5d088e6 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 Alan Lawrence <alan.lawrence@arm.com>
* gcc.target/aarch64/vdup_n_2.c: New test.
diff --git a/gcc/testsuite/gcc.target/i386/pr61923.c b/gcc/testsuite/gcc.target/i386/pr61923.c
new file mode 100644
index 0000000..458158c
--- /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);
+}