annotate gcc/testsuite/gcc.dg/tree-ssa/vrp89.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* PR target/29776 */
kono
parents:
diff changeset
2 /* { dg-do compile } */
kono
parents:
diff changeset
3 /* { dg-options "-O2 -fdump-tree-vrp1" } */
kono
parents:
diff changeset
4 /* { dg-final { scan-tree-dump-not "link_error" "vrp1"} } */
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 #define A(fn, arg, min, max) \
kono
parents:
diff changeset
7 if (__builtin_##fn (arg) < min || __builtin_##fn (arg) > max) \
kono
parents:
diff changeset
8 link_error ();
kono
parents:
diff changeset
9 #define B(fn, min, max) \
kono
parents:
diff changeset
10 A (fn, a, min, max) A (fn##l, b, min, max) A (fn##ll, c, min, max)
kono
parents:
diff changeset
11 #define C(fn, min, sub) \
kono
parents:
diff changeset
12 A (fn, a, min, ((int) sizeof (a) * __CHAR_BIT__ - sub)) \
kono
parents:
diff changeset
13 A (fn##l, b, min, ((int) sizeof (b) * __CHAR_BIT__ - sub)) \
kono
parents:
diff changeset
14 A (fn##ll, c, min, ((int) sizeof (c) * __CHAR_BIT__ - sub))
kono
parents:
diff changeset
15 #define D(fn, sub1, sub2) \
kono
parents:
diff changeset
16 A (fn, a, ((int) sizeof (a) * __CHAR_BIT__ - sub1), \
kono
parents:
diff changeset
17 ((int) sizeof (a) * __CHAR_BIT__ - sub2)) \
kono
parents:
diff changeset
18 A (fn##l, b, ((int) sizeof (b) * __CHAR_BIT__ - sub1), \
kono
parents:
diff changeset
19 ((int) sizeof (b) * __CHAR_BIT__ - sub2)) \
kono
parents:
diff changeset
20 A (fn##ll, c, ((int) sizeof (c) * __CHAR_BIT__ - sub1), \
kono
parents:
diff changeset
21 ((int) sizeof (c) * __CHAR_BIT__ - sub2))
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 extern void link_error (void);
kono
parents:
diff changeset
24
kono
parents:
diff changeset
25 unsigned int d;
kono
parents:
diff changeset
26 unsigned long e;
kono
parents:
diff changeset
27 unsigned long long f;
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 void
kono
parents:
diff changeset
30 foo (unsigned int a, unsigned long b, unsigned long long c)
kono
parents:
diff changeset
31 {
kono
parents:
diff changeset
32 B (parity, 0, 1)
kono
parents:
diff changeset
33 C (ffs, 0, 0)
kono
parents:
diff changeset
34 C (popcount, 0, 0)
kono
parents:
diff changeset
35 C (clz, 0, 0)
kono
parents:
diff changeset
36 C (ctz, -1, 0)
kono
parents:
diff changeset
37 a &= 63;
kono
parents:
diff changeset
38 b &= 63;
kono
parents:
diff changeset
39 c &= 63;
kono
parents:
diff changeset
40 B (ffs, 0, 6)
kono
parents:
diff changeset
41 B (popcount, 0, 6)
kono
parents:
diff changeset
42 a += 3; b += 3; c += 3;
kono
parents:
diff changeset
43 B (ffs, 1, 7)
kono
parents:
diff changeset
44 B (popcount, 1, 7)
kono
parents:
diff changeset
45 a = 32U + (d & 1023U);
kono
parents:
diff changeset
46 b = 32UL + (e & 1023UL);
kono
parents:
diff changeset
47 c = 32ULL + (f & 1023ULL);
kono
parents:
diff changeset
48 D (clz, 11, 6)
kono
parents:
diff changeset
49 B (ctz, 0, 10)
kono
parents:
diff changeset
50 }
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 void
kono
parents:
diff changeset
53 bar (int a, long b, long long c)
kono
parents:
diff changeset
54 {
kono
parents:
diff changeset
55 C (clrsb, 0, 1)
kono
parents:
diff changeset
56 }