diff options
Diffstat (limited to 'gcc')
| -rw-r--r-- | gcc/ChangeLog | 7 | ||||
| -rw-r--r-- | gcc/tree-ssa-loop-ivopts.c | 20 | ||||
| -rw-r--r-- | gcc/tree.c | 26 | ||||
| -rw-r--r-- | gcc/tree.h | 1 | 
4 files changed, 21 insertions, 33 deletions
| diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 27cc388..4491a17 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2011-08-18  Richard Guenther  <rguenther@suse.de> + +	* tree.h (tree_int_cst_msb): Remove. +	* tree.c (tree_int_cst_msb): Likewise. +	(tree_int_cst_sign_bit): Move from ... +	* tree-ssa-loop-ivopts.c (tree_int_cst_sign_bit): ... here. +  2011-08-18  Richard Sandiford  <richard.sandiford@linaro.org>  	* doc/tm.texi.in (TARGET_RTX_COSTS): Add an opno paramter. diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c index c939827..0efa716 100644 --- a/gcc/tree-ssa-loop-ivopts.c +++ b/gcc/tree-ssa-loop-ivopts.c @@ -2892,26 +2892,6 @@ var_at_stmt (struct loop *loop, struct iv_cand *cand, gimple stmt)      return cand->var_before;  } -/* Return the most significant (sign) bit of T.  Similar to tree_int_cst_msb, -   but the bit is determined from TYPE_PRECISION, not MODE_BITSIZE.  */ - -int -tree_int_cst_sign_bit (const_tree t) -{ -  unsigned bitno = TYPE_PRECISION (TREE_TYPE (t)) - 1; -  unsigned HOST_WIDE_INT w; - -  if (bitno < HOST_BITS_PER_WIDE_INT) -    w = TREE_INT_CST_LOW (t); -  else -    { -      w = TREE_INT_CST_HIGH (t); -      bitno -= HOST_BITS_PER_WIDE_INT; -    } - -  return (w >> bitno) & 1; -} -  /* If A is (TYPE) BA and B is (TYPE) BB, and the types of BA and BB have the     same precision that is at least as wide as the precision of TYPE, stores     BA to A and BB to B, and returns the type of BA.  Otherwise, returns the @@ -6513,21 +6513,23 @@ tree_low_cst (const_tree t, int pos)    return TREE_INT_CST_LOW (t);  } -/* Return the most significant bit of the integer constant T.  */ +/* Return the most significant (sign) bit of T.  */  int -tree_int_cst_msb (const_tree t) +tree_int_cst_sign_bit (const_tree t)  { -  int prec; -  HOST_WIDE_INT h; -  unsigned HOST_WIDE_INT l; - -  /* Note that using TYPE_PRECISION here is wrong.  We care about the -     actual bits, not the (arbitrary) range of the type.  */ -  prec = GET_MODE_BITSIZE (TYPE_MODE (TREE_TYPE (t))) - 1; -  rshift_double (TREE_INT_CST_LOW (t), TREE_INT_CST_HIGH (t), prec, -		 2 * HOST_BITS_PER_WIDE_INT, &l, &h, 0); -  return (l & 1) == 1; +  unsigned bitno = TYPE_PRECISION (TREE_TYPE (t)) - 1; +  unsigned HOST_WIDE_INT w; + +  if (bitno < HOST_BITS_PER_WIDE_INT) +    w = TREE_INT_CST_LOW (t); +  else +    { +      w = TREE_INT_CST_HIGH (t); +      bitno -= HOST_BITS_PER_WIDE_INT; +    } + +  return (w >> bitno) & 1;  }  /* Return an indication of the sign of the integer constant T. @@ -4380,7 +4380,6 @@ tree_low_cst (const_tree t, int pos)    return TREE_INT_CST_LOW (t);  }  #endif -extern int tree_int_cst_msb (const_tree);  extern int tree_int_cst_sgn (const_tree);  extern int tree_int_cst_sign_bit (const_tree);  extern unsigned int tree_int_cst_min_precision (tree, bool); | 
