xref: /llvm-project/llvm/test/CodeGen/SystemZ/vec-cmp-cmp-logic-select.ll (revision 2f12e45d5ae1adbc2b45f11191d0db6a0f8352b9)
1f496bd9aSJonas Paulsson; Test that a vector select with a logic combination of two compares do not
2f496bd9aSJonas Paulsson; produce any unnecessary pack, unpack or shift instructions.
3f496bd9aSJonas Paulsson; And, Or and Xor are tested.
4f496bd9aSJonas Paulsson;
5f496bd9aSJonas Paulsson; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s
6c63ed222SJonas Paulsson; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s -check-prefix=CHECK-Z14
7f496bd9aSJonas Paulsson
8f496bd9aSJonas Paulssondefine <2 x i8> @fun0(<2 x i8> %val1, <2 x i8> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x i8> %val5, <2 x i8> %val6) {
9f496bd9aSJonas Paulsson; CHECK-LABEL: fun0:
1025528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
11c63ed222SJonas Paulsson; CHECK-DAG:     vceqb [[REG0:%v[0-9]+]], %v24, %v26
12c63ed222SJonas Paulsson; CHECK-DAG:     vceqb [[REG1:%v[0-9]+]], %v28, %v30
13c63ed222SJonas Paulsson; CHECK-NEXT:    vn %v0, [[REG0]], [[REG1]]
14f496bd9aSJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
15f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
16f496bd9aSJonas Paulsson  %cmp0 = icmp eq <2 x i8> %val1, %val2
17f496bd9aSJonas Paulsson  %cmp1 = icmp eq <2 x i8> %val3, %val4
18f496bd9aSJonas Paulsson  %and = and <2 x i1> %cmp0, %cmp1
19f496bd9aSJonas Paulsson  %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6
20f496bd9aSJonas Paulsson  ret <2 x i8> %sel
21f496bd9aSJonas Paulsson}
22f496bd9aSJonas Paulsson
23f496bd9aSJonas Paulssondefine <2 x i16> @fun1(<2 x i8> %val1, <2 x i8> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x i16> %val5, <2 x i16> %val6) {
24f496bd9aSJonas Paulsson; CHECK-LABEL: fun1:
2525528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
26c63ed222SJonas Paulsson; CHECK-DAG:     vceqb [[REG0:%v[0-9]+]], %v24, %v26
27c63ed222SJonas Paulsson; CHECK-DAG:     vceqb [[REG1:%v[0-9]+]], %v28, %v30
28c63ed222SJonas Paulsson; CHECK-NEXT:    vn %v0, [[REG0]], [[REG1]]
29f496bd9aSJonas Paulsson; CHECK-NEXT:    vuphb %v0, %v0
30f496bd9aSJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
31f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
32f496bd9aSJonas Paulsson  %cmp0 = icmp eq <2 x i8> %val1, %val2
33f496bd9aSJonas Paulsson  %cmp1 = icmp eq <2 x i8> %val3, %val4
34f496bd9aSJonas Paulsson  %and = and <2 x i1> %cmp0, %cmp1
35f496bd9aSJonas Paulsson  %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6
36f496bd9aSJonas Paulsson  ret <2 x i16> %sel
37f496bd9aSJonas Paulsson}
38f496bd9aSJonas Paulsson
39c63ed222SJonas Paulssondefine <16 x i8> @fun2(<16 x i8> %val1, <16 x i8> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i8> %val5, <16 x i8> %val6) {
40f496bd9aSJonas Paulsson; CHECK-LABEL: fun2:
4125528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
42c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG0:%v[0-9]+]], %v30, %v27
43c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG1:%v[0-9]+]], %v28, %v25
44c63ed222SJonas Paulsson; CHECK-DAG:     vceqb [[REG2:%v[0-9]+]], %v24, %v26
45c63ed222SJonas Paulsson; CHECK-DAG:     vpkh [[REG3:%v[0-9]+]], [[REG1]], [[REG0]]
46c63ed222SJonas Paulsson; CHECK-NEXT:    vo %v0, [[REG2]], [[REG3]]
47c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v29, %v31, %v0
48f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
49c63ed222SJonas Paulsson  %cmp0 = icmp eq <16 x i8> %val1, %val2
50c63ed222SJonas Paulsson  %cmp1 = icmp eq <16 x i16> %val3, %val4
51c63ed222SJonas Paulsson  %and = or <16 x i1> %cmp0, %cmp1
52c63ed222SJonas Paulsson  %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6
53c63ed222SJonas Paulsson  ret <16 x i8> %sel
54f496bd9aSJonas Paulsson}
55f496bd9aSJonas Paulsson
56c63ed222SJonas Paulssondefine <16 x i16> @fun3(<16 x i8> %val1, <16 x i8> %val2, <16 x i16> %val3, <16 x i16> %val4, <16 x i16> %val5, <16 x i16> %val6) {
57f496bd9aSJonas Paulsson; CHECK-LABEL: fun3:
5825528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
59c63ed222SJonas Paulsson; CHECK-DAG:     vceqb [[REG0:%v[0-9]+]], %v24, %v26
60c63ed222SJonas Paulsson; CHECK-DAG:     vuphb [[REG2:%v[0-9]+]], [[REG0]]
61c63ed222SJonas Paulsson; CHECK-DAG:     vmrlg [[REG1:%v[0-9]+]], [[REG0]], [[REG0]]
62c63ed222SJonas Paulsson; CHECK-DAG:     vuphb [[REG1]], [[REG1]]
63c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG3:%v[0-9]+]], %v28, %v25
64c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG4:%v[0-9]+]], %v30, %v27
65c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG5:%v[0-9]+]], 176(%r15)
66c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG6:%v[0-9]+]], 160(%r15)
67c63ed222SJonas Paulsson; CHECK-DAG:     vo [[REG7:%v[0-9]+]], %v2, [[REG4]]
68c63ed222SJonas Paulsson; CHECK-DAG:     vo [[REG8:%v[0-9]+]], [[REG2]], [[REG3]]
69c63ed222SJonas Paulsson; CHECK-DAG:     vsel %v24, %v29, [[REG6]], [[REG8]]
70c63ed222SJonas Paulsson; CHECK-DAG:     vsel %v26, %v31, [[REG5]], [[REG7]]
71f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
72c63ed222SJonas Paulsson  %cmp0 = icmp eq <16 x i8> %val1, %val2
73c63ed222SJonas Paulsson  %cmp1 = icmp eq <16 x i16> %val3, %val4
74c63ed222SJonas Paulsson  %and = or <16 x i1> %cmp0, %cmp1
75c63ed222SJonas Paulsson  %sel = select <16 x i1> %and, <16 x i16> %val5, <16 x i16> %val6
76c63ed222SJonas Paulsson  ret <16 x i16> %sel
77f496bd9aSJonas Paulsson}
78f496bd9aSJonas Paulsson
79c63ed222SJonas Paulssondefine <32 x i8> @fun4(<32 x i8> %val1, <32 x i8> %val2, <32 x i8> %val3, <32 x i8> %val4, <32 x i8> %val5, <32 x i8> %val6) {
80f496bd9aSJonas Paulsson; CHECK-LABEL: fun4:
8125528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
82c63ed222SJonas Paulsson; CHECK-DAG:     vceqb [[REG0:%v[0-9]+]], %v24, %v28
83c63ed222SJonas Paulsson; CHECK-DAG:     vceqb [[REG1:%v[0-9]+]], %v26, %v30
84c63ed222SJonas Paulsson; CHECK-DAG:     vceqb [[REG2:%v[0-9]+]], %v25, %v29
85c63ed222SJonas Paulsson; CHECK-DAG:     vceqb [[REG3:%v[0-9]+]], %v27, %v31
86c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG4:%v[0-9]+]], 208(%r15)
87c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG5:%v[0-9]+]], 176(%r15)
88c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG6:%v[0-9]+]], 192(%r15)
89c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG7:%v[0-9]+]], 160(%r15)
90c63ed222SJonas Paulsson; CHECK-DAG:     vx [[REG8:%v[0-9]+]], [[REG1]], [[REG3]]
91c63ed222SJonas Paulsson; CHECK-DAG:     vx [[REG9:%v[0-9]+]], [[REG0]], [[REG2]]
92c63ed222SJonas Paulsson; CHECK-DAG:     vsel %v24, [[REG7]], [[REG6]], [[REG9]]
93c63ed222SJonas Paulsson; CHECK-DAG:     vsel %v26, [[REG5]], [[REG4]], [[REG8]]
94f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
95c63ed222SJonas Paulsson  %cmp0 = icmp eq <32 x i8> %val1, %val2
96c63ed222SJonas Paulsson  %cmp1 = icmp eq <32 x i8> %val3, %val4
97c63ed222SJonas Paulsson  %and = xor <32 x i1> %cmp0, %cmp1
98c63ed222SJonas Paulsson  %sel = select <32 x i1> %and, <32 x i8> %val5, <32 x i8> %val6
99c63ed222SJonas Paulsson  ret <32 x i8> %sel
100f496bd9aSJonas Paulsson}
101f496bd9aSJonas Paulsson
102c63ed222SJonas Paulssondefine <2 x i8> @fun5(<2 x i16> %val1, <2 x i16> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x i8> %val5, <2 x i8> %val6) {
103f496bd9aSJonas Paulsson; CHECK-LABEL: fun5:
10425528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
105c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG0:%v[0-9]+]], %v24, %v26
106c63ed222SJonas Paulsson; CHECK-DAG:     vpkh [[REG1:%v[0-9]+]], [[REG0]], [[REG0]]
107c63ed222SJonas Paulsson; CHECK-DAG:     vceqb [[REG2:%v[0-9]+]], %v28, %v30
108c63ed222SJonas Paulsson; CHECK-DAG:     vo %v0, [[REG1]], [[REG2]]
109c63ed222SJonas Paulsson; CHECK-DAG:     vsel %v24, %v25, %v27, %v0
110f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
111f496bd9aSJonas Paulsson  %cmp0 = icmp eq <2 x i16> %val1, %val2
112c63ed222SJonas Paulsson  %cmp1 = icmp eq <2 x i8> %val3, %val4
113c63ed222SJonas Paulsson  %and = or <2 x i1> %cmp0, %cmp1
114f496bd9aSJonas Paulsson  %sel = select <2 x i1> %and, <2 x i8> %val5, <2 x i8> %val6
115f496bd9aSJonas Paulsson  ret <2 x i8> %sel
116f496bd9aSJonas Paulsson}
117f496bd9aSJonas Paulsson
118c63ed222SJonas Paulssondefine <2 x i16> @fun6(<2 x i16> %val1, <2 x i16> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x i16> %val5, <2 x i16> %val6) {
119c63ed222SJonas Paulsson; CHECK-LABEL: fun6:
12025528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
121c63ed222SJonas Paulsson; CHECK-NEXT:    vceqb %v1, %v28, %v30
122c63ed222SJonas Paulsson; CHECK-NEXT:    vceqh %v0, %v24, %v26
123c63ed222SJonas Paulsson; CHECK-NEXT:    vuphb %v1, %v1
124c63ed222SJonas Paulsson; CHECK-NEXT:    vo %v0, %v0, %v1
125f496bd9aSJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
126f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
127f496bd9aSJonas Paulsson  %cmp0 = icmp eq <2 x i16> %val1, %val2
128c63ed222SJonas Paulsson  %cmp1 = icmp eq <2 x i8> %val3, %val4
129c63ed222SJonas Paulsson  %and = or <2 x i1> %cmp0, %cmp1
130f496bd9aSJonas Paulsson  %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6
131f496bd9aSJonas Paulsson  ret <2 x i16> %sel
132f496bd9aSJonas Paulsson}
133f496bd9aSJonas Paulsson
134c63ed222SJonas Paulssondefine <2 x i32> @fun7(<2 x i16> %val1, <2 x i16> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x i32> %val5, <2 x i32> %val6) {
135c63ed222SJonas Paulsson; CHECK-LABEL: fun7:
13625528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
137c63ed222SJonas Paulsson; CHECK-NEXT:    vceqb %v1, %v28, %v30
138c63ed222SJonas Paulsson; CHECK-NEXT:    vceqh %v0, %v24, %v26
139c63ed222SJonas Paulsson; CHECK-NEXT:    vuphb %v1, %v1
140c63ed222SJonas Paulsson; CHECK-NEXT:    vo %v0, %v0, %v1
141f496bd9aSJonas Paulsson; CHECK-NEXT:    vuphh %v0, %v0
142f496bd9aSJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
143f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
144f496bd9aSJonas Paulsson  %cmp0 = icmp eq <2 x i16> %val1, %val2
145c63ed222SJonas Paulsson  %cmp1 = icmp eq <2 x i8> %val3, %val4
146c63ed222SJonas Paulsson  %and = or <2 x i1> %cmp0, %cmp1
147f496bd9aSJonas Paulsson  %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6
148f496bd9aSJonas Paulsson  ret <2 x i32> %sel
149f496bd9aSJonas Paulsson}
150f496bd9aSJonas Paulsson
151c63ed222SJonas Paulssondefine <8 x i8> @fun8(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4, <8 x i8> %val5, <8 x i8> %val6) {
152c63ed222SJonas Paulsson; CHECK-LABEL: fun8:
15325528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
154c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG0:%v[0-9]+]], %v24, %v26
155c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG1:%v[0-9]+]], %v28, %v30
156c63ed222SJonas Paulsson; CHECK-NEXT:    vx %v0, [[REG0]], [[REG1]]
157c63ed222SJonas Paulsson; CHECK-NEXT:    vpkh %v0, %v0, %v0
158c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
159c63ed222SJonas Paulsson; CHECK-NEXT:    br %r14
160c63ed222SJonas Paulsson  %cmp0 = icmp eq <8 x i16> %val1, %val2
161c63ed222SJonas Paulsson  %cmp1 = icmp eq <8 x i16> %val3, %val4
162c63ed222SJonas Paulsson  %and = xor <8 x i1> %cmp0, %cmp1
163c63ed222SJonas Paulsson  %sel = select <8 x i1> %and, <8 x i8> %val5, <8 x i8> %val6
164c63ed222SJonas Paulsson  ret <8 x i8> %sel
165c63ed222SJonas Paulsson}
166c63ed222SJonas Paulsson
167c63ed222SJonas Paulssondefine <8 x i16> @fun9(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4, <8 x i16> %val5, <8 x i16> %val6) {
168c63ed222SJonas Paulsson; CHECK-LABEL: fun9:
16925528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
170c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG0:%v[0-9]+]], %v24, %v26
171c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG1:%v[0-9]+]], %v28, %v30
172c63ed222SJonas Paulsson; CHECK-NEXT:    vx %v0, [[REG0]], [[REG1]]
173c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
174c63ed222SJonas Paulsson; CHECK-NEXT:    br %r14
175c63ed222SJonas Paulsson  %cmp0 = icmp eq <8 x i16> %val1, %val2
176c63ed222SJonas Paulsson  %cmp1 = icmp eq <8 x i16> %val3, %val4
177c63ed222SJonas Paulsson  %and = xor <8 x i1> %cmp0, %cmp1
178c63ed222SJonas Paulsson  %sel = select <8 x i1> %and, <8 x i16> %val5, <8 x i16> %val6
179c63ed222SJonas Paulsson  ret <8 x i16> %sel
180c63ed222SJonas Paulsson}
181c63ed222SJonas Paulsson
182c63ed222SJonas Paulssondefine <8 x i32> @fun10(<8 x i16> %val1, <8 x i16> %val2, <8 x i16> %val3, <8 x i16> %val4, <8 x i32> %val5, <8 x i32> %val6) {
183f496bd9aSJonas Paulsson; CHECK-LABEL: fun10:
18425528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
185c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG0:%v[0-9]+]], %v24, %v26
186c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG1:%v[0-9]+]], %v28, %v30
187c63ed222SJonas Paulsson; CHECK-NEXT:    vx [[REG2:%v[0-9]+]], [[REG0]], [[REG1]]
188c63ed222SJonas Paulsson; CHECK-DAG:     vuphh [[REG3:%v[0-9]+]], [[REG2]]
189c63ed222SJonas Paulsson; CHECK-DAG:     vmrlg [[REG4:%v[0-9]+]], [[REG2]], [[REG2]]
190c63ed222SJonas Paulsson; CHECK-DAG:     vuphh [[REG5:%v[0-9]+]], [[REG4]]
191c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v29, [[REG3]]
192c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v26, %v27, %v31, [[REG5]]
193f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
194c63ed222SJonas Paulsson  %cmp0 = icmp eq <8 x i16> %val1, %val2
195c63ed222SJonas Paulsson  %cmp1 = icmp eq <8 x i16> %val3, %val4
196c63ed222SJonas Paulsson  %and = xor <8 x i1> %cmp0, %cmp1
197c63ed222SJonas Paulsson  %sel = select <8 x i1> %and, <8 x i32> %val5, <8 x i32> %val6
198c63ed222SJonas Paulsson  ret <8 x i32> %sel
199f496bd9aSJonas Paulsson}
200f496bd9aSJonas Paulsson
201c63ed222SJonas Paulssondefine <16 x i8> @fun11(<16 x i16> %val1, <16 x i16> %val2, <16 x i32> %val3, <16 x i32> %val4, <16 x i8> %val5, <16 x i8> %val6) {
202f496bd9aSJonas Paulsson; CHECK-LABEL: fun11:
20325528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
204c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG0:%v[0-9]+]], 192(%r15)
205c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG1:%v[0-9]+]], 208(%r15)
206c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG2:%v[0-9]+]], 160(%r15)
207c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG3:%v[0-9]+]], 176(%r15)
208c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG4:%v[0-9]+]], %v27, [[REG3]]
209c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG5:%v[0-9]+]], %v25, [[REG2]]
210c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG6:%v[0-9]+]], %v31, [[REG1]]
211c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG7:%v[0-9]+]], %v29, [[REG0]]
212c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG8:%v[0-9]+]], %v24, %v28
213c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG9:%v[0-9]+]], %v26, %v30
214c63ed222SJonas Paulsson; CHECK-DAG:     vpkf [[REG10:%v[0-9]+]], [[REG5]], [[REG4]]
215c63ed222SJonas Paulsson; CHECK-DAG:     vpkf [[REG11:%v[0-9]+]], [[REG7]], [[REG6]]
216c63ed222SJonas Paulsson; CHECK-DAG:     vn [[REG12:%v[0-9]+]], [[REG9]], [[REG11]]
217c63ed222SJonas Paulsson; CHECK-DAG:     vn [[REG13:%v[0-9]+]], [[REG8]], [[REG10]]
218c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG14:%v[0-9]+]], 240(%r15)
219c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG15:%v[0-9]+]], 224(%r15)
220c63ed222SJonas Paulsson; CHECK-DAG:     vpkh [[REG16:%v[0-9]+]], [[REG13]], [[REG12]]
221c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, [[REG15]], [[REG14]], [[REG16]]
222f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
223c63ed222SJonas Paulsson  %cmp0 = icmp eq <16 x i16> %val1, %val2
224c63ed222SJonas Paulsson  %cmp1 = icmp eq <16 x i32> %val3, %val4
225c63ed222SJonas Paulsson  %and = and <16 x i1> %cmp0, %cmp1
226c63ed222SJonas Paulsson  %sel = select <16 x i1> %and, <16 x i8> %val5, <16 x i8> %val6
227c63ed222SJonas Paulsson  ret <16 x i8> %sel
228f496bd9aSJonas Paulsson}
229f496bd9aSJonas Paulsson
230c63ed222SJonas Paulssondefine <16 x i16> @fun12(<16 x i16> %val1, <16 x i16> %val2, <16 x i32> %val3, <16 x i32> %val4, <16 x i16> %val5, <16 x i16> %val6) {
231f496bd9aSJonas Paulsson; CHECK-LABEL: fun12:
23225528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
233c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG0:%v[0-9]+]], 192(%r15)
234c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG1:%v[0-9]+]], 208(%r15)
235c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG2:%v[0-9]+]], 160(%r15)
236c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG3:%v[0-9]+]], 176(%r15)
237c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG4:%v[0-9]+]], %v27, [[REG3]]
238c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG5:%v[0-9]+]], %v25, [[REG2]]
239c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG6:%v[0-9]+]], %v31, [[REG1]]
240c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG7:%v[0-9]+]], %v29, [[REG0]]
241c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG8:%v[0-9]+]], %v24, %v28
242c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG9:%v[0-9]+]], %v26, %v30
243c63ed222SJonas Paulsson; CHECK-DAG:     vpkf [[REG10:%v[0-9]+]], [[REG5]], [[REG4]]
244c63ed222SJonas Paulsson; CHECK-DAG:     vpkf [[REG11:%v[0-9]+]], [[REG7]], [[REG6]]
245c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG12:%v[0-9]+]], 272(%r15)
246c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG13:%v[0-9]+]], 240(%r15)
247c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG14:%v[0-9]+]], 256(%r15)
248c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG15:%v[0-9]+]], 224(%r15)
249c63ed222SJonas Paulsson; CHECK-DAG:     vn [[REG16:%v[0-9]+]], [[REG9]], [[REG11]]
250c63ed222SJonas Paulsson; CHECK-DAG:     vn [[REG17:%v[0-9]+]], [[REG8]], [[REG10]]
251c63ed222SJonas Paulsson; CHECK-DAG:     vsel %v24, [[REG15]], [[REG14]], [[REG17]]
252c63ed222SJonas Paulsson; CHECK-DAG:     vsel %v26, [[REG13]], [[REG12]], [[REG16]]
253f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
254c63ed222SJonas Paulsson  %cmp0 = icmp eq <16 x i16> %val1, %val2
255c63ed222SJonas Paulsson  %cmp1 = icmp eq <16 x i32> %val3, %val4
256c63ed222SJonas Paulsson  %and = and <16 x i1> %cmp0, %cmp1
257c63ed222SJonas Paulsson  %sel = select <16 x i1> %and, <16 x i16> %val5, <16 x i16> %val6
258c63ed222SJonas Paulsson  ret <16 x i16> %sel
259f496bd9aSJonas Paulsson}
260f496bd9aSJonas Paulsson
261c63ed222SJonas Paulssondefine <2 x i16> @fun13(<2 x i32> %val1, <2 x i32> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i16> %val5, <2 x i16> %val6) {
262f496bd9aSJonas Paulsson; CHECK-LABEL: fun13:
26325528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
264c63ed222SJonas Paulsson; CHECK-NEXT:    vceqg %v1, %v28, %v30
265c63ed222SJonas Paulsson; CHECK-NEXT:    vceqf %v0, %v24, %v26
266c63ed222SJonas Paulsson; CHECK-NEXT:    vpkg %v1, %v1, %v1
267c63ed222SJonas Paulsson; CHECK-NEXT:    vx %v0, %v0, %v1
268f496bd9aSJonas Paulsson; CHECK-NEXT:    vpkf %v0, %v0, %v0
269f496bd9aSJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
270f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
271f496bd9aSJonas Paulsson  %cmp0 = icmp eq <2 x i32> %val1, %val2
272c63ed222SJonas Paulsson  %cmp1 = icmp eq <2 x i64> %val3, %val4
273c63ed222SJonas Paulsson  %and = xor <2 x i1> %cmp0, %cmp1
274f496bd9aSJonas Paulsson  %sel = select <2 x i1> %and, <2 x i16> %val5, <2 x i16> %val6
275f496bd9aSJonas Paulsson  ret <2 x i16> %sel
276f496bd9aSJonas Paulsson}
277f496bd9aSJonas Paulsson
278c63ed222SJonas Paulssondefine <2 x i32> @fun14(<2 x i32> %val1, <2 x i32> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i32> %val5, <2 x i32> %val6) {
279c63ed222SJonas Paulsson; CHECK-LABEL: fun14:
28025528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
281c63ed222SJonas Paulsson; CHECK-NEXT:    vceqg %v1, %v28, %v30
282c63ed222SJonas Paulsson; CHECK-NEXT:    vceqf %v0, %v24, %v26
283c63ed222SJonas Paulsson; CHECK-NEXT:    vpkg %v1, %v1, %v1
284c63ed222SJonas Paulsson; CHECK-NEXT:    vx %v0, %v0, %v1
285f496bd9aSJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
286f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
287f496bd9aSJonas Paulsson  %cmp0 = icmp eq <2 x i32> %val1, %val2
288c63ed222SJonas Paulsson  %cmp1 = icmp eq <2 x i64> %val3, %val4
289c63ed222SJonas Paulsson  %and = xor <2 x i1> %cmp0, %cmp1
290c63ed222SJonas Paulsson  %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6
291c63ed222SJonas Paulsson  ret <2 x i32> %sel
292c63ed222SJonas Paulsson}
293c63ed222SJonas Paulsson
294c63ed222SJonas Paulssondefine <2 x i64> @fun15(<2 x i32> %val1, <2 x i32> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i64> %val5, <2 x i64> %val6) {
295c63ed222SJonas Paulsson; CHECK-LABEL: fun15:
29625528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
297c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG0:%v[0-9]+]], %v24, %v26
298c63ed222SJonas Paulsson; CHECK-DAG:     vuphf [[REG1:%v[0-9]+]], [[REG0]]
299c63ed222SJonas Paulsson; CHECK-DAG:     vceqg [[REG2:%v[0-9]+]], %v28, %v30
300c63ed222SJonas Paulsson; CHECK-NEXT:    vx %v0, [[REG1]], [[REG2]]
301c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
302c63ed222SJonas Paulsson; CHECK-NEXT:    br %r14
303c63ed222SJonas Paulsson  %cmp0 = icmp eq <2 x i32> %val1, %val2
304c63ed222SJonas Paulsson  %cmp1 = icmp eq <2 x i64> %val3, %val4
305c63ed222SJonas Paulsson  %and = xor <2 x i1> %cmp0, %cmp1
306c63ed222SJonas Paulsson  %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6
307c63ed222SJonas Paulsson  ret <2 x i64> %sel
308c63ed222SJonas Paulsson}
309c63ed222SJonas Paulsson
310c63ed222SJonas Paulssondefine <4 x i16> @fun16(<4 x i32> %val1, <4 x i32> %val2, <4 x i16> %val3, <4 x i16> %val4, <4 x i16> %val5, <4 x i16> %val6) {
311c63ed222SJonas Paulsson; CHECK-LABEL: fun16:
31225528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
313c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG0:%v[0-9]+]], %v24, %v26
314c63ed222SJonas Paulsson; CHECK-DAG:     vpkf [[REG1:%v[0-9]+]], [[REG0]], [[REG0]]
315c63ed222SJonas Paulsson; CHECK-DAG:     vceqh [[REG2:%v[0-9]+]], %v28, %v30
316c63ed222SJonas Paulsson; CHECK-NEXT:    vn %v0, [[REG1]], [[REG2]]
317c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
318c63ed222SJonas Paulsson; CHECK-NEXT:    br %r14
319c63ed222SJonas Paulsson  %cmp0 = icmp eq <4 x i32> %val1, %val2
320c63ed222SJonas Paulsson  %cmp1 = icmp eq <4 x i16> %val3, %val4
321c63ed222SJonas Paulsson  %and = and <4 x i1> %cmp0, %cmp1
322c63ed222SJonas Paulsson  %sel = select <4 x i1> %and, <4 x i16> %val5, <4 x i16> %val6
323c63ed222SJonas Paulsson  ret <4 x i16> %sel
324c63ed222SJonas Paulsson}
325c63ed222SJonas Paulsson
326c63ed222SJonas Paulssondefine <4 x i32> @fun17(<4 x i32> %val1, <4 x i32> %val2, <4 x i16> %val3, <4 x i16> %val4, <4 x i32> %val5, <4 x i32> %val6) {
327c63ed222SJonas Paulsson; CHECK-LABEL: fun17:
32825528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
329c63ed222SJonas Paulsson; CHECK-NEXT:    vceqh %v1, %v28, %v30
330c63ed222SJonas Paulsson; CHECK-NEXT:    vceqf %v0, %v24, %v26
331c63ed222SJonas Paulsson; CHECK-NEXT:    vuphh %v1, %v1
332c63ed222SJonas Paulsson; CHECK-NEXT:    vn %v0, %v0, %v1
333c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
334c63ed222SJonas Paulsson; CHECK-NEXT:    br %r14
335c63ed222SJonas Paulsson  %cmp0 = icmp eq <4 x i32> %val1, %val2
336c63ed222SJonas Paulsson  %cmp1 = icmp eq <4 x i16> %val3, %val4
337c63ed222SJonas Paulsson  %and = and <4 x i1> %cmp0, %cmp1
338c63ed222SJonas Paulsson  %sel = select <4 x i1> %and, <4 x i32> %val5, <4 x i32> %val6
339c63ed222SJonas Paulsson  ret <4 x i32> %sel
340c63ed222SJonas Paulsson}
341c63ed222SJonas Paulsson
342c63ed222SJonas Paulssondefine <4 x i64> @fun18(<4 x i32> %val1, <4 x i32> %val2, <4 x i16> %val3, <4 x i16> %val4, <4 x i64> %val5, <4 x i64> %val6) {
343c63ed222SJonas Paulsson; CHECK-LABEL: fun18:
34425528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
345c63ed222SJonas Paulsson; CHECK-NEXT:    vceqh %v1, %v28, %v30
346c63ed222SJonas Paulsson; CHECK-NEXT:    vceqf %v0, %v24, %v26
347c63ed222SJonas Paulsson; CHECK-NEXT:    vuphh %v1, %v1
348c63ed222SJonas Paulsson; CHECK-NEXT:    vn %v0, %v0, %v1
349c63ed222SJonas Paulsson; CHECK-DAG:     vuphf [[REG0:%v[0-9]+]], %v0
350c63ed222SJonas Paulsson; CHECK-DAG:     vmrlg [[REG1:%v[0-9]+]], %v0, %v0
351c63ed222SJonas Paulsson; CHECK-DAG:     vuphf [[REG2:%v[0-9]+]], [[REG1]]
352c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v29, [[REG0]]
353c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v26, %v27, %v31, [[REG2]]
354c63ed222SJonas Paulsson; CHECK-NEXT:    br %r14
355c63ed222SJonas Paulsson  %cmp0 = icmp eq <4 x i32> %val1, %val2
356c63ed222SJonas Paulsson  %cmp1 = icmp eq <4 x i16> %val3, %val4
357c63ed222SJonas Paulsson  %and = and <4 x i1> %cmp0, %cmp1
358c63ed222SJonas Paulsson  %sel = select <4 x i1> %and, <4 x i64> %val5, <4 x i64> %val6
359c63ed222SJonas Paulsson  ret <4 x i64> %sel
360c63ed222SJonas Paulsson}
361c63ed222SJonas Paulsson
362c63ed222SJonas Paulssondefine <8 x i16> @fun19(<8 x i32> %val1, <8 x i32> %val2, <8 x i32> %val3, <8 x i32> %val4, <8 x i16> %val5, <8 x i16> %val6) {
363c63ed222SJonas Paulsson; CHECK-LABEL: fun19:
36425528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
365c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG0:%v[0-9]+]], %v24, %v28
366c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG1:%v[0-9]+]], %v26, %v30
367c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG2:%v[0-9]+]], %v25, %v29
368c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG3:%v[0-9]+]], %v27, %v31
369c63ed222SJonas Paulsson; CHECK-DAG:     vo [[REG4:%v[0-9]+]], [[REG1]], [[REG3]]
370c63ed222SJonas Paulsson; CHECK-DAG:     vo [[REG5:%v[0-9]+]], [[REG0]], [[REG2]]
371c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG6:%v[0-9]+]], 176(%r15)
372c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG7:%v[0-9]+]], 160(%r15)
373c63ed222SJonas Paulsson; CHECK-DAG:     vpkf [[REG8:%v[0-9]+]], [[REG5]], [[REG4]]
374c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, [[REG7]], [[REG6]], [[REG8]]
375c63ed222SJonas Paulsson; CHECK-NEXT:    br %r14
376c63ed222SJonas Paulsson  %cmp0 = icmp eq <8 x i32> %val1, %val2
377c63ed222SJonas Paulsson  %cmp1 = icmp eq <8 x i32> %val3, %val4
378c63ed222SJonas Paulsson  %and = or <8 x i1> %cmp0, %cmp1
379c63ed222SJonas Paulsson  %sel = select <8 x i1> %and, <8 x i16> %val5, <8 x i16> %val6
380c63ed222SJonas Paulsson  ret <8 x i16> %sel
381c63ed222SJonas Paulsson}
382c63ed222SJonas Paulsson
383c63ed222SJonas Paulssondefine <8 x i32> @fun20(<8 x i32> %val1, <8 x i32> %val2, <8 x i32> %val3, <8 x i32> %val4, <8 x i32> %val5, <8 x i32> %val6) {
384c63ed222SJonas Paulsson; CHECK-LABEL: fun20:
38525528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
386c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG0:%v[0-9]+]], %v24, %v28
387c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG1:%v[0-9]+]], %v26, %v30
388c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG2:%v[0-9]+]], %v25, %v29
389c63ed222SJonas Paulsson; CHECK-DAG:     vceqf [[REG3:%v[0-9]+]], %v27, %v31
390c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG4:%v[0-9]+]], 208(%r15)
391c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG5:%v[0-9]+]], 176(%r15)
392c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG6:%v[0-9]+]], 192(%r15)
393c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG7:%v[0-9]+]], 160(%r15)
394c63ed222SJonas Paulsson; CHECK-DAG:     vo [[REG8:%v[0-9]+]], [[REG1]], [[REG3]]
395c63ed222SJonas Paulsson; CHECK-DAG:     vo [[REG9:%v[0-9]+]], [[REG0]], [[REG2]]
396c63ed222SJonas Paulsson; CHECK-DAG:     vsel %v24, [[REG7]], [[REG6]], [[REG9]]
397c63ed222SJonas Paulsson; CHECK-DAG:     vsel %v26, [[REG5]], [[REG4]], [[REG8]]
398c63ed222SJonas Paulsson; CHECK-NEXT:    br %r14
399c63ed222SJonas Paulsson  %cmp0 = icmp eq <8 x i32> %val1, %val2
400c63ed222SJonas Paulsson  %cmp1 = icmp eq <8 x i32> %val3, %val4
401c63ed222SJonas Paulsson  %and = or <8 x i1> %cmp0, %cmp1
402c63ed222SJonas Paulsson  %sel = select <8 x i1> %and, <8 x i32> %val5, <8 x i32> %val6
403c63ed222SJonas Paulsson  ret <8 x i32> %sel
404c63ed222SJonas Paulsson}
405c63ed222SJonas Paulsson
406c63ed222SJonas Paulssondefine <2 x i32> @fun21(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i32> %val5, <2 x i32> %val6) {
407c63ed222SJonas Paulsson; CHECK-LABEL: fun21:
40825528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
409c63ed222SJonas Paulsson; CHECK-DAG:     vceqg [[REG0:%v[0-9]+]], %v24, %v26
410c63ed222SJonas Paulsson; CHECK-DAG:     vceqg [[REG1:%v[0-9]+]], %v28, %v30
411c63ed222SJonas Paulsson; CHECK-NEXT:    vn %v0, [[REG0]], [[REG1]]
412c63ed222SJonas Paulsson; CHECK-NEXT:    vpkg %v0, %v0, %v0
413c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
414c63ed222SJonas Paulsson; CHECK-NEXT:    br %r14
415c63ed222SJonas Paulsson  %cmp0 = icmp eq <2 x i64> %val1, %val2
416c63ed222SJonas Paulsson  %cmp1 = icmp eq <2 x i64> %val3, %val4
417f496bd9aSJonas Paulsson  %and = and <2 x i1> %cmp0, %cmp1
418f496bd9aSJonas Paulsson  %sel = select <2 x i1> %and, <2 x i32> %val5, <2 x i32> %val6
419f496bd9aSJonas Paulsson  ret <2 x i32> %sel
420f496bd9aSJonas Paulsson}
421f496bd9aSJonas Paulsson
422c63ed222SJonas Paulssondefine <2 x i64> @fun22(<2 x i64> %val1, <2 x i64> %val2, <2 x i64> %val3, <2 x i64> %val4, <2 x i64> %val5, <2 x i64> %val6) {
423f496bd9aSJonas Paulsson; CHECK-LABEL: fun22:
42425528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
425c63ed222SJonas Paulsson; CHECK-DAG:     vceqg [[REG0:%v[0-9]+]], %v24, %v26
426c63ed222SJonas Paulsson; CHECK-DAG:     vceqg [[REG1:%v[0-9]+]], %v28, %v30
427c63ed222SJonas Paulsson; CHECK-NEXT:    vn %v0, [[REG0]], [[REG1]]
428f496bd9aSJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
429f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
430f496bd9aSJonas Paulsson  %cmp0 = icmp eq <2 x i64> %val1, %val2
431c63ed222SJonas Paulsson  %cmp1 = icmp eq <2 x i64> %val3, %val4
432f496bd9aSJonas Paulsson  %and = and <2 x i1> %cmp0, %cmp1
433f496bd9aSJonas Paulsson  %sel = select <2 x i1> %and, <2 x i64> %val5, <2 x i64> %val6
434f496bd9aSJonas Paulsson  ret <2 x i64> %sel
435f496bd9aSJonas Paulsson}
436f496bd9aSJonas Paulsson
437c63ed222SJonas Paulssondefine <4 x i32> @fun23(<4 x i64> %val1, <4 x i64> %val2, <4 x i32> %val3, <4 x i32> %val4, <4 x i32> %val5, <4 x i32> %val6) {
438f496bd9aSJonas Paulsson; CHECK-LABEL: fun23:
43925528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
440c63ed222SJonas Paulsson; CHECK-NEXT:    vceqg %v0, %v26, %v30
441c63ed222SJonas Paulsson; CHECK-NEXT:    vceqg %v1, %v24, %v28
442c63ed222SJonas Paulsson; CHECK-NEXT:    vpkg %v0, %v1, %v0
443c63ed222SJonas Paulsson; CHECK-NEXT:    vceqf %v1, %v25, %v27
444c63ed222SJonas Paulsson; CHECK-NEXT:    vx %v0, %v0, %v1
445c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v29, %v31, %v0
446f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
447c63ed222SJonas Paulsson  %cmp0 = icmp eq <4 x i64> %val1, %val2
448c63ed222SJonas Paulsson  %cmp1 = icmp eq <4 x i32> %val3, %val4
449c63ed222SJonas Paulsson  %and = xor <4 x i1> %cmp0, %cmp1
450c63ed222SJonas Paulsson  %sel = select <4 x i1> %and, <4 x i32> %val5, <4 x i32> %val6
451c63ed222SJonas Paulsson  ret <4 x i32> %sel
452f496bd9aSJonas Paulsson}
453f496bd9aSJonas Paulsson
454c63ed222SJonas Paulssondefine <4 x i64> @fun24(<4 x i64> %val1, <4 x i64> %val2, <4 x i32> %val3, <4 x i32> %val4, <4 x i64> %val5, <4 x i64> %val6) {
455f496bd9aSJonas Paulsson; CHECK-LABEL: fun24:
45625528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
457c63ed222SJonas Paulsson; CHECK-NEXT:    vceqf [[REG0:%v[0-9]+]], %v25, %v27
458c63ed222SJonas Paulsson; CHECK-NEXT:    vuphf [[REG1:%v[0-9]+]], [[REG0]]
459c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlg [[REG2:%v[0-9]+]], [[REG0]], [[REG0]]
460c88d3f6aSJonas Paulsson; CHECK-DAG:     vceqg [[REG3:%v[0-9]+]], %v24, %v28
461c88d3f6aSJonas Paulsson; CHECK-DAG:     vceqg [[REG4:%v[0-9]+]], %v26, %v30
462c88d3f6aSJonas Paulsson; CHECK-DAG:     vuphf [[REG5:%v[0-9]+]], [[REG2]]
463c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG6:%v[0-9]+]], 176(%r15)
464c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG7:%v[0-9]+]], 160(%r15)
465c63ed222SJonas Paulsson; CHECK-DAG:     vx [[REG8:%v[0-9]+]], [[REG4]], [[REG5]]
466c63ed222SJonas Paulsson; CHECK-DAG:     vx [[REG9:%v[0-9]+]], [[REG3]], [[REG1]]
467c63ed222SJonas Paulsson; CHECK-DAG:     vsel %v24, %v29, [[REG7]], [[REG9]]
468c63ed222SJonas Paulsson; CHECK-DAG:     vsel %v26, %v31, [[REG6]], [[REG8]]
469f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
470c63ed222SJonas Paulsson  %cmp0 = icmp eq <4 x i64> %val1, %val2
471c63ed222SJonas Paulsson  %cmp1 = icmp eq <4 x i32> %val3, %val4
472c63ed222SJonas Paulsson  %and = xor <4 x i1> %cmp0, %cmp1
473c63ed222SJonas Paulsson  %sel = select <4 x i1> %and, <4 x i64> %val5, <4 x i64> %val6
474c63ed222SJonas Paulsson  ret <4 x i64> %sel
475f496bd9aSJonas Paulsson}
476f496bd9aSJonas Paulsson
477c63ed222SJonas Paulssondefine <2 x float> @fun25(<2 x float> %val1, <2 x float> %val2, <2 x double> %val3, <2 x double> %val4, <2 x float> %val5, <2 x float> %val6) {
478f496bd9aSJonas Paulsson; CHECK-LABEL: fun25:
47925528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
480f496bd9aSJonas Paulsson; CHECK-NEXT:    vmrlf %v0, %v26, %v26
481f496bd9aSJonas Paulsson; CHECK-NEXT:    vmrlf %v1, %v24, %v24
482f496bd9aSJonas Paulsson; CHECK-NEXT:    vldeb %v0, %v0
483f496bd9aSJonas Paulsson; CHECK-NEXT:    vldeb %v1, %v1
484f496bd9aSJonas Paulsson; CHECK-NEXT:    vfchdb %v0, %v1, %v0
485f496bd9aSJonas Paulsson; CHECK-NEXT:    vmrhf %v1, %v26, %v26
486f496bd9aSJonas Paulsson; CHECK-NEXT:    vmrhf %v2, %v24, %v24
487f496bd9aSJonas Paulsson; CHECK-NEXT:    vldeb %v1, %v1
488f496bd9aSJonas Paulsson; CHECK-NEXT:    vldeb %v2, %v2
489f496bd9aSJonas Paulsson; CHECK-NEXT:    vfchdb %v1, %v2, %v1
490f496bd9aSJonas Paulsson; CHECK-NEXT:    vpkg %v0, %v1, %v0
491f496bd9aSJonas Paulsson; CHECK-NEXT:    vfchdb %v1, %v28, %v30
492f496bd9aSJonas Paulsson; CHECK-NEXT:    vpkg %v1, %v1, %v1
493c63ed222SJonas Paulsson; CHECK-NEXT:    vo %v0, %v0, %v1
494f496bd9aSJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
495f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
496c63ed222SJonas Paulsson;
497c63ed222SJonas Paulsson; CHECK-Z14-LABEL: fun25:
49825528d6dSFrancis Visoiu Mistrih; CHECK-Z14:       # %bb.0:
499c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchdb %v1, %v28, %v30
500c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchsb %v0, %v24, %v26
501c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vpkg %v1, %v1, %v1
502c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vo %v0, %v0, %v1
503c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vsel %v24, %v25, %v27, %v0
504c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    br %r14
505f496bd9aSJonas Paulsson  %cmp0 = fcmp ogt <2 x float> %val1, %val2
506f496bd9aSJonas Paulsson  %cmp1 = fcmp ogt <2 x double> %val3, %val4
507c63ed222SJonas Paulsson  %and = or <2 x i1> %cmp0, %cmp1
508c63ed222SJonas Paulsson  %sel = select <2 x i1> %and, <2 x float> %val5, <2 x float> %val6
509c63ed222SJonas Paulsson  ret <2 x float> %sel
510f496bd9aSJonas Paulsson}
511f496bd9aSJonas Paulsson
512c63ed222SJonas Paulssondefine <2 x double> @fun26(<2 x float> %val1, <2 x float> %val2, <2 x double> %val3, <2 x double> %val4, <2 x double> %val5, <2 x double> %val6) {
513f496bd9aSJonas Paulsson; CHECK-LABEL: fun26:
51425528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
515c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlf %v0, %v26, %v26
516c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlf %v1, %v24, %v24
517c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v0, %v0
518c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v1, %v1
519c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v0, %v1, %v0
520c63ed222SJonas Paulsson; CHECK-NEXT:    vmrhf %v1, %v26, %v26
521c63ed222SJonas Paulsson; CHECK-NEXT:    vmrhf %v2, %v24, %v24
522c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v1, %v1
523c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v2, %v2
524c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v1, %v2, %v1
525c63ed222SJonas Paulsson; CHECK-NEXT:    vpkg %v0, %v1, %v0
526c63ed222SJonas Paulsson; CHECK-NEXT:    vuphf %v0, %v0
527c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v1, %v28, %v30
528c63ed222SJonas Paulsson; CHECK-NEXT:    vo %v0, %v0, %v1
529f496bd9aSJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
530f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
531c63ed222SJonas Paulsson;
532c63ed222SJonas Paulsson; CHECK-Z14-LABEL: fun26:
53325528d6dSFrancis Visoiu Mistrih; CHECK-Z14:       # %bb.0:
534c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchsb %v0, %v24, %v26
535c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vuphf %v0, %v0
536c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchdb %v1, %v28, %v30
537c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vo %v0, %v0, %v1
538c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vsel %v24, %v25, %v27, %v0
539c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    br %r14
540c63ed222SJonas Paulsson  %cmp0 = fcmp ogt <2 x float> %val1, %val2
541c63ed222SJonas Paulsson  %cmp1 = fcmp ogt <2 x double> %val3, %val4
542c63ed222SJonas Paulsson  %and = or <2 x i1> %cmp0, %cmp1
543c63ed222SJonas Paulsson  %sel = select <2 x i1> %and, <2 x double> %val5, <2 x double> %val6
544c63ed222SJonas Paulsson  ret <2 x double> %sel
545f496bd9aSJonas Paulsson}
546f496bd9aSJonas Paulsson
547c63ed222SJonas Paulsson; Also check a widening select of a vector of floats
548c63ed222SJonas Paulssondefine <2 x float> @fun27(<2 x i8> %val1, <2 x i8> %val2, <2 x i8> %val3, <2 x i8> %val4, <2 x float> %val5, <2 x float> %val6) {
549f496bd9aSJonas Paulsson; CHECK-LABEL: fun27:
55025528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
551c63ed222SJonas Paulsson; CHECK-DAG:     vceqb [[REG0:%v[0-9]+]], %v24, %v26
552c63ed222SJonas Paulsson; CHECK-DAG:     vceqb [[REG1:%v[0-9]+]], %v28, %v30
553c63ed222SJonas Paulsson; CHECK-NEXT:    vo %v0, [[REG0]], [[REG1]]
554c63ed222SJonas Paulsson; CHECK-NEXT:    vuphb %v0, %v0
555c63ed222SJonas Paulsson; CHECK-NEXT:    vuphh %v0, %v0
556f496bd9aSJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
557f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
558c63ed222SJonas Paulsson  %cmp0 = icmp eq <2 x i8> %val1, %val2
559c63ed222SJonas Paulsson  %cmp1 = icmp eq <2 x i8> %val3, %val4
560c63ed222SJonas Paulsson  %and = or <2 x i1> %cmp0, %cmp1
561c63ed222SJonas Paulsson  %sel = select <2 x i1> %and, <2 x float> %val5, <2 x float> %val6
562c63ed222SJonas Paulsson  ret <2 x float> %sel
563f496bd9aSJonas Paulsson}
564f496bd9aSJonas Paulsson
565c63ed222SJonas Paulssondefine <4 x float> @fun28(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4, <4 x float> %val5, <4 x float> %val6) {
566f496bd9aSJonas Paulsson; CHECK-LABEL: fun28:
56725528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
568c63ed222SJonas Paulsson; CHECK-DAG:     vmrlf [[REG0:%v[0-9]+]], %v26, %v26
569c63ed222SJonas Paulsson; CHECK-DAG:     vmrlf [[REG1:%v[0-9]+]], %v24, %v24
570c63ed222SJonas Paulsson; CHECK-DAG:     vldeb [[REG2:%v[0-9]+]], [[REG0]]
571c63ed222SJonas Paulsson; CHECK-DAG:     vldeb [[REG3:%v[0-9]+]], [[REG1]]
572c63ed222SJonas Paulsson; CHECK-DAG:     vfchdb [[REG4:%v[0-9]+]], [[REG3]], [[REG2]]
573c63ed222SJonas Paulsson; CHECK-DAG:     vmrhf [[REG5:%v[0-9]+]], %v26, %v26
574c63ed222SJonas Paulsson; CHECK-DAG:     vmrhf [[REG6:%v[0-9]+]], %v24, %v24
575c63ed222SJonas Paulsson; CHECK-DAG:     vldeb [[REG7:%v[0-9]+]], [[REG5]]
576c63ed222SJonas Paulsson; CHECK-DAG:     vmrhf [[REG8:%v[0-9]+]], %v28, %v28
577c63ed222SJonas Paulsson; CHECK-DAG:     vldeb [[REG9:%v[0-9]+]], [[REG6]]
578c63ed222SJonas Paulsson; CHECK-DAG:     vfchdb [[REG10:%v[0-9]+]], [[REG9]], [[REG7]]
579c63ed222SJonas Paulsson; CHECK-DAG:     vpkg [[REG11:%v[0-9]+]], [[REG10]], [[REG4]]
580c63ed222SJonas Paulsson; CHECK-DAG:     vmrlf [[REG12:%v[0-9]+]], %v30, %v30
581c63ed222SJonas Paulsson; CHECK-DAG:     vmrlf [[REG13:%v[0-9]+]], %v28, %v28
582c63ed222SJonas Paulsson; CHECK-DAG:     vldeb [[REG14:%v[0-9]+]], [[REG12]]
583c63ed222SJonas Paulsson; CHECK-DAG:     vldeb [[REG15:%v[0-9]+]], [[REG13]]
584c63ed222SJonas Paulsson; CHECK-DAG:     vfchdb [[REG16:%v[0-9]+]], [[REG15]], [[REG14]]
585c63ed222SJonas Paulsson; CHECK-DAG:     vmrhf [[REG17:%v[0-9]+]], %v30, %v30
586c63ed222SJonas Paulsson; CHECK-DAG:     vldeb [[REG19:%v[0-9]+]], [[REG17]]
587c63ed222SJonas Paulsson; CHECK-DAG:     vldeb [[REG20:%v[0-9]+]], [[REG8]]
588c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v2, [[REG20]], [[REG19]]
589c63ed222SJonas Paulsson; CHECK-NEXT:    vpkg [[REG21:%v[0-9]+]], %v2, [[REG16]]
590c63ed222SJonas Paulsson; CHECK-NEXT:    vx %v0, [[REG11]], [[REG21]]
591c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
592f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
593c63ed222SJonas Paulsson;
594c63ed222SJonas Paulsson; CHECK-Z14-LABEL: fun28:
59525528d6dSFrancis Visoiu Mistrih; CHECK-Z14:       # %bb.0:
596c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchsb %v0, %v24, %v26
597c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchsb %v1, %v28, %v30
598c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vx %v0, %v0, %v1
599c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vsel %v24, %v25, %v27, %v0
600c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    br %r14
601c63ed222SJonas Paulsson  %cmp0 = fcmp ogt <4 x float> %val1, %val2
602c63ed222SJonas Paulsson  %cmp1 = fcmp ogt <4 x float> %val3, %val4
603c63ed222SJonas Paulsson  %and = xor <4 x i1> %cmp0, %cmp1
604c63ed222SJonas Paulsson  %sel = select <4 x i1> %and, <4 x float> %val5, <4 x float> %val6
605c63ed222SJonas Paulsson  ret <4 x float> %sel
606f496bd9aSJonas Paulsson}
607f496bd9aSJonas Paulsson
608c63ed222SJonas Paulssondefine <4 x double> @fun29(<4 x float> %val1, <4 x float> %val2, <4 x float> %val3, <4 x float> %val4, <4 x double> %val5, <4 x double> %val6) {
609f496bd9aSJonas Paulsson; CHECK-LABEL: fun29:
61025528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
611c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlf %v0, %v26, %v26
612c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlf %v1, %v24, %v24
613c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v0, %v0
614c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v1, %v1
615c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v0, %v1, %v0
616c63ed222SJonas Paulsson; CHECK-NEXT:    vmrhf %v1, %v26, %v26
617c63ed222SJonas Paulsson; CHECK-NEXT:    vmrhf %v2, %v24, %v24
618c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v1, %v1
619c63ed222SJonas Paulsson; CHECK-NEXT:    vmrhf %v3, %v28, %v28
620c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v2, %v2
621c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v1, %v2, %v1
622f496bd9aSJonas Paulsson; CHECK-NEXT:    vpkg %v0, %v1, %v0
623c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlf %v1, %v30, %v30
624c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlf %v2, %v28, %v28
625c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v1, %v1
626c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v2, %v2
627c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v1, %v2, %v1
628c63ed222SJonas Paulsson; CHECK-NEXT:    vmrhf %v2, %v30, %v30
629c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v2, %v2
630c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v3, %v3
631c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v2, %v3, %v2
632c63ed222SJonas Paulsson; CHECK-NEXT:    vpkg %v1, %v2, %v1
633c63ed222SJonas Paulsson; CHECK-NEXT:    vx %v0, %v0, %v1
634c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlg %v1, %v0, %v0
635c63ed222SJonas Paulsson; CHECK-NEXT:    vuphf %v1, %v1
636c63ed222SJonas Paulsson; CHECK-NEXT:    vuphf %v0, %v0
637c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v29, %v0
638c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v26, %v27, %v31, %v1
639f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
640c63ed222SJonas Paulsson;
641c63ed222SJonas Paulsson; CHECK-Z14-LABEL: fun29:
64225528d6dSFrancis Visoiu Mistrih; CHECK-Z14:       # %bb.0:
643c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchsb %v0, %v24, %v26
644c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchsb %v1, %v28, %v30
645c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vx %v0, %v0, %v1
646c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vmrlg %v1, %v0, %v0
647c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vuphf %v1, %v1
648c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vuphf %v0, %v0
649c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vsel %v24, %v25, %v29, %v0
650c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vsel %v26, %v27, %v31, %v1
651c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    br %r14
652c63ed222SJonas Paulsson  %cmp0 = fcmp ogt <4 x float> %val1, %val2
653c63ed222SJonas Paulsson  %cmp1 = fcmp ogt <4 x float> %val3, %val4
654c63ed222SJonas Paulsson  %and = xor <4 x i1> %cmp0, %cmp1
655c63ed222SJonas Paulsson  %sel = select <4 x i1> %and, <4 x double> %val5, <4 x double> %val6
656c63ed222SJonas Paulsson  ret <4 x double> %sel
657f496bd9aSJonas Paulsson}
658f496bd9aSJonas Paulsson
659c63ed222SJonas Paulssondefine <8 x float> @fun30(<8 x float> %val1, <8 x float> %val2, <8 x double> %val3, <8 x double> %val4, <8 x float> %val5, <8 x float> %val6) {
660f496bd9aSJonas Paulsson; CHECK-LABEL: fun30:
66125528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
662c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlf %v16, %v28, %v28
663c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlf %v17, %v24, %v24
664c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v16, %v16
665c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v17, %v17
666c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v16, %v17, %v16
667c63ed222SJonas Paulsson; CHECK-NEXT:    vmrhf %v17, %v28, %v28
668c63ed222SJonas Paulsson; CHECK-NEXT:    vmrhf %v18, %v24, %v24
669c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v17, %v17
670c63ed222SJonas Paulsson; CHECK-NEXT:    vl %v4, 192(%r15)
671c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v18, %v18
672c63ed222SJonas Paulsson; CHECK-NEXT:    vl %v5, 208(%r15)
673c63ed222SJonas Paulsson; CHECK-NEXT:    vl %v6, 160(%r15)
674c63ed222SJonas Paulsson; CHECK-NEXT:    vl %v7, 176(%r15)
675c63ed222SJonas Paulsson; CHECK-NEXT:    vl %v0, 272(%r15)
676c63ed222SJonas Paulsson; CHECK-NEXT:    vl %v1, 240(%r15)
677c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v17, %v18, %v17
678c63ed222SJonas Paulsson; CHECK-NEXT:    vl %v2, 256(%r15)
679c63ed222SJonas Paulsson; CHECK-NEXT:    vl %v3, 224(%r15)
680c63ed222SJonas Paulsson; CHECK-NEXT:    vpkg %v16, %v17, %v16
681c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlf %v17, %v30, %v30
682c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlf %v18, %v26, %v26
683c63ed222SJonas Paulsson; CHECK-NEXT:    vmrhf %v19, %v26, %v26
684c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v7, %v27, %v7
685c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v6, %v25, %v6
686c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v5, %v31, %v5
687c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v4, %v29, %v4
688c63ed222SJonas Paulsson; CHECK-NEXT:    vpkg %v6, %v6, %v7
689c63ed222SJonas Paulsson; CHECK-NEXT:    vpkg %v4, %v4, %v5
690c63ed222SJonas Paulsson; CHECK-NEXT:    vn %v5, %v16, %v6
691*2f12e45dSJonas Paulsson; CHECK-DAG:     vsel %v24, %v3, %v2, %v5
692*2f12e45dSJonas Paulsson; CHECK-DAG:     vldeb %v17, %v17
693c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v18, %v18
694c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v17, %v18, %v17
695c63ed222SJonas Paulsson; CHECK-NEXT:    vmrhf %v18, %v30, %v30
696c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v18, %v18
697c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v19, %v19
698c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v18, %v19, %v18
699c63ed222SJonas Paulsson; CHECK-NEXT:    vpkg %v17, %v18, %v17
700c63ed222SJonas Paulsson; CHECK-NEXT:    vn %v4, %v17, %v4
701c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v26, %v1, %v0, %v4
702f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
703c63ed222SJonas Paulsson;
704c63ed222SJonas Paulsson; CHECK-Z14-LABEL: fun30:
70525528d6dSFrancis Visoiu Mistrih; CHECK-Z14:       # %bb.0:
706c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vl %v4, 192(%r15)
707c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vl %v5, 208(%r15)
708c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vl %v6, 160(%r15)
709c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vl %v7, 176(%r15)
710c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchdb %v7, %v27, %v7
711c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchdb %v6, %v25, %v6
712c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchdb %v5, %v31, %v5
713c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchdb %v4, %v29, %v4
714c88d3f6aSJonas Paulsson; CHECK-Z14-DAG:     vfchsb %v16, %v24, %v28
715c88d3f6aSJonas Paulsson; CHECK-Z14-DAG:     vfchsb %v17, %v26, %v30
716c88d3f6aSJonas Paulsson; CHECK-Z14-DAG:     vpkg %v6, %v6, %v7
717c88d3f6aSJonas Paulsson; CHECK-Z14-DAG:     vpkg %v4, %v4, %v5
718c88d3f6aSJonas Paulsson; CHECK-Z14-DAG:     vl %v0, 272(%r15)
719c88d3f6aSJonas Paulsson; CHECK-Z14-DAG:     vl %v1, 240(%r15)
720c88d3f6aSJonas Paulsson; CHECK-Z14-DAG:     vl %v2, 256(%r15)
721c88d3f6aSJonas Paulsson; CHECK-Z14-DAG:     vl %v3, 224(%r15)
722c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vn %v4, %v17, %v4
723c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vn %v5, %v16, %v6
724c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vsel %v24, %v3, %v2, %v5
725c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vsel %v26, %v1, %v0, %v4
726c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    br %r14
727c63ed222SJonas Paulsson  %cmp0 = fcmp ogt <8 x float> %val1, %val2
728c63ed222SJonas Paulsson  %cmp1 = fcmp ogt <8 x double> %val3, %val4
729c63ed222SJonas Paulsson  %and = and <8 x i1> %cmp0, %cmp1
730c63ed222SJonas Paulsson  %sel = select <8 x i1> %and, <8 x float> %val5, <8 x float> %val6
731c63ed222SJonas Paulsson  ret <8 x float> %sel
732f496bd9aSJonas Paulsson}
733f496bd9aSJonas Paulsson
734c63ed222SJonas Paulssondefine <2 x float> @fun31(<2 x double> %val1, <2 x double> %val2, <2 x double> %val3, <2 x double> %val4, <2 x float> %val5, <2 x float> %val6) {
735f496bd9aSJonas Paulsson; CHECK-LABEL: fun31:
73625528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
737c63ed222SJonas Paulsson; CHECK-DAG:     vfchdb [[REG0:%v[0-9]+]], %v24, %v26
738c63ed222SJonas Paulsson; CHECK-DAG:     vfchdb [[REG1:%v[0-9]+]], %v28, %v30
739c63ed222SJonas Paulsson; CHECK-NEXT:    vx %v0, [[REG0]], [[REG1]]
740c63ed222SJonas Paulsson; CHECK-NEXT:    vpkg %v0, %v0, %v0
741c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
742f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
743c63ed222SJonas Paulsson  %cmp0 = fcmp ogt <2 x double> %val1, %val2
744c63ed222SJonas Paulsson  %cmp1 = fcmp ogt <2 x double> %val3, %val4
745c63ed222SJonas Paulsson  %and = xor <2 x i1> %cmp0, %cmp1
746c63ed222SJonas Paulsson  %sel = select <2 x i1> %and, <2 x float> %val5, <2 x float> %val6
747c63ed222SJonas Paulsson  ret <2 x float> %sel
748f496bd9aSJonas Paulsson}
749f496bd9aSJonas Paulsson
750c63ed222SJonas Paulssondefine <2 x double> @fun32(<2 x double> %val1, <2 x double> %val2, <2 x double> %val3, <2 x double> %val4, <2 x double> %val5, <2 x double> %val6) {
751f496bd9aSJonas Paulsson; CHECK-LABEL: fun32:
75225528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
753c63ed222SJonas Paulsson; CHECK-DAG:     vfchdb [[REG0:%v[0-9]+]], %v24, %v26
754c63ed222SJonas Paulsson; CHECK-DAG:     vfchdb [[REG1:%v[0-9]+]], %v28, %v30
755c63ed222SJonas Paulsson; CHECK-NEXT:    vx %v0, [[REG0]], [[REG1]]
756c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v25, %v27, %v0
757f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
758c63ed222SJonas Paulsson  %cmp0 = fcmp ogt <2 x double> %val1, %val2
759c63ed222SJonas Paulsson  %cmp1 = fcmp ogt <2 x double> %val3, %val4
760c63ed222SJonas Paulsson  %and = xor <2 x i1> %cmp0, %cmp1
761c63ed222SJonas Paulsson  %sel = select <2 x i1> %and, <2 x double> %val5, <2 x double> %val6
762c63ed222SJonas Paulsson  ret <2 x double> %sel
763f496bd9aSJonas Paulsson}
764f496bd9aSJonas Paulsson
765c63ed222SJonas Paulssondefine <4 x float> @fun33(<4 x double> %val1, <4 x double> %val2, <4 x float> %val3, <4 x float> %val4, <4 x float> %val5, <4 x float> %val6) {
766f496bd9aSJonas Paulsson; CHECK-LABEL: fun33:
76725528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
768c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v0, %v26, %v30
769c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v1, %v24, %v28
770c63ed222SJonas Paulsson; CHECK-NEXT:    vpkg %v0, %v1, %v0
771c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlf %v1, %v27, %v27
772c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlf %v2, %v25, %v25
773c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v1, %v1
774c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v2, %v2
775c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v1, %v2, %v1
776c63ed222SJonas Paulsson; CHECK-NEXT:    vmrhf %v2, %v27, %v27
777c63ed222SJonas Paulsson; CHECK-NEXT:    vmrhf %v3, %v25, %v25
778c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v2, %v2
779c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb %v3, %v3
780c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb %v2, %v3, %v2
781c63ed222SJonas Paulsson; CHECK-NEXT:    vpkg %v1, %v2, %v1
782c63ed222SJonas Paulsson; CHECK-NEXT:    vn %v0, %v0, %v1
783c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v29, %v31, %v0
784f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
785c63ed222SJonas Paulsson;
786c63ed222SJonas Paulsson; CHECK-Z14-LABEL: fun33:
78725528d6dSFrancis Visoiu Mistrih; CHECK-Z14:       # %bb.0:
788c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchdb %v0, %v26, %v30
789c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchdb %v1, %v24, %v28
790c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vpkg %v0, %v1, %v0
791c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchsb %v1, %v25, %v27
792c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vn %v0, %v0, %v1
793c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vsel %v24, %v29, %v31, %v0
794c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    br %r14
795c63ed222SJonas Paulsson  %cmp0 = fcmp ogt <4 x double> %val1, %val2
796c63ed222SJonas Paulsson  %cmp1 = fcmp ogt <4 x float> %val3, %val4
797f496bd9aSJonas Paulsson  %and = and <4 x i1> %cmp0, %cmp1
798c63ed222SJonas Paulsson  %sel = select <4 x i1> %and, <4 x float> %val5, <4 x float> %val6
799c63ed222SJonas Paulsson  ret <4 x float> %sel
800f496bd9aSJonas Paulsson}
801f496bd9aSJonas Paulsson
802c63ed222SJonas Paulssondefine <4 x double> @fun34(<4 x double> %val1, <4 x double> %val2, <4 x float> %val3, <4 x float> %val4, <4 x double> %val5, <4 x double> %val6) {
803f496bd9aSJonas Paulsson; CHECK-LABEL: fun34:
80425528d6dSFrancis Visoiu Mistrih; CHECK:       # %bb.0:
805c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlf [[REG0:%v[0-9]+]], %v27, %v27
806c63ed222SJonas Paulsson; CHECK-NEXT:    vmrlf [[REG1:%v[0-9]+]], %v25, %v25
807c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb [[REG2:%v[0-9]+]], [[REG0]]
808c63ed222SJonas Paulsson; CHECK-NEXT:    vldeb [[REG3:%v[0-9]+]], [[REG1]]
809c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb [[REG4:%v[0-9]+]], [[REG3]], [[REG2]]
810c63ed222SJonas Paulsson; CHECK-NEXT:    vmrhf [[REG5:%v[0-9]+]], %v27, %v27
811c63ed222SJonas Paulsson; CHECK-NEXT:    vmrhf [[REG6:%v[0-9]+]], %v25, %v25
812c63ed222SJonas Paulsson; CHECK-DAG:     vldeb [[REG7:%v[0-9]+]], [[REG5]]
813c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG8:%v[0-9]+]], 176(%r15)
814c63ed222SJonas Paulsson; CHECK-DAG:     vldeb [[REG9:%v[0-9]+]], [[REG6]]
815c63ed222SJonas Paulsson; CHECK-DAG:     vl [[REG10:%v[0-9]+]], 160(%r15)
816c63ed222SJonas Paulsson; CHECK-DAG:     vfchdb [[REG11:%v[0-9]+]], [[REG9]], [[REG7]]
817c63ed222SJonas Paulsson; CHECK-DAG:     vpkg [[REG12:%v[0-9]+]], [[REG11]], [[REG4]]
818c63ed222SJonas Paulsson; CHECK-DAG:     vuphf [[REG13:%v[0-9]+]], [[REG12]]
819c63ed222SJonas Paulsson; CHECK-DAG:     vmrlg [[REG14:%v[0-9]+]], [[REG12]], [[REG12]]
820c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb [[REG15:%v[0-9]+]], %v24, %v28
821c63ed222SJonas Paulsson; CHECK-NEXT:    vfchdb [[REG16:%v[0-9]+]], %v26, %v30
822c63ed222SJonas Paulsson; CHECK-NEXT:    vuphf [[REG17:%v[0-9]+]], [[REG14]]
823c63ed222SJonas Paulsson; CHECK-NEXT:    vn [[REG18:%v[0-9]+]], [[REG16]], [[REG17]]
824c63ed222SJonas Paulsson; CHECK-NEXT:    vn [[REG19:%v[0-9]+]], [[REG15]], [[REG13]]
825c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v24, %v29, [[REG10]], [[REG19]]
826c63ed222SJonas Paulsson; CHECK-NEXT:    vsel %v26, %v31, [[REG8]], [[REG18]]
827f496bd9aSJonas Paulsson; CHECK-NEXT:    br %r14
828c63ed222SJonas Paulsson;
829c63ed222SJonas Paulsson; CHECK-Z14-LABEL: fun34:
83025528d6dSFrancis Visoiu Mistrih; CHECK-Z14:       # %bb.0:
831c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vfchsb %v4, %v25, %v27
832c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vuphf %v5, %v4
833c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vmrlg %v4, %v4, %v4
834c88d3f6aSJonas Paulsson; CHECK-Z14-DAG:     vfchdb %v2, %v24, %v28
835c88d3f6aSJonas Paulsson; CHECK-Z14-DAG:     vfchdb %v3, %v26, %v30
836c88d3f6aSJonas Paulsson; CHECK-Z14-DAG:     vuphf %v4, %v4
837c88d3f6aSJonas Paulsson; CHECK-Z14-DAG:     vl %v0, 176(%r15)
838c88d3f6aSJonas Paulsson; CHECK-Z14-DAG:     vl %v1, 160(%r15)
839c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vn %v3, %v3, %v4
840c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vn %v2, %v2, %v5
841c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vsel %v24, %v29, %v1, %v2
842c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    vsel %v26, %v31, %v0, %v3
843c63ed222SJonas Paulsson; CHECK-Z14-NEXT:    br %r14
844c63ed222SJonas Paulsson  %cmp0 = fcmp ogt <4 x double> %val1, %val2
845f496bd9aSJonas Paulsson  %cmp1 = fcmp ogt <4 x float> %val3, %val4
846f496bd9aSJonas Paulsson  %and = and <4 x i1> %cmp0, %cmp1
847f496bd9aSJonas Paulsson  %sel = select <4 x i1> %and, <4 x double> %val5, <4 x double> %val6
848f496bd9aSJonas Paulsson  ret <4 x double> %sel
849f496bd9aSJonas Paulsson}
850