PR rtl-optimization/87918
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / pr85323-6.c
blobc110886f384c63dab52e11115a93cd3163002775
1 /* PR target/85323 */
2 /* { dg-do compile } */
3 /* { dg-options "-O2 -mavx512vl -mavx512bw -fdump-tree-optimized" } */
5 #include <x86intrin.h>
7 struct S1 { __m128i a, b, c, d, e, f, g, h, i; } s1;
8 struct S2 { __m256i a, b, c, d, e, f, g, h, i; } s2;
9 struct S3 { __m512i a, b, c, d, e, f, g, h, i; } s3;
11 /* { dg-final { scan-tree-dump-times "s1.a = \{ -4342213319840130048, -761680639942076944 \};" 1 "optimized" } } */
12 /* { dg-final { scan-tree-dump-times "s1.b = \{ 16777216, 149499221639168 \};" 1 "optimized" } } */
13 /* { dg-final { scan-tree-dump-times "s1.c = \{ 2623346860254860648, -763360136839241728 \};" 1 "optimized" } } */
14 /* { dg-final { scan-tree-dump-times "s1.d = \{ 35871495301330685, 2005711373062887255 \};" 1 "optimized" } } */
15 /* { dg-final { scan-tree-dump-times "s1.e = \{ 128, 1729384589077512192 \};" 1 "optimized" } } */
16 /* { dg-final { scan-tree-dump-times "s1.f = \{ 655836773112359254, 2005509209063424011 \};" 1 "optimized" } } */
17 /* { dg-final { scan-tree-dump-times "s1.g = \{ -157301717633283, -300131636150806697 \};" 1 "optimized" } } */
18 /* { dg-final { scan-tree-dump-times "s1.h = \{ -128, -576458420136181760 \};" 1 "optimized" } } */
19 /* { dg-final { scan-tree-dump-times "s1.i = \{ 655836777273157974, -300052325173559301 \};" 1 "optimized" } } */
21 void
22 foo (void)
24 __m128i a = _mm_set_epi64x (0xdeadbeefcafebabeULL, 0xfee1deadfeedfaceULL);
25 __m128i b = _mm_set_epi64x (3, 9);
26 __m128i c = _mm_set_epi32 (0xc00010ffU, 0x12345678U, 0xfedcba98U, 0x80000001U);
27 __m128i d = _mm_set_epi32 (3, 32, -6, 24);
28 __m128i e = _mm_set_epi16 (0xdead, 0xbeef, 0xcafe, 0xbabe,
29 0x1234, 0x0012, 0x8001, 0xa55a);
30 __m128i f = _mm_set_epi16 (3, 16, -1, 12, 1, 0, 5, 2);
31 s1.a = _mm_sllv_epi64 (a, b);
32 s1.b = _mm_sllv_epi32 (c, d);
33 s1.c = _mm_sllv_epi16 (e, f);
34 s1.d = _mm_srlv_epi64 (a, b);
35 s1.e = _mm_srlv_epi32 (c, d);
36 s1.f = _mm_srlv_epi16 (e, f);
37 s1.g = _mm_srav_epi64 (a, b);
38 s1.h = _mm_srav_epi32 (c, d);
39 s1.i = _mm_srav_epi16 (e, f);
42 /* { dg-final { scan-tree-dump-times "s2.a = \{ 6722813395751927808, 0, 0, -1523361279884153888 \};" 1 "optimized" } } */
43 /* { dg-final { scan-tree-dump-times "s2.b = \{ 9177596069264525312, 1851607040, -81985531201716224, 76543602090093808 \};" 1 "optimized" } } */
44 /* { dg-final { scan-tree-dump-times "s2.c = \{ 1008895103428722688, -5985166321598332416, 2623346860254860648, -763360136839241728 \};" 1 "optimized" } } */
45 /* { dg-final { scan-tree-dump-times "s2.d = \{ 2189249818860, 0, 0, 1002855686531443627 \};" 1 "optimized" } } */
46 /* { dg-final { scan-tree-dump-times "s2.e = \{ 114276044520956448, 130489, -81985531201716224, 3377704168205116 \};" 1 "optimized" } } */
47 /* { dg-final { scan-tree-dump-times "s2.f = \{ 289076540546023424, 3115407575762206978, 655836773112359254, 2005509209063424011 \};" 1 "optimized" } } */
48 /* { dg-final { scan-tree-dump-times "s2.g = \{ 2189249818860, 0, -1, -150065818075403349 \};" 1 "optimized" } } */
49 /* { dg-final { scan-tree-dump-times "s2.h = \{ -29839143554899424, -4294836807, -81985526906748929, -1125895459165380 \};" 1 "optimized" } } */
50 /* { dg-final { scan-tree-dump-times "s2.i = \{ -287384211757400064, 3115618685752836354, 655836777273157974, -300052325173559301 \};" 1 "optimized" } } */
52 void
53 bar (void)
55 __m256i a = _mm256_set_epi64x (0xdeadbeefcafebabeULL, 0xfee1deadfeedfaceULL,
56 0x123456789abcdef0ULL, 0x0fedcba987654321ULL);
57 __m256i b = _mm256_set_epi64x (4, 65, -2, 19);
58 __m256i c = _mm256_set_epi32 (0xc00010ffU, 0x12345678U, 0xfedcba98U, 0x80000001U,
59 0xdeadbeefU, 0x0fedcba9U, 0xcafebabeU, 0x00111100U);
60 __m256i d = _mm256_set_epi32 (12, 1, 0, -2, 32, 11, 7, 3);
61 __m256i e = _mm256_set_epi16 (0xdead, 0xbeef, 0xcafe, 0xbabe,
62 0x1234, 0x0012, 0x8001, 0xa55a,
63 0x5678, 0x9abc, 0xdef0, 0x1020,
64 0x8070, 0x6543, 0x129f, 0);
65 __m256i f = _mm256_set_epi16 (3, 16, -1, 12, 1, 0, 5, 2, 1, 2, 3, 4, 5, 6, 7, 8);
66 s2.a = _mm256_sllv_epi64 (a, b);
67 s2.b = _mm256_sllv_epi32 (c, d);
68 s2.c = _mm256_sllv_epi16 (e, f);
69 s2.d = _mm256_srlv_epi64 (a, b);
70 s2.e = _mm256_srlv_epi32 (c, d);
71 s2.f = _mm256_srlv_epi16 (e, f);
72 s2.g = _mm256_srav_epi64 (a, b);
73 s2.h = _mm256_srav_epi32 (c, d);
74 s2.i = _mm256_srav_epi16 (e, f);
77 /* { dg-final { scan-tree-dump-times "s3.a = \{ 6592671264835730432, 5247073869855161280, 1147797409030816545, -161076958856481380, 6722813395751927808, 0, 0, -1523361279884153888 \};" 1 "optimized" } } */
78 /* { dg-final { scan-tree-dump-times "s3.b = \{ -4611667331015735296, 6592669523180452796, 2541551364173987968, 1068969636, 9177596069264525312, 1851607040, -81985531201716224, 76543602090093808 \};" 1 "optimized" } } */
79 /* { dg-final { scan-tree-dump-times "s3.c = \{ 6233191819462621886, 8070591269736295416, 8610979175836155904, 40534596407293308, 1008895103428722688, -5985166321598332416, 2623346860254860648, -763360136839241728 \};" 1 "optimized" } } */
80 /* { dg-final { scan-tree-dump-times "s3.d = \{ 31339240204107613, 327942116865947580, 1147797409030816545, 9183102797140655463, 2189249818860, 0, 0, 1002855686531443627 \};" 1 "optimized" } } */
81 /* { dg-final { scan-tree-dump-times "s3.e = \{ -4611667331024543200, 31339239126560699, 81985526923526144, 66810602, 114276044520956448, 130489, -81985531201716224, 3377704168205116 \};" 1 "optimized" } } */
82 /* { dg-final { scan-tree-dump-times "s3.f = \{ 125466298768407230, 36028797018976959, 107269861939347456, 563225682730335, 289076540546023424, 3115407575762206978, 655836773112359254, 2005509209063424011 \};" 1 "optimized" } } */
83 /* { dg-final { scan-tree-dump-times "s3.g = \{ -4689556814856355, 327942116865947580, 1147797409030816545, -40269239714120345, 2189249818860, 0, -1, -150065818075403349 \};" 1 "optimized" } } */
84 /* { dg-final { scan-tree-dump-times "s3.h = \{ -4611667331024543200, -4689554671177797, 81985531184939008, 66810602, -29839143554899424, -4294836807, -81985526906748929, -1125895459165380 \};" 1 "optimized" } } */
85 /* { dg-final { scan-tree-dump-times "s3.i = \{ -18648885549352258, -36028797018901825, -36599031236919297, 844154124885343, -287384211757400064, 3115618685752836354, 655836777273157974, -300052325173559301 \};" 1 "optimized" } } */
87 void
88 baz (void)
90 __m512i a = _mm512_set_epi64 (0xdeadbeefcafebabeULL, 0xfee1deadfeedfaceULL,
91 0x123456789abcdef0ULL, 0x0fedcba987654321ULL,
92 0xfee1deadfeedfaceULL, 0x0fedcba987654321ULL,
93 0x123456789abcdef0ULL, 0xdeadbeefcafebabeULL);
94 __m512i b = _mm512_set_epi64 (4, 65, -2, 19, 1, 0, 2, 9);
95 __m512i c = _mm512_set_epi32 (0xc00010ffU, 0x12345678U, 0xfedcba98U, 0x80000001U,
96 0xdeadbeefU, 0x0fedcba9U, 0xcafebabeU, 0x00111100U,
97 0, 0x0fedcba9U, 0x12345678U, 0x80000001U,
98 0xdeadbeefU, 0xdeadbeefU, 0xc00010ffU, 0x00111100U);
99 __m512i d = _mm512_set_epi32 (12, 1, 0, -2, 32, 11, 7, 3, 1, 2, 4, 7, 9, 2, 0, 3);
100 __m512i e = _mm512_set_epi16 (0xdead, 0xbeef, 0xcafe, 0xbabe,
101 0x1234, 0x0012, 0x8001, 0xa55a,
102 0x5678, 0x9abc, 0xdef0, 0x1020,
103 0x8070, 0x6543, 0x129f, 0,
104 0x0012, 0x8001, 0xcafe, 0xbabe,
105 0xbeef, 0xcafe, 0x9abc, 0xdef0,
106 0x8070, 0x6543, 0x129f, 0xcafe,
107 0xdead, 0xbeef, 0xcafe, 0xbabe);
108 __m512i f = _mm512_set_epi16 (3, 16, -1, 12, 1, 0, 5, 2, 1, 2, 3, 4, 5, 6, 7, 8,
109 3, 9, 2, 1, 7, 3, -12, 26, 8, 15, 17, 2, 7, 0, 3, 0);
110 s3.a = _mm512_sllv_epi64 (a, b);
111 s3.b = _mm512_sllv_epi32 (c, d);
112 s3.c = _mm512_sllv_epi16 (e, f);
113 s3.d = _mm512_srlv_epi64 (a, b);
114 s3.e = _mm512_srlv_epi32 (c, d);
115 s3.f = _mm512_srlv_epi16 (e, f);
116 s3.g = _mm512_srav_epi64 (a, b);
117 s3.h = _mm512_srav_epi32 (c, d);
118 s3.i = _mm512_srav_epi16 (e, f);