From 7831ef177bd85529c59eac7b91681a95266bba37 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Thu, 26 May 1994 11:55:34 -0400 Subject: [PATCH] (expand_divmod): Correctly set CAN_CLOBBER_OP0 when we've converted OP0 to COMPUTE_MODE. From-SVN: r7349 --- gcc/expmed.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/gcc/expmed.c b/gcc/expmed.c index 85cf0dec520..09cbbaf2b97 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -2439,13 +2439,16 @@ expand_divmod (rem_flag, code, mode, op0, op1, target, unsignedp) modifying it. */ can_clobber_op0 = (GET_CODE (op0) == REG && op0 == target); - /* Now convert to the best mode to use. Show we made a copy of OP0 + /* Now convert to the best mode to use. Normally show we made a copy of OP0 and hence we can clobber it (we cannot use a SUBREG to widen - something. */ + something), but check that the conversion wasn't a no-op due to + promotion. */ if (compute_mode != mode) { - adjusted_op0 = op0 = convert_modes (compute_mode, mode, op0, unsignedp); - can_clobber_op0 = 1; + adjusted_op0 = convert_modes (compute_mode, mode, op0, unsignedp); + can_clobber_op0 = ! (GET_CODE (op0) == SUBREG + && SUBREG_REG (op0) == adjusted_op0); + op0 = adjusted_op0; op1 = convert_modes (compute_mode, mode, op1, unsignedp); } -- 2.30.2