[PATCH] Fix a fallout of my BIT_AND_EXPR optimization patch (PR middle-end/45876)
Richard Guenther
rguenther@suse.de
Mon Oct 4 15:34:00 GMT 2010
On Mon, 4 Oct 2010, Jakub Jelinek wrote:
> Hi!
>
> As the testcase shows, there were some type issues in my PR31261
> patch. Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux,
> ok for trunk?
Ok.
Thanks,
Richard.
> 2010-10-04 Jakub Jelinek <jakub@redhat.com>
>
> PR middle-end/45876
> * fold-const.c (fold_binary_loc) <case BIT_AND_EXPR>: Use
> arg0's type or its unsigned counterpart as utype. Convert
> arg1 to utype unconditionally.
>
> * gcc.c-torture/compile/pr45876.c: New test.
>
> --- gcc/fold-const.c.jj 2010-10-01 12:39:42.000000000 +0200
> +++ gcc/fold-const.c 2010-10-04 11:22:18.000000000 +0200
> @@ -11152,12 +11152,12 @@ fold_binary_loc (location_t loc,
> || (TREE_CODE (arg0) != NEGATE_EXPR
> && pmop[1] != TREE_OPERAND (arg0, 1)))
> {
> - tree utype = type;
> + tree utype = TREE_TYPE (arg0);
> if (! TYPE_OVERFLOW_WRAPS (TREE_TYPE (arg0)))
> {
> /* Perform the operations in a type that has defined
> overflow behavior. */
> - utype = unsigned_type_for (type);
> + utype = unsigned_type_for (TREE_TYPE (arg0));
> if (pmop[0] != NULL)
> pmop[0] = fold_convert_loc (loc, utype, pmop[0]);
> if (pmop[1] != NULL)
> @@ -11184,16 +11184,9 @@ fold_binary_loc (location_t loc,
> tem = fold_build2_loc (loc, MINUS_EXPR, utype,
> pmop[0], pmop[1]);
> /* TEM is now the new binary +, - or unary - replacement. */
> - if (utype == type)
> - return fold_build2_loc (loc, BIT_AND_EXPR, type,
> - tem, arg1);
> - else
> - {
> - tem = fold_build2_loc (loc, BIT_AND_EXPR, utype, tem,
> - fold_convert_loc (loc, utype,
> - arg1));
> - return fold_convert_loc (loc, type, tem);
> - }
> + tem = fold_build2_loc (loc, BIT_AND_EXPR, utype, tem,
> + fold_convert_loc (loc, utype, arg1));
> + return fold_convert_loc (loc, type, tem);
> }
> }
> }
> --- gcc/testsuite/gcc.c-torture/compile/pr45876.c.jj 2010-10-04 11:18:00.000000000 +0200
> +++ gcc/testsuite/gcc.c-torture/compile/pr45876.c 2010-10-04 11:17:40.000000000 +0200
> @@ -0,0 +1,9 @@
> +/* PR middle-end/45876 */
> +
> +unsigned
> +foo (unsigned x)
> +{
> + short i = 0;
> + i = ((short) (((((unsigned) i) >> 1) & 16383) + x)) & 16383;
> + return i;
> +}
>
> Jakub
>
>
--
Richard Guenther <rguenther@suse.de>
Novell / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 - GF: Markus Rex
More information about the Gcc-patches
mailing list