annotate gcc/testsuite/gcc.c-torture/execute/pr92618.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 /* PR tree-optimization/92618 */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 typedef long long __m128i __attribute__((__may_alias__, __vector_size__(2 * sizeof (long long))));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 double a[4];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 unsigned long long b[4];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 __attribute__((noipa)) __m128i
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 bar (void)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 static int cnt;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 cnt += 2;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 return (__m128i) { cnt, cnt + 1 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 #if __SIZEOF_LONG_LONG__ == __SIZEOF_DOUBLE__
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 typedef double __m128d __attribute__((__may_alias__, __vector_size__(2 * sizeof (double))));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 __attribute__((noipa)) __m128i
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 qux (void)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 static double cnt;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 cnt += 2.0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 return (__m128i) (__m128d) { cnt, cnt + 1.0 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 foo (unsigned long long *x)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 __m128i c = bar ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 __m128i d = bar ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 *(__m128i *) &b[0] = c;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 *(__m128i *) &b[2] = d;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 *x = b[0] + b[1] + b[2] + b[3];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 baz (double *x)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 #if __SIZEOF_LONG_LONG__ == __SIZEOF_DOUBLE__
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 __m128i c = qux ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 __m128i d = qux ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 *(__m128i *) &a[0] = c;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 *(__m128i *) &a[2] = d;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 *x = a[0] + a[1] + a[2] + a[3];
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 int
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 main ()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53 unsigned long long c = 0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 foo (&c);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 if (c != 2 + 3 + 4 + 5)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 __builtin_abort ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 #if __SIZEOF_LONG_LONG__ == __SIZEOF_DOUBLE__
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 double d = 0.0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 baz (&d);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 if (d != 2.0 + 3.0 + 4.0 + 5.0)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 __builtin_abort ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 #endif
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 }