From 8041889f4499628bcf5585a78f5b2e9349b6422a Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Sun, 24 Feb 2002 21:43:52 +0000 Subject: * optabs.c (widen_operand): Properly handle CONST_INT for NO_EXTEND. From-SVN: r50011 --- gcc/optabs.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'gcc/optabs.c') diff --git a/gcc/optabs.c b/gcc/optabs.c index 69fb999..bb3e292 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -186,11 +186,14 @@ widen_operand (op, mode, oldmode, unsignedp, no_extend) { rtx result; - /* If we must extend do so. If OP is either a constant or a SUBREG - for a promoted object, also extend since it will be more efficient to - do so. */ + /* If we don't have to extend and this is a constant, return it. */ + if (no_extend && GET_MODE (op) == VOIDmode) + return op; + + /* If we must extend do so. If OP is a SUBREG for a promoted object, also + extend since it will be more efficient to do so unless the signedness of + a promoted object differs from our extension. */ if (! no_extend - || GET_MODE (op) == VOIDmode || (GET_CODE (op) == SUBREG && SUBREG_PROMOTED_VAR_P (op) && SUBREG_PROMOTED_UNSIGNED_P (op) == unsignedp)) return convert_modes (mode, oldmode, op, unsignedp); -- cgit v1.1