This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [wide-int] Remove SHIFT_COUNT_TRUNCATED uses at tree/gimple level


So what is the big plan here? if you remove it here and then do not do it in wide int, then it is not going to be truncated.

kenny


On 11/06/2013 05:10 PM, Richard Sandiford wrote:
Following the removal of SHIFT_COUNT_TRUNCATED from double-int, this patch
reverts the changed I'd made to mimic the old behaviour on wide-int.

Tested on powerpc64-linux-gnu and by assembly comparison on a range of targets.
OK to install?

Thanks,
Richard


Index: gcc/fold-const.c
===================================================================
--- gcc/fold-const.c	2013-11-05 13:06:56.985255941 +0000
+++ gcc/fold-const.c	2013-11-05 13:12:28.805655903 +0000
@@ -1007,13 +1007,9 @@ int_const_binop_1 (enum tree_code code,
  	/* It's unclear from the C standard whether shifts can overflow.
  	   The following code ignores overflow; perhaps a C standard
  	   interpretation ruling is needed.  */
-	res = wi::rshift (arg1, arg2, sign,
-			  SHIFT_COUNT_TRUNCATED
-			  ? GET_MODE_BITSIZE (TYPE_MODE (type)) : 0);
+	res = wi::rshift (arg1, arg2, sign);
        else
-	res = wi::lshift (arg1, arg2,
-			  SHIFT_COUNT_TRUNCATED
-			  ? GET_MODE_BITSIZE (TYPE_MODE (type)) : 0);
+	res = wi::lshift (arg1, arg2);
        break;
case RROTATE_EXPR:
Index: gcc/tree-ssa-ccp.c
===================================================================
--- gcc/tree-ssa-ccp.c	2013-11-05 13:07:25.659474362 +0000
+++ gcc/tree-ssa-ccp.c	2013-11-05 13:12:28.806655910 +0000
@@ -1272,20 +1272,15 @@ bit_value_binop_1 (enum tree_code code,
  		  else
  		    code = RSHIFT_EXPR;
  		}
-	      int shift_precision = SHIFT_COUNT_TRUNCATED ? width : 0;
  	      if (code == RSHIFT_EXPR)
  		{
-		  *mask = wi::rshift (wi::ext (r1mask, width, sgn),
-				      shift, sgn, shift_precision);
-		  *val = wi::rshift (wi::ext (r1val, width, sgn),
-				     shift, sgn, shift_precision);
+		  *mask = wi::rshift (wi::ext (r1mask, width, sgn), shift, sgn);
+		  *val = wi::rshift (wi::ext (r1val, width, sgn), shift, sgn);
  		}
  	      else
  		{
-		  *mask = wi::ext (wi::lshift (r1mask, shift, shift_precision),
-				   width, sgn);
-		  *val = wi::ext (wi::lshift (r1val, shift, shift_precision),
-				  width, sgn);
+		  *mask = wi::ext (wi::lshift (r1mask, shift), width, sgn);
+		  *val = wi::ext (wi::lshift (r1val, shift), width, sgn);
  		}
  	    }
  	}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]