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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|x86_64-*-* i?86-*-*         |

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Full testcase:
```
#include <algorithm>
void
foo (short* p1, short* p2, char* __restrict p3, int n)
{
    for (int i = 0; i != n; i++)
{
    short sum0 = p1[i];
    short sum1 = p2[i];
    sum0 = std::max<int>(0, std::min<int>(127, sum0));
    sum1 = std::max<int>(0, std::min<int>(127, sum1));
    p3[i] = static_cast<char>(sum0 * sum1 / 128);
}
}


void
foo1 (short* p1, short* p2, char* __restrict p3, int n)
{
    for (int i = 0; i != n; i++)
{
    short sum0 = p1[i];
    short sum1 = p2[i];
    sum0 = std::max<int>(std::min<int>(127, sum0), 0);
    sum1 = std::max<int>(std::min<int>(127, sum1), 0);
    p3[i] = static_cast<char>(sum0 * sum1 / 128);
}
}
```

foo1 works for x86_64 but foo fails.
foo works for aarch64 but foo1 fails.

Due to the way gimplification works in the opposite order for function
arguments.

Reply via email to