From 8041889f4499628bcf5585a78f5b2e9349b6422a Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Sun, 24 Feb 2002 21:43:52 +0000 Subject: [PATCH] * optabs.c (widen_operand): Properly handle CONST_INT for NO_EXTEND. From-SVN: r50011 --- gcc/ChangeLog | 4 ++++ gcc/optabs.c | 11 +++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 06217541fc0..8e06eeeb35e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Sun Feb 24 16:38:56 2002 Richard Kenner + + * optabs.c (widen_operand): Properly handle CONST_INT for NO_EXTEND. + 2002-02-24 Neil Booth * cpplex.c (cpp_interpret_charconst): Get signedness or diff --git a/gcc/optabs.c b/gcc/optabs.c index 69fb999a7de..bb3e292b201 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);