blob: 994d89d31c7813557dacb25de353a435cc350c25 [file] [log] [blame]
Bob Wilson8bb9e482009-07-26 00:39:34 +00001; RUN: llvm-as < %s | llc -march=arm -mattr=+neon | FileCheck %s
2
3define arm_apcscc <8 x i8> @test_vrev64D8(<8 x i8>* %A) nounwind {
4;CHECK: test_vrev64D8:
5;CHECK: vrev64.8
6 %tmp1 = load <8 x i8>* %A
7 %tmp2 = shufflevector <8 x i8> %tmp1, <8 x i8> undef, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0>
8 ret <8 x i8> %tmp2
9}
10
11define arm_apcscc <4 x i16> @test_vrev64D16(<4 x i16>* %A) nounwind {
12;CHECK: test_vrev64D16:
13;CHECK: vrev64.16
14 %tmp1 = load <4 x i16>* %A
15 %tmp2 = shufflevector <4 x i16> %tmp1, <4 x i16> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
16 ret <4 x i16> %tmp2
17}
18
19define arm_apcscc <2 x i32> @test_vrev64D32(<2 x i32>* %A) nounwind {
20;CHECK: test_vrev64D32:
21;CHECK: vrev64.32
22 %tmp1 = load <2 x i32>* %A
23 %tmp2 = shufflevector <2 x i32> %tmp1, <2 x i32> undef, <2 x i32> <i32 1, i32 0>
24 ret <2 x i32> %tmp2
25}
26
27define arm_apcscc <2 x float> @test_vrev64Df(<2 x float>* %A) nounwind {
28;CHECK: test_vrev64Df:
29;CHECK: vrev64.32
30 %tmp1 = load <2 x float>* %A
31 %tmp2 = shufflevector <2 x float> %tmp1, <2 x float> undef, <2 x i32> <i32 1, i32 0>
32 ret <2 x float> %tmp2
33}
34
35define arm_apcscc <16 x i8> @test_vrev64Q8(<16 x i8>* %A) nounwind {
36;CHECK: test_vrev64Q8:
37;CHECK: vrev64.8
38 %tmp1 = load <16 x i8>* %A
39 %tmp2 = shufflevector <16 x i8> %tmp1, <16 x i8> undef, <16 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8>
40 ret <16 x i8> %tmp2
41}
42
43define arm_apcscc <8 x i16> @test_vrev64Q16(<8 x i16>* %A) nounwind {
44;CHECK: test_vrev64Q16:
45;CHECK: vrev64.16
46 %tmp1 = load <8 x i16>* %A
47 %tmp2 = shufflevector <8 x i16> %tmp1, <8 x i16> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
48 ret <8 x i16> %tmp2
49}
50
51define arm_apcscc <4 x i32> @test_vrev64Q32(<4 x i32>* %A) nounwind {
52;CHECK: test_vrev64Q32:
53;CHECK: vrev64.32
54 %tmp1 = load <4 x i32>* %A
55 %tmp2 = shufflevector <4 x i32> %tmp1, <4 x i32> undef, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
56 ret <4 x i32> %tmp2
57}
58
59define arm_apcscc <4 x float> @test_vrev64Qf(<4 x float>* %A) nounwind {
60;CHECK: test_vrev64Qf:
61;CHECK: vrev64.32
62 %tmp1 = load <4 x float>* %A
63 %tmp2 = shufflevector <4 x float> %tmp1, <4 x float> undef, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
64 ret <4 x float> %tmp2
65}
66
67define arm_apcscc <8 x i8> @test_vrev32D8(<8 x i8>* %A) nounwind {
68;CHECK: test_vrev32D8:
69;CHECK: vrev32.8
70 %tmp1 = load <8 x i8>* %A
71 %tmp2 = shufflevector <8 x i8> %tmp1, <8 x i8> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
72 ret <8 x i8> %tmp2
73}
74
75define arm_apcscc <4 x i16> @test_vrev32D16(<4 x i16>* %A) nounwind {
76;CHECK: test_vrev32D16:
77;CHECK: vrev32.16
78 %tmp1 = load <4 x i16>* %A
79 %tmp2 = shufflevector <4 x i16> %tmp1, <4 x i16> undef, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
80 ret <4 x i16> %tmp2
81}
82
83define arm_apcscc <16 x i8> @test_vrev32Q8(<16 x i8>* %A) nounwind {
84;CHECK: test_vrev32Q8:
85;CHECK: vrev32.8
86 %tmp1 = load <16 x i8>* %A
87 %tmp2 = shufflevector <16 x i8> %tmp1, <16 x i8> undef, <16 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4, i32 11, i32 10, i32 9, i32 8, i32 15, i32 14, i32 13, i32 12>
88 ret <16 x i8> %tmp2
89}
90
91define arm_apcscc <8 x i16> @test_vrev32Q16(<8 x i16>* %A) nounwind {
92;CHECK: test_vrev32Q16:
93;CHECK: vrev32.16
94 %tmp1 = load <8 x i16>* %A
95 %tmp2 = shufflevector <8 x i16> %tmp1, <8 x i16> undef, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
96 ret <8 x i16> %tmp2
97}
98
99define arm_apcscc <8 x i8> @test_vrev16D8(<8 x i8>* %A) nounwind {
100;CHECK: test_vrev16D8:
101;CHECK: vrev16.8
102 %tmp1 = load <8 x i8>* %A
103 %tmp2 = shufflevector <8 x i8> %tmp1, <8 x i8> undef, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
104 ret <8 x i8> %tmp2
105}
106
107define arm_apcscc <16 x i8> @test_vrev16Q8(<16 x i8>* %A) nounwind {
108;CHECK: test_vrev16Q8:
109;CHECK: vrev16.8
110 %tmp1 = load <16 x i8>* %A
111 %tmp2 = shufflevector <16 x i8> %tmp1, <16 x i8> undef, <16 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 9, i32 8, i32 11, i32 10, i32 13, i32 12, i32 15, i32 14>
112 ret <16 x i8> %tmp2
113}