1 /* PR target/85095 *
2 /* { dg-do compile } */
3 /* { dg-options "-O2 -masm=att" } */
4 
5 unsigned int
f1(unsigned int a,unsigned int b)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
f2(unsigned int a,unsigned int b)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
f3(unsigned long long a,unsigned long long b)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
f4(unsigned long long a,unsigned long long b)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
f5(unsigned int a,unsigned int b)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
f6(unsigned int a,unsigned int b)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 } } } } */
55