| /* PR target/66112 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2" } */ |
| |
| unsigned short int |
| foo (int a, int b) |
| { |
| unsigned short int res; |
| a &= 0xffff; |
| b &= 0xffff; |
| if (__builtin_mul_overflow (a, b, &res)) |
| res = 0x123; |
| return res; |
| } |
| |
| short int |
| bar (int a, int b) |
| { |
| short int res; |
| a = (short int) a; |
| b = (short int) b; |
| if (__builtin_mul_overflow (a, b, &res)) |
| res = 0x123; |
| return res; |
| } |
| |
| /* { dg-final { scan-assembler-times "jn?o\[ \t\]" 2 } } */ |
| /* { dg-final { scan-assembler-times "mulw\[ \t\]" 2 } } */ |
| /* { dg-final { scan-assembler-times "imulw\[ \t\]" 1 } } */ |