re PR middle-end/41738 (optabs expands rotate using wrong mode)
authorAndy Hutchinson <hutchinsonandy@gcc.gnu.org>
Sat, 17 Oct 2009 22:42:17 +0000 (22:42 +0000)
committerAndy Hutchinson <hutchinsonandy@gcc.gnu.org>
Sat, 17 Oct 2009 22:42:17 +0000 (22:42 +0000)
2009-10-17  Andy Hutchinson <hutchinsonandy@gcc.gnu.org>
PR middle-end/41738
* optabs.c (expand_binop): Make mode of shift count expression mode of shift count not target.
Remove indent nit.

From-SVN: r152961

gcc/ChangeLog
gcc/optabs.c

index d4eb66f..706052d 100644 (file)
@@ -1,3 +1,10 @@
+2009-10-17  Andy Hutchinson <hutchinsonandy@gcc.gnu.org>
+
+       PR middle-end/41738
+       * optabs.c (expand_binop): Make mode of shift count expression mode
+       of shift count not target.
+       Remove indent nit.
+
 2009-10-17  Eric Botcazou  <ebotcazou@adacore.com>
 
        * tree-nested.c (convert_nonlocal_reference_stmt) <GIMPLE_COND>: New
index 1c13623..39257f5 100644 (file)
@@ -1595,11 +1595,11 @@ expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1,
       unsigned int bits = GET_MODE_BITSIZE (mode);
 
       if (CONST_INT_P (op1))
-       newop1 = GEN_INT (bits - INTVAL (op1));
+        newop1 = GEN_INT (bits - INTVAL (op1));
       else if (targetm.shift_truncation_mask (mode) == bits - 1)
-       newop1 = negate_rtx (mode, op1);
+        newop1 = negate_rtx (GET_MODE (op1), op1);
       else
-       newop1 = expand_binop (mode, sub_optab,
+        newop1 = expand_binop (GET_MODE (op1), sub_optab,
                               GEN_INT (bits), op1,
                               NULL_RTX, unsignedp, OPTAB_DIRECT);