1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
3; RUN:     -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
4; RUN: FileCheck %s --check-prefix=CHECK-P8
5; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
6; RUN:     -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
7; RUN: FileCheck %s --check-prefix=CHECK-P9
8; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \
9; RUN:     -mcpu=pwr9 -ppc-asm-full-reg-names -ppc-vsr-nums-as-vr < %s | \
10; RUN: FileCheck %s --check-prefix=CHECK-BE
11
12define i16 @test2elt(i64 %a.coerce) local_unnamed_addr #0 {
13; CHECK-P8-LABEL: test2elt:
14; CHECK-P8:       # %bb.0: # %entry
15; CHECK-P8-NEXT:    mtfprd f0, r3
16; CHECK-P8-NEXT:    xxswapd v2, vs0
17; CHECK-P8-NEXT:    xscvspdpn f0, vs0
18; CHECK-P8-NEXT:    xxsldwi vs1, v2, v2, 3
19; CHECK-P8-NEXT:    xscvspdpn f1, vs1
20; CHECK-P8-NEXT:    xscvdpsxws f0, f0
21; CHECK-P8-NEXT:    xscvdpsxws f1, f1
22; CHECK-P8-NEXT:    mffprwz r4, f0
23; CHECK-P8-NEXT:    mtvsrd v3, r4
24; CHECK-P8-NEXT:    mffprwz r3, f1
25; CHECK-P8-NEXT:    mtvsrd v2, r3
26; CHECK-P8-NEXT:    vmrghb v2, v3, v2
27; CHECK-P8-NEXT:    xxswapd vs0, v2
28; CHECK-P8-NEXT:    mffprd r3, f0
29; CHECK-P8-NEXT:    clrldi r3, r3, 48
30; CHECK-P8-NEXT:    sth r3, -2(r1)
31; CHECK-P8-NEXT:    lhz r3, -2(r1)
32; CHECK-P8-NEXT:    blr
33;
34; CHECK-P9-LABEL: test2elt:
35; CHECK-P9:       # %bb.0: # %entry
36; CHECK-P9-NEXT:    mtfprd f0, r3
37; CHECK-P9-NEXT:    xxswapd v2, vs0
38; CHECK-P9-NEXT:    xscvspdpn f0, vs0
39; CHECK-P9-NEXT:    xxsldwi vs1, v2, v2, 3
40; CHECK-P9-NEXT:    xscvdpsxws f0, f0
41; CHECK-P9-NEXT:    xscvspdpn f1, vs1
42; CHECK-P9-NEXT:    xscvdpsxws f1, f1
43; CHECK-P9-NEXT:    mffprwz r3, f1
44; CHECK-P9-NEXT:    mtvsrd v2, r3
45; CHECK-P9-NEXT:    mffprwz r3, f0
46; CHECK-P9-NEXT:    mtvsrd v3, r3
47; CHECK-P9-NEXT:    addi r3, r1, -2
48; CHECK-P9-NEXT:    vmrghb v2, v3, v2
49; CHECK-P9-NEXT:    vsldoi v2, v2, v2, 8
50; CHECK-P9-NEXT:    stxsihx v2, 0, r3
51; CHECK-P9-NEXT:    lhz r3, -2(r1)
52; CHECK-P9-NEXT:    blr
53;
54; CHECK-BE-LABEL: test2elt:
55; CHECK-BE:       # %bb.0: # %entry
56; CHECK-BE-NEXT:    mtfprd f0, r3
57; CHECK-BE-NEXT:    xscvspdpn f1, vs0
58; CHECK-BE-NEXT:    xxsldwi vs0, vs0, vs0, 1
59; CHECK-BE-NEXT:    xscvdpsxws f1, f1
60; CHECK-BE-NEXT:    xscvspdpn f0, vs0
61; CHECK-BE-NEXT:    xscvdpsxws f0, f0
62; CHECK-BE-NEXT:    mffprwz r3, f1
63; CHECK-BE-NEXT:    sldi r3, r3, 56
64; CHECK-BE-NEXT:    mtvsrd v2, r3
65; CHECK-BE-NEXT:    mffprwz r3, f0
66; CHECK-BE-NEXT:    sldi r3, r3, 56
67; CHECK-BE-NEXT:    mtvsrd v3, r3
68; CHECK-BE-NEXT:    addi r3, r1, -2
69; CHECK-BE-NEXT:    vmrghb v2, v2, v3
70; CHECK-BE-NEXT:    vsldoi v2, v2, v2, 10
71; CHECK-BE-NEXT:    stxsihx v2, 0, r3
72; CHECK-BE-NEXT:    lhz r3, -2(r1)
73; CHECK-BE-NEXT:    blr
74entry:
75  %0 = bitcast i64 %a.coerce to <2 x float>
76  %1 = fptoui <2 x float> %0 to <2 x i8>
77  %2 = bitcast <2 x i8> %1 to i16
78  ret i16 %2
79}
80
81define i32 @test4elt(<4 x float> %a) local_unnamed_addr #1 {
82; CHECK-P8-LABEL: test4elt:
83; CHECK-P8:       # %bb.0: # %entry
84; CHECK-P8-NEXT:    xxsldwi vs0, v2, v2, 3
85; CHECK-P8-NEXT:    xscvspdpn f1, v2
86; CHECK-P8-NEXT:    xxswapd vs2, v2
87; CHECK-P8-NEXT:    xxsldwi vs3, v2, v2, 1
88; CHECK-P8-NEXT:    xscvspdpn f0, vs0
89; CHECK-P8-NEXT:    xscvspdpn f2, vs2
90; CHECK-P8-NEXT:    xscvspdpn f3, vs3
91; CHECK-P8-NEXT:    xscvdpsxws f1, f1
92; CHECK-P8-NEXT:    xscvdpsxws f0, f0
93; CHECK-P8-NEXT:    xscvdpsxws f2, f2
94; CHECK-P8-NEXT:    xscvdpsxws f3, f3
95; CHECK-P8-NEXT:    mffprwz r3, f1
96; CHECK-P8-NEXT:    mtvsrd v2, r3
97; CHECK-P8-NEXT:    mffprwz r3, f0
98; CHECK-P8-NEXT:    mffprwz r4, f2
99; CHECK-P8-NEXT:    mtvsrd v3, r3
100; CHECK-P8-NEXT:    mffprwz r3, f3
101; CHECK-P8-NEXT:    mtvsrd v4, r4
102; CHECK-P8-NEXT:    mtvsrd v5, r3
103; CHECK-P8-NEXT:    vmrghb v3, v4, v3
104; CHECK-P8-NEXT:    vmrghb v2, v2, v5
105; CHECK-P8-NEXT:    vmrglh v2, v2, v3
106; CHECK-P8-NEXT:    xxswapd vs0, v2
107; CHECK-P8-NEXT:    mffprwz r3, f0
108; CHECK-P8-NEXT:    blr
109;
110; CHECK-P9-LABEL: test4elt:
111; CHECK-P9:       # %bb.0: # %entry
112; CHECK-P9-NEXT:    xxsldwi vs0, v2, v2, 3
113; CHECK-P9-NEXT:    xscvspdpn f0, vs0
114; CHECK-P9-NEXT:    xscvdpsxws f0, f0
115; CHECK-P9-NEXT:    mffprwz r3, f0
116; CHECK-P9-NEXT:    xxswapd vs0, v2
117; CHECK-P9-NEXT:    mtvsrd v3, r3
118; CHECK-P9-NEXT:    xscvspdpn f0, vs0
119; CHECK-P9-NEXT:    xscvdpsxws f0, f0
120; CHECK-P9-NEXT:    mffprwz r3, f0
121; CHECK-P9-NEXT:    xscvspdpn f0, v2
122; CHECK-P9-NEXT:    mtvsrd v4, r3
123; CHECK-P9-NEXT:    xscvdpsxws f0, f0
124; CHECK-P9-NEXT:    vmrghb v3, v4, v3
125; CHECK-P9-NEXT:    mffprwz r3, f0
126; CHECK-P9-NEXT:    xxsldwi vs0, v2, v2, 1
127; CHECK-P9-NEXT:    mtvsrd v4, r3
128; CHECK-P9-NEXT:    xscvspdpn f0, vs0
129; CHECK-P9-NEXT:    xscvdpsxws f0, f0
130; CHECK-P9-NEXT:    mffprwz r3, f0
131; CHECK-P9-NEXT:    mtvsrd v2, r3
132; CHECK-P9-NEXT:    li r3, 0
133; CHECK-P9-NEXT:    vmrghb v2, v4, v2
134; CHECK-P9-NEXT:    vmrglh v2, v2, v3
135; CHECK-P9-NEXT:    vextuwrx r3, r3, v2
136; CHECK-P9-NEXT:    blr
137;
138; CHECK-BE-LABEL: test4elt:
139; CHECK-BE:       # %bb.0: # %entry
140; CHECK-BE-NEXT:    xxsldwi vs0, v2, v2, 3
141; CHECK-BE-NEXT:    xscvspdpn f0, vs0
142; CHECK-BE-NEXT:    xscvdpsxws f0, f0
143; CHECK-BE-NEXT:    mffprwz r3, f0
144; CHECK-BE-NEXT:    xxswapd vs0, v2
145; CHECK-BE-NEXT:    sldi r3, r3, 56
146; CHECK-BE-NEXT:    xscvspdpn f0, vs0
147; CHECK-BE-NEXT:    mtvsrd v3, r3
148; CHECK-BE-NEXT:    xscvdpsxws f0, f0
149; CHECK-BE-NEXT:    mffprwz r3, f0
150; CHECK-BE-NEXT:    xscvspdpn f0, v2
151; CHECK-BE-NEXT:    sldi r3, r3, 56
152; CHECK-BE-NEXT:    xscvdpsxws f0, f0
153; CHECK-BE-NEXT:    mtvsrd v4, r3
154; CHECK-BE-NEXT:    vmrghb v3, v4, v3
155; CHECK-BE-NEXT:    mffprwz r3, f0
156; CHECK-BE-NEXT:    xxsldwi vs0, v2, v2, 1
157; CHECK-BE-NEXT:    sldi r3, r3, 56
158; CHECK-BE-NEXT:    xscvspdpn f0, vs0
159; CHECK-BE-NEXT:    mtvsrd v4, r3
160; CHECK-BE-NEXT:    xscvdpsxws f0, f0
161; CHECK-BE-NEXT:    mffprwz r3, f0
162; CHECK-BE-NEXT:    sldi r3, r3, 56
163; CHECK-BE-NEXT:    mtvsrd v2, r3
164; CHECK-BE-NEXT:    li r3, 0
165; CHECK-BE-NEXT:    vmrghb v2, v4, v2
166; CHECK-BE-NEXT:    vmrghh v2, v2, v3
167; CHECK-BE-NEXT:    vextuwlx r3, r3, v2
168; CHECK-BE-NEXT:    blr
169entry:
170  %0 = fptoui <4 x float> %a to <4 x i8>
171  %1 = bitcast <4 x i8> %0 to i32
172  ret i32 %1
173}
174
175define i64 @test8elt(<8 x float>* nocapture readonly) local_unnamed_addr #2 {
176; CHECK-P8-LABEL: test8elt:
177; CHECK-P8:       # %bb.0: # %entry
178; CHECK-P8-NEXT:    lvx v2, 0, r3
179; CHECK-P8-NEXT:    li r4, 16
180; CHECK-P8-NEXT:    lvx v3, r3, r4
181; CHECK-P8-NEXT:    xxsldwi vs0, v2, v2, 3
182; CHECK-P8-NEXT:    xxswapd vs1, v2
183; CHECK-P8-NEXT:    xscvspdpn f2, v2
184; CHECK-P8-NEXT:    xxsldwi vs4, v2, v2, 1
185; CHECK-P8-NEXT:    xxsldwi vs5, v3, v3, 3
186; CHECK-P8-NEXT:    xscvspdpn f3, v3
187; CHECK-P8-NEXT:    xscvspdpn f0, vs0
188; CHECK-P8-NEXT:    xscvspdpn f1, vs1
189; CHECK-P8-NEXT:    xscvspdpn f4, vs4
190; CHECK-P8-NEXT:    xscvspdpn f5, vs5
191; CHECK-P8-NEXT:    xscvdpsxws f2, f2
192; CHECK-P8-NEXT:    xscvdpsxws f3, f3
193; CHECK-P8-NEXT:    xscvdpsxws f0, f0
194; CHECK-P8-NEXT:    xscvdpsxws f1, f1
195; CHECK-P8-NEXT:    mffprwz r3, f0
196; CHECK-P8-NEXT:    xxswapd vs0, v3
197; CHECK-P8-NEXT:    mffprwz r4, f1
198; CHECK-P8-NEXT:    xxsldwi vs1, v3, v3, 1
199; CHECK-P8-NEXT:    mtvsrd v2, r3
200; CHECK-P8-NEXT:    xscvspdpn f0, vs0
201; CHECK-P8-NEXT:    mffprwz r3, f2
202; CHECK-P8-NEXT:    xscvdpsxws f2, f4
203; CHECK-P8-NEXT:    xscvspdpn f1, vs1
204; CHECK-P8-NEXT:    xscvdpsxws f4, f5
205; CHECK-P8-NEXT:    mtvsrd v4, r4
206; CHECK-P8-NEXT:    xscvdpsxws f0, f0
207; CHECK-P8-NEXT:    vmrghb v2, v4, v2
208; CHECK-P8-NEXT:    mffprwz r4, f2
209; CHECK-P8-NEXT:    xscvdpsxws f1, f1
210; CHECK-P8-NEXT:    mtvsrd v3, r3
211; CHECK-P8-NEXT:    mffprwz r3, f3
212; CHECK-P8-NEXT:    mtvsrd v4, r4
213; CHECK-P8-NEXT:    mffprwz r4, f0
214; CHECK-P8-NEXT:    vmrghb v3, v3, v4
215; CHECK-P8-NEXT:    mtvsrd v4, r3
216; CHECK-P8-NEXT:    mffprwz r3, f4
217; CHECK-P8-NEXT:    mtvsrd v0, r4
218; CHECK-P8-NEXT:    mtvsrd v5, r3
219; CHECK-P8-NEXT:    mffprwz r3, f1
220; CHECK-P8-NEXT:    vmrghb v5, v0, v5
221; CHECK-P8-NEXT:    mtvsrd v1, r3
222; CHECK-P8-NEXT:    vmrglh v2, v3, v2
223; CHECK-P8-NEXT:    vmrghb v4, v4, v1
224; CHECK-P8-NEXT:    vmrglh v3, v4, v5
225; CHECK-P8-NEXT:    vmrglw v2, v3, v2
226; CHECK-P8-NEXT:    xxswapd vs0, v2
227; CHECK-P8-NEXT:    mffprd r3, f0
228; CHECK-P8-NEXT:    blr
229;
230; CHECK-P9-LABEL: test8elt:
231; CHECK-P9:       # %bb.0: # %entry
232; CHECK-P9-NEXT:    lxv vs1, 0(r3)
233; CHECK-P9-NEXT:    lxv vs0, 16(r3)
234; CHECK-P9-NEXT:    xxsldwi vs2, vs1, vs1, 3
235; CHECK-P9-NEXT:    xscvspdpn f2, vs2
236; CHECK-P9-NEXT:    xscvdpsxws f2, f2
237; CHECK-P9-NEXT:    mffprwz r3, f2
238; CHECK-P9-NEXT:    xxswapd vs2, vs1
239; CHECK-P9-NEXT:    mtvsrd v2, r3
240; CHECK-P9-NEXT:    xscvspdpn f2, vs2
241; CHECK-P9-NEXT:    xscvdpsxws f2, f2
242; CHECK-P9-NEXT:    mffprwz r3, f2
243; CHECK-P9-NEXT:    xscvspdpn f2, vs1
244; CHECK-P9-NEXT:    xxsldwi vs1, vs1, vs1, 1
245; CHECK-P9-NEXT:    mtvsrd v3, r3
246; CHECK-P9-NEXT:    xscvspdpn f1, vs1
247; CHECK-P9-NEXT:    xscvdpsxws f2, f2
248; CHECK-P9-NEXT:    vmrghb v2, v3, v2
249; CHECK-P9-NEXT:    xscvdpsxws f1, f1
250; CHECK-P9-NEXT:    mffprwz r3, f2
251; CHECK-P9-NEXT:    mtvsrd v3, r3
252; CHECK-P9-NEXT:    mffprwz r3, f1
253; CHECK-P9-NEXT:    xxsldwi vs1, vs0, vs0, 3
254; CHECK-P9-NEXT:    mtvsrd v4, r3
255; CHECK-P9-NEXT:    xscvspdpn f1, vs1
256; CHECK-P9-NEXT:    vmrghb v3, v3, v4
257; CHECK-P9-NEXT:    xscvdpsxws f1, f1
258; CHECK-P9-NEXT:    vmrglh v2, v3, v2
259; CHECK-P9-NEXT:    mffprwz r3, f1
260; CHECK-P9-NEXT:    xxswapd vs1, vs0
261; CHECK-P9-NEXT:    mtvsrd v3, r3
262; CHECK-P9-NEXT:    xscvspdpn f1, vs1
263; CHECK-P9-NEXT:    xscvdpsxws f1, f1
264; CHECK-P9-NEXT:    mffprwz r3, f1
265; CHECK-P9-NEXT:    xscvspdpn f1, vs0
266; CHECK-P9-NEXT:    xxsldwi vs0, vs0, vs0, 1
267; CHECK-P9-NEXT:    mtvsrd v4, r3
268; CHECK-P9-NEXT:    xscvspdpn f0, vs0
269; CHECK-P9-NEXT:    xscvdpsxws f1, f1
270; CHECK-P9-NEXT:    vmrghb v3, v4, v3
271; CHECK-P9-NEXT:    xscvdpsxws f0, f0
272; CHECK-P9-NEXT:    mffprwz r3, f1
273; CHECK-P9-NEXT:    mtvsrd v4, r3
274; CHECK-P9-NEXT:    mffprwz r3, f0
275; CHECK-P9-NEXT:    mtvsrd v5, r3
276; CHECK-P9-NEXT:    vmrghb v4, v4, v5
277; CHECK-P9-NEXT:    vmrglh v3, v4, v3
278; CHECK-P9-NEXT:    vmrglw v2, v3, v2
279; CHECK-P9-NEXT:    mfvsrld r3, v2
280; CHECK-P9-NEXT:    blr
281;
282; CHECK-BE-LABEL: test8elt:
283; CHECK-BE:       # %bb.0: # %entry
284; CHECK-BE-NEXT:    lxv vs1, 16(r3)
285; CHECK-BE-NEXT:    lxv vs0, 0(r3)
286; CHECK-BE-NEXT:    xxsldwi vs2, vs1, vs1, 3
287; CHECK-BE-NEXT:    xscvspdpn f2, vs2
288; CHECK-BE-NEXT:    xscvdpsxws f2, f2
289; CHECK-BE-NEXT:    mffprwz r3, f2
290; CHECK-BE-NEXT:    xxswapd vs2, vs1
291; CHECK-BE-NEXT:    sldi r3, r3, 56
292; CHECK-BE-NEXT:    xscvspdpn f2, vs2
293; CHECK-BE-NEXT:    mtvsrd v2, r3
294; CHECK-BE-NEXT:    xscvdpsxws f2, f2
295; CHECK-BE-NEXT:    mffprwz r3, f2
296; CHECK-BE-NEXT:    xscvspdpn f2, vs1
297; CHECK-BE-NEXT:    xxsldwi vs1, vs1, vs1, 1
298; CHECK-BE-NEXT:    sldi r3, r3, 56
299; CHECK-BE-NEXT:    xscvdpsxws f2, f2
300; CHECK-BE-NEXT:    xscvspdpn f1, vs1
301; CHECK-BE-NEXT:    mtvsrd v3, r3
302; CHECK-BE-NEXT:    xscvdpsxws f1, f1
303; CHECK-BE-NEXT:    vmrghb v2, v3, v2
304; CHECK-BE-NEXT:    mffprwz r3, f2
305; CHECK-BE-NEXT:    sldi r3, r3, 56
306; CHECK-BE-NEXT:    mtvsrd v3, r3
307; CHECK-BE-NEXT:    mffprwz r3, f1
308; CHECK-BE-NEXT:    xxsldwi vs1, vs0, vs0, 3
309; CHECK-BE-NEXT:    sldi r3, r3, 56
310; CHECK-BE-NEXT:    xscvspdpn f1, vs1
311; CHECK-BE-NEXT:    mtvsrd v4, r3
312; CHECK-BE-NEXT:    xscvdpsxws f1, f1
313; CHECK-BE-NEXT:    vmrghb v3, v3, v4
314; CHECK-BE-NEXT:    vmrghh v2, v3, v2
315; CHECK-BE-NEXT:    mffprwz r3, f1
316; CHECK-BE-NEXT:    xxswapd vs1, vs0
317; CHECK-BE-NEXT:    sldi r3, r3, 56
318; CHECK-BE-NEXT:    xscvspdpn f1, vs1
319; CHECK-BE-NEXT:    mtvsrd v3, r3
320; CHECK-BE-NEXT:    xscvdpsxws f1, f1
321; CHECK-BE-NEXT:    mffprwz r3, f1
322; CHECK-BE-NEXT:    xscvspdpn f1, vs0
323; CHECK-BE-NEXT:    xxsldwi vs0, vs0, vs0, 1
324; CHECK-BE-NEXT:    sldi r3, r3, 56
325; CHECK-BE-NEXT:    xscvdpsxws f1, f1
326; CHECK-BE-NEXT:    xscvspdpn f0, vs0
327; CHECK-BE-NEXT:    mtvsrd v4, r3
328; CHECK-BE-NEXT:    xscvdpsxws f0, f0
329; CHECK-BE-NEXT:    vmrghb v3, v4, v3
330; CHECK-BE-NEXT:    mffprwz r3, f1
331; CHECK-BE-NEXT:    sldi r3, r3, 56
332; CHECK-BE-NEXT:    mtvsrd v4, r3
333; CHECK-BE-NEXT:    mffprwz r3, f0
334; CHECK-BE-NEXT:    sldi r3, r3, 56
335; CHECK-BE-NEXT:    mtvsrd v5, r3
336; CHECK-BE-NEXT:    vmrghb v4, v4, v5
337; CHECK-BE-NEXT:    vmrghh v3, v4, v3
338; CHECK-BE-NEXT:    vmrghw v2, v3, v2
339; CHECK-BE-NEXT:    mfvsrd r3, v2
340; CHECK-BE-NEXT:    blr
341entry:
342  %a = load <8 x float>, <8 x float>* %0, align 32
343  %1 = fptoui <8 x float> %a to <8 x i8>
344  %2 = bitcast <8 x i8> %1 to i64
345  ret i64 %2
346}
347
348define <16 x i8> @test16elt(<16 x float>* nocapture readonly) local_unnamed_addr #3 {
349; CHECK-P8-LABEL: test16elt:
350; CHECK-P8:       # %bb.0: # %entry
351; CHECK-P8-NEXT:    lvx v4, 0, r3
352; CHECK-P8-NEXT:    li r4, 16
353; CHECK-P8-NEXT:    li r5, 32
354; CHECK-P8-NEXT:    lvx v3, r3, r4
355; CHECK-P8-NEXT:    lvx v2, r3, r5
356; CHECK-P8-NEXT:    xxsldwi vs0, v4, v4, 3
357; CHECK-P8-NEXT:    xxswapd vs2, v4
358; CHECK-P8-NEXT:    xxsldwi vs4, v4, v4, 1
359; CHECK-P8-NEXT:    xscvspdpn f1, v4
360; CHECK-P8-NEXT:    xscvspdpn f3, v3
361; CHECK-P8-NEXT:    xxsldwi vs6, v3, v3, 3
362; CHECK-P8-NEXT:    xscvspdpn f0, vs0
363; CHECK-P8-NEXT:    xxswapd vs7, v3
364; CHECK-P8-NEXT:    xscvspdpn f2, vs2
365; CHECK-P8-NEXT:    xxsldwi vs8, v3, v3, 1
366; CHECK-P8-NEXT:    xscvspdpn f4, vs4
367; CHECK-P8-NEXT:    xxsldwi vs9, v2, v2, 3
368; CHECK-P8-NEXT:    xscvspdpn f6, vs6
369; CHECK-P8-NEXT:    xscvdpsxws f1, f1
370; CHECK-P8-NEXT:    xscvspdpn f7, vs7
371; CHECK-P8-NEXT:    xscvdpsxws f0, f0
372; CHECK-P8-NEXT:    xscvdpsxws f2, f2
373; CHECK-P8-NEXT:    xscvdpsxws f4, f4
374; CHECK-P8-NEXT:    xscvspdpn f8, vs8
375; CHECK-P8-NEXT:    xscvdpsxws f3, f3
376; CHECK-P8-NEXT:    xscvspdpn f9, vs9
377; CHECK-P8-NEXT:    mffprwz r4, f0
378; CHECK-P8-NEXT:    xxswapd vs0, v2
379; CHECK-P8-NEXT:    mffprwz r5, f2
380; CHECK-P8-NEXT:    mtvsrd v3, r4
381; CHECK-P8-NEXT:    xscvspdpn f0, vs0
382; CHECK-P8-NEXT:    mffprwz r4, f1
383; CHECK-P8-NEXT:    mtvsrd v4, r5
384; CHECK-P8-NEXT:    mffprwz r5, f4
385; CHECK-P8-NEXT:    xscvdpsxws f1, f6
386; CHECK-P8-NEXT:    vmrghb v3, v4, v3
387; CHECK-P8-NEXT:    mtvsrd v4, r5
388; CHECK-P8-NEXT:    mffprwz r5, f3
389; CHECK-P8-NEXT:    xscvdpsxws f3, f7
390; CHECK-P8-NEXT:    xscvdpsxws f4, f8
391; CHECK-P8-NEXT:    xscvdpsxws f0, f0
392; CHECK-P8-NEXT:    mtvsrd v5, r4
393; CHECK-P8-NEXT:    li r4, 48
394; CHECK-P8-NEXT:    lvx v0, r3, r4
395; CHECK-P8-NEXT:    mffprwz r3, f1
396; CHECK-P8-NEXT:    xxsldwi vs1, v2, v2, 1
397; CHECK-P8-NEXT:    xscvspdpn f5, v2
398; CHECK-P8-NEXT:    mffprwz r4, f3
399; CHECK-P8-NEXT:    xxsldwi vs3, v0, v0, 3
400; CHECK-P8-NEXT:    mtvsrd v1, r3
401; CHECK-P8-NEXT:    mffprwz r3, f4
402; CHECK-P8-NEXT:    xxswapd vs4, v0
403; CHECK-P8-NEXT:    xscvspdpn f1, vs1
404; CHECK-P8-NEXT:    mtvsrd v7, r3
405; CHECK-P8-NEXT:    mffprwz r3, f0
406; CHECK-P8-NEXT:    xxsldwi vs0, v0, v0, 1
407; CHECK-P8-NEXT:    xscvspdpn f2, v0
408; CHECK-P8-NEXT:    xscvspdpn f3, vs3
409; CHECK-P8-NEXT:    xscvdpsxws f6, f9
410; CHECK-P8-NEXT:    xscvspdpn f4, vs4
411; CHECK-P8-NEXT:    xscvspdpn f0, vs0
412; CHECK-P8-NEXT:    xscvdpsxws f5, f5
413; CHECK-P8-NEXT:    xscvdpsxws f1, f1
414; CHECK-P8-NEXT:    xscvdpsxws f2, f2
415; CHECK-P8-NEXT:    xscvdpsxws f3, f3
416; CHECK-P8-NEXT:    mtvsrd v6, r4
417; CHECK-P8-NEXT:    mffprwz r4, f6
418; CHECK-P8-NEXT:    xscvdpsxws f4, f4
419; CHECK-P8-NEXT:    xscvdpsxws f0, f0
420; CHECK-P8-NEXT:    vmrghb v2, v6, v1
421; CHECK-P8-NEXT:    mtvsrd v1, r4
422; CHECK-P8-NEXT:    mffprwz r4, f5
423; CHECK-P8-NEXT:    mtvsrd v6, r3
424; CHECK-P8-NEXT:    mffprwz r3, f1
425; CHECK-P8-NEXT:    vmrghb v4, v5, v4
426; CHECK-P8-NEXT:    mtvsrd v5, r5
427; CHECK-P8-NEXT:    vmrghb v0, v6, v1
428; CHECK-P8-NEXT:    mtvsrd v1, r4
429; CHECK-P8-NEXT:    mffprwz r4, f2
430; CHECK-P8-NEXT:    mtvsrd v6, r3
431; CHECK-P8-NEXT:    mffprwz r3, f3
432; CHECK-P8-NEXT:    vmrghb v5, v5, v7
433; CHECK-P8-NEXT:    vmrghb v1, v1, v6
434; CHECK-P8-NEXT:    mtvsrd v6, r4
435; CHECK-P8-NEXT:    mffprwz r4, f4
436; CHECK-P8-NEXT:    mtvsrd v7, r3
437; CHECK-P8-NEXT:    mffprwz r3, f0
438; CHECK-P8-NEXT:    mtvsrd v8, r4
439; CHECK-P8-NEXT:    mtvsrd v9, r3
440; CHECK-P8-NEXT:    vmrghb v7, v8, v7
441; CHECK-P8-NEXT:    vmrghb v6, v6, v9
442; CHECK-P8-NEXT:    vmrglh v3, v4, v3
443; CHECK-P8-NEXT:    vmrglh v2, v5, v2
444; CHECK-P8-NEXT:    vmrglh v4, v1, v0
445; CHECK-P8-NEXT:    vmrglh v5, v6, v7
446; CHECK-P8-NEXT:    vmrglw v2, v2, v3
447; CHECK-P8-NEXT:    vmrglw v3, v5, v4
448; CHECK-P8-NEXT:    xxmrgld v2, v3, v2
449; CHECK-P8-NEXT:    blr
450;
451; CHECK-P9-LABEL: test16elt:
452; CHECK-P9:       # %bb.0: # %entry
453; CHECK-P9-NEXT:    lxv vs3, 0(r3)
454; CHECK-P9-NEXT:    lxv vs0, 48(r3)
455; CHECK-P9-NEXT:    lxv vs1, 32(r3)
456; CHECK-P9-NEXT:    lxv vs2, 16(r3)
457; CHECK-P9-NEXT:    xxsldwi vs4, vs3, vs3, 3
458; CHECK-P9-NEXT:    xscvspdpn f4, vs4
459; CHECK-P9-NEXT:    xscvdpsxws f4, f4
460; CHECK-P9-NEXT:    mffprwz r3, f4
461; CHECK-P9-NEXT:    xxswapd vs4, vs3
462; CHECK-P9-NEXT:    mtvsrd v2, r3
463; CHECK-P9-NEXT:    xscvspdpn f4, vs4
464; CHECK-P9-NEXT:    xscvdpsxws f4, f4
465; CHECK-P9-NEXT:    mffprwz r3, f4
466; CHECK-P9-NEXT:    xscvspdpn f4, vs3
467; CHECK-P9-NEXT:    xxsldwi vs3, vs3, vs3, 1
468; CHECK-P9-NEXT:    mtvsrd v3, r3
469; CHECK-P9-NEXT:    xscvspdpn f3, vs3
470; CHECK-P9-NEXT:    xscvdpsxws f4, f4
471; CHECK-P9-NEXT:    vmrghb v2, v3, v2
472; CHECK-P9-NEXT:    xscvdpsxws f3, f3
473; CHECK-P9-NEXT:    mffprwz r3, f4
474; CHECK-P9-NEXT:    mtvsrd v3, r3
475; CHECK-P9-NEXT:    mffprwz r3, f3
476; CHECK-P9-NEXT:    xxsldwi vs3, vs2, vs2, 3
477; CHECK-P9-NEXT:    mtvsrd v4, r3
478; CHECK-P9-NEXT:    xscvspdpn f3, vs3
479; CHECK-P9-NEXT:    vmrghb v3, v3, v4
480; CHECK-P9-NEXT:    xscvdpsxws f3, f3
481; CHECK-P9-NEXT:    vmrglh v2, v3, v2
482; CHECK-P9-NEXT:    mffprwz r3, f3
483; CHECK-P9-NEXT:    xxswapd vs3, vs2
484; CHECK-P9-NEXT:    mtvsrd v3, r3
485; CHECK-P9-NEXT:    xscvspdpn f3, vs3
486; CHECK-P9-NEXT:    xscvdpsxws f3, f3
487; CHECK-P9-NEXT:    mffprwz r3, f3
488; CHECK-P9-NEXT:    xscvspdpn f3, vs2
489; CHECK-P9-NEXT:    xxsldwi vs2, vs2, vs2, 1
490; CHECK-P9-NEXT:    mtvsrd v4, r3
491; CHECK-P9-NEXT:    xscvspdpn f2, vs2
492; CHECK-P9-NEXT:    xscvdpsxws f3, f3
493; CHECK-P9-NEXT:    vmrghb v3, v4, v3
494; CHECK-P9-NEXT:    xscvdpsxws f2, f2
495; CHECK-P9-NEXT:    mffprwz r3, f3
496; CHECK-P9-NEXT:    mtvsrd v4, r3
497; CHECK-P9-NEXT:    mffprwz r3, f2
498; CHECK-P9-NEXT:    xxsldwi vs2, vs1, vs1, 3
499; CHECK-P9-NEXT:    mtvsrd v5, r3
500; CHECK-P9-NEXT:    xscvspdpn f2, vs2
501; CHECK-P9-NEXT:    vmrghb v4, v4, v5
502; CHECK-P9-NEXT:    xscvdpsxws f2, f2
503; CHECK-P9-NEXT:    vmrglh v3, v4, v3
504; CHECK-P9-NEXT:    vmrglw v2, v3, v2
505; CHECK-P9-NEXT:    mffprwz r3, f2
506; CHECK-P9-NEXT:    xxswapd vs2, vs1
507; CHECK-P9-NEXT:    mtvsrd v3, r3
508; CHECK-P9-NEXT:    xscvspdpn f2, vs2
509; CHECK-P9-NEXT:    xscvdpsxws f2, f2
510; CHECK-P9-NEXT:    mffprwz r3, f2
511; CHECK-P9-NEXT:    xscvspdpn f2, vs1
512; CHECK-P9-NEXT:    xxsldwi vs1, vs1, vs1, 1
513; CHECK-P9-NEXT:    mtvsrd v4, r3
514; CHECK-P9-NEXT:    xscvspdpn f1, vs1
515; CHECK-P9-NEXT:    xscvdpsxws f2, f2
516; CHECK-P9-NEXT:    vmrghb v3, v4, v3
517; CHECK-P9-NEXT:    xscvdpsxws f1, f1
518; CHECK-P9-NEXT:    mffprwz r3, f2
519; CHECK-P9-NEXT:    mtvsrd v4, r3
520; CHECK-P9-NEXT:    mffprwz r3, f1
521; CHECK-P9-NEXT:    xxsldwi vs1, vs0, vs0, 3
522; CHECK-P9-NEXT:    mtvsrd v5, r3
523; CHECK-P9-NEXT:    xscvspdpn f1, vs1
524; CHECK-P9-NEXT:    vmrghb v4, v4, v5
525; CHECK-P9-NEXT:    xscvdpsxws f1, f1
526; CHECK-P9-NEXT:    vmrglh v3, v4, v3
527; CHECK-P9-NEXT:    mffprwz r3, f1
528; CHECK-P9-NEXT:    xxswapd vs1, vs0
529; CHECK-P9-NEXT:    mtvsrd v4, r3
530; CHECK-P9-NEXT:    xscvspdpn f1, vs1
531; CHECK-P9-NEXT:    xscvdpsxws f1, f1
532; CHECK-P9-NEXT:    mffprwz r3, f1
533; CHECK-P9-NEXT:    xscvspdpn f1, vs0
534; CHECK-P9-NEXT:    xxsldwi vs0, vs0, vs0, 1
535; CHECK-P9-NEXT:    mtvsrd v5, r3
536; CHECK-P9-NEXT:    xscvspdpn f0, vs0
537; CHECK-P9-NEXT:    xscvdpsxws f1, f1
538; CHECK-P9-NEXT:    vmrghb v4, v5, v4
539; CHECK-P9-NEXT:    xscvdpsxws f0, f0
540; CHECK-P9-NEXT:    mffprwz r3, f1
541; CHECK-P9-NEXT:    mtvsrd v5, r3
542; CHECK-P9-NEXT:    mffprwz r3, f0
543; CHECK-P9-NEXT:    mtvsrd v0, r3
544; CHECK-P9-NEXT:    vmrghb v5, v5, v0
545; CHECK-P9-NEXT:    vmrglh v4, v5, v4
546; CHECK-P9-NEXT:    vmrglw v3, v4, v3
547; CHECK-P9-NEXT:    xxmrgld v2, v3, v2
548; CHECK-P9-NEXT:    blr
549;
550; CHECK-BE-LABEL: test16elt:
551; CHECK-BE:       # %bb.0: # %entry
552; CHECK-BE-NEXT:    lxv vs3, 48(r3)
553; CHECK-BE-NEXT:    lxv vs0, 0(r3)
554; CHECK-BE-NEXT:    lxv vs1, 16(r3)
555; CHECK-BE-NEXT:    lxv vs2, 32(r3)
556; CHECK-BE-NEXT:    xxsldwi vs4, vs3, vs3, 3
557; CHECK-BE-NEXT:    xscvspdpn f4, vs4
558; CHECK-BE-NEXT:    xscvdpsxws f4, f4
559; CHECK-BE-NEXT:    mffprwz r3, f4
560; CHECK-BE-NEXT:    xxswapd vs4, vs3
561; CHECK-BE-NEXT:    sldi r3, r3, 56
562; CHECK-BE-NEXT:    xscvspdpn f4, vs4
563; CHECK-BE-NEXT:    mtvsrd v2, r3
564; CHECK-BE-NEXT:    xscvdpsxws f4, f4
565; CHECK-BE-NEXT:    mffprwz r3, f4
566; CHECK-BE-NEXT:    xscvspdpn f4, vs3
567; CHECK-BE-NEXT:    xxsldwi vs3, vs3, vs3, 1
568; CHECK-BE-NEXT:    sldi r3, r3, 56
569; CHECK-BE-NEXT:    xscvdpsxws f4, f4
570; CHECK-BE-NEXT:    xscvspdpn f3, vs3
571; CHECK-BE-NEXT:    mtvsrd v3, r3
572; CHECK-BE-NEXT:    xscvdpsxws f3, f3
573; CHECK-BE-NEXT:    vmrghb v2, v3, v2
574; CHECK-BE-NEXT:    mffprwz r3, f4
575; CHECK-BE-NEXT:    sldi r3, r3, 56
576; CHECK-BE-NEXT:    mtvsrd v3, r3
577; CHECK-BE-NEXT:    mffprwz r3, f3
578; CHECK-BE-NEXT:    xxsldwi vs3, vs2, vs2, 3
579; CHECK-BE-NEXT:    sldi r3, r3, 56
580; CHECK-BE-NEXT:    xscvspdpn f3, vs3
581; CHECK-BE-NEXT:    mtvsrd v4, r3
582; CHECK-BE-NEXT:    xscvdpsxws f3, f3
583; CHECK-BE-NEXT:    vmrghb v3, v3, v4
584; CHECK-BE-NEXT:    vmrghh v2, v3, v2
585; CHECK-BE-NEXT:    mffprwz r3, f3
586; CHECK-BE-NEXT:    xxswapd vs3, vs2
587; CHECK-BE-NEXT:    sldi r3, r3, 56
588; CHECK-BE-NEXT:    xscvspdpn f3, vs3
589; CHECK-BE-NEXT:    mtvsrd v3, r3
590; CHECK-BE-NEXT:    xscvdpsxws f3, f3
591; CHECK-BE-NEXT:    mffprwz r3, f3
592; CHECK-BE-NEXT:    xscvspdpn f3, vs2
593; CHECK-BE-NEXT:    xxsldwi vs2, vs2, vs2, 1
594; CHECK-BE-NEXT:    sldi r3, r3, 56
595; CHECK-BE-NEXT:    xscvdpsxws f3, f3
596; CHECK-BE-NEXT:    xscvspdpn f2, vs2
597; CHECK-BE-NEXT:    mtvsrd v4, r3
598; CHECK-BE-NEXT:    xscvdpsxws f2, f2
599; CHECK-BE-NEXT:    vmrghb v3, v4, v3
600; CHECK-BE-NEXT:    mffprwz r3, f3
601; CHECK-BE-NEXT:    sldi r3, r3, 56
602; CHECK-BE-NEXT:    mtvsrd v4, r3
603; CHECK-BE-NEXT:    mffprwz r3, f2
604; CHECK-BE-NEXT:    xxsldwi vs2, vs1, vs1, 3
605; CHECK-BE-NEXT:    sldi r3, r3, 56
606; CHECK-BE-NEXT:    xscvspdpn f2, vs2
607; CHECK-BE-NEXT:    mtvsrd v5, r3
608; CHECK-BE-NEXT:    xscvdpsxws f2, f2
609; CHECK-BE-NEXT:    vmrghb v4, v4, v5
610; CHECK-BE-NEXT:    vmrghh v3, v4, v3
611; CHECK-BE-NEXT:    vmrghw v2, v3, v2
612; CHECK-BE-NEXT:    mffprwz r3, f2
613; CHECK-BE-NEXT:    xxswapd vs2, vs1
614; CHECK-BE-NEXT:    sldi r3, r3, 56
615; CHECK-BE-NEXT:    xscvspdpn f2, vs2
616; CHECK-BE-NEXT:    mtvsrd v3, r3
617; CHECK-BE-NEXT:    xscvdpsxws f2, f2
618; CHECK-BE-NEXT:    mffprwz r3, f2
619; CHECK-BE-NEXT:    xscvspdpn f2, vs1
620; CHECK-BE-NEXT:    xxsldwi vs1, vs1, vs1, 1
621; CHECK-BE-NEXT:    sldi r3, r3, 56
622; CHECK-BE-NEXT:    xscvdpsxws f2, f2
623; CHECK-BE-NEXT:    xscvspdpn f1, vs1
624; CHECK-BE-NEXT:    mtvsrd v4, r3
625; CHECK-BE-NEXT:    xscvdpsxws f1, f1
626; CHECK-BE-NEXT:    vmrghb v3, v4, v3
627; CHECK-BE-NEXT:    mffprwz r3, f2
628; CHECK-BE-NEXT:    sldi r3, r3, 56
629; CHECK-BE-NEXT:    mtvsrd v4, r3
630; CHECK-BE-NEXT:    mffprwz r3, f1
631; CHECK-BE-NEXT:    xxsldwi vs1, vs0, vs0, 3
632; CHECK-BE-NEXT:    sldi r3, r3, 56
633; CHECK-BE-NEXT:    xscvspdpn f1, vs1
634; CHECK-BE-NEXT:    mtvsrd v5, r3
635; CHECK-BE-NEXT:    xscvdpsxws f1, f1
636; CHECK-BE-NEXT:    vmrghb v4, v4, v5
637; CHECK-BE-NEXT:    vmrghh v3, v4, v3
638; CHECK-BE-NEXT:    mffprwz r3, f1
639; CHECK-BE-NEXT:    xxswapd vs1, vs0
640; CHECK-BE-NEXT:    sldi r3, r3, 56
641; CHECK-BE-NEXT:    xscvspdpn f1, vs1
642; CHECK-BE-NEXT:    mtvsrd v4, r3
643; CHECK-BE-NEXT:    xscvdpsxws f1, f1
644; CHECK-BE-NEXT:    mffprwz r3, f1
645; CHECK-BE-NEXT:    xscvspdpn f1, vs0
646; CHECK-BE-NEXT:    xxsldwi vs0, vs0, vs0, 1
647; CHECK-BE-NEXT:    sldi r3, r3, 56
648; CHECK-BE-NEXT:    xscvdpsxws f1, f1
649; CHECK-BE-NEXT:    xscvspdpn f0, vs0
650; CHECK-BE-NEXT:    mtvsrd v5, r3
651; CHECK-BE-NEXT:    xscvdpsxws f0, f0
652; CHECK-BE-NEXT:    vmrghb v4, v5, v4
653; CHECK-BE-NEXT:    mffprwz r3, f1
654; CHECK-BE-NEXT:    sldi r3, r3, 56
655; CHECK-BE-NEXT:    mtvsrd v5, r3
656; CHECK-BE-NEXT:    mffprwz r3, f0
657; CHECK-BE-NEXT:    sldi r3, r3, 56
658; CHECK-BE-NEXT:    mtvsrd v0, r3
659; CHECK-BE-NEXT:    vmrghb v5, v5, v0
660; CHECK-BE-NEXT:    vmrghh v4, v5, v4
661; CHECK-BE-NEXT:    vmrghw v3, v4, v3
662; CHECK-BE-NEXT:    xxmrghd v2, v3, v2
663; CHECK-BE-NEXT:    blr
664entry:
665  %a = load <16 x float>, <16 x float>* %0, align 64
666  %1 = fptoui <16 x float> %a to <16 x i8>
667  ret <16 x i8> %1
668}
669
670define i16 @test2elt_signed(i64 %a.coerce) local_unnamed_addr #0 {
671; CHECK-P8-LABEL: test2elt_signed:
672; CHECK-P8:       # %bb.0: # %entry
673; CHECK-P8-NEXT:    mtfprd f0, r3
674; CHECK-P8-NEXT:    xxswapd v2, vs0
675; CHECK-P8-NEXT:    xscvspdpn f0, vs0
676; CHECK-P8-NEXT:    xxsldwi vs1, v2, v2, 3
677; CHECK-P8-NEXT:    xscvspdpn f1, vs1
678; CHECK-P8-NEXT:    xscvdpsxws f0, f0
679; CHECK-P8-NEXT:    xscvdpsxws f1, f1
680; CHECK-P8-NEXT:    mffprwz r4, f0
681; CHECK-P8-NEXT:    mtvsrd v3, r4
682; CHECK-P8-NEXT:    mffprwz r3, f1
683; CHECK-P8-NEXT:    mtvsrd v2, r3
684; CHECK-P8-NEXT:    vmrghb v2, v3, v2
685; CHECK-P8-NEXT:    xxswapd vs0, v2
686; CHECK-P8-NEXT:    mffprd r3, f0
687; CHECK-P8-NEXT:    clrldi r3, r3, 48
688; CHECK-P8-NEXT:    sth r3, -2(r1)
689; CHECK-P8-NEXT:    lhz r3, -2(r1)
690; CHECK-P8-NEXT:    blr
691;
692; CHECK-P9-LABEL: test2elt_signed:
693; CHECK-P9:       # %bb.0: # %entry
694; CHECK-P9-NEXT:    mtfprd f0, r3
695; CHECK-P9-NEXT:    xxswapd v2, vs0
696; CHECK-P9-NEXT:    xscvspdpn f0, vs0
697; CHECK-P9-NEXT:    xxsldwi vs1, v2, v2, 3
698; CHECK-P9-NEXT:    xscvdpsxws f0, f0
699; CHECK-P9-NEXT:    xscvspdpn f1, vs1
700; CHECK-P9-NEXT:    xscvdpsxws f1, f1
701; CHECK-P9-NEXT:    mffprwz r3, f1
702; CHECK-P9-NEXT:    mtvsrd v2, r3
703; CHECK-P9-NEXT:    mffprwz r3, f0
704; CHECK-P9-NEXT:    mtvsrd v3, r3
705; CHECK-P9-NEXT:    addi r3, r1, -2
706; CHECK-P9-NEXT:    vmrghb v2, v3, v2
707; CHECK-P9-NEXT:    vsldoi v2, v2, v2, 8
708; CHECK-P9-NEXT:    stxsihx v2, 0, r3
709; CHECK-P9-NEXT:    lhz r3, -2(r1)
710; CHECK-P9-NEXT:    blr
711;
712; CHECK-BE-LABEL: test2elt_signed:
713; CHECK-BE:       # %bb.0: # %entry
714; CHECK-BE-NEXT:    mtfprd f0, r3
715; CHECK-BE-NEXT:    xscvspdpn f1, vs0
716; CHECK-BE-NEXT:    xxsldwi vs0, vs0, vs0, 1
717; CHECK-BE-NEXT:    xscvdpsxws f1, f1
718; CHECK-BE-NEXT:    xscvspdpn f0, vs0
719; CHECK-BE-NEXT:    xscvdpsxws f0, f0
720; CHECK-BE-NEXT:    mffprwz r3, f1
721; CHECK-BE-NEXT:    sldi r3, r3, 56
722; CHECK-BE-NEXT:    mtvsrd v2, r3
723; CHECK-BE-NEXT:    mffprwz r3, f0
724; CHECK-BE-NEXT:    sldi r3, r3, 56
725; CHECK-BE-NEXT:    mtvsrd v3, r3
726; CHECK-BE-NEXT:    addi r3, r1, -2
727; CHECK-BE-NEXT:    vmrghb v2, v2, v3
728; CHECK-BE-NEXT:    vsldoi v2, v2, v2, 10
729; CHECK-BE-NEXT:    stxsihx v2, 0, r3
730; CHECK-BE-NEXT:    lhz r3, -2(r1)
731; CHECK-BE-NEXT:    blr
732entry:
733  %0 = bitcast i64 %a.coerce to <2 x float>
734  %1 = fptosi <2 x float> %0 to <2 x i8>
735  %2 = bitcast <2 x i8> %1 to i16
736  ret i16 %2
737}
738
739define i32 @test4elt_signed(<4 x float> %a) local_unnamed_addr #1 {
740; CHECK-P8-LABEL: test4elt_signed:
741; CHECK-P8:       # %bb.0: # %entry
742; CHECK-P8-NEXT:    xxsldwi vs0, v2, v2, 3
743; CHECK-P8-NEXT:    xscvspdpn f1, v2
744; CHECK-P8-NEXT:    xxswapd vs2, v2
745; CHECK-P8-NEXT:    xxsldwi vs3, v2, v2, 1
746; CHECK-P8-NEXT:    xscvspdpn f0, vs0
747; CHECK-P8-NEXT:    xscvspdpn f2, vs2
748; CHECK-P8-NEXT:    xscvspdpn f3, vs3
749; CHECK-P8-NEXT:    xscvdpsxws f1, f1
750; CHECK-P8-NEXT:    xscvdpsxws f0, f0
751; CHECK-P8-NEXT:    xscvdpsxws f2, f2
752; CHECK-P8-NEXT:    xscvdpsxws f3, f3
753; CHECK-P8-NEXT:    mffprwz r3, f1
754; CHECK-P8-NEXT:    mtvsrd v2, r3
755; CHECK-P8-NEXT:    mffprwz r3, f0
756; CHECK-P8-NEXT:    mffprwz r4, f2
757; CHECK-P8-NEXT:    mtvsrd v3, r3
758; CHECK-P8-NEXT:    mffprwz r3, f3
759; CHECK-P8-NEXT:    mtvsrd v4, r4
760; CHECK-P8-NEXT:    mtvsrd v5, r3
761; CHECK-P8-NEXT:    vmrghb v3, v4, v3
762; CHECK-P8-NEXT:    vmrghb v2, v2, v5
763; CHECK-P8-NEXT:    vmrglh v2, v2, v3
764; CHECK-P8-NEXT:    xxswapd vs0, v2
765; CHECK-P8-NEXT:    mffprwz r3, f0
766; CHECK-P8-NEXT:    blr
767;
768; CHECK-P9-LABEL: test4elt_signed:
769; CHECK-P9:       # %bb.0: # %entry
770; CHECK-P9-NEXT:    xxsldwi vs0, v2, v2, 3
771; CHECK-P9-NEXT:    xscvspdpn f0, vs0
772; CHECK-P9-NEXT:    xscvdpsxws f0, f0
773; CHECK-P9-NEXT:    mffprwz r3, f0
774; CHECK-P9-NEXT:    xxswapd vs0, v2
775; CHECK-P9-NEXT:    mtvsrd v3, r3
776; CHECK-P9-NEXT:    xscvspdpn f0, vs0
777; CHECK-P9-NEXT:    xscvdpsxws f0, f0
778; CHECK-P9-NEXT:    mffprwz r3, f0
779; CHECK-P9-NEXT:    xscvspdpn f0, v2
780; CHECK-P9-NEXT:    mtvsrd v4, r3
781; CHECK-P9-NEXT:    xscvdpsxws f0, f0
782; CHECK-P9-NEXT:    vmrghb v3, v4, v3
783; CHECK-P9-NEXT:    mffprwz r3, f0
784; CHECK-P9-NEXT:    xxsldwi vs0, v2, v2, 1
785; CHECK-P9-NEXT:    mtvsrd v4, r3
786; CHECK-P9-NEXT:    xscvspdpn f0, vs0
787; CHECK-P9-NEXT:    xscvdpsxws f0, f0
788; CHECK-P9-NEXT:    mffprwz r3, f0
789; CHECK-P9-NEXT:    mtvsrd v2, r3
790; CHECK-P9-NEXT:    li r3, 0
791; CHECK-P9-NEXT:    vmrghb v2, v4, v2
792; CHECK-P9-NEXT:    vmrglh v2, v2, v3
793; CHECK-P9-NEXT:    vextuwrx r3, r3, v2
794; CHECK-P9-NEXT:    blr
795;
796; CHECK-BE-LABEL: test4elt_signed:
797; CHECK-BE:       # %bb.0: # %entry
798; CHECK-BE-NEXT:    xxsldwi vs0, v2, v2, 3
799; CHECK-BE-NEXT:    xscvspdpn f0, vs0
800; CHECK-BE-NEXT:    xscvdpsxws f0, f0
801; CHECK-BE-NEXT:    mffprwz r3, f0
802; CHECK-BE-NEXT:    xxswapd vs0, v2
803; CHECK-BE-NEXT:    sldi r3, r3, 56
804; CHECK-BE-NEXT:    xscvspdpn f0, vs0
805; CHECK-BE-NEXT:    mtvsrd v3, r3
806; CHECK-BE-NEXT:    xscvdpsxws f0, f0
807; CHECK-BE-NEXT:    mffprwz r3, f0
808; CHECK-BE-NEXT:    xscvspdpn f0, v2
809; CHECK-BE-NEXT:    sldi r3, r3, 56
810; CHECK-BE-NEXT:    xscvdpsxws f0, f0
811; CHECK-BE-NEXT:    mtvsrd v4, r3
812; CHECK-BE-NEXT:    vmrghb v3, v4, v3
813; CHECK-BE-NEXT:    mffprwz r3, f0
814; CHECK-BE-NEXT:    xxsldwi vs0, v2, v2, 1
815; CHECK-BE-NEXT:    sldi r3, r3, 56
816; CHECK-BE-NEXT:    xscvspdpn f0, vs0
817; CHECK-BE-NEXT:    mtvsrd v4, r3
818; CHECK-BE-NEXT:    xscvdpsxws f0, f0
819; CHECK-BE-NEXT:    mffprwz r3, f0
820; CHECK-BE-NEXT:    sldi r3, r3, 56
821; CHECK-BE-NEXT:    mtvsrd v2, r3
822; CHECK-BE-NEXT:    li r3, 0
823; CHECK-BE-NEXT:    vmrghb v2, v4, v2
824; CHECK-BE-NEXT:    vmrghh v2, v2, v3
825; CHECK-BE-NEXT:    vextuwlx r3, r3, v2
826; CHECK-BE-NEXT:    blr
827entry:
828  %0 = fptosi <4 x float> %a to <4 x i8>
829  %1 = bitcast <4 x i8> %0 to i32
830  ret i32 %1
831}
832
833define i64 @test8elt_signed(<8 x float>* nocapture readonly) local_unnamed_addr #2 {
834; CHECK-P8-LABEL: test8elt_signed:
835; CHECK-P8:       # %bb.0: # %entry
836; CHECK-P8-NEXT:    lvx v2, 0, r3
837; CHECK-P8-NEXT:    li r4, 16
838; CHECK-P8-NEXT:    lvx v3, r3, r4
839; CHECK-P8-NEXT:    xxsldwi vs0, v2, v2, 3
840; CHECK-P8-NEXT:    xxswapd vs1, v2
841; CHECK-P8-NEXT:    xscvspdpn f2, v2
842; CHECK-P8-NEXT:    xxsldwi vs4, v2, v2, 1
843; CHECK-P8-NEXT:    xxsldwi vs5, v3, v3, 3
844; CHECK-P8-NEXT:    xscvspdpn f3, v3
845; CHECK-P8-NEXT:    xscvspdpn f0, vs0
846; CHECK-P8-NEXT:    xscvspdpn f1, vs1
847; CHECK-P8-NEXT:    xscvspdpn f4, vs4
848; CHECK-P8-NEXT:    xscvspdpn f5, vs5
849; CHECK-P8-NEXT:    xscvdpsxws f2, f2
850; CHECK-P8-NEXT:    xscvdpsxws f3, f3
851; CHECK-P8-NEXT:    xscvdpsxws f0, f0
852; CHECK-P8-NEXT:    xscvdpsxws f1, f1
853; CHECK-P8-NEXT:    mffprwz r3, f0
854; CHECK-P8-NEXT:    xxswapd vs0, v3
855; CHECK-P8-NEXT:    mffprwz r4, f1
856; CHECK-P8-NEXT:    xxsldwi vs1, v3, v3, 1
857; CHECK-P8-NEXT:    mtvsrd v2, r3
858; CHECK-P8-NEXT:    xscvspdpn f0, vs0
859; CHECK-P8-NEXT:    mffprwz r3, f2
860; CHECK-P8-NEXT:    xscvdpsxws f2, f4
861; CHECK-P8-NEXT:    xscvspdpn f1, vs1
862; CHECK-P8-NEXT:    xscvdpsxws f4, f5
863; CHECK-P8-NEXT:    mtvsrd v4, r4
864; CHECK-P8-NEXT:    xscvdpsxws f0, f0
865; CHECK-P8-NEXT:    vmrghb v2, v4, v2
866; CHECK-P8-NEXT:    mffprwz r4, f2
867; CHECK-P8-NEXT:    xscvdpsxws f1, f1
868; CHECK-P8-NEXT:    mtvsrd v3, r3
869; CHECK-P8-NEXT:    mffprwz r3, f3
870; CHECK-P8-NEXT:    mtvsrd v4, r4
871; CHECK-P8-NEXT:    mffprwz r4, f0
872; CHECK-P8-NEXT:    vmrghb v3, v3, v4
873; CHECK-P8-NEXT:    mtvsrd v4, r3
874; CHECK-P8-NEXT:    mffprwz r3, f4
875; CHECK-P8-NEXT:    mtvsrd v0, r4
876; CHECK-P8-NEXT:    mtvsrd v5, r3
877; CHECK-P8-NEXT:    mffprwz r3, f1
878; CHECK-P8-NEXT:    vmrghb v5, v0, v5
879; CHECK-P8-NEXT:    mtvsrd v1, r3
880; CHECK-P8-NEXT:    vmrglh v2, v3, v2
881; CHECK-P8-NEXT:    vmrghb v4, v4, v1
882; CHECK-P8-NEXT:    vmrglh v3, v4, v5
883; CHECK-P8-NEXT:    vmrglw v2, v3, v2
884; CHECK-P8-NEXT:    xxswapd vs0, v2
885; CHECK-P8-NEXT:    mffprd r3, f0
886; CHECK-P8-NEXT:    blr
887;
888; CHECK-P9-LABEL: test8elt_signed:
889; CHECK-P9:       # %bb.0: # %entry
890; CHECK-P9-NEXT:    lxv vs1, 0(r3)
891; CHECK-P9-NEXT:    lxv vs0, 16(r3)
892; CHECK-P9-NEXT:    xxsldwi vs2, vs1, vs1, 3
893; CHECK-P9-NEXT:    xscvspdpn f2, vs2
894; CHECK-P9-NEXT:    xscvdpsxws f2, f2
895; CHECK-P9-NEXT:    mffprwz r3, f2
896; CHECK-P9-NEXT:    xxswapd vs2, vs1
897; CHECK-P9-NEXT:    mtvsrd v2, r3
898; CHECK-P9-NEXT:    xscvspdpn f2, vs2
899; CHECK-P9-NEXT:    xscvdpsxws f2, f2
900; CHECK-P9-NEXT:    mffprwz r3, f2
901; CHECK-P9-NEXT:    xscvspdpn f2, vs1
902; CHECK-P9-NEXT:    xxsldwi vs1, vs1, vs1, 1
903; CHECK-P9-NEXT:    mtvsrd v3, r3
904; CHECK-P9-NEXT:    xscvspdpn f1, vs1
905; CHECK-P9-NEXT:    xscvdpsxws f2, f2
906; CHECK-P9-NEXT:    vmrghb v2, v3, v2
907; CHECK-P9-NEXT:    xscvdpsxws f1, f1
908; CHECK-P9-NEXT:    mffprwz r3, f2
909; CHECK-P9-NEXT:    mtvsrd v3, r3
910; CHECK-P9-NEXT:    mffprwz r3, f1
911; CHECK-P9-NEXT:    xxsldwi vs1, vs0, vs0, 3
912; CHECK-P9-NEXT:    mtvsrd v4, r3
913; CHECK-P9-NEXT:    xscvspdpn f1, vs1
914; CHECK-P9-NEXT:    vmrghb v3, v3, v4
915; CHECK-P9-NEXT:    xscvdpsxws f1, f1
916; CHECK-P9-NEXT:    vmrglh v2, v3, v2
917; CHECK-P9-NEXT:    mffprwz r3, f1
918; CHECK-P9-NEXT:    xxswapd vs1, vs0
919; CHECK-P9-NEXT:    mtvsrd v3, r3
920; CHECK-P9-NEXT:    xscvspdpn f1, vs1
921; CHECK-P9-NEXT:    xscvdpsxws f1, f1
922; CHECK-P9-NEXT:    mffprwz r3, f1
923; CHECK-P9-NEXT:    xscvspdpn f1, vs0
924; CHECK-P9-NEXT:    xxsldwi vs0, vs0, vs0, 1
925; CHECK-P9-NEXT:    mtvsrd v4, r3
926; CHECK-P9-NEXT:    xscvspdpn f0, vs0
927; CHECK-P9-NEXT:    xscvdpsxws f1, f1
928; CHECK-P9-NEXT:    vmrghb v3, v4, v3
929; CHECK-P9-NEXT:    xscvdpsxws f0, f0
930; CHECK-P9-NEXT:    mffprwz r3, f1
931; CHECK-P9-NEXT:    mtvsrd v4, r3
932; CHECK-P9-NEXT:    mffprwz r3, f0
933; CHECK-P9-NEXT:    mtvsrd v5, r3
934; CHECK-P9-NEXT:    vmrghb v4, v4, v5
935; CHECK-P9-NEXT:    vmrglh v3, v4, v3
936; CHECK-P9-NEXT:    vmrglw v2, v3, v2
937; CHECK-P9-NEXT:    mfvsrld r3, v2
938; CHECK-P9-NEXT:    blr
939;
940; CHECK-BE-LABEL: test8elt_signed:
941; CHECK-BE:       # %bb.0: # %entry
942; CHECK-BE-NEXT:    lxv vs1, 16(r3)
943; CHECK-BE-NEXT:    lxv vs0, 0(r3)
944; CHECK-BE-NEXT:    xxsldwi vs2, vs1, vs1, 3
945; CHECK-BE-NEXT:    xscvspdpn f2, vs2
946; CHECK-BE-NEXT:    xscvdpsxws f2, f2
947; CHECK-BE-NEXT:    mffprwz r3, f2
948; CHECK-BE-NEXT:    xxswapd vs2, vs1
949; CHECK-BE-NEXT:    sldi r3, r3, 56
950; CHECK-BE-NEXT:    xscvspdpn f2, vs2
951; CHECK-BE-NEXT:    mtvsrd v2, r3
952; CHECK-BE-NEXT:    xscvdpsxws f2, f2
953; CHECK-BE-NEXT:    mffprwz r3, f2
954; CHECK-BE-NEXT:    xscvspdpn f2, vs1
955; CHECK-BE-NEXT:    xxsldwi vs1, vs1, vs1, 1
956; CHECK-BE-NEXT:    sldi r3, r3, 56
957; CHECK-BE-NEXT:    xscvdpsxws f2, f2
958; CHECK-BE-NEXT:    xscvspdpn f1, vs1
959; CHECK-BE-NEXT:    mtvsrd v3, r3
960; CHECK-BE-NEXT:    xscvdpsxws f1, f1
961; CHECK-BE-NEXT:    vmrghb v2, v3, v2
962; CHECK-BE-NEXT:    mffprwz r3, f2
963; CHECK-BE-NEXT:    sldi r3, r3, 56
964; CHECK-BE-NEXT:    mtvsrd v3, r3
965; CHECK-BE-NEXT:    mffprwz r3, f1
966; CHECK-BE-NEXT:    xxsldwi vs1, vs0, vs0, 3
967; CHECK-BE-NEXT:    sldi r3, r3, 56
968; CHECK-BE-NEXT:    xscvspdpn f1, vs1
969; CHECK-BE-NEXT:    mtvsrd v4, r3
970; CHECK-BE-NEXT:    xscvdpsxws f1, f1
971; CHECK-BE-NEXT:    vmrghb v3, v3, v4
972; CHECK-BE-NEXT:    vmrghh v2, v3, v2
973; CHECK-BE-NEXT:    mffprwz r3, f1
974; CHECK-BE-NEXT:    xxswapd vs1, vs0
975; CHECK-BE-NEXT:    sldi r3, r3, 56
976; CHECK-BE-NEXT:    xscvspdpn f1, vs1
977; CHECK-BE-NEXT:    mtvsrd v3, r3
978; CHECK-BE-NEXT:    xscvdpsxws f1, f1
979; CHECK-BE-NEXT:    mffprwz r3, f1
980; CHECK-BE-NEXT:    xscvspdpn f1, vs0
981; CHECK-BE-NEXT:    xxsldwi vs0, vs0, vs0, 1
982; CHECK-BE-NEXT:    sldi r3, r3, 56
983; CHECK-BE-NEXT:    xscvdpsxws f1, f1
984; CHECK-BE-NEXT:    xscvspdpn f0, vs0
985; CHECK-BE-NEXT:    mtvsrd v4, r3
986; CHECK-BE-NEXT:    xscvdpsxws f0, f0
987; CHECK-BE-NEXT:    vmrghb v3, v4, v3
988; CHECK-BE-NEXT:    mffprwz r3, f1
989; CHECK-BE-NEXT:    sldi r3, r3, 56
990; CHECK-BE-NEXT:    mtvsrd v4, r3
991; CHECK-BE-NEXT:    mffprwz r3, f0
992; CHECK-BE-NEXT:    sldi r3, r3, 56
993; CHECK-BE-NEXT:    mtvsrd v5, r3
994; CHECK-BE-NEXT:    vmrghb v4, v4, v5
995; CHECK-BE-NEXT:    vmrghh v3, v4, v3
996; CHECK-BE-NEXT:    vmrghw v2, v3, v2
997; CHECK-BE-NEXT:    mfvsrd r3, v2
998; CHECK-BE-NEXT:    blr
999entry:
1000  %a = load <8 x float>, <8 x float>* %0, align 32
1001  %1 = fptosi <8 x float> %a to <8 x i8>
1002  %2 = bitcast <8 x i8> %1 to i64
1003  ret i64 %2
1004}
1005
1006define <16 x i8> @test16elt_signed(<16 x float>* nocapture readonly) local_unnamed_addr #3 {
1007; CHECK-P8-LABEL: test16elt_signed:
1008; CHECK-P8:       # %bb.0: # %entry
1009; CHECK-P8-NEXT:    lvx v4, 0, r3
1010; CHECK-P8-NEXT:    li r4, 16
1011; CHECK-P8-NEXT:    li r5, 32
1012; CHECK-P8-NEXT:    lvx v3, r3, r4
1013; CHECK-P8-NEXT:    lvx v2, r3, r5
1014; CHECK-P8-NEXT:    xxsldwi vs0, v4, v4, 3
1015; CHECK-P8-NEXT:    xxswapd vs2, v4
1016; CHECK-P8-NEXT:    xxsldwi vs4, v4, v4, 1
1017; CHECK-P8-NEXT:    xscvspdpn f1, v4
1018; CHECK-P8-NEXT:    xscvspdpn f3, v3
1019; CHECK-P8-NEXT:    xxsldwi vs6, v3, v3, 3
1020; CHECK-P8-NEXT:    xscvspdpn f0, vs0
1021; CHECK-P8-NEXT:    xxswapd vs7, v3
1022; CHECK-P8-NEXT:    xscvspdpn f2, vs2
1023; CHECK-P8-NEXT:    xxsldwi vs8, v3, v3, 1
1024; CHECK-P8-NEXT:    xscvspdpn f4, vs4
1025; CHECK-P8-NEXT:    xxsldwi vs9, v2, v2, 3
1026; CHECK-P8-NEXT:    xscvspdpn f6, vs6
1027; CHECK-P8-NEXT:    xscvdpsxws f1, f1
1028; CHECK-P8-NEXT:    xscvspdpn f7, vs7
1029; CHECK-P8-NEXT:    xscvdpsxws f0, f0
1030; CHECK-P8-NEXT:    xscvdpsxws f2, f2
1031; CHECK-P8-NEXT:    xscvdpsxws f4, f4
1032; CHECK-P8-NEXT:    xscvspdpn f8, vs8
1033; CHECK-P8-NEXT:    xscvdpsxws f3, f3
1034; CHECK-P8-NEXT:    xscvspdpn f9, vs9
1035; CHECK-P8-NEXT:    mffprwz r4, f0
1036; CHECK-P8-NEXT:    xxswapd vs0, v2
1037; CHECK-P8-NEXT:    mffprwz r5, f2
1038; CHECK-P8-NEXT:    mtvsrd v3, r4
1039; CHECK-P8-NEXT:    xscvspdpn f0, vs0
1040; CHECK-P8-NEXT:    mffprwz r4, f1
1041; CHECK-P8-NEXT:    mtvsrd v4, r5
1042; CHECK-P8-NEXT:    mffprwz r5, f4
1043; CHECK-P8-NEXT:    xscvdpsxws f1, f6
1044; CHECK-P8-NEXT:    vmrghb v3, v4, v3
1045; CHECK-P8-NEXT:    mtvsrd v4, r5
1046; CHECK-P8-NEXT:    mffprwz r5, f3
1047; CHECK-P8-NEXT:    xscvdpsxws f3, f7
1048; CHECK-P8-NEXT:    xscvdpsxws f4, f8
1049; CHECK-P8-NEXT:    xscvdpsxws f0, f0
1050; CHECK-P8-NEXT:    mtvsrd v5, r4
1051; CHECK-P8-NEXT:    li r4, 48
1052; CHECK-P8-NEXT:    lvx v0, r3, r4
1053; CHECK-P8-NEXT:    mffprwz r3, f1
1054; CHECK-P8-NEXT:    xxsldwi vs1, v2, v2, 1
1055; CHECK-P8-NEXT:    xscvspdpn f5, v2
1056; CHECK-P8-NEXT:    mffprwz r4, f3
1057; CHECK-P8-NEXT:    xxsldwi vs3, v0, v0, 3
1058; CHECK-P8-NEXT:    mtvsrd v1, r3
1059; CHECK-P8-NEXT:    mffprwz r3, f4
1060; CHECK-P8-NEXT:    xxswapd vs4, v0
1061; CHECK-P8-NEXT:    xscvspdpn f1, vs1
1062; CHECK-P8-NEXT:    mtvsrd v7, r3
1063; CHECK-P8-NEXT:    mffprwz r3, f0
1064; CHECK-P8-NEXT:    xxsldwi vs0, v0, v0, 1
1065; CHECK-P8-NEXT:    xscvspdpn f2, v0
1066; CHECK-P8-NEXT:    xscvspdpn f3, vs3
1067; CHECK-P8-NEXT:    xscvdpsxws f6, f9
1068; CHECK-P8-NEXT:    xscvspdpn f4, vs4
1069; CHECK-P8-NEXT:    xscvspdpn f0, vs0
1070; CHECK-P8-NEXT:    xscvdpsxws f5, f5
1071; CHECK-P8-NEXT:    xscvdpsxws f1, f1
1072; CHECK-P8-NEXT:    xscvdpsxws f2, f2
1073; CHECK-P8-NEXT:    xscvdpsxws f3, f3
1074; CHECK-P8-NEXT:    mtvsrd v6, r4
1075; CHECK-P8-NEXT:    mffprwz r4, f6
1076; CHECK-P8-NEXT:    xscvdpsxws f4, f4
1077; CHECK-P8-NEXT:    xscvdpsxws f0, f0
1078; CHECK-P8-NEXT:    vmrghb v2, v6, v1
1079; CHECK-P8-NEXT:    mtvsrd v1, r4
1080; CHECK-P8-NEXT:    mffprwz r4, f5
1081; CHECK-P8-NEXT:    mtvsrd v6, r3
1082; CHECK-P8-NEXT:    mffprwz r3, f1
1083; CHECK-P8-NEXT:    vmrghb v4, v5, v4
1084; CHECK-P8-NEXT:    mtvsrd v5, r5
1085; CHECK-P8-NEXT:    vmrghb v0, v6, v1
1086; CHECK-P8-NEXT:    mtvsrd v1, r4
1087; CHECK-P8-NEXT:    mffprwz r4, f2
1088; CHECK-P8-NEXT:    mtvsrd v6, r3
1089; CHECK-P8-NEXT:    mffprwz r3, f3
1090; CHECK-P8-NEXT:    vmrghb v5, v5, v7
1091; CHECK-P8-NEXT:    vmrghb v1, v1, v6
1092; CHECK-P8-NEXT:    mtvsrd v6, r4
1093; CHECK-P8-NEXT:    mffprwz r4, f4
1094; CHECK-P8-NEXT:    mtvsrd v7, r3
1095; CHECK-P8-NEXT:    mffprwz r3, f0
1096; CHECK-P8-NEXT:    mtvsrd v8, r4
1097; CHECK-P8-NEXT:    mtvsrd v9, r3
1098; CHECK-P8-NEXT:    vmrghb v7, v8, v7
1099; CHECK-P8-NEXT:    vmrghb v6, v6, v9
1100; CHECK-P8-NEXT:    vmrglh v3, v4, v3
1101; CHECK-P8-NEXT:    vmrglh v2, v5, v2
1102; CHECK-P8-NEXT:    vmrglh v4, v1, v0
1103; CHECK-P8-NEXT:    vmrglh v5, v6, v7
1104; CHECK-P8-NEXT:    vmrglw v2, v2, v3
1105; CHECK-P8-NEXT:    vmrglw v3, v5, v4
1106; CHECK-P8-NEXT:    xxmrgld v2, v3, v2
1107; CHECK-P8-NEXT:    blr
1108;
1109; CHECK-P9-LABEL: test16elt_signed:
1110; CHECK-P9:       # %bb.0: # %entry
1111; CHECK-P9-NEXT:    lxv vs3, 0(r3)
1112; CHECK-P9-NEXT:    lxv vs0, 48(r3)
1113; CHECK-P9-NEXT:    lxv vs1, 32(r3)
1114; CHECK-P9-NEXT:    lxv vs2, 16(r3)
1115; CHECK-P9-NEXT:    xxsldwi vs4, vs3, vs3, 3
1116; CHECK-P9-NEXT:    xscvspdpn f4, vs4
1117; CHECK-P9-NEXT:    xscvdpsxws f4, f4
1118; CHECK-P9-NEXT:    mffprwz r3, f4
1119; CHECK-P9-NEXT:    xxswapd vs4, vs3
1120; CHECK-P9-NEXT:    mtvsrd v2, r3
1121; CHECK-P9-NEXT:    xscvspdpn f4, vs4
1122; CHECK-P9-NEXT:    xscvdpsxws f4, f4
1123; CHECK-P9-NEXT:    mffprwz r3, f4
1124; CHECK-P9-NEXT:    xscvspdpn f4, vs3
1125; CHECK-P9-NEXT:    xxsldwi vs3, vs3, vs3, 1
1126; CHECK-P9-NEXT:    mtvsrd v3, r3
1127; CHECK-P9-NEXT:    xscvspdpn f3, vs3
1128; CHECK-P9-NEXT:    xscvdpsxws f4, f4
1129; CHECK-P9-NEXT:    vmrghb v2, v3, v2
1130; CHECK-P9-NEXT:    xscvdpsxws f3, f3
1131; CHECK-P9-NEXT:    mffprwz r3, f4
1132; CHECK-P9-NEXT:    mtvsrd v3, r3
1133; CHECK-P9-NEXT:    mffprwz r3, f3
1134; CHECK-P9-NEXT:    xxsldwi vs3, vs2, vs2, 3
1135; CHECK-P9-NEXT:    mtvsrd v4, r3
1136; CHECK-P9-NEXT:    xscvspdpn f3, vs3
1137; CHECK-P9-NEXT:    vmrghb v3, v3, v4
1138; CHECK-P9-NEXT:    xscvdpsxws f3, f3
1139; CHECK-P9-NEXT:    vmrglh v2, v3, v2
1140; CHECK-P9-NEXT:    mffprwz r3, f3
1141; CHECK-P9-NEXT:    xxswapd vs3, vs2
1142; CHECK-P9-NEXT:    mtvsrd v3, r3
1143; CHECK-P9-NEXT:    xscvspdpn f3, vs3
1144; CHECK-P9-NEXT:    xscvdpsxws f3, f3
1145; CHECK-P9-NEXT:    mffprwz r3, f3
1146; CHECK-P9-NEXT:    xscvspdpn f3, vs2
1147; CHECK-P9-NEXT:    xxsldwi vs2, vs2, vs2, 1
1148; CHECK-P9-NEXT:    mtvsrd v4, r3
1149; CHECK-P9-NEXT:    xscvspdpn f2, vs2
1150; CHECK-P9-NEXT:    xscvdpsxws f3, f3
1151; CHECK-P9-NEXT:    vmrghb v3, v4, v3
1152; CHECK-P9-NEXT:    xscvdpsxws f2, f2
1153; CHECK-P9-NEXT:    mffprwz r3, f3
1154; CHECK-P9-NEXT:    mtvsrd v4, r3
1155; CHECK-P9-NEXT:    mffprwz r3, f2
1156; CHECK-P9-NEXT:    xxsldwi vs2, vs1, vs1, 3
1157; CHECK-P9-NEXT:    mtvsrd v5, r3
1158; CHECK-P9-NEXT:    xscvspdpn f2, vs2
1159; CHECK-P9-NEXT:    vmrghb v4, v4, v5
1160; CHECK-P9-NEXT:    xscvdpsxws f2, f2
1161; CHECK-P9-NEXT:    vmrglh v3, v4, v3
1162; CHECK-P9-NEXT:    vmrglw v2, v3, v2
1163; CHECK-P9-NEXT:    mffprwz r3, f2
1164; CHECK-P9-NEXT:    xxswapd vs2, vs1
1165; CHECK-P9-NEXT:    mtvsrd v3, r3
1166; CHECK-P9-NEXT:    xscvspdpn f2, vs2
1167; CHECK-P9-NEXT:    xscvdpsxws f2, f2
1168; CHECK-P9-NEXT:    mffprwz r3, f2
1169; CHECK-P9-NEXT:    xscvspdpn f2, vs1
1170; CHECK-P9-NEXT:    xxsldwi vs1, vs1, vs1, 1
1171; CHECK-P9-NEXT:    mtvsrd v4, r3
1172; CHECK-P9-NEXT:    xscvspdpn f1, vs1
1173; CHECK-P9-NEXT:    xscvdpsxws f2, f2
1174; CHECK-P9-NEXT:    vmrghb v3, v4, v3
1175; CHECK-P9-NEXT:    xscvdpsxws f1, f1
1176; CHECK-P9-NEXT:    mffprwz r3, f2
1177; CHECK-P9-NEXT:    mtvsrd v4, r3
1178; CHECK-P9-NEXT:    mffprwz r3, f1
1179; CHECK-P9-NEXT:    xxsldwi vs1, vs0, vs0, 3
1180; CHECK-P9-NEXT:    mtvsrd v5, r3
1181; CHECK-P9-NEXT:    xscvspdpn f1, vs1
1182; CHECK-P9-NEXT:    vmrghb v4, v4, v5
1183; CHECK-P9-NEXT:    xscvdpsxws f1, f1
1184; CHECK-P9-NEXT:    vmrglh v3, v4, v3
1185; CHECK-P9-NEXT:    mffprwz r3, f1
1186; CHECK-P9-NEXT:    xxswapd vs1, vs0
1187; CHECK-P9-NEXT:    mtvsrd v4, r3
1188; CHECK-P9-NEXT:    xscvspdpn f1, vs1
1189; CHECK-P9-NEXT:    xscvdpsxws f1, f1
1190; CHECK-P9-NEXT:    mffprwz r3, f1
1191; CHECK-P9-NEXT:    xscvspdpn f1, vs0
1192; CHECK-P9-NEXT:    xxsldwi vs0, vs0, vs0, 1
1193; CHECK-P9-NEXT:    mtvsrd v5, r3
1194; CHECK-P9-NEXT:    xscvspdpn f0, vs0
1195; CHECK-P9-NEXT:    xscvdpsxws f1, f1
1196; CHECK-P9-NEXT:    vmrghb v4, v5, v4
1197; CHECK-P9-NEXT:    xscvdpsxws f0, f0
1198; CHECK-P9-NEXT:    mffprwz r3, f1
1199; CHECK-P9-NEXT:    mtvsrd v5, r3
1200; CHECK-P9-NEXT:    mffprwz r3, f0
1201; CHECK-P9-NEXT:    mtvsrd v0, r3
1202; CHECK-P9-NEXT:    vmrghb v5, v5, v0
1203; CHECK-P9-NEXT:    vmrglh v4, v5, v4
1204; CHECK-P9-NEXT:    vmrglw v3, v4, v3
1205; CHECK-P9-NEXT:    xxmrgld v2, v3, v2
1206; CHECK-P9-NEXT:    blr
1207;
1208; CHECK-BE-LABEL: test16elt_signed:
1209; CHECK-BE:       # %bb.0: # %entry
1210; CHECK-BE-NEXT:    lxv vs3, 48(r3)
1211; CHECK-BE-NEXT:    lxv vs0, 0(r3)
1212; CHECK-BE-NEXT:    lxv vs1, 16(r3)
1213; CHECK-BE-NEXT:    lxv vs2, 32(r3)
1214; CHECK-BE-NEXT:    xxsldwi vs4, vs3, vs3, 3
1215; CHECK-BE-NEXT:    xscvspdpn f4, vs4
1216; CHECK-BE-NEXT:    xscvdpsxws f4, f4
1217; CHECK-BE-NEXT:    mffprwz r3, f4
1218; CHECK-BE-NEXT:    xxswapd vs4, vs3
1219; CHECK-BE-NEXT:    sldi r3, r3, 56
1220; CHECK-BE-NEXT:    xscvspdpn f4, vs4
1221; CHECK-BE-NEXT:    mtvsrd v2, r3
1222; CHECK-BE-NEXT:    xscvdpsxws f4, f4
1223; CHECK-BE-NEXT:    mffprwz r3, f4
1224; CHECK-BE-NEXT:    xscvspdpn f4, vs3
1225; CHECK-BE-NEXT:    xxsldwi vs3, vs3, vs3, 1
1226; CHECK-BE-NEXT:    sldi r3, r3, 56
1227; CHECK-BE-NEXT:    xscvdpsxws f4, f4
1228; CHECK-BE-NEXT:    xscvspdpn f3, vs3
1229; CHECK-BE-NEXT:    mtvsrd v3, r3
1230; CHECK-BE-NEXT:    xscvdpsxws f3, f3
1231; CHECK-BE-NEXT:    vmrghb v2, v3, v2
1232; CHECK-BE-NEXT:    mffprwz r3, f4
1233; CHECK-BE-NEXT:    sldi r3, r3, 56
1234; CHECK-BE-NEXT:    mtvsrd v3, r3
1235; CHECK-BE-NEXT:    mffprwz r3, f3
1236; CHECK-BE-NEXT:    xxsldwi vs3, vs2, vs2, 3
1237; CHECK-BE-NEXT:    sldi r3, r3, 56
1238; CHECK-BE-NEXT:    xscvspdpn f3, vs3
1239; CHECK-BE-NEXT:    mtvsrd v4, r3
1240; CHECK-BE-NEXT:    xscvdpsxws f3, f3
1241; CHECK-BE-NEXT:    vmrghb v3, v3, v4
1242; CHECK-BE-NEXT:    vmrghh v2, v3, v2
1243; CHECK-BE-NEXT:    mffprwz r3, f3
1244; CHECK-BE-NEXT:    xxswapd vs3, vs2
1245; CHECK-BE-NEXT:    sldi r3, r3, 56
1246; CHECK-BE-NEXT:    xscvspdpn f3, vs3
1247; CHECK-BE-NEXT:    mtvsrd v3, r3
1248; CHECK-BE-NEXT:    xscvdpsxws f3, f3
1249; CHECK-BE-NEXT:    mffprwz r3, f3
1250; CHECK-BE-NEXT:    xscvspdpn f3, vs2
1251; CHECK-BE-NEXT:    xxsldwi vs2, vs2, vs2, 1
1252; CHECK-BE-NEXT:    sldi r3, r3, 56
1253; CHECK-BE-NEXT:    xscvdpsxws f3, f3
1254; CHECK-BE-NEXT:    xscvspdpn f2, vs2
1255; CHECK-BE-NEXT:    mtvsrd v4, r3
1256; CHECK-BE-NEXT:    xscvdpsxws f2, f2
1257; CHECK-BE-NEXT:    vmrghb v3, v4, v3
1258; CHECK-BE-NEXT:    mffprwz r3, f3
1259; CHECK-BE-NEXT:    sldi r3, r3, 56
1260; CHECK-BE-NEXT:    mtvsrd v4, r3
1261; CHECK-BE-NEXT:    mffprwz r3, f2
1262; CHECK-BE-NEXT:    xxsldwi vs2, vs1, vs1, 3
1263; CHECK-BE-NEXT:    sldi r3, r3, 56
1264; CHECK-BE-NEXT:    xscvspdpn f2, vs2
1265; CHECK-BE-NEXT:    mtvsrd v5, r3
1266; CHECK-BE-NEXT:    xscvdpsxws f2, f2
1267; CHECK-BE-NEXT:    vmrghb v4, v4, v5
1268; CHECK-BE-NEXT:    vmrghh v3, v4, v3
1269; CHECK-BE-NEXT:    vmrghw v2, v3, v2
1270; CHECK-BE-NEXT:    mffprwz r3, f2
1271; CHECK-BE-NEXT:    xxswapd vs2, vs1
1272; CHECK-BE-NEXT:    sldi r3, r3, 56
1273; CHECK-BE-NEXT:    xscvspdpn f2, vs2
1274; CHECK-BE-NEXT:    mtvsrd v3, r3
1275; CHECK-BE-NEXT:    xscvdpsxws f2, f2
1276; CHECK-BE-NEXT:    mffprwz r3, f2
1277; CHECK-BE-NEXT:    xscvspdpn f2, vs1
1278; CHECK-BE-NEXT:    xxsldwi vs1, vs1, vs1, 1
1279; CHECK-BE-NEXT:    sldi r3, r3, 56
1280; CHECK-BE-NEXT:    xscvdpsxws f2, f2
1281; CHECK-BE-NEXT:    xscvspdpn f1, vs1
1282; CHECK-BE-NEXT:    mtvsrd v4, r3
1283; CHECK-BE-NEXT:    xscvdpsxws f1, f1
1284; CHECK-BE-NEXT:    vmrghb v3, v4, v3
1285; CHECK-BE-NEXT:    mffprwz r3, f2
1286; CHECK-BE-NEXT:    sldi r3, r3, 56
1287; CHECK-BE-NEXT:    mtvsrd v4, r3
1288; CHECK-BE-NEXT:    mffprwz r3, f1
1289; CHECK-BE-NEXT:    xxsldwi vs1, vs0, vs0, 3
1290; CHECK-BE-NEXT:    sldi r3, r3, 56
1291; CHECK-BE-NEXT:    xscvspdpn f1, vs1
1292; CHECK-BE-NEXT:    mtvsrd v5, r3
1293; CHECK-BE-NEXT:    xscvdpsxws f1, f1
1294; CHECK-BE-NEXT:    vmrghb v4, v4, v5
1295; CHECK-BE-NEXT:    vmrghh v3, v4, v3
1296; CHECK-BE-NEXT:    mffprwz r3, f1
1297; CHECK-BE-NEXT:    xxswapd vs1, vs0
1298; CHECK-BE-NEXT:    sldi r3, r3, 56
1299; CHECK-BE-NEXT:    xscvspdpn f1, vs1
1300; CHECK-BE-NEXT:    mtvsrd v4, r3
1301; CHECK-BE-NEXT:    xscvdpsxws f1, f1
1302; CHECK-BE-NEXT:    mffprwz r3, f1
1303; CHECK-BE-NEXT:    xscvspdpn f1, vs0
1304; CHECK-BE-NEXT:    xxsldwi vs0, vs0, vs0, 1
1305; CHECK-BE-NEXT:    sldi r3, r3, 56
1306; CHECK-BE-NEXT:    xscvdpsxws f1, f1
1307; CHECK-BE-NEXT:    xscvspdpn f0, vs0
1308; CHECK-BE-NEXT:    mtvsrd v5, r3
1309; CHECK-BE-NEXT:    xscvdpsxws f0, f0
1310; CHECK-BE-NEXT:    vmrghb v4, v5, v4
1311; CHECK-BE-NEXT:    mffprwz r3, f1
1312; CHECK-BE-NEXT:    sldi r3, r3, 56
1313; CHECK-BE-NEXT:    mtvsrd v5, r3
1314; CHECK-BE-NEXT:    mffprwz r3, f0
1315; CHECK-BE-NEXT:    sldi r3, r3, 56
1316; CHECK-BE-NEXT:    mtvsrd v0, r3
1317; CHECK-BE-NEXT:    vmrghb v5, v5, v0
1318; CHECK-BE-NEXT:    vmrghh v4, v5, v4
1319; CHECK-BE-NEXT:    vmrghw v3, v4, v3
1320; CHECK-BE-NEXT:    xxmrghd v2, v3, v2
1321; CHECK-BE-NEXT:    blr
1322entry:
1323  %a = load <16 x float>, <16 x float>* %0, align 64
1324  %1 = fptosi <16 x float> %a to <16 x i8>
1325  ret <16 x i8> %1
1326}
1327