aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Kuvyrkov <mkuvyrkov@ispras.ru>2006-03-23 18:23:53 +0000
committerMaxim Kuvyrkov <mkuvyrkov@gcc.gnu.org>2006-03-23 18:23:53 +0000
commita57aee2ab63245bf7678a0cb18997ceb78da8ffc (patch)
treecba1bf3ad44f7516e9b9ac11a9cbb19a5bd336b2
parente584065d68f543b9c8dcc4fde3b82caab9dca73e (diff)
downloadgcc-a57aee2ab63245bf7678a0cb18997ceb78da8ffc.zip
gcc-a57aee2ab63245bf7678a0cb18997ceb78da8ffc.tar.gz
gcc-a57aee2ab63245bf7678a0cb18997ceb78da8ffc.tar.bz2
haifa-sched.c (choose_ready): Fix type of the local variable.
2006-03-23 Maxim Kuvyrkov <mkuvyrkov@ispras.ru> * haifa-sched.c (choose_ready): Fix type of the local variable. Move local variables. Add comment. (check_reg_live): Change signature. Make callable from debugger. * sched-int.h (check_reg_live): Update signature. * sched-ebb.c (check_reg_live): Update parameters. * sched-rgn.c (check_reg_live): Ditto. (region_head_or_leaf_p): Check pointer before dereferencing. * config/ia64/ia64.c (ia64_set_sched_flags): Disable data speculation before reload on optimization levels below 1. From-SVN: r112328
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/config/ia64/ia64.c2
-rw-r--r--gcc/haifa-sched.c42
-rw-r--r--gcc/sched-ebb.c2
-rw-r--r--gcc/sched-int.h2
-rw-r--r--gcc/sched-rgn.c5
6 files changed, 51 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 72fa4a5..5cb8291 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,15 @@
+2006-03-23 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
+
+ * haifa-sched.c (choose_ready): Fix type of the local variable.
+ Move local variables. Add comment.
+ (check_reg_live): Change signature. Make callable from debugger.
+ * sched-int.h (check_reg_live): Update signature.
+ * sched-ebb.c (check_reg_live): Update parameters.
+ * sched-rgn.c (check_reg_live): Ditto.
+ (region_head_or_leaf_p): Check pointer before dereferencing.
+ * config/ia64/ia64.c (ia64_set_sched_flags): Disable data speculation
+ before reload on optimization levels below 1.
+
2006-03-23 Richard Henderson <rth@redhat.com>
* config/alpha/alpha.c (alpha_legitimate_constant_p): Reject
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index 2fb1c15..81d4f35 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -6713,7 +6713,7 @@ ia64_set_sched_flags (spec_info_t spec_info)
{
int mask = 0;
- if ((mflag_sched_br_data_spec && !reload_completed)
+ if ((mflag_sched_br_data_spec && !reload_completed && optimize > 0)
|| (mflag_sched_ar_data_spec && reload_completed))
{
mask |= BEGIN_DATA;
diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c
index 84311b1..56abcda 100644
--- a/gcc/haifa-sched.c
+++ b/gcc/haifa-sched.c
@@ -2153,11 +2153,11 @@ choose_ready (struct ready_list *ready)
&& spec_info->flags & (PREFER_NON_DATA_SPEC
| PREFER_NON_CONTROL_SPEC))
{
- rtx x;
- int s;
-
for (i = 0, n = ready->n_ready; i < n; i++)
{
+ rtx x;
+ ds_t s;
+
x = ready_element (ready, i);
s = TODO_SPEC (x);
@@ -2185,6 +2185,8 @@ choose_ready (struct ready_list *ready)
|| (targetm.sched.first_cycle_multipass_dfa_lookahead_guard_spec
&& !targetm.sched.first_cycle_multipass_dfa_lookahead_guard_spec
(insn)))
+ /* Discard speculative instruction that stands first in the ready
+ list. */
{
change_queue_index (insn, 1);
return 0;
@@ -4625,9 +4627,12 @@ check_sched_flags (void)
gcc_assert (f & USE_GLAT);
}
-/* Checks global_live_at_{start, end} regsets. */
+/* Check global_live_at_{start, end} regsets.
+ If FATAL_P is TRUE, then abort execution at the first failure.
+ Overwise, print diagnostics to STDERR (this mode is for calling
+ from debugger). */
void
-check_reg_live (void)
+check_reg_live (bool fatal_p)
{
basic_block bb;
@@ -4638,11 +4643,30 @@ check_reg_live (void)
i = bb->index;
if (glat_start[i])
- gcc_assert (bitmap_equal_p (bb->il.rtl->global_live_at_start,
- glat_start[i]));
+ {
+ bool b = bitmap_equal_p (bb->il.rtl->global_live_at_start,
+ glat_start[i]);
+
+ if (!b)
+ {
+ gcc_assert (!fatal_p);
+
+ fprintf (stderr, ";; check_reg_live_at_start (%d) failed.\n", i);
+ }
+ }
+
if (glat_end[i])
- gcc_assert (bitmap_equal_p (bb->il.rtl->global_live_at_end,
- glat_end[i]));
+ {
+ bool b = bitmap_equal_p (bb->il.rtl->global_live_at_end,
+ glat_end[i]);
+
+ if (!b)
+ {
+ gcc_assert (!fatal_p);
+
+ fprintf (stderr, ";; check_reg_live_at_end (%d) failed.\n", i);
+ }
+ }
}
}
#endif /* ENABLE_CHECKING */
diff --git a/gcc/sched-ebb.c b/gcc/sched-ebb.c
index 4126a5d..d7a3db9 100644
--- a/gcc/sched-ebb.c
+++ b/gcc/sched-ebb.c
@@ -667,7 +667,7 @@ schedule_ebbs (void)
/* !!! We can't check reg_live_info here because of the fact,
that destination registers of COND_EXEC's may be dead
before scheduling (while they should be alive). Don't know why. */
- /*check_reg_live ();*/
+ /*check_reg_live (true);*/
#endif
}
sbitmap_free (large_region_blocks);
diff --git a/gcc/sched-int.h b/gcc/sched-int.h
index cdaca1b..175bd69 100644
--- a/gcc/sched-int.h
+++ b/gcc/sched-int.h
@@ -639,7 +639,7 @@ extern void add_block (basic_block, basic_block);
extern void attach_life_info (void);
#ifdef ENABLE_CHECKING
-extern void check_reg_live (void);
+extern void check_reg_live (bool);
#endif
#endif /* GCC_SCHED_INT_H */
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c
index 77eec4b..a4f037e 100644
--- a/gcc/sched-rgn.c
+++ b/gcc/sched-rgn.c
@@ -3020,7 +3020,7 @@ schedule_insns (void)
: (PROP_DEATH_NOTES | PROP_REG_INFO)));
#ifdef ENABLE_CHECKING
- check_reg_live ();
+ check_reg_live (true);
#endif
}
@@ -3266,7 +3266,8 @@ region_head_or_leaf_p (basic_block bb, int leaf_p)
i = CONTAINING_RGN (bb->index);
FOR_EACH_EDGE (e, ei, bb->succs)
- if (CONTAINING_RGN (e->dest->index) == i
+ if (e->dest != EXIT_BLOCK_PTR
+ && CONTAINING_RGN (e->dest->index) == i
/* except self-loop. */
&& e->dest != bb)
return 0;