re PR c/8588 (ICE in extract_insn, at recog.c:2148)
authorEric Botcazou <ebotcazou@libertysurf.fr>
Tue, 19 Nov 2002 20:13:20 +0000 (20:13 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 19 Nov 2002 20:13:20 +0000 (20:13 +0000)
2002-11-19 �Eric Botcazou �<ebotcazou@libertysurf.fr>

PR c/8588
* optabs.c (expand_binop): Convert CONST_INTs in shift
operations too.

From-SVN: r59274

gcc/ChangeLog
gcc/optabs.c

index 9e7721474cf7c1430c995fe123fb4af1c3e95266..91f8dc988607c70b11674fa29612ad7efad966d8 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 3852b6fe1dbe6617a3b678f50b93236748e70826..1551ff8e806ce6bd5dfb50b5d23d06214793ab9b 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,