blob: fbd7992bf4fb9fd143c93f64431a6439afbffc79 [file] [log] [blame]
/* PR target/85095 *
/* { dg-do compile } */
/* { dg-options "-O2 -masm=att" } */
unsigned int
f1 (unsigned int a, unsigned int b)
{
unsigned int i = __builtin_add_overflow (a, b, &a);
return a + i;
}
unsigned int
f2 (unsigned int a, unsigned int b)
{
unsigned int i = __builtin_add_overflow (a, b, &a);
return a - i;
}
#ifdef __x86_64__
unsigned long long
f3 (unsigned long long a, unsigned long long b)
{
unsigned long long i = __builtin_add_overflow (a, b, &a);
return a + i;
}
unsigned long long
f4 (unsigned long long a, unsigned long long b)
{
unsigned long long i = __builtin_add_overflow (a, b, &a);
return a - i;
}
unsigned long long
f5 (unsigned int a, unsigned int b)
{
unsigned int i = __builtin_add_overflow (a, b, &a);
return a + i;
}
unsigned long long
f6 (unsigned int a, unsigned int b)
{
unsigned int i = __builtin_add_overflow (a, b, &a);
return a - i;
}
#endif
/* { dg-final { scan-assembler-times "adcl\t\\\$0," 1 { target ia32 } } } */
/* { dg-final { scan-assembler-times "sbbl\t\\\$0," 1 { target ia32 } } } */
/* { dg-final { scan-assembler-times "adcl\t\\\$0," 2 { target { ! ia32 } } } } */
/* { dg-final { scan-assembler-times "sbbl\t\\\$0," 2 { target { ! ia32 } } } } */
/* { dg-final { scan-assembler-times "adcq\t\\\$0," 1 { target { ! ia32 } } } } */
/* { dg-final { scan-assembler-times "sbbq\t\\\$0," 1 { target { ! ia32 } } } } */