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: [PATCH] Fix PR61306: improve handling of sign and cast in bswap


> From: Jakub Jelinek [mailto:jakub@redhat.com]
> Sent: Thursday, June 19, 2014 1:54 AM
> 
> Seems there are actually two spots with this, not just one.
> 
> Completely untested fix:
> 
> 2014-06-18  Jakub Jelinek  <jakub@redhat.com>
> 
> 	* tree-ssa-math-opts.c (do_shift_rotate, find_bswap_or_nop_1):
> Cast
> 	0xff to uint64_t before shifting it up.
> 
> --- gcc/tree-ssa-math-opts.c	2014-06-13 08:08:42.354136356 +0200
> +++ gcc/tree-ssa-math-opts.c	2014-06-18 19:50:59.486916201 +0200
> @@ -1669,7 +1669,8 @@ do_shift_rotate (enum tree_code code,
>        break;
>      case RSHIFT_EXPR:
>        /* Arithmetic shift of signed type: result is dependent on the value.  */
> -      if (!TYPE_UNSIGNED (n->type) && (n->n & (0xff << (bitsize - 8))))
> +      if (!TYPE_UNSIGNED (n->type)
> +	  && (n->n & ((uint64_t) 0xff << (bitsize - 8))))
>  	return false;
>        n->n >>= count;
>        break;
> @@ -1903,7 +1904,7 @@ find_bswap_or_nop_1 (gimple stmt, struct
>  	    old_type_size = TYPE_PRECISION (n->type);
>  	    if (!TYPE_UNSIGNED (n->type)
>  		&& type_size > old_type_size
> -		&& n->n & (0xff << (old_type_size - 8)))
> +		&& n->n & ((uint64_t) 0xff << (old_type_size - 8)))
>  	      return NULL_TREE;
> 
>  	    if (type_size / BITS_PER_UNIT < (int)(sizeof (int64_t)))
> 
> 

Yep, that's the right fix. I tested it on both a bootstrapped gcc on x86_64-linux-gnu
and an arm-none-eabi cross-compiler with no regression on the testsuite.

Jakub, since you made the patch, the honor of commiting it should be yours.

Richard, given this issue, I think we should wait a few more days before I commit
A backported (and fixed of course) version to 4.8 and 4.9.

Best regards,

Thomas




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