111
|
1 /* PR tree-optimization/65170 */
|
|
2 /* { dg-do compile { target int128 } } */
|
|
3 /* { dg-options "-O2 -fdump-tree-vrp1" } */
|
|
4
|
|
5 typedef unsigned __int128 T;
|
|
6 extern void link_error (void);
|
|
7 extern void required_check (void);
|
|
8
|
|
9 T
|
|
10 foo (T b, T c)
|
|
11 {
|
|
12 T a;
|
|
13 b &= 0xffffffffffffffffULL;
|
|
14 c &= 0xffffffffffffffffULL;
|
|
15 if (b < 7 || c < 7)
|
|
16 return 0;
|
|
17 a = b * c;
|
|
18 if (a < 49 || a > (((T) 0xfffffffffffffffeULL << 64) | 1))
|
|
19 link_error ();
|
|
20 return a;
|
|
21 }
|
|
22
|
|
23 T
|
|
24 bar (T b, T c)
|
|
25 {
|
|
26 T a;
|
|
27 b &= 0xffffffffffffffffULL;
|
|
28 c &= 0xffffffffffffffffULL;
|
|
29 if (b < 7 || c < 7)
|
|
30 return 0;
|
|
31 a = b * c;
|
|
32 if (a == 49)
|
|
33 required_check ();
|
|
34 return a;
|
|
35 }
|
|
36
|
|
37 T
|
|
38 baz (T b, T c)
|
|
39 {
|
|
40 T a;
|
|
41 b &= 0xffffffffffffffffULL;
|
|
42 c &= 0xffffffffffffffffULL;
|
|
43 if (b < 7 || c < 7)
|
|
44 return 0;
|
|
45 a = b * c;
|
|
46 if (a == (((T) 0xfffffffffffffffeULL << 64) | 1))
|
|
47 required_check ();
|
|
48 return a;
|
|
49 }
|
|
50
|
|
51 /* { dg-final { scan-tree-dump-not "link_error" "vrp1" } } */
|
|
52 /* { dg-final { scan-tree-dump-times "required_check" 2 "vrp1" } } */
|