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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
            Summary|Missing optimzation: fold   |Missing optimzation: fold
                   |`return (bool)(((a / 8) *   |`(bool)(a<< boolvalue)` to
                   |4) << f)` to `return        |`(bool)(a)`
                   |(bool)(a / 8)`              |
   Last reconfirmed|                            |2024-06-06
           Severity|normal                      |enhancement
     Ever confirmed|0                           |1

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The missed optimization here is really just:
```
bool fn1(unsigned short a, bool f) {
    return a << f != 0; // equals to return a / 8;
}
```
is not optimized to:
```
bool fn1(unsigned short a, bool f) {
    return a != 0; // equals to return a / 8;
}
```

Since `((int)a) << [0,1] != 0` is the same as `((int)a) != 0`.

After that, GCC already has the rest.

Reply via email to