2002-11-19 �Eric Botcazou �<ebotcazou@libertysurf.fr>
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Nov 2002 20:13:20 +0000 (20:13 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 19 Nov 2002 20:13:20 +0000 (20:13 +0000)
PR c/8588
* optabs.c (expand_binop): Convert CONST_INTs in shift
operations too.

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

gcc/ChangeLog
gcc/optabs.c

index 9e77214..91f8dc9 100644 (file)
@@ -1,3 +1,9 @@
+2002-11-19  Eric Botcazou  <ebotcazou@libertysurf.fr>
+
+       PR c/8588
+       * optabs.c (expand_binop): Convert CONST_INTs in shift
+       operations too.
+
 2002-11-19  Roger Sayle  <roger@eyesopen.com>
 
        * gcse.c (gcse_emit_move_after): Correct typo in REG_EQUAL note.
index 3852b6f..1551ff8 100644 (file)
@@ -781,9 +781,8 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods)
       /* In case the insn wants input operands in modes different from
         those of the actual operands, convert the operands.  It would
         seem that we don't need to convert CONST_INTs, but we do, so
-        that they're properly zero-extended or sign-extended for their
-        modes; shift operations are an exception, because the second
-        operand need not be extended to the mode of the result.  */
+        that they're properly zero-extended, sign-extended or truncated
+        for their mode.  */
 
       if (GET_MODE (op0) != mode0 && mode0 != VOIDmode)
        xop0 = convert_modes (mode0,
@@ -796,7 +795,7 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods)
        xop1 = convert_modes (mode1,
                              GET_MODE (op1) != VOIDmode
                              ? GET_MODE (op1)
-                             : (shift_op ? mode1 : mode),
+                             : mode,
                              xop1, unsignedp);
 
       /* Now, if insn's predicates don't allow our operands, put them into
@@ -2234,8 +2233,8 @@ expand_twoval_binop (binoptab, op0, op1, targ0, targ1, unsignedp)
       /* In case the insn wants input operands in modes different from
         those of the actual operands, convert the operands.  It would
         seem that we don't need to convert CONST_INTs, but we do, so
-        that they're properly zero-extended or sign-extended for their
-        modes.  */
+        that they're properly zero-extended, sign-extended or truncated
+        for their mode.  */
 
       if (GET_MODE (op0) != mode0 && mode0 != VOIDmode)
        xop0 = convert_modes (mode0,