| /* PR tree-optimization/96272 */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O2 -fdump-tree-widening_mul" } */ |
| |
| unsigned |
| foo (unsigned a, unsigned b) |
| { |
| if (a > ~0U - b) |
| return ~0U; |
| return a + b; |
| } |
| |
| unsigned |
| bar (unsigned a, unsigned b) |
| { |
| if (a <= ~0U - b) |
| return ~0U; |
| return a + b; |
| } |
| |
| unsigned |
| baz (unsigned a, unsigned b) |
| { |
| if (~0U - b < a) |
| return ~0U; |
| return a + b; |
| } |
| |
| unsigned |
| qux (unsigned a, unsigned b) |
| { |
| if (~0U - b >= a) |
| return ~0U; |
| return a + b; |
| } |
| |
| /* { dg-final { scan-tree-dump-times "ADD_OVERFLOW" 4 "widening_mul" { target { i?86-*-* x86_64-*-* } } } } */ |