gcc/
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 18 Nov 2013 14:51:45 +0000 (14:51 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 18 Nov 2013 14:51:45 +0000 (14:51 +0000)
* tree.h (tree_to_shwi, tree_to_uhwi): Declare, with inline expansions.
* tree.c (tree_to_shwi, tree_to_uhwi): New functions.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204958 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree.c
gcc/tree.h

index 20504ae..276c1cb 100644 (file)
@@ -1,5 +1,10 @@
 2013-11-18  Richard Sandiford  <rdsandiford@googlemail.com>
 
+       * tree.h (tree_to_shwi, tree_to_uhwi): Declare, with inline expansions.
+       * tree.c (tree_to_shwi, tree_to_uhwi): New functions.
+
+2013-11-18  Richard Sandiford  <rdsandiford@googlemail.com>
+
        * expr.h: Update comments to refer to tree_fits_[su]hwi_p rather
        than host_integerp.
 
index 4f290ba..124e531 100644 (file)
@@ -7027,6 +7027,28 @@ tree_low_cst (const_tree t, int pos)
   return TREE_INT_CST_LOW (t);
 }
 
+/* T is an INTEGER_CST whose numerical value (extended according to
+   TYPE_UNSIGNED) fits in a signed HOST_WIDE_INT.  Return that
+   HOST_WIDE_INT.  */
+
+HOST_WIDE_INT
+tree_to_shwi (const_tree t)
+{
+  gcc_assert (tree_fits_shwi_p (t));
+  return TREE_INT_CST_LOW (t);
+}
+
+/* T is an INTEGER_CST whose numerical value (extended according to
+   TYPE_UNSIGNED) fits in an unsigned HOST_WIDE_INT.  Return that
+   HOST_WIDE_INT.  */
+
+HOST_WIDE_INT
+tree_to_uhwi (const_tree t)
+{
+  gcc_assert (tree_fits_uhwi_p (t));
+  return TREE_INT_CST_LOW (t);
+}
+
 /* Return the most significant (sign) bit of T.  */
 
 int
index 59da161..ae30dea 100644 (file)
@@ -3673,6 +3673,8 @@ extern bool tree_fits_uhwi_p (const_tree)
 #endif
   ;
 extern HOST_WIDE_INT tree_low_cst (const_tree, int);
+extern HOST_WIDE_INT tree_to_shwi (const_tree);
+extern HOST_WIDE_INT tree_to_uhwi (const_tree);
 #if !defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 4003)
 extern inline __attribute__ ((__gnu_inline__)) HOST_WIDE_INT
 tree_low_cst (const_tree t, int pos)
@@ -3680,6 +3682,20 @@ tree_low_cst (const_tree t, int pos)
   gcc_assert (host_integerp (t, pos));
   return TREE_INT_CST_LOW (t);
 }
+
+extern inline __attribute__ ((__gnu_inline__)) HOST_WIDE_INT
+tree_to_shwi (const_tree t)
+{
+  gcc_assert (tree_fits_shwi_p (t));
+  return TREE_INT_CST_LOW (t);
+}
+
+extern inline __attribute__ ((__gnu_inline__)) HOST_WIDE_INT
+tree_to_uhwi (const_tree t)
+{
+  gcc_assert (tree_fits_uhwi_p (t));
+  return TREE_INT_CST_LOW (t);
+}
 #endif
 extern int tree_int_cst_sgn (const_tree);
 extern int tree_int_cst_sign_bit (const_tree);