]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/6086 (Reload misoptimizes DImode PREINC on PPC)
authorJakub Jelinek <jakub@redhat.com>
Sat, 30 Mar 2002 18:50:34 +0000 (19:50 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Sat, 30 Mar 2002 18:50:34 +0000 (19:50 +0100)
PR optimization/6086
* combine.c (combine_simplify_rtx): If simplify_rtx failed because
of SUBREG of volatile MEM or because the MEM was mode dependent,
return CLOBBER instead of unmodified SUBREG.

From-SVN: r51606

gcc/ChangeLog
gcc/combine.c

index a320e7a90fe73a16e917943dcc7709b59cf7e767..3cfed7fd65eb74c6b184e3dda1dd738bd5c44342 100644 (file)
@@ -1,3 +1,10 @@
+2002-03-30  Jakub Jelinek  <jakub@redhat.com>
+
+       PR optimization/6086
+       * combine.c (combine_simplify_rtx): If simplify_rtx failed because
+       of SUBREG of volatile MEM or because the MEM was mode dependent,
+       return CLOBBER instead of unmodified SUBREG.
+
 Sat Mar 30 14:08:55 CET 2002  Jan Hubicka  <jh@suse.cz>
 
        * local-alloc.c (local_alloc): Avoid call of update_equiv_regs when not optimizing.
index 3e97a1afddd0734cdaeda11aae73899ad36b3310..de3bcefc0c5801d670b8834574fc3b9a903a8ba6 100644 (file)
@@ -3875,6 +3875,13 @@ combine_simplify_rtx (x, op0_mode, last, in_dest)
          return temp;
       }
 
+      /* Don't change the mode of the MEM if that would change the meaning
+        of the address.  */
+      if (GET_CODE (SUBREG_REG (x)) == MEM
+         && (MEM_VOLATILE_P (SUBREG_REG (x))
+             || mode_dependent_address_p (XEXP (SUBREG_REG (x), 0))))
+       return gen_rtx_CLOBBER (mode, const0_rtx);
+
       /* Note that we cannot do any narrowing for non-constants since
         we might have been counting on using the fact that some bits were
         zero.  We now do this in the SET.  */