re PR target/63594 (ICE: in ix86_vector_duplicate_value, at config/i386/i386.c:39831...
[gcc.git] / gcc / testsuite / gcc.dg / pr63594-1.c
1 /* PR target/63594 */
2 /* { dg-do compile } */
3 /* { dg-options "-O2 -Wno-psabi" } */
4 /* { dg-additional-options "-mno-mmx" { target i?86-*-linux* x86_64-*-linux* } } */
5
6 #define C1 c
7 #define C2 C1, C1
8 #define C4 C2, C2
9 #define C8 C4, C4
10 #define C16 C8, C8
11 #define C32 C16, C16
12 #define C64 C32, C32
13 #define C_(n) n
14 #define C(n) C_(C##n)
15
16 #define T(t,s) \
17 typedef t v##t##s __attribute__ ((__vector_size__ (s * sizeof (t)))); \
18 v##t##s \
19 test1##t##s (t c) \
20 { \
21 v##t##s v = { C(s) }; \
22 return v; \
23 } \
24 \
25 v##t##s \
26 test2##t##s (t *p) \
27 { \
28 t c = *p; \
29 v##t##s v = { C(s) }; \
30 return v; \
31 }
32
33 typedef long long llong;
34
35 T(char, 64)
36 T(char, 32)
37 T(char, 16)
38 T(char, 8)
39 T(char, 4)
40 T(char, 2)
41 T(char, 1)
42 T(short, 32)
43 T(short, 16)
44 T(short, 8)
45 T(short, 4)
46 T(short, 2)
47 T(short, 1)
48 T(int, 16)
49 T(int, 8)
50 T(int, 4)
51 T(int, 2)
52 T(int, 1)
53 T(float, 16)
54 T(float, 8)
55 T(float, 4)
56 T(float, 2)
57 T(float, 1)
58 T(llong, 8)
59 T(llong, 4)
60 T(llong, 2)
61 T(llong, 1)
62 T(double, 8)
63 T(double, 4)
64 T(double, 2)
65 T(double, 1)