From 943cc2426149ff3f490440e2cbae76a736613a48 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Tue, 7 Sep 1993 14:54:27 -0400 Subject: [PATCH] (expand_binop): Must always widen second operand of shift. From-SVN: r5276 --- gcc/optabs.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/gcc/optabs.c b/gcc/optabs.c index cc742a40518..801b9456aee 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -526,7 +526,12 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) no_extend = 1; xop0 = widen_operand (xop0, wider_mode, unsignedp, no_extend); - xop1 = widen_operand (xop1, wider_mode, unsignedp, no_extend); + + /* The second operand of a shift must always be extended. */ + xop1 = widen_operand (xop1, wider_mode, unsignedp, + no_extend && binoptab != ashl_optab + && binoptab != lshl_optab); + temp = expand_binop (wider_mode, binoptab, xop0, xop1, NULL_RTX, unsignedp, OPTAB_DIRECT); if (temp) @@ -1419,7 +1424,11 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) no_extend = 1; xop0 = widen_operand (xop0, wider_mode, unsignedp, no_extend); - xop1 = widen_operand (xop1, wider_mode, unsignedp, no_extend); + + /* The second operand of a shift must always be extended. */ + xop1 = widen_operand (xop1, wider_mode, unsignedp, + no_extend && binoptab != ashl_optab + && binoptab != lshl_optab); temp = expand_binop (wider_mode, binoptab, xop0, xop1, NULL_RTX, unsignedp, methods); -- 2.30.2