summaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authoraesok <aesok@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-18 20:54:59 +0000
committeraesok <aesok@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-18 20:54:59 +0000
commitd3bd87c3760f14f27c84634420b10713acc95653 (patch)
tree55578260d871250a02af221648451770f28d925a /gcc/tree.c
parent95856847798749c0a1d55fac0dcb62d300402a9c (diff)
downloadgcc-d3bd87c3760f14f27c84634420b10713acc95653.tar.gz
* tree.h (build_int_cstu): Implement as static inline.
* tree.c (build_int_cstu): Remove function. (double_int_to_tree, double_int_fits_to_tree_p): Handle size types as sign extended. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159544 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index f00f82e9995..76be316eef9 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -1041,14 +1041,6 @@ build_int_cst (tree type, HOST_WIDE_INT low)
return build_int_cst_wide (type, low, low < 0 ? -1 : 0);
}
-/* Create an INT_CST node with a LOW value zero extended. */
-
-tree
-build_int_cstu (tree type, unsigned HOST_WIDE_INT low)
-{
- return build_int_cst_wide (type, low, 0);
-}
-
/* Create an INT_CST node with a LOW value in TYPE. The value is sign extended
if it is negative. This function is similar to build_int_cst, but
the extra bits outside of the type precision are cleared. Constants
@@ -1088,7 +1080,12 @@ build_int_cst_wide_type (tree type,
tree
double_int_to_tree (tree type, double_int cst)
{
- cst = double_int_ext (cst, TYPE_PRECISION (type), TYPE_UNSIGNED (type));
+ /* Size types *are* sign extended. */
+ bool sign_extended_type = (!TYPE_UNSIGNED (type)
+ || (TREE_CODE (type) == INTEGER_TYPE
+ && TYPE_IS_SIZETYPE (type)));
+
+ cst = double_int_ext (cst, TYPE_PRECISION (type), !sign_extended_type);
return build_int_cst_wide (type, cst.low, cst.high);
}
@@ -1099,9 +1096,13 @@ double_int_to_tree (tree type, double_int cst)
bool
double_int_fits_to_tree_p (const_tree type, double_int cst)
{
- double_int ext = double_int_ext (cst,
- TYPE_PRECISION (type),
- TYPE_UNSIGNED (type));
+ /* Size types *are* sign extended. */
+ bool sign_extended_type = (!TYPE_UNSIGNED (type)
+ || (TREE_CODE (type) == INTEGER_TYPE
+ && TYPE_IS_SIZETYPE (type)));
+
+ double_int ext
+ = double_int_ext (cst, TYPE_PRECISION (type), !sign_extended_type);
return double_int_equal_p (cst, ext);
}