(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr85095-2.c
       1  /* PR target/85095 *
       2  /* { dg-do compile } */
       3  /* { dg-options "-O2 -masm=att" } */
       4  
       5  unsigned int
       6  f1 (unsigned int a, unsigned int b)
       7  {
       8    unsigned int i = __builtin_add_overflow (a, b, &a);
       9    return a + i;
      10  }
      11  
      12  unsigned int
      13  f2 (unsigned int a, unsigned int b)
      14  {
      15    unsigned int i = __builtin_add_overflow (a, b, &a);
      16    return a - i;
      17  }
      18  
      19  #ifdef __x86_64__
      20  unsigned long long
      21  f3 (unsigned long long a, unsigned long long b)
      22  {
      23    unsigned long long i = __builtin_add_overflow (a, b, &a);
      24    return a + i;
      25  }
      26  
      27  unsigned long long
      28  f4 (unsigned long long a, unsigned long long b)
      29  {
      30    unsigned long long i = __builtin_add_overflow (a, b, &a);
      31    return a - i;
      32  }
      33  
      34  unsigned long long
      35  f5 (unsigned int a, unsigned int b)
      36  {
      37    unsigned int i = __builtin_add_overflow (a, b, &a);
      38    return a + i;
      39  }
      40  
      41  unsigned long long
      42  f6 (unsigned int a, unsigned int b)
      43  {
      44    unsigned int i = __builtin_add_overflow (a, b, &a);
      45    return a - i;
      46  }
      47  #endif
      48  
      49  /* { dg-final { scan-assembler-times "adcl\t\\\$0," 1 { target ia32 } } } */
      50  /* { dg-final { scan-assembler-times "sbbl\t\\\$0," 1 { target ia32 } } } */
      51  /* { dg-final { scan-assembler-times "adcl\t\\\$0," 2 { target { ! ia32 } } } } */
      52  /* { dg-final { scan-assembler-times "sbbl\t\\\$0," 2 { target { ! ia32 } } } } */
      53  /* { dg-final { scan-assembler-times "adcq\t\\\$0," 1 { target { ! ia32 } } } } */
      54  /* { dg-final { scan-assembler-times "sbbq\t\\\$0," 1 { target { ! ia32 } } } } */