OSDN Git Service

2004-06-10 Vladimir Makarov <vmakarov@redhat.com>
authorvmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Jun 2004 21:06:07 +0000 (21:06 +0000)
committervmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 10 Jun 2004 21:06:07 +0000 (21:06 +0000)
PR target/15653
* haifa-sched.c (schedule_block): Finish cycle after issuing asm
insn.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@82942 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/haifa-sched.c

index 7bd6609..6a1b4db 100644 (file)
@@ -1,3 +1,9 @@
+2004-06-10  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR target/15653
+       * haifa-sched.c (schedule_block): Finish cycle after issuing asm
+       insn.
+
 2004-06-10  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
        PR web/15263
index af8b8a7..033aaae 100644 (file)
@@ -2378,6 +2378,7 @@ schedule_block (int b, int rgn_n_insns)
        {
          rtx insn;
          int cost;
+         bool asm_p = false;
 
          if (sched_verbose >= 2)
            {
@@ -2435,9 +2436,9 @@ schedule_block (int b, int rgn_n_insns)
              memcpy (temp_state, curr_state, dfa_state_size);
              if (recog_memoized (insn) < 0)
                {
-                 if (!first_cycle_insn_p
-                     && (GET_CODE (PATTERN (insn)) == ASM_INPUT
-                         || asm_noperands (PATTERN (insn)) >= 0))
+                 asm_p = (GET_CODE (PATTERN (insn)) == ASM_INPUT
+                          || asm_noperands (PATTERN (insn)) >= 0);
+                 if (!first_cycle_insn_p && asm_p)
                    /* This is asm insn which is tryed to be issued on the
                       cycle not first.  Issue it on the next cycle.  */
                    cost = 1;
@@ -2552,6 +2553,10 @@ schedule_block (int b, int rgn_n_insns)
            can_issue_more--;
 
          advance = schedule_insn (insn, &ready, clock_var);
+
+         /* After issuing an asm insn we should start a new cycle.  */
+         if (advance == 0 && asm_p)
+           advance = 1;
          if (advance != 0)
            break;