OSDN Git Service

PR opt/8705
authordanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Apr 2003 00:58:28 +0000 (00:58 +0000)
committerdanglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Apr 2003 00:58:28 +0000 (00:58 +0000)
* gcse.c (try_replace_reg): On a successful substitution of a constant
into a single set, try to simplify the source of the set.
* loop.c (scan_loop): Don't try to optimize a MODE_CC set with a
constant source.

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

gcc/ChangeLog
gcc/gcse.c
gcc/loop.c

index 89ba2f8..51371d3 100644 (file)
@@ -1,3 +1,11 @@
+2003-04-24  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
+
+       PR opt/8705
+       * gcse.c (try_replace_reg): On a successful substitution of a constant
+       into a single set, try to simplify the source of the set.
+       * loop.c (scan_loop): Don't try to optimize a MODE_CC set with a
+       constant source.
+
 2003-04-24  Neil Booth  <neil@daikokuya.co.uk>
 
        * cpplex.c (cpp_token_len): Tighten up.
index 528aaca..db2fb57 100644 (file)
@@ -3963,6 +3963,15 @@ try_replace_reg (from, to, insn)
   if (num_changes_pending () && apply_change_group ())
     success = 1;
 
+  /* Try to simplify SET_SRC if we have substituted a constant.  */
+  if (success && set && CONSTANT_P (to))
+    {
+      src = simplify_rtx (SET_SRC (set));
+
+      if (src)
+       validate_change (insn, &SET_SRC (set), src, 0);
+    }
+
   if (!success && set && reg_mentioned_p (from, SET_SRC (set)))
     {
       /* If above failed and this is a single set, try to simplify the source of
index d7ae3ea..1bdc1bd 100644 (file)
@@ -833,11 +833,17 @@ scan_loop (loop, flags)
                   That behavior is incorrect and was removed.  */
                insert_temp = 1;
 
+             /* Don't try to optimize a MODE_CC set with a constant
+                source.  It probably will be combined with a conditional
+                jump.  */
+             if (GET_MODE_CLASS (GET_MODE (SET_DEST (set))) == MODE_CC
+                 && CONSTANT_P (src))
+               ;
              /* Don't try to optimize a register that was made
                 by loop-optimization for an inner loop.
                 We don't know its life-span, so we can't compute
                 the benefit.  */
-             if (REGNO (SET_DEST (set)) >= max_reg_before_loop)
+             else if (REGNO (SET_DEST (set)) >= max_reg_before_loop)
                ;
              /* Don't move the source and add a reg-to-reg copy:
                 - with -Os (this certainly increases size),