Some cases where we could use const references instead of passing by value.
Tested on powerpc64-linux-gnu and by rerunning the assembly comparison.
OK to install?
Thanks,
Richard
Index: gcc/fold-const.c
===================================================================
--- gcc/fold-const.c 2013-11-09 09:39:27.373805197 +0000
+++ gcc/fold-const.c 2013-11-09 09:39:28.207810833 +0000
@@ -9886,7 +9886,7 @@ exact_inverse (tree type, tree cst)
/* Mask out the tz least significant bits of X of type TYPE where
tz is the number of trailing zeroes in Y. */
static wide_int
-mask_with_tz (tree type, wide_int x, wide_int y)
+mask_with_tz (tree type, const wide_int &x, const wide_int &y)
{
int tz = wi::ctz (y);
if (tz > 0)
Index: gcc/tree-ssanames.c
===================================================================
--- gcc/tree-ssanames.c 2013-11-09 09:39:17.714739914 +0000
+++ gcc/tree-ssanames.c 2013-11-09 09:39:28.208810840 +0000
@@ -179,7 +179,7 @@ make_ssa_name_fn (struct function *fn, t
/* Store range information MIN, and MAX to tree ssa_name NAME. */
void
-set_range_info (tree name, widest_int min, widest_int max)
+set_range_info (tree name, const widest_int &min, const widest_int &max)
{
gcc_assert (!POINTER_TYPE_P (TREE_TYPE (name)));
range_info_def *ri = SSA_NAME_RANGE_INFO (name);
@@ -201,16 +201,15 @@ set_range_info (tree name, widest_int mi
if (wi::cmp (min, max, TYPE_SIGN (TREE_TYPE (name))) != 1)
{
int prec = TYPE_PRECISION (TREE_TYPE (name));
- widest_int xorv;
- min = wi::zext (min, prec);
- max = wi::zext (max, prec);
- xorv = min ^ max;
+ widest_int ext_min = wi::zext (min, prec);
+ widest_int ext_max = wi::zext (max, prec);
+ widest_int xorv = ext_min ^ ext_max;
if (xorv != 0)
xorv = wi::mask <widest_int> (MAX_BITSIZE_MODE_ANY_INT
- wi::clz (xorv),
false);
- ri->nonzero_bits = ri->nonzero_bits & (min | xorv);
+ ri->nonzero_bits = ri->nonzero_bits & (ext_min | xorv);
}
}
@@ -254,7 +253,7 @@ get_range_info (const_tree name, widest_
/* Change non-zero bits bitmask of NAME. */
void
-set_nonzero_bits (tree name, widest_int mask)
+set_nonzero_bits (tree name, const widest_int &mask)
{
gcc_assert (!POINTER_TYPE_P (TREE_TYPE (name)));
if (SSA_NAME_RANGE_INFO (name) == NULL)
Index: gcc/tree-ssanames.h
===================================================================
--- gcc/tree-ssanames.h 2013-11-09 09:39:17.714739914 +0000
+++ gcc/tree-ssanames.h 2013-11-09 09:39:28.208810840 +0000
@@ -70,11 +70,11 @@ #define ssa_name(i) ((*cfun->gimple_df->
enum value_range_type { VR_UNDEFINED, VR_RANGE, VR_ANTI_RANGE, VR_VARYING };
/* Sets the value range to SSA. */
-extern void set_range_info (tree, widest_int, widest_int);
+extern void set_range_info (tree, const widest_int &, const widest_int &);
/* Gets the value range from SSA. */
extern enum value_range_type get_range_info (const_tree, widest_int *,
widest_int *);
-extern void set_nonzero_bits (tree, widest_int);
+extern void set_nonzero_bits (tree, const widest_int &);
extern widest_int get_nonzero_bits (const_tree);
extern void init_ssanames (struct function *, int);
extern void fini_ssanames (void);