| /* PR tree-optimization/65170 */ |
| /* { dg-do compile { target int128 } } */ |
| /* { dg-options "-O2 -fdump-tree-vrp1" } */ |
| |
| typedef unsigned __int128 T; |
| extern void link_error (void); |
| extern void required_check (void); |
| |
| T |
| foo (T b, T c) |
| { |
| T a; |
| b &= 0xffffffffffffffffULL; |
| c &= 0xffffffffffffffffULL; |
| if (b < 7 || c < 7) |
| return 0; |
| a = b * c; |
| if (a < 49 || a > (((T) 0xfffffffffffffffeULL << 64) | 1)) |
| link_error (); |
| return a; |
| } |
| |
| T |
| bar (T b, T c) |
| { |
| T a; |
| b &= 0xffffffffffffffffULL; |
| c &= 0xffffffffffffffffULL; |
| if (b < 7 || c < 7) |
| return 0; |
| a = b * c; |
| if (a == 49) |
| required_check (); |
| return a; |
| } |
| |
| T |
| baz (T b, T c) |
| { |
| T a; |
| b &= 0xffffffffffffffffULL; |
| c &= 0xffffffffffffffffULL; |
| if (b < 7 || c < 7) |
| return 0; |
| a = b * c; |
| if (a == (((T) 0xfffffffffffffffeULL << 64) | 1)) |
| required_check (); |
| return a; |
| } |
| |
| /* { dg-final { scan-tree-dump-not "link_error" "vrp1" } } */ |
| /* { dg-final { scan-tree-dump-times "required_check" 2 "vrp1" } } */ |