annotate test/CodeGen/ARM/vuzp.ll @ 121:803732b1fca8

LLVM 5.0
author kono
date Fri, 27 Oct 2017 17:07:41 +0900
parents afa8332a0e37
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
2 ; RUN: llc -mtriple=arm-eabi -mattr=+neon %s -o - | FileCheck %s
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 define <8 x i8> @vuzpi8(<8 x i8>* %A, <8 x i8>* %B) nounwind {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
5 ; CHECK-LABEL: vuzpi8:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
6 ; CHECK: @ BB#0:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
7 ; CHECK-NEXT: vldr d16, [r1]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
8 ; CHECK-NEXT: vldr d17, [r0]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
9 ; CHECK-NEXT: vuzp.8 d17, d16
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
10 ; CHECK-NEXT: vmul.i8 d16, d17, d16
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
11 ; CHECK-NEXT: vmov r0, r1, d16
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
12 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
13 %tmp1 = load <8 x i8>, <8 x i8>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
14 %tmp2 = load <8 x i8>, <8 x i8>* %B
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 %tmp3 = shufflevector <8 x i8> %tmp1, <8 x i8> %tmp2, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 %tmp4 = shufflevector <8 x i8> %tmp1, <8 x i8> %tmp2, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
17 %tmp5 = mul <8 x i8> %tmp3, %tmp4
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 ret <8 x i8> %tmp5
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
21 define <16 x i8> @vuzpi8_Qres(<8 x i8>* %A, <8 x i8>* %B) nounwind {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
22 ; CHECK-LABEL: vuzpi8_Qres:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
23 ; CHECK: @ BB#0:
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
24 ; CHECK-NEXT: vldr d17, [r1]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
25 ; CHECK-NEXT: vldr d16, [r0]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
26 ; CHECK-NEXT: vuzp.8 d16, d17
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
27 ; CHECK-NEXT: vmov r0, r1, d16
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
28 ; CHECK-NEXT: vmov r2, r3, d17
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
29 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
30 %tmp1 = load <8 x i8>, <8 x i8>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
31 %tmp2 = load <8 x i8>, <8 x i8>* %B
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
32 %tmp3 = shufflevector <8 x i8> %tmp1, <8 x i8> %tmp2, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
33 ret <16 x i8> %tmp3
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
34 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
35
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 define <4 x i16> @vuzpi16(<4 x i16>* %A, <4 x i16>* %B) nounwind {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
37 ; CHECK-LABEL: vuzpi16:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
38 ; CHECK: @ BB#0:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
39 ; CHECK-NEXT: vldr d16, [r1]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
40 ; CHECK-NEXT: vldr d17, [r0]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
41 ; CHECK-NEXT: vuzp.16 d17, d16
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
42 ; CHECK-NEXT: vmul.i16 d16, d17, d16
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
43 ; CHECK-NEXT: vmov r0, r1, d16
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
44 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
45 %tmp1 = load <4 x i16>, <4 x i16>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
46 %tmp2 = load <4 x i16>, <4 x i16>* %B
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 %tmp3 = shufflevector <4 x i16> %tmp1, <4 x i16> %tmp2, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 %tmp4 = shufflevector <4 x i16> %tmp1, <4 x i16> %tmp2, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
49 %tmp5 = mul <4 x i16> %tmp3, %tmp4
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 ret <4 x i16> %tmp5
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
53 define <8 x i16> @vuzpi16_Qres(<4 x i16>* %A, <4 x i16>* %B) nounwind {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
54 ; CHECK-LABEL: vuzpi16_Qres:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
55 ; CHECK: @ BB#0:
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
56 ; CHECK-NEXT: vldr d17, [r1]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
57 ; CHECK-NEXT: vldr d16, [r0]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
58 ; CHECK-NEXT: vuzp.16 d16, d17
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
59 ; CHECK-NEXT: vmov r0, r1, d16
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
60 ; CHECK-NEXT: vmov r2, r3, d17
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
61 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
62 %tmp1 = load <4 x i16>, <4 x i16>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
63 %tmp2 = load <4 x i16>, <4 x i16>* %B
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
64 %tmp3 = shufflevector <4 x i16> %tmp1, <4 x i16> %tmp2, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 1, i32 3, i32 5, i32 7>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
65 ret <8 x i16> %tmp3
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
66 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
67
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 ; VUZP.32 is equivalent to VTRN.32 for 64-bit vectors.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 define <16 x i8> @vuzpQi8(<16 x i8>* %A, <16 x i8>* %B) nounwind {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
71 ; CHECK-LABEL: vuzpQi8:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
72 ; CHECK: @ BB#0:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
73 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
74 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
75 ; CHECK-NEXT: vuzp.8 q9, q8
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
76 ; CHECK-NEXT: vadd.i8 q8, q9, q8
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
77 ; CHECK-NEXT: vmov r0, r1, d16
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
78 ; CHECK-NEXT: vmov r2, r3, d17
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
79 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
80 %tmp1 = load <16 x i8>, <16 x i8>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
81 %tmp2 = load <16 x i8>, <16 x i8>* %B
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 %tmp3 = shufflevector <16 x i8> %tmp1, <16 x i8> %tmp2, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 %tmp4 = shufflevector <16 x i8> %tmp1, <16 x i8> %tmp2, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 %tmp5 = add <16 x i8> %tmp3, %tmp4
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 ret <16 x i8> %tmp5
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
88 define <32 x i8> @vuzpQi8_QQres(<16 x i8>* %A, <16 x i8>* %B) nounwind {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
89 ; CHECK-LABEL: vuzpQi8_QQres:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
90 ; CHECK: @ BB#0:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
91 ; CHECK-NEXT: vld1.64 {d16, d17}, [r2]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
92 ; CHECK-NEXT: vld1.64 {d18, d19}, [r1]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
93 ; CHECK-NEXT: vuzp.8 q9, q8
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
94 ; CHECK-NEXT: vst1.8 {d18, d19}, [r0:128]!
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
95 ; CHECK-NEXT: vst1.64 {d16, d17}, [r0:128]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
96 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
97 %tmp1 = load <16 x i8>, <16 x i8>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
98 %tmp2 = load <16 x i8>, <16 x i8>* %B
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
99 %tmp3 = shufflevector <16 x i8> %tmp1, <16 x i8> %tmp2, <32 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30, i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
100 ret <32 x i8> %tmp3
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
101 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
102
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 define <8 x i16> @vuzpQi16(<8 x i16>* %A, <8 x i16>* %B) nounwind {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
104 ; CHECK-LABEL: vuzpQi16:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
105 ; CHECK: @ BB#0:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
106 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
107 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
108 ; CHECK-NEXT: vuzp.16 q9, q8
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
109 ; CHECK-NEXT: vadd.i16 q8, q9, q8
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
110 ; CHECK-NEXT: vmov r0, r1, d16
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
111 ; CHECK-NEXT: vmov r2, r3, d17
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
112 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
113 %tmp1 = load <8 x i16>, <8 x i16>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
114 %tmp2 = load <8 x i16>, <8 x i16>* %B
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 %tmp3 = shufflevector <8 x i16> %tmp1, <8 x i16> %tmp2, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 %tmp4 = shufflevector <8 x i16> %tmp1, <8 x i16> %tmp2, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 %tmp5 = add <8 x i16> %tmp3, %tmp4
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 ret <8 x i16> %tmp5
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
121 define <16 x i16> @vuzpQi16_QQres(<8 x i16>* %A, <8 x i16>* %B) nounwind {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
122 ; CHECK-LABEL: vuzpQi16_QQres:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
123 ; CHECK: @ BB#0:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
124 ; CHECK-NEXT: vld1.64 {d16, d17}, [r2]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
125 ; CHECK-NEXT: vld1.64 {d18, d19}, [r1]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
126 ; CHECK-NEXT: vuzp.16 q9, q8
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
127 ; CHECK-NEXT: vst1.16 {d18, d19}, [r0:128]!
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
128 ; CHECK-NEXT: vst1.64 {d16, d17}, [r0:128]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
129 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
130 %tmp1 = load <8 x i16>, <8 x i16>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
131 %tmp2 = load <8 x i16>, <8 x i16>* %B
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
132 %tmp3 = shufflevector <8 x i16> %tmp1, <8 x i16> %tmp2, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
133 ret <16 x i16> %tmp3
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
134 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
135
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 define <4 x i32> @vuzpQi32(<4 x i32>* %A, <4 x i32>* %B) nounwind {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
137 ; CHECK-LABEL: vuzpQi32:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
138 ; CHECK: @ BB#0:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
139 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
140 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
141 ; CHECK-NEXT: vuzp.32 q9, q8
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
142 ; CHECK-NEXT: vadd.i32 q8, q9, q8
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
143 ; CHECK-NEXT: vmov r0, r1, d16
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
144 ; CHECK-NEXT: vmov r2, r3, d17
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
145 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
146 %tmp1 = load <4 x i32>, <4 x i32>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
147 %tmp2 = load <4 x i32>, <4 x i32>* %B
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 %tmp3 = shufflevector <4 x i32> %tmp1, <4 x i32> %tmp2, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 %tmp4 = shufflevector <4 x i32> %tmp1, <4 x i32> %tmp2, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 %tmp5 = add <4 x i32> %tmp3, %tmp4
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 ret <4 x i32> %tmp5
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
154 define <8 x i32> @vuzpQi32_QQres(<4 x i32>* %A, <4 x i32>* %B) nounwind {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
155 ; CHECK-LABEL: vuzpQi32_QQres:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
156 ; CHECK: @ BB#0:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
157 ; CHECK-NEXT: vld1.64 {d16, d17}, [r2]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
158 ; CHECK-NEXT: vld1.64 {d18, d19}, [r1]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
159 ; CHECK-NEXT: vuzp.32 q9, q8
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
160 ; CHECK-NEXT: vst1.32 {d18, d19}, [r0:128]!
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
161 ; CHECK-NEXT: vst1.64 {d16, d17}, [r0:128]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
162 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
163 %tmp1 = load <4 x i32>, <4 x i32>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
164 %tmp2 = load <4 x i32>, <4 x i32>* %B
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
165 %tmp3 = shufflevector <4 x i32> %tmp1, <4 x i32> %tmp2, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 1, i32 3, i32 5, i32 7>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
166 ret <8 x i32> %tmp3
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
167 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
168
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 define <4 x float> @vuzpQf(<4 x float>* %A, <4 x float>* %B) nounwind {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
170 ; CHECK-LABEL: vuzpQf:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
171 ; CHECK: @ BB#0:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
172 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
173 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
174 ; CHECK-NEXT: vuzp.32 q9, q8
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
175 ; CHECK-NEXT: vadd.f32 q8, q9, q8
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
176 ; CHECK-NEXT: vmov r0, r1, d16
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
177 ; CHECK-NEXT: vmov r2, r3, d17
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
178 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
179 %tmp1 = load <4 x float>, <4 x float>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
180 %tmp2 = load <4 x float>, <4 x float>* %B
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 %tmp3 = shufflevector <4 x float> %tmp1, <4 x float> %tmp2, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 %tmp4 = shufflevector <4 x float> %tmp1, <4 x float> %tmp2, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 %tmp5 = fadd <4 x float> %tmp3, %tmp4
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 ret <4 x float> %tmp5
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
186
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
187 define <8 x float> @vuzpQf_QQres(<4 x float>* %A, <4 x float>* %B) nounwind {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
188 ; CHECK-LABEL: vuzpQf_QQres:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
189 ; CHECK: @ BB#0:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
190 ; CHECK-NEXT: vld1.64 {d16, d17}, [r2]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
191 ; CHECK-NEXT: vld1.64 {d18, d19}, [r1]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
192 ; CHECK-NEXT: vuzp.32 q9, q8
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
193 ; CHECK-NEXT: vst1.32 {d18, d19}, [r0:128]!
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
194 ; CHECK-NEXT: vst1.64 {d16, d17}, [r0:128]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
195 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
196 %tmp1 = load <4 x float>, <4 x float>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
197 %tmp2 = load <4 x float>, <4 x float>* %B
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
198 %tmp3 = shufflevector <4 x float> %tmp1, <4 x float> %tmp2, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 1, i32 3, i32 5, i32 7>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
199 ret <8 x float> %tmp3
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
200 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
201
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 ; Undef shuffle indices should not prevent matching to VUZP:
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
203
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 define <8 x i8> @vuzpi8_undef(<8 x i8>* %A, <8 x i8>* %B) nounwind {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
205 ; CHECK-LABEL: vuzpi8_undef:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
206 ; CHECK: @ BB#0:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
207 ; CHECK-NEXT: vldr d16, [r1]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
208 ; CHECK-NEXT: vldr d17, [r0]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
209 ; CHECK-NEXT: vuzp.8 d17, d16
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
210 ; CHECK-NEXT: vmul.i8 d16, d17, d16
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
211 ; CHECK-NEXT: vmov r0, r1, d16
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
212 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
213 %tmp1 = load <8 x i8>, <8 x i8>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
214 %tmp2 = load <8 x i8>, <8 x i8>* %B
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 %tmp3 = shufflevector <8 x i8> %tmp1, <8 x i8> %tmp2, <8 x i32> <i32 0, i32 2, i32 undef, i32 undef, i32 8, i32 10, i32 12, i32 14>
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 %tmp4 = shufflevector <8 x i8> %tmp1, <8 x i8> %tmp2, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 undef, i32 undef, i32 13, i32 15>
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
217 %tmp5 = mul <8 x i8> %tmp3, %tmp4
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 ret <8 x i8> %tmp5
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
220
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
221 define <16 x i8> @vuzpi8_undef_Qres(<8 x i8>* %A, <8 x i8>* %B) nounwind {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
222 ; CHECK-LABEL: vuzpi8_undef_Qres:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
223 ; CHECK: @ BB#0:
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
224 ; CHECK-NEXT: vldr d17, [r1]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
225 ; CHECK-NEXT: vldr d16, [r0]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
226 ; CHECK-NEXT: vuzp.8 d16, d17
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
227 ; CHECK-NEXT: vmov r0, r1, d16
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
228 ; CHECK-NEXT: vmov r2, r3, d17
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
229 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
230 %tmp1 = load <8 x i8>, <8 x i8>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
231 %tmp2 = load <8 x i8>, <8 x i8>* %B
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
232 %tmp3 = shufflevector <8 x i8> %tmp1, <8 x i8> %tmp2, <16 x i32> <i32 0, i32 2, i32 undef, i32 undef, i32 8, i32 10, i32 12, i32 14, i32 1, i32 3, i32 5, i32 7, i32 undef, i32 undef, i32 13, i32 15>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
233 ret <16 x i8> %tmp3
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
234 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
235
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 define <8 x i16> @vuzpQi16_undef(<8 x i16>* %A, <8 x i16>* %B) nounwind {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
237 ; CHECK-LABEL: vuzpQi16_undef:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
238 ; CHECK: @ BB#0:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
239 ; CHECK-NEXT: vld1.64 {d16, d17}, [r1]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
240 ; CHECK-NEXT: vld1.64 {d18, d19}, [r0]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
241 ; CHECK-NEXT: vuzp.16 q9, q8
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
242 ; CHECK-NEXT: vadd.i16 q8, q9, q8
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
243 ; CHECK-NEXT: vmov r0, r1, d16
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
244 ; CHECK-NEXT: vmov r2, r3, d17
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
245 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
246 %tmp1 = load <8 x i16>, <8 x i16>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
247 %tmp2 = load <8 x i16>, <8 x i16>* %B
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 %tmp3 = shufflevector <8 x i16> %tmp1, <8 x i16> %tmp2, <8 x i32> <i32 0, i32 undef, i32 4, i32 undef, i32 8, i32 10, i32 12, i32 14>
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 %tmp4 = shufflevector <8 x i16> %tmp1, <8 x i16> %tmp2, <8 x i32> <i32 1, i32 3, i32 5, i32 undef, i32 undef, i32 11, i32 13, i32 15>
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 %tmp5 = add <8 x i16> %tmp3, %tmp4
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 ret <8 x i16> %tmp5
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
253
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
254 define <16 x i16> @vuzpQi16_undef_QQres(<8 x i16>* %A, <8 x i16>* %B) nounwind {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
255 ; CHECK-LABEL: vuzpQi16_undef_QQres:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
256 ; CHECK: @ BB#0:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
257 ; CHECK-NEXT: vld1.64 {d16, d17}, [r2]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
258 ; CHECK-NEXT: vld1.64 {d18, d19}, [r1]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
259 ; CHECK-NEXT: vuzp.16 q9, q8
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
260 ; CHECK-NEXT: vst1.16 {d18, d19}, [r0:128]!
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
261 ; CHECK-NEXT: vst1.64 {d16, d17}, [r0:128]
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
262 ; CHECK-NEXT: mov pc, lr
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
263 %tmp1 = load <8 x i16>, <8 x i16>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
264 %tmp2 = load <8 x i16>, <8 x i16>* %B
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
265 %tmp3 = shufflevector <8 x i16> %tmp1, <8 x i16> %tmp2, <16 x i32> <i32 0, i32 undef, i32 4, i32 undef, i32 8, i32 10, i32 12, i32 14, i32 1, i32 3, i32 5, i32 undef, i32 undef, i32 11, i32 13, i32 15>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
266 ret <16 x i16> %tmp3
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
267 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
268
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
269 define <8 x i16> @vuzp_lower_shufflemask_undef(<4 x i16>* %A, <4 x i16>* %B) {
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
270 ; CHECK-LABEL: vuzp_lower_shufflemask_undef:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
271 ; CHECK: @ BB#0: @ %entry
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
272 ; CHECK-NEXT: vldr d17, [r1]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
273 ; CHECK-NEXT: vldr d16, [r0]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
274 ; CHECK-NEXT: vorr q9, q8, q8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
275 ; CHECK-NEXT: vuzp.16 q8, q9
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
276 ; CHECK-NEXT: vmov r0, r1, d18
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
277 ; CHECK-NEXT: vmov r2, r3, d19
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
278 ; CHECK-NEXT: mov pc, lr
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
279 entry:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
280 %tmp1 = load <4 x i16>, <4 x i16>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
281 %tmp2 = load <4 x i16>, <4 x i16>* %B
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
282 %0 = shufflevector <4 x i16> %tmp1, <4 x i16> %tmp2, <8 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 1, i32 3, i32 5, i32 7>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
283 ret <8 x i16> %0
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
284 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
285
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
286 define <4 x i32> @vuzp_lower_shufflemask_zeroed(<2 x i32>* %A, <2 x i32>* %B) {
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
287 ; CHECK-LABEL: vuzp_lower_shufflemask_zeroed:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
288 ; CHECK: @ BB#0: @ %entry
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
289 ; CHECK-NEXT: vldr d17, [r1]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
290 ; CHECK-NEXT: vldr d16, [r0]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
291 ; CHECK-NEXT: vdup.32 q9, d16[0]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
292 ; CHECK-NEXT: vuzp.32 q8, q9
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
293 ; CHECK-NEXT: vext.32 q8, q9, q9, #2
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
294 ; CHECK-NEXT: vmov r0, r1, d16
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
295 ; CHECK-NEXT: vmov r2, r3, d17
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
296 ; CHECK-NEXT: mov pc, lr
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
297 entry:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
298 %tmp1 = load <2 x i32>, <2 x i32>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
299 %tmp2 = load <2 x i32>, <2 x i32>* %B
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
300 %0 = shufflevector <2 x i32> %tmp1, <2 x i32> %tmp2, <4 x i32> <i32 0, i32 0, i32 1, i32 3>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
301 ret <4 x i32> %0
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
302 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
303
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
304 define void @vuzp_rev_shufflemask_vtrn(<2 x i32>* %A, <2 x i32>* %B, <4 x i32>* %C) {
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
305 ; CHECK-LABEL: vuzp_rev_shufflemask_vtrn:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
306 ; CHECK: @ BB#0: @ %entry
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
307 ; CHECK-NEXT: vldr d17, [r1]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
308 ; CHECK-NEXT: vldr d16, [r0]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
309 ; CHECK-NEXT: vrev64.32 q9, q8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
310 ; CHECK-NEXT: vuzp.32 q8, q9
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
311 ; CHECK-NEXT: vst1.64 {d18, d19}, [r2]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
312 ; CHECK-NEXT: mov pc, lr
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
313 entry:
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
314 %tmp1 = load <2 x i32>, <2 x i32>* %A
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
315 %tmp2 = load <2 x i32>, <2 x i32>* %B
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
316 %0 = shufflevector <2 x i32> %tmp1, <2 x i32> %tmp2, <4 x i32> <i32 1, i32 3, i32 0, i32 2>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
317 store <4 x i32> %0, <4 x i32>* %C
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
318 ret void
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
319 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
320
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
321 define <8 x i8> @cmpsel_trunc(<8 x i8> %in0, <8 x i8> %in1, <8 x i32> %cmp0, <8 x i32> %cmp1) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
322 ; In order to create the select we need to truncate the vcgt result from a vector of i32 to a vector of i8.
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
323 ; This results in a build_vector with mismatched types. We will generate two vmovn.i32 instructions to
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
324 ; truncate from i32 to i16 and one vmovn.i16 to perform the final truncation for i8.
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
325 ; CHECK-LABEL: cmpsel_trunc:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
326 ; CHECK: @ BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
327 ; CHECK-NEXT: add r12, sp, #16
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
328 ; CHECK-NEXT: vld1.64 {d16, d17}, [r12]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
329 ; CHECK-NEXT: mov r12, sp
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
330 ; CHECK-NEXT: vld1.64 {d18, d19}, [r12]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
331 ; CHECK-NEXT: add r12, sp, #48
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
332 ; CHECK-NEXT: vld1.64 {d20, d21}, [r12]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
333 ; CHECK-NEXT: add r12, sp, #32
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
334 ; CHECK-NEXT: vcgt.u32 q8, q10, q8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
335 ; CHECK-NEXT: vld1.64 {d20, d21}, [r12]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
336 ; CHECK-NEXT: vcgt.u32 q9, q10, q9
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
337 ; CHECK-NEXT: vmov d20, r2, r3
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
338 ; CHECK-NEXT: vmovn.i32 d17, q8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
339 ; CHECK-NEXT: vmovn.i32 d16, q9
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
340 ; CHECK-NEXT: vmov d18, r0, r1
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
341 ; CHECK-NEXT: vmovn.i16 d16, q8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
342 ; CHECK-NEXT: vbsl d16, d18, d20
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
343 ; CHECK-NEXT: vmov r0, r1, d16
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
344 ; CHECK-NEXT: mov pc, lr
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
345 %c = icmp ult <8 x i32> %cmp0, %cmp1
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
346 %res = select <8 x i1> %c, <8 x i8> %in0, <8 x i8> %in1
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
347 ret <8 x i8> %res
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
348 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
349
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
350 ; Shuffle the result from the compare with a <4 x i8>.
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
351 ; We need to extend the loaded <4 x i8> to <4 x i16>. Otherwise we wouldn't be able
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
352 ; to perform the vuzp and get the vbsl mask.
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
353 define <8 x i8> @vuzp_trunc_and_shuffle(<8 x i8> %tr0, <8 x i8> %tr1,
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
354 ; CHECK-LABEL: vuzp_trunc_and_shuffle:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
355 ; CHECK: @ BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
356 ; CHECK-NEXT: .save {r11, lr}
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
357 ; CHECK-NEXT: push {r11, lr}
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
358 ; CHECK-NEXT: add r12, sp, #8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
359 ; CHECK-NEXT: add lr, sp, #24
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
360 ; CHECK-NEXT: vld1.64 {d16, d17}, [r12]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
361 ; CHECK-NEXT: ldr r12, [sp, #40]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
362 ; CHECK-NEXT: vld1.64 {d18, d19}, [lr]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
363 ; CHECK-NEXT: vcgt.u32 q8, q9, q8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
364 ; CHECK-NEXT: vld1.32 {d18[0]}, [r12:32]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
365 ; CHECK-NEXT: vmov.i8 d19, #0x7
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
366 ; CHECK-NEXT: vmovl.u8 q10, d18
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
367 ; CHECK-NEXT: vmovn.i32 d16, q8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
368 ; CHECK-NEXT: vneg.s8 d17, d19
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
369 ; CHECK-NEXT: vmov d18, r2, r3
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
370 ; CHECK-NEXT: vuzp.8 d16, d20
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
371 ; CHECK-NEXT: vshl.i8 d16, d16, #7
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
372 ; CHECK-NEXT: vshl.s8 d16, d16, d17
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
373 ; CHECK-NEXT: vmov d17, r0, r1
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
374 ; CHECK-NEXT: vbsl d16, d17, d18
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
375 ; CHECK-NEXT: vmov r0, r1, d16
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
376 ; CHECK-NEXT: pop {r11, lr}
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
377 ; CHECK-NEXT: mov pc, lr
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
378 <4 x i32> %cmp0, <4 x i32> %cmp1, <4 x i8> *%cmp2_ptr) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
379 %cmp2_load = load <4 x i8>, <4 x i8> * %cmp2_ptr, align 4
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
380 %cmp2 = trunc <4 x i8> %cmp2_load to <4 x i1>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
381 %c0 = icmp ult <4 x i32> %cmp0, %cmp1
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
382 %c = shufflevector <4 x i1> %c0, <4 x i1> %cmp2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
383 %rv = select <8 x i1> %c, <8 x i8> %tr0, <8 x i8> %tr1
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
384 ret <8 x i8> %rv
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
385 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
386
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
387 ; Use an undef value for the <4 x i8> that is being shuffled with the compare result.
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
388 ; This produces a build_vector with some of the operands undefs.
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
389 define <8 x i8> @vuzp_trunc_and_shuffle_undef_right(<8 x i8> %tr0, <8 x i8> %tr1,
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
390 ; CHECK-LABEL: vuzp_trunc_and_shuffle_undef_right:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
391 ; CHECK: @ BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
392 ; CHECK-NEXT: mov r12, sp
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
393 ; CHECK-NEXT: vld1.64 {d16, d17}, [r12]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
394 ; CHECK-NEXT: add r12, sp, #16
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
395 ; CHECK-NEXT: vld1.64 {d18, d19}, [r12]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
396 ; CHECK-NEXT: vcgt.u32 q8, q9, q8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
397 ; CHECK-NEXT: vmov.i8 d18, #0x7
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
398 ; CHECK-NEXT: vmovn.i32 d16, q8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
399 ; CHECK-NEXT: vuzp.8 d16, d17
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
400 ; CHECK-NEXT: vneg.s8 d17, d18
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
401 ; CHECK-NEXT: vshl.i8 d16, d16, #7
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
402 ; CHECK-NEXT: vmov d18, r2, r3
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
403 ; CHECK-NEXT: vshl.s8 d16, d16, d17
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
404 ; CHECK-NEXT: vmov d17, r0, r1
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
405 ; CHECK-NEXT: vbsl d16, d17, d18
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
406 ; CHECK-NEXT: vmov r0, r1, d16
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
407 ; CHECK-NEXT: mov pc, lr
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
408 <4 x i32> %cmp0, <4 x i32> %cmp1, <4 x i8> *%cmp2_ptr) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
409 %cmp2_load = load <4 x i8>, <4 x i8> * %cmp2_ptr, align 4
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
410 %cmp2 = trunc <4 x i8> %cmp2_load to <4 x i1>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
411 %c0 = icmp ult <4 x i32> %cmp0, %cmp1
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
412 %c = shufflevector <4 x i1> %c0, <4 x i1> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
413 %rv = select <8 x i1> %c, <8 x i8> %tr0, <8 x i8> %tr1
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
414 ret <8 x i8> %rv
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
415 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
416
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
417 define <8 x i8> @vuzp_trunc_and_shuffle_undef_left(<8 x i8> %tr0, <8 x i8> %tr1,
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
418 ; CHECK-LABEL: vuzp_trunc_and_shuffle_undef_left:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
419 ; CHECK: @ BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
420 ; CHECK-NEXT: mov r12, sp
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
421 ; CHECK-NEXT: vld1.64 {d16, d17}, [r12]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
422 ; CHECK-NEXT: add r12, sp, #16
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
423 ; CHECK-NEXT: vld1.64 {d18, d19}, [r12]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
424 ; CHECK-NEXT: vcgt.u32 q8, q9, q8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
425 ; CHECK-NEXT: vldr d18, .LCPI22_0
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
426 ; CHECK-NEXT: vmov.i8 d19, #0x7
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
427 ; CHECK-NEXT: vmovn.i32 d16, q8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
428 ; CHECK-NEXT: vtbl.8 d16, {d16}, d18
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
429 ; CHECK-NEXT: vneg.s8 d17, d19
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
430 ; CHECK-NEXT: vmov d18, r2, r3
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
431 ; CHECK-NEXT: vshl.i8 d16, d16, #7
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
432 ; CHECK-NEXT: vshl.s8 d16, d16, d17
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
433 ; CHECK-NEXT: vmov d17, r0, r1
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
434 ; CHECK-NEXT: vbsl d16, d17, d18
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
435 ; CHECK-NEXT: vmov r0, r1, d16
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
436 ; CHECK-NEXT: mov pc, lr
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
437 ; CHECK-NEXT: .p2align 3
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
438 ; CHECK-NEXT: @ BB#1:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
439 ; CHECK-NEXT: .LCPI22_0:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
440 ; CHECK-NEXT: .byte 255 @ 0xff
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
441 ; CHECK-NEXT: .byte 255 @ 0xff
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
442 ; CHECK-NEXT: .byte 255 @ 0xff
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
443 ; CHECK-NEXT: .byte 255 @ 0xff
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
444 ; CHECK-NEXT: .byte 0 @ 0x0
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
445 ; CHECK-NEXT: .byte 2 @ 0x2
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
446 ; CHECK-NEXT: .byte 4 @ 0x4
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
447 ; CHECK-NEXT: .byte 6 @ 0x6
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
448 <4 x i32> %cmp0, <4 x i32> %cmp1, <4 x i8> *%cmp2_ptr) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
449 %cmp2_load = load <4 x i8>, <4 x i8> * %cmp2_ptr, align 4
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
450 %cmp2 = trunc <4 x i8> %cmp2_load to <4 x i1>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
451 %c0 = icmp ult <4 x i32> %cmp0, %cmp1
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
452 %c = shufflevector <4 x i1> undef, <4 x i1> %c0, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
453 %rv = select <8 x i1> %c, <8 x i8> %tr0, <8 x i8> %tr1
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
454 ret <8 x i8> %rv
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
455 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
456
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
457 ; We're using large data types here, and we have to fill with undef values until we
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
458 ; get some vector size that we can represent.
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
459 define <10 x i8> @vuzp_wide_type(<10 x i8> %tr0, <10 x i8> %tr1,
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
460 ; CHECK-LABEL: vuzp_wide_type:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
461 ; CHECK: @ BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
462 ; CHECK-NEXT: .save {r4, r10, r11, lr}
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
463 ; CHECK-NEXT: push {r4, r10, r11, lr}
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
464 ; CHECK-NEXT: .setfp r11, sp, #8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
465 ; CHECK-NEXT: add r11, sp, #8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
466 ; CHECK-NEXT: bic sp, sp, #15
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
467 ; CHECK-NEXT: add r12, r11, #32
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
468 ; CHECK-NEXT: add lr, r11, #60
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
469 ; CHECK-NEXT: vld1.32 {d17[0]}, [r12:32]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
470 ; CHECK-NEXT: add r12, r11, #24
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
471 ; CHECK-NEXT: vld1.32 {d22[0]}, [lr:32]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
472 ; CHECK-NEXT: add lr, r11, #36
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
473 ; CHECK-NEXT: vld1.32 {d16[0]}, [r12:32]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
474 ; CHECK-NEXT: add r12, r11, #52
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
475 ; CHECK-NEXT: vld1.32 {d19[0]}, [r12:32]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
476 ; CHECK-NEXT: add r12, r11, #44
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
477 ; CHECK-NEXT: vld1.32 {d17[1]}, [lr:32]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
478 ; CHECK-NEXT: vld1.32 {d18[0]}, [r12:32]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
479 ; CHECK-NEXT: add r12, r11, #40
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
480 ; CHECK-NEXT: vld1.32 {d20[0]}, [r12:32]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
481 ; CHECK-NEXT: ldr r12, [r11, #64]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
482 ; CHECK-NEXT: vcgt.u32 q10, q11, q10
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
483 ; CHECK-NEXT: ldr r4, [r12]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
484 ; CHECK-NEXT: vmov.32 d25[0], r4
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
485 ; CHECK-NEXT: add r4, r11, #28
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
486 ; CHECK-NEXT: vld1.32 {d16[1]}, [r4:32]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
487 ; CHECK-NEXT: add r4, r11, #56
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
488 ; CHECK-NEXT: vld1.32 {d19[1]}, [r4:32]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
489 ; CHECK-NEXT: add r4, r11, #48
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
490 ; CHECK-NEXT: vmov.u8 lr, d25[3]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
491 ; CHECK-NEXT: vld1.32 {d18[1]}, [r4:32]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
492 ; CHECK-NEXT: add r4, r12, #4
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
493 ; CHECK-NEXT: vcgt.u32 q8, q9, q8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
494 ; CHECK-NEXT: vmovn.i32 d19, q10
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
495 ; CHECK-NEXT: vldr d20, .LCPI23_0
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
496 ; CHECK-NEXT: vmov.i8 d18, #0x7
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
497 ; CHECK-NEXT: vmovn.i32 d16, q8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
498 ; CHECK-NEXT: vneg.s8 d17, d18
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
499 ; CHECK-NEXT: vuzp.8 d16, d19
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
500 ; CHECK-NEXT: vmov.i8 q9, #0x7
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
501 ; CHECK-NEXT: vshl.i8 d16, d16, #7
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
502 ; CHECK-NEXT: vneg.s8 q9, q9
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
503 ; CHECK-NEXT: vshl.s8 d24, d16, d17
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
504 ; CHECK-NEXT: vmov.8 d17[0], lr
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
505 ; CHECK-NEXT: vtbl.8 d16, {d24, d25}, d20
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
506 ; CHECK-NEXT: vld1.8 {d17[1]}, [r4]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
507 ; CHECK-NEXT: add r4, r11, #8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
508 ; CHECK-NEXT: vshl.i8 q8, q8, #7
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
509 ; CHECK-NEXT: vld1.64 {d20, d21}, [r4]
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
510 ; CHECK-NEXT: vshl.s8 q8, q8, q9
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
511 ; CHECK-NEXT: vmov d19, r2, r3
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
512 ; CHECK-NEXT: vmov d18, r0, r1
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
513 ; CHECK-NEXT: vbsl q8, q9, q10
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
514 ; CHECK-NEXT: vmov r0, r1, d16
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
515 ; CHECK-NEXT: vmov r2, r3, d17
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
516 ; CHECK-NEXT: sub sp, r11, #8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
517 ; CHECK-NEXT: pop {r4, r10, r11, lr}
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
518 ; CHECK-NEXT: mov pc, lr
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
519 ; CHECK-NEXT: .p2align 3
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
520 ; CHECK-NEXT: @ BB#1:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
521 ; CHECK-NEXT: .LCPI23_0:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
522 ; CHECK-NEXT: .byte 0 @ 0x0
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
523 ; CHECK-NEXT: .byte 1 @ 0x1
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
524 ; CHECK-NEXT: .byte 2 @ 0x2
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
525 ; CHECK-NEXT: .byte 3 @ 0x3
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
526 ; CHECK-NEXT: .byte 4 @ 0x4
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
527 ; CHECK-NEXT: .byte 8 @ 0x8
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
528 ; CHECK-NEXT: .byte 9 @ 0x9
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
529 ; CHECK-NEXT: .byte 10 @ 0xa
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
530 <5 x i32> %cmp0, <5 x i32> %cmp1, <5 x i8> *%cmp2_ptr) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
531 %cmp2_load = load <5 x i8>, <5 x i8> * %cmp2_ptr, align 4
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
532 %cmp2 = trunc <5 x i8> %cmp2_load to <5 x i1>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
533 %c0 = icmp ult <5 x i32> %cmp0, %cmp1
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
534 %c = shufflevector <5 x i1> %c0, <5 x i1> %cmp2, <10 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
535 %rv = select <10 x i1> %c, <10 x i8> %tr0, <10 x i8> %tr1
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
536 ret <10 x i8> %rv
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
537 }
121
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
538
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
539 %struct.uint8x8x2_t = type { [2 x <8 x i8>] }
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
540 define %struct.uint8x8x2_t @vuzp_extract_subvector(<16 x i8> %t) #0 {
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
541 ; CHECK-LABEL: vuzp_extract_subvector:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
542 ; CHECK: @ BB#0:
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
543 ; CHECK-NEXT: vmov d17, r2, r3
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
544 ; CHECK-NEXT: vmov d16, r0, r1
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
545 ; CHECK-NEXT: vorr d18, d17, d17
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
546 ; CHECK-NEXT: vuzp.8 d16, d18
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
547 ; CHECK-NEXT: vmov r0, r1, d16
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
548 ; CHECK-NEXT: vmov r2, r3, d18
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
549 ; CHECK-NEXT: mov pc, lr
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
550
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
551 %vuzp.i = shufflevector <16 x i8> %t, <16 x i8> undef, <8 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
552 %vuzp1.i = shufflevector <16 x i8> %t, <16 x i8> undef, <8 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15>
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
553 %.fca.0.0.insert = insertvalue %struct.uint8x8x2_t undef, <8 x i8> %vuzp.i, 0, 0
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
554 %.fca.0.1.insert = insertvalue %struct.uint8x8x2_t %.fca.0.0.insert, <8 x i8> %vuzp1.i, 0, 1
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
555 ret %struct.uint8x8x2_t %.fca.0.1.insert
803732b1fca8 LLVM 5.0
kono
parents: 95
diff changeset
556 }