From 246e00f2ff8caaab1968d97d346df7c61718a729 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Tue, 17 May 1994 18:51:25 -0400 Subject: [PATCH] (simplify_set): Move call to make_field_assignment to end; if SRC or DEST is a (clobber (const_int 0)), return it. (simplify_set): Move call to make_field_assignment to end; if SRC or DEST is a (clobber (const_int 0)), return it. (force_to_mode): If X is a CALL, just return it. From-SVN: r7323 --- gcc/combine.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/gcc/combine.c b/gcc/combine.c index a800a27..2cd4f07 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -4196,9 +4196,6 @@ simplify_set (x) if (GET_MODE_CLASS (mode) == MODE_INT) src = force_to_mode (src, mode, GET_MODE_MASK (mode), NULL_RTX, 0); - /* Convert this into a field assignment operation, if possible. */ - x = make_field_assignment (x); - /* If we are setting CC0 or if the source is a COMPARE, look for the use of the comparison result and try to simplify it unless we already have used undobuf.other_insn. */ @@ -4435,7 +4432,15 @@ simplify_set (x) } #endif - return x; + /* If either SRC or DEST is a CLOBBER of (const_int 0), make this + whole thing fail. */ + if (GET_CODE (src) == CLOBBER && XEXP (src, 0) == const0_rtx) + return src; + else if (GET_CODE (dest) == CLOBBER && XEXP (dest, 0) == const0_rtx) + return dest; + else + /* Convert this into a field assignment operation, if possible. */ + return make_field_assignment (x); } /* Simplify, X, and AND, IOR, or XOR operation, and return the simplified @@ -5632,6 +5637,11 @@ force_to_mode (x, mode, mask, reg, just_select) unsigned HOST_WIDE_INT fuller_mask, nonzero; rtx op0, op1, temp; + /* If this is a CALL, don't do anything. Some of the code below + will do the wrong thing since the mode of a CALL is VOIDmode. */ + if (code == CALL) + return x; + /* We want to perform the operation is its present mode unless we know that the operation is valid in MODE, in which case we do the operation in MODE. */ -- 2.7.4