Prevent scheduler moving cc0 setter between blocks.

Nick Clifton nickc@redhat.com
Tue Jul 29 16:56:00 GMT 2003


Hi Richard,

  The v850 port is currently failing to build because of a bug in the
  non-dfa scheduler:  The code is allowing a cc0 setter instruction to
  be pulled into an earlier block, breaking the cc0 setter/user
  dependency and causing an internal failure when the code tries to
  schedule the unaccompanied cc0 user instruction.

  This patch, developed by Vlad, fixes the problem.  May I apply it
  please ?

Cheers
        Nick
        
2003-07-28  Vladimir Makarov  <vmakarov@redhat.com>

        * sched-deps.c (sched_analyze_2): Prevent interblock move of CC0
        setter.


Index: sched-deps.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/sched-deps.c,v
retrieving revision 1.59
diff -c -p -r1.59 sched-deps.c
*** sched-deps.c        6 Jul 2003 12:35:55 -0000       1.59
--- sched-deps.c        28 Jul 2003 18:35:25 -0000
*************** sched_analyze_2 (struct deps *deps, rtx
*** 625,630 ****
--- 625,633 ----
      case CC0:
        /* User of CC0 depends on immediately preceding insn.  */
        set_sched_group_p (insn);
+       /* Don't move CC0 setter to another block (it can set up the
+        same flag for previous CC0 users which is safe).  */
+       CANT_MOVE (prev_nonnote_insn (insn)) = 1;
        return;
  #endif



More information about the Gcc-patches mailing list