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

            Bug ID: 119402
           Summary: [14/15 Regression] `((-bool) & _6) & (~_6)` is not
                    optimized to 0 on some targets
           Product: gcc
           Version: 14.1.0
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: pinskia at gcc dot gnu.org
  Target Milestone: ---
            Target: aarch64

While looking into PR 119291, I accidently found this.
It is not the issue in PR 119291 but does look like influences it. 
```
__attribute__((noipa))
int x(_Bool iftmp, unsigned _6)
{
        return ((-iftmp) & _6) & (~_6);
}
__attribute__((noipa))
int y(_Bool iftmp, unsigned _6)
{
        return (iftmp * _6) & (~_6);
}
__attribute__((noipa))
int z(_Bool iftmp, unsigned _6)
{
        unsigned t = ~_6;
        unsigned t1 = (iftmp ? _6 : 0);
        return t1 & t;
}
```

All of these should always optimize to 0. But only z is able to do it on the
trunk/GCC 14. In GCC 13, all three can. In GCC 12 x and z can.

Reply via email to