expmed.c (expand_mult_const): In sanity check...
authorZack Weinberg <zack@codesourcery.com>
Thu, 17 Jun 2004 17:03:11 +0000 (17:03 +0000)
committerZack Weinberg <zack@gcc.gnu.org>
Thu, 17 Jun 2004 17:03:11 +0000 (17:03 +0000)
* expmed.c (expand_mult_const): In sanity check, compare only
the bits of val and val_so_far that are significant in the
result mode.

From-SVN: r83294

gcc/ChangeLog
gcc/expmed.c

index 551a2ec879209419b2160ceb54409ddde6102f54..5a1a3c205a0e9d671638423c0a86e2481ae1d8f8 100644 (file)
@@ -1,3 +1,9 @@
+2004-06-17  Zack Weinberg  <zack@codesourcery.com>
+
+       * expmed.c (expand_mult_const): In sanity check, compare only
+       the bits of val and val_so_far that are significant in the
+       result mode.
+
 2004-06-17  Daniel Berlin  <dberlin@dberlin.org>
 
        * tree-ssa-pre.c:  Update comments.
 2004-06-16  Daniel Berlin  <dberlin@dberlin.org>
 
        * tree-cfg.c (pass_split_crit_edge): Give it a name and a dump file.
-       
+
 2004-06-16  Dale Johannesen  <dalej@apple.com>
 
        * loop.c (loop_givs_reduce): Avoid miscompilation of
index fb590cdf6730a4df3787a84eedb867e74aaecfa6..ae76695a133b7dc15e60bfccd5deb7bf014ae397 100644 (file)
@@ -2610,6 +2610,10 @@ expand_mult_const (enum machine_mode mode, rtx op0, HOST_WIDE_INT val,
       accum = force_operand (gen_rtx_PLUS (mode, accum, op0), target);
     }
 
+  /* Compare only the bits of val and val_so_far that are significant
+     in the result mode, to avoid sign-/zero-extension confusion.  */
+  val &= GET_MODE_MASK (mode);
+  val_so_far &= GET_MODE_MASK (mode);
   if (val != val_so_far)
     abort ();