mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-04 01:04:26 +08:00
convert.c (convert_to_integer): Do not introduce useless conversions between integral types.
* convert.c (convert_to_integer): Do not introduce useless conversions between integral types. From-SVN: r215843
This commit is contained in:
parent
8684302d34
commit
bcfee57870
@ -1,3 +1,8 @@
|
||||
2014-10-03 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* convert.c (convert_to_integer): Do not introduce useless conversions
|
||||
between integral types.
|
||||
|
||||
2014-10-03 David Sherwood <david.sherwood@arm.com>
|
||||
|
||||
* ira-int.h (ira_allocno): Mark hard_regno as signed.
|
||||
|
@ -746,8 +746,9 @@ convert_to_integer (tree type, tree expr)
|
||||
/* Can't do arithmetic in enumeral types
|
||||
so use an integer type that will hold the values. */
|
||||
if (TREE_CODE (typex) == ENUMERAL_TYPE)
|
||||
typex = lang_hooks.types.type_for_size
|
||||
(TYPE_PRECISION (typex), TYPE_UNSIGNED (typex));
|
||||
typex
|
||||
= lang_hooks.types.type_for_size (TYPE_PRECISION (typex),
|
||||
TYPE_UNSIGNED (typex));
|
||||
|
||||
/* But now perhaps TYPEX is as wide as INPREC.
|
||||
In that case, do nothing special here.
|
||||
@ -788,9 +789,15 @@ convert_to_integer (tree type, tree expr)
|
||||
&& (ex_form == PLUS_EXPR
|
||||
|| ex_form == MINUS_EXPR
|
||||
|| ex_form == MULT_EXPR)))
|
||||
typex = unsigned_type_for (typex);
|
||||
{
|
||||
if (!TYPE_UNSIGNED (typex))
|
||||
typex = unsigned_type_for (typex);
|
||||
}
|
||||
else
|
||||
typex = signed_type_for (typex);
|
||||
{
|
||||
if (TYPE_UNSIGNED (typex))
|
||||
typex = signed_type_for (typex);
|
||||
}
|
||||
return convert (type,
|
||||
fold_build2 (ex_form, typex,
|
||||
convert (typex, arg0),
|
||||
@ -805,7 +812,19 @@ convert_to_integer (tree type, tree expr)
|
||||
/* This is not correct for ABS_EXPR,
|
||||
since we must test the sign before truncation. */
|
||||
{
|
||||
tree typex = unsigned_type_for (type);
|
||||
/* Do the arithmetic in type TYPEX,
|
||||
then convert result to TYPE. */
|
||||
tree typex = type;
|
||||
|
||||
/* Can't do arithmetic in enumeral types
|
||||
so use an integer type that will hold the values. */
|
||||
if (TREE_CODE (typex) == ENUMERAL_TYPE)
|
||||
typex
|
||||
= lang_hooks.types.type_for_size (TYPE_PRECISION (typex),
|
||||
TYPE_UNSIGNED (typex));
|
||||
|
||||
if (!TYPE_UNSIGNED (typex))
|
||||
typex = unsigned_type_for (typex);
|
||||
return convert (type,
|
||||
fold_build1 (ex_form, typex,
|
||||
convert (typex,
|
||||
|
Loading…
Reference in New Issue
Block a user