* reload1.c (reload_cse_move2add): Honor TRULY_NOOP_TRUNCATION.
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Tue, 23 May 2000 17:13:36 +0000 (17:13 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Tue, 23 May 2000 17:13:36 +0000 (18:13 +0100)
From-SVN: r34106

gcc/ChangeLog
gcc/reload1.c

index 90d37d2b7fe37db19b689219f8a94450fa7119ed..4b1b63d56796b65a2e6d83ad92260e1c9352af51 100644 (file)
@@ -1,3 +1,7 @@
+Tue May 23 18:11:42 2000  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * reload1.c (reload_cse_move2add): Honor TRULY_NOOP_TRUNCATION.
+
 2000-05-23  Jonathan Larmour  <jlarmour@redhat.co.uk>
 
        * config/mips/elf64.h (CTOR_LISTS_DEFINED_EXTERNALLY): Define
index e7da78b8a03167ffcf479c0699b076d468862d43..c0bf424a87f1b670d2930483fb6d0c4b9d7e1553 100644 (file)
@@ -8905,8 +8905,12 @@ reload_cse_move2add (first)
          /* ??? We don't know how zero / sign extension is handled, hence
             we can't go from a narrower to a wider mode.  */
          if (reg_set_luid[regno] > last_label_luid
-             && (GET_MODE_SIZE (GET_MODE (reg))
-                 <= GET_MODE_SIZE (reg_mode[regno]))
+             && ((GET_MODE_SIZE (GET_MODE (reg))
+                  == GET_MODE_SIZE (reg_mode[regno]))
+                 || ((GET_MODE_SIZE (GET_MODE (reg))
+                      <= GET_MODE_SIZE (reg_mode[regno]))
+                     && TRULY_NOOP_TRUNCATION (GET_MODE_BITSIZE (GET_MODE (reg)),
+                                               GET_MODE_BITSIZE (reg_mode[regno]))))
              && GET_CODE (reg_offset[regno]) == CONST_INT)
            {
              /* Try to transform (set (REGX) (CONST_INT A))