From: Mark Shinwell Date: Mon, 8 Oct 2007 15:28:56 +0000 (+0000) Subject: combine.c (setup_incoming_promotions): Ensure that arguments that have not undergone... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b4d4a7d4b09fe843af40348786bdaae7dac4281e;p=gcc.git combine.c (setup_incoming_promotions): Ensure that arguments that have not undergone mode promotions do not... gcc/ * combine.c (setup_incoming_promotions): Ensure that arguments that have not undergone mode promotions do not incorrectly get marked as being sign- or zero-extended. From-SVN: r129131 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b03f6d0f589..1cbfa8cc1cc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-10-08 Mark Shinwell + + * combine.c (setup_incoming_promotions): Ensure that + arguments that have not undergone mode promotions do not + incorrectly get marked as being sign- or zero-extended. + 2007-10-08 Richard Guenther PR middle-end/33693 diff --git a/gcc/combine.c b/gcc/combine.c index 392dedb3da5..ca378bd1c89 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -1363,15 +1363,17 @@ setup_incoming_promotions (rtx first) /* Eliminate sign extensions in the callee when possible. Only do this when: - (a) the mode of the register is the same as the mode of + (a) a mode promotion has occurred; + (b) the mode of the register is the same as the mode of the argument as it is passed; and - (b) the signedness does not change across any of the promotions; and - (c) when no language-level promotions (which we cannot guarantee + (c) the signedness does not change across any of the promotions; and + (d) when no language-level promotions (which we cannot guarantee will have been done by an external caller) are necessary, unless we know that this function is only ever called from the current compilation unit -- all of whose call sites will do the mode1 --> mode2 promotion. */ - if (mode3 == mode4 + if (mode1 != mode3 + && mode3 == mode4 && uns1 == uns3 && (mode1 == mode2 || strictly_local)) {