]> gcc.gnu.org Git - gcc.git/commitdiff
sched-deps.c (sched_analyze_insn): Force volatile memory reads to be output before...
authorRichard Henderson <rth@redhat.com>
Sun, 20 May 2001 20:03:15 +0000 (13:03 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Sun, 20 May 2001 20:03:15 +0000 (13:03 -0700)
        * sched-deps.c (sched_analyze_insn): Force volatile memory reads
        to be output before a branch.

From-SVN: r42358

gcc/ChangeLog
gcc/sched-deps.c

index 7843db40cd11b7e76d75edd2f84d2f0bf2fbbedd..1ed2011415b429e74d1478a24217657bcf2a7d98 100644 (file)
@@ -1,3 +1,8 @@
+2001-05-20  Richard Henderson  <rth@redhat.com>
+
+       * sched-deps.c (sched_analyze_insn): Force volatile memory reads
+       to be output before a branch.
+
 2001-05-20  Richard Henderson  <rth@redhat.com>
 
        * Makefile.in (dwarf2asm.o): Depend on $(TREE_H).
index ecdf28212ba783fee4f1980658cef6dbe2575b2c..d303e7a86df9a00a9186e08703fb2acc8c8bb8bc 100644 (file)
@@ -1044,12 +1044,25 @@ sched_analyze_insn (deps, x, insn, loop_notes)
 
          CLEAR_REG_SET (&tmp);
 
+         /* All memory writes and volatile reads must happen before the
+            jump.  Non-volatile reads must happen before the jump iff
+            the result is needed by the above register used mask.  */
+
          pending = deps->pending_write_insns;
          pending_mem = deps->pending_write_mems;
          while (pending)
            {
              add_dependence (insn, XEXP (pending, 0), REG_DEP_OUTPUT);
+             pending = XEXP (pending, 1);
+             pending_mem = XEXP (pending_mem, 1);
+           }
 
+         pending = deps->pending_read_insns;
+         pending_mem = deps->pending_read_mems;
+         while (pending)
+           {
+             if (MEM_VOLATILE_P (XEXP (pending_mem, 0)))
+               add_dependence (insn, XEXP (pending, 0), REG_DEP_OUTPUT);
              pending = XEXP (pending, 1);
              pending_mem = XEXP (pending_mem, 1);
            }
This page took 0.063936 seconds and 5 git commands to generate.