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;
}

Reply via email to