fold-const.c (fold): Replace sign-extension of a zero extended value by a single zero extension.

* fold-const.c (fold): Replace sign-extension of a zero extended
        value by a single zero extension.

From-SVN: r18713
This commit is contained in:
Philippe De Muyter 1998-03-19 20:27:18 +01:00 committed by Jeff Law
parent 6e1f1f930b
commit ba3ad5e002
2 changed files with 12 additions and 0 deletions

View File

@ -1,3 +1,8 @@
Thu Mar 19 20:30:31 1998 Philippe De Muyter <phdm@macqel.be>
* fold-const.c (fold): Replace sign-extension of a zero extended
value by a single zero extension.
Thu Mar 19 00:58:07 1998 Jason Merrill <jason@yorick.cygnus.com>
* except.c (init_eh): Do nothing.

View File

@ -4101,6 +4101,13 @@ fold (expr)
&& ! final_ptr)
return convert (final_type, TREE_OPERAND (TREE_OPERAND (t, 0), 0));
/* If we have a sign-extension of a zero-extended value, we can
replace that by a single zero-extension. */
if (inside_int && inter_int && final_int
&& inside_prec < inter_prec && inter_prec < final_prec
&& inside_unsignedp && !inter_unsignedp)
return convert (final_type, TREE_OPERAND (TREE_OPERAND (t, 0), 0));
/* Two conversions in a row are not needed unless:
- some conversion is floating-point (overstrict for now), or
- the intermediate type is narrower than both initial and