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.