https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102124
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org, | |joelh at gcc dot gnu.org, | |rsandifo at gcc dot gnu.org Priority|P3 |P2 Target Milestone|--- |11.3 Summary|GCC 11.2.1 |[11/12 Regression] |-ftree-loop-vectorize |-ftree-loop-vectorize |Causing Data To Lose Sign |Causing Data To Lose Sign |Bit on AARCH64 Platform |Bit on AARCH64 Platform Ever confirmed|0 |1 Status|UNCONFIRMED |NEW Last reconfirmed| |2021-08-30 --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Started with r11-5160-g9fc9573f9a5e9432e53c7de93985cfbd267f0309 . Slightly reduced testcase: int foo (const unsigned char *a, const unsigned char *b, unsigned long len) { int ab, ba; unsigned long i; for (i = 0, ab = 0, ba = 0; i < len; i++) { ab |= a[i] - b[i]; ba |= b[i] - a[i]; } return (ab | ba) >= 0; } int main () { unsigned char a[32] = {'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'}; unsigned char b[32] = {'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'}; unsigned char c[32] = {'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b', 'b'}; if (!foo (a, b, 16)) __builtin_abort (); if (foo (a, c, 16)) __builtin_abort (); return 0; }