| /* 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 } } } } */ |