[Bug rtl-optimization/106032] [10/11/12/13 Regression] wrong code at -Os and above on x86_64-linux-gnu

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Jun 21 09:40:49 GMT 2022


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

--- Comment #10 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <jakub@gcc.gnu.org>:

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

commit r13-1186-ga0c30fe3b888f20215f3e040d21b62b603804ca9
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Tue Jun 21 11:40:16 2022 +0200

    ifcvt: Don't introduce trapping or faulting reads in noce_try_sign_mask
[PR106032]

    noce_try_sign_mask as documented will optimize
      if (c < 0)
        x = t;
      else
        x = 0;
    into x = (c >> bitsm1) & t;
    The optimization is done if either t is unconditional
    (e.g. for
      x = t;
      if (c >= 0)
        x = 0;
    ) or if it is cheap.  We already check that t doesn't have side-effects,
    but if t is conditional, we need to punt also if it may trap or fault,
    as we make it unconditional.

    I've briefly skimmed other noce_try* optimizations and didn't find one that
    would suffer from the same problem.

    2022-06-21  Jakub Jelinek  <jakub@redhat.com>

            PR rtl-optimization/106032
            * ifcvt.cc (noce_try_sign_mask): Punt if !t_unconditional, and
            t may_trap_or_fault_p, even if it is cheap.

            * gcc.c-torture/execute/pr106032.c: New test.


More information about the Gcc-bugs mailing list