Scheduler questions (related to PR17808)
Vladimir Makarov
vmakarov@redhat.com
Tue Jul 5 18:30:00 GMT 2005
Andrey Belevantsev wrote:
> Vladimir Makarov wrote:
>
>> I'll look at this PR today.
>
>
> We've looked today at this issue. We think the problem is that
> proposed patch of sched_get_condition() treats conditional jumps
> likely to COND_EXECs, but it doesn't fix other places in sched-deps,
> where COND_EXECs are considered. Maxim Kuvyrkov proposed the attached
> patch, which allows gcc to bootstrap on ia64 and fixes the testcase in
> PR.
This patch is ok to fix PR17808. You just need to remove conditional
#if and Richard's comment in sched_get_condition.
>
> We've also found that current mainline ICEs compiling the testcase
> with "-O0 -fschedule-insns -fschedule-insns2". That is because after
> reload several pseudos still remain in global_live_at_start sets. The
> pseudos then appear in regsets through
> compute_jump_reg_dependencies(), and sched-deps segfaults at
> EXECUTE_IF_SET_IN_REG_SET loop at sched-deps.c:948.
>
> We don't know reload well enough to know for sure which place should
> be fixed in reload, or maybe in update_life_info(). Is this issue
> worth opening another PR?
As Jim Wilson wrote some combinations of options for IA64 are not
supposed to work since starting the port implementation.
>
> Andrey
>
>
>
>
>------------------------------------------------------------------------
>
>--- gcc/gcc/sched-deps.c Sun Jun 19 16:37:49 2005
>+++ orig/gcc/sched-deps.c Thu Jun 30 18:00:23 2005
>@@ -149,7 +149,7 @@
> return 0;
>
> src = SET_SRC (pc_set (insn));
>-#if 0
>+#if 1
> /* The previous code here was completely invalid and could never extract
> the condition from a jump. This code does the correct thing, but that
> triggers latent bugs later in the scheduler on ports with conditional
>@@ -1019,7 +1019,8 @@
> {
> /* In the case of barrier the most added dependencies are not
> real, so we use anti-dependence here. */
>- if (GET_CODE (PATTERN (insn)) == COND_EXEC)
>+ /* if (GET_CODE (PATTERN (insn)) == COND_EXEC) */
>+ if (sched_get_condition (insn))
> {
> EXECUTE_IF_SET_IN_REG_SET (&deps->reg_last_in_use, 0, i, rsi)
> {
>@@ -1066,7 +1067,8 @@
> {
> /* If the current insn is conditional, we can't free any
> of the lists. */
>- if (GET_CODE (PATTERN (insn)) == COND_EXEC)
>+ /* if (GET_CODE (PATTERN (insn)) == COND_EXEC) */
>+ if (sched_get_condition (insn))
> {
> EXECUTE_IF_SET_IN_REG_SET (reg_pending_uses, 0, i, rsi)
> {
>
>
More information about the Gcc
mailing list