re PR target/62025 (Miscompilation of openssl sha512.c)
authorJakub Jelinek <jakub@redhat.com>
Tue, 12 Aug 2014 21:24:40 +0000 (23:24 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 12 Aug 2014 21:24:40 +0000 (23:24 +0200)
PR target/62025
* sched-deps.c (find_inc): Check if inc_insn doesn't clobber
any registers that are used in mem_insn.

From-SVN: r213887

gcc/ChangeLog
gcc/sched-deps.c

index 946bc44..e1a4b56 100644 (file)
@@ -1,3 +1,9 @@
+2014-08-12  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/62025
+       * sched-deps.c (find_inc): Check if inc_insn doesn't clobber
+       any registers that are used in mem_insn.
+
 2014-08-12  Steve Ellcey  <sellcey@mips.com>
 
        * config/mips/mips.h (ASM_SPEC): Pass float options to assembler. 
index 51c1a01..049927f 100644 (file)
@@ -4751,6 +4751,24 @@ find_inc (struct mem_inc_info *mii, bool backwards)
                           "inc conflicts with store failure.\n");
                goto next;
              }
+
+         /* The inc instruction could have clobbers, make sure those
+            registers are not used in mem insn.  */
+         FOR_EACH_INSN_DEF (def, mii->inc_insn)
+           if (!reg_overlap_mentioned_p (DF_REF_REG (def), mii->mem_reg0))
+             {
+               df_ref use;
+               FOR_EACH_INSN_USE (use, mii->mem_insn)
+                 if (reg_overlap_mentioned_p (DF_REF_REG (def),
+                                              DF_REF_REG (use)))
+                   {
+                     if (sched_verbose >= 5)
+                       fprintf (sched_dump,
+                                "inc clobber used in store failure.\n");
+                     goto next;
+                   }
+             }
+
          newaddr = mii->inc_input;
          if (mii->mem_index != NULL_RTX)
            newaddr = gen_rtx_PLUS (GET_MODE (newaddr), newaddr,