dse.c (find_shift_sequence): Always choose an integer mode for new_mode.
authorRichard Sandiford <rsandifo@nildram.co.uk>
Fri, 9 Nov 2007 12:11:48 +0000 (12:11 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Fri, 9 Nov 2007 12:11:48 +0000 (12:11 +0000)
gcc/
* dse.c (find_shift_sequence): Always choose an integer mode for
new_mode.
(replace_read): Require both the read and store mode to be
integer ones.  Remove a then-redundant FLOAT_P check.

gcc/testsuite/
* gcc.target/mips/dse-1.c: Disable.

From-SVN: r130039

gcc/ChangeLog
gcc/dse.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/mips/dse-1.c

index 2d0e93c746fd9a525b3c050f80bd05a75edaf620..d4e13bdb88c2694af18665aacc7e087ea7cadf12 100644 (file)
@@ -1,3 +1,10 @@
+2007-11-09  Richard Sandiford  <rsandifo@nildram.co.uk>
+
+       * dse.c (find_shift_sequence): Always choose an integer mode for
+       new_mode.
+       (replace_read): Require both the read and store mode to be
+       integer ones.  Remove a then-redundant FLOAT_P check.
+
 2007-11-08  Richard Guenther  <rguenther@suse.de>
 
        * tree-dfa.c (remove_referenced_var): If removing a
index 764c3359d1bc0b622b84477850db60c3bf50e545..2b860187fbe9a22fd152225fc914d5abb9968ead 100644 (file)
--- a/gcc/dse.c
+++ b/gcc/dse.c
@@ -1447,7 +1447,7 @@ find_shift_sequence (rtx read_reg,
        continue;
 
       new_mode = smallest_mode_for_size (access_size * BITS_PER_UNIT,
-                                        GET_MODE_CLASS (read_mode));
+                                        MODE_INT);
       new_reg = gen_reg_rtx (new_mode);
 
       start_sequence ();
@@ -1473,9 +1473,8 @@ find_shift_sequence (rtx read_reg,
         of the arguments and could be precomputed.  It may
         not be worth doing so.  We could precompute if
         worthwhile or at least cache the results.  The result
-        technically depends on SHIFT, ACCESS_SIZE, and
-        GET_MODE_CLASS (READ_MODE).  But in practice the
-        answer will depend only on ACCESS_SIZE.  */
+        technically depends on both SHIFT and ACCESS_SIZE,
+        but in practice the answer will depend only on ACCESS_SIZE.  */
 
       if (cost > COSTS_N_INSNS (1))
        continue;
@@ -1557,7 +1556,8 @@ replace_read (store_info_t store_info, insn_info_t store_insn,
   if (!dbg_cnt (dse))
     return false;
 
-  if (GET_MODE_CLASS (read_mode) != GET_MODE_CLASS (store_mode))
+  if (GET_MODE_CLASS (read_mode) != MODE_INT
+      || GET_MODE_CLASS (store_mode) != MODE_INT)
     return false;
 
   /* To get here the read is within the boundaries of the write so
@@ -1580,7 +1580,7 @@ replace_read (store_info_t store_info, insn_info_t store_insn,
      call to get rid of the read.  */
   if (shift)
     {
-      if (access_size > UNITS_PER_WORD || FLOAT_MODE_P (store_mode))
+      if (access_size > UNITS_PER_WORD)
        return false;
 
       shift_seq = find_shift_sequence (read_reg, access_size, store_info,
index c627561399f5d98be329a0e8a6047a36256a8959..0f31de012e5447341da699b1e9b5a9b3fea545d8 100644 (file)
@@ -1,3 +1,7 @@
+2007-11-09  Richard Sandiford  <rsandifo@nildram.co.uk>
+
+       * gcc.target/mips/dse-1.c: Disable.
+
 2007-11-08  Tom Tromey  <tromey@redhat.com>
 
        * gcc.dg/empty-source-3.c: Update warning location.
index 0491265ae6c472f6dad7df3da4951661750fe0c8..0a21af7556e8cd98fb535218c41efcb399cb07c5 100644 (file)
@@ -1,3 +1,7 @@
+/* ??? Further to the subreg comment below, we can't rely on any of the
+   tests passing unless we handle subregs, and the patch to do so has
+   been rejected for the time being.  */
+/* { dg-do compile { target { ! *-*-* } } } */
 /* { dg-mips-options "-mgp64 -O" } */
 
 #define TEST(ID, TYPE1, TYPE2)                                 \