annotate gcc/testsuite/g++.dg/other/sse2-pr85572-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/85572
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2 // { dg-do run { target i?86-*-* x86_64-*-* } }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 // { dg-options "-O2 -msse2" }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 // { dg-require-effective-target sse2_runtime }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 typedef long long V __attribute__((vector_size (16)));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 typedef long long W __attribute__((vector_size (32)));
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 __attribute__((noipa)) V
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10 foo (V x)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 return x < 0 ? -x : x;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 __attribute__((noipa)) void
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 bar (W *x, W *y)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 *y = *x < 0 ? -*x : *x;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 int
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 main ()
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 V a = { 11LL, -15LL };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 V b = foo (a);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26 if (b[0] != 11LL || b[1] != 15LL)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 V c = { -123456789123456LL, 654321654321654LL };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 V d = foo (c);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 if (d[0] != 123456789123456LL || d[1] != 654321654321654LL)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 V e = { 0, 1 };
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 V f = foo (e);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 if (f[0] != 0 || f[1] != 1)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 W g = { 17LL, -32LL, -123456789123456LL, 654321654321654LL }, h;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 bar (&g, &h);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38 if (h[0] != 17LL || h[1] != 32LL
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 || h[2] != 123456789123456LL || h[3] != 654321654321654LL)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 W i = { 0, 1, -1, 0 }, j;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 bar (&i, &j);
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 if (j[0] != 0 || j[1] != 1 || j[2] != 1 || j[3] != 0)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 __builtin_abort ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 }