annotate gcc/testsuite/gcc.c-torture/execute/pr85582-2.c @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 /* PR target/85582 */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 #ifdef __SIZEOF_INT128__
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 typedef __int128 S;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 typedef unsigned __int128 U;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 #else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 typedef long long S;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 typedef unsigned long long U;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 #endif
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 __attribute__((noipa)) S
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 f1 (S x, int y)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 x = x << (y & 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 x += y;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 return x;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 __attribute__((noipa)) S
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20 f2 (S x, int y)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 x = x >> (y & 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 x += y;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 return x;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 __attribute__((noipa)) U
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 f3 (U x, int y)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 x = x >> (y & 5);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 x += y;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 return x;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 int
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 main ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 S a = (S) 1 << (sizeof (S) * __CHAR_BIT__ - 7);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 S b = f1 (a, 12);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 if (b != ((S) 1 << (sizeof (S) * __CHAR_BIT__ - 3)) + 12)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 S c = (U) 1 << (sizeof (S) * __CHAR_BIT__ - 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 S d = f2 (c, 12);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 if ((U) d != ((U) 0x1f << (sizeof (S) * __CHAR_BIT__ - 5)) + 12)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 U e = (U) 1 << (sizeof (U) * __CHAR_BIT__ - 1);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 U f = f3 (c, 12);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 if (f != ((U) 1 << (sizeof (U) * __CHAR_BIT__ - 5)) + 12)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 return 0;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 }