https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93044

--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Andrew Pinski <pins...@gcc.gnu.org>:

https://gcc.gnu.org/g:cc2003cd87532f319c94028f17d20a327df5ccfa

commit r14-2890-gcc2003cd87532f319c94028f17d20a327df5ccfa
Author: Andrew Pinski <apin...@marvell.com>
Date:   Sun Jul 23 21:44:39 2023 +0000

    Fix PR 93044: extra cast is not removed

    In this case we are not removing convert to a bigger size
    back to the same size (or smaller) if signedness does not
    match.
    For an example:
    ```
      signed char _1;
    ...
      _1 = *a_4(D);
      b_5 = (short unsigned int) _1;
      _2 = (unsigned char) b_5;
    ```
    The inner cast is not needed and can be removed but was not.
    The match pattern for removing the extra cast is overly
    complex so decided to add a new case for rather than trying
    to modify the current if statement here.

    Committed as approved. Bootstrapped and tested on x86_64-linux-gnu with no
regressions.

    gcc/ChangeLog:

            PR tree-optimization/93044
            * match.pd (nested int casts): A truncation (to the same size or
smaller)
            can always remove the inner cast.

    gcc/testsuite/ChangeLog:

            PR tree-optimization/93044
            * gcc.dg/tree-ssa/cast-1.c: New test.
            * gcc.dg/tree-ssa/cast-2.c: New test.

Reply via email to