]> gcc.gnu.org Git - gcc.git/commitdiff
* cse (cse_insn): Don't make change without validation.
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Tue, 7 Jul 1998 13:09:07 +0000 (13:09 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Tue, 7 Jul 1998 13:09:07 +0000 (14:09 +0100)
From-SVN: r20996

gcc/ChangeLog
gcc/cse.c

index 883e45f4691befbe63112e8c97e3f5c3c158669c..716d74054cb3b95592fee6d9f300db34a9071b47 100644 (file)
@@ -1,3 +1,7 @@
+Tue Jul  7 21:05:25 1998  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * cse (cse_insn): Don't make change without validation.
+
 Tue Jul  7 11:40:05 1998  Jeffrey A Law  (law@cygnus.com)
 
        * mn10200.md (various zero/sign extension patterns): zero and sign
index fd7b80bd8de2109bc09f43935a17d6ad15220888..e34908f1680ba00d1ec00762cc43d62a35f8bb0e 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -7004,17 +7004,24 @@ cse_insn (insn, libcall_insn)
           SRC is a hard register.  */
        {
          int first = qty_first_reg[reg_qty[REGNO (src)]];
-
-         src = SET_SRC (sets[i].rtl)
-           = first >= FIRST_PSEUDO_REGISTER ? regno_reg_rtx[first]
-             : gen_rtx_REG (GET_MODE (src), first);
-
-         /* If we had a constant that is cheaper than what we are now
-            setting SRC to, use that constant.  We ignored it when we
-            thought we could make this into a no-op.  */
-         if (src_const && COST (src_const) < COST (src)
-             && validate_change (insn, &SET_SRC (sets[i].rtl), src_const, 0))
-           src = src_const;
+         rtx new_src
+           = (first >= FIRST_PSEUDO_REGISTER
+              ? regno_reg_rtx[first] : gen_rtx_REG (GET_MODE (src), first));
+
+         /* We must use validate-change even for this, because this
+            might be a special no-op instruction, suitable only to
+            tag notes onto.  */
+         if (validate_change (insn, &SET_SRC (sets[i].rtl), new_src, 0))
+           {
+             src = new_src;
+             /* If we had a constant that is cheaper than what we are now
+                setting SRC to, use that constant.  We ignored it when we
+                thought we could make this into a no-op.  */
+             if (src_const && COST (src_const) < COST (src)
+                 && validate_change (insn, &SET_SRC (sets[i].rtl), src_const,
+                                     0))
+               src = src_const;
+           }
        }
 
       /* If we made a change, recompute SRC values.  */
This page took 0.071942 seconds and 5 git commands to generate.