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