1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -mcpu=pwr8 -mattr=+vsx -ppc-vsr-nums-as-vr \
3; RUN:   -ppc-asm-full-reg-names -mtriple=powerpc64le-unknown-linux-gnu < %s \
4; RUN:   | FileCheck %s
5
6; RUN: llc -verify-machineinstrs -mcpu=pwr9 -mattr=-power9-vector -ppc-vsr-nums-as-vr \
7; RUN:   -ppc-asm-full-reg-names -mtriple=powerpc64le-unknown-linux-gnu < %s \
8; RUN:   | FileCheck --check-prefix=CHECK-P9-VECTOR %s
9
10; RUN: llc -verify-machineinstrs -mcpu=pwr9 -ppc-vsr-nums-as-vr -ppc-asm-full-reg-names \
11; RUN:   -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s \
12; RUN:   --check-prefix=CHECK-P9 --implicit-check-not xxswapd
13
14define <2 x double> @testi0(<2 x double>* %p1, double* %p2) {
15; CHECK-LABEL: testi0:
16; CHECK:       # %bb.0:
17; CHECK-NEXT:    lxvd2x vs0, 0, r3
18; CHECK-NEXT:    lfdx f1, 0, r4
19; CHECK-NEXT:    xxswapd vs0, vs0
20; CHECK-NEXT:    xxspltd vs1, vs1, 0
21; CHECK-NEXT:    xxpermdi v2, vs0, vs1, 1
22; CHECK-NEXT:    blr
23;
24; CHECK-P9-VECTOR-LABEL: testi0:
25; CHECK-P9-VECTOR:       # %bb.0:
26; CHECK-P9-VECTOR-NEXT:    lxvd2x vs0, 0, r3
27; CHECK-P9-VECTOR-NEXT:    lfdx f1, 0, r4
28; CHECK-P9-VECTOR-NEXT:    xxspltd vs1, vs1, 0
29; CHECK-P9-VECTOR-NEXT:    xxswapd vs0, vs0
30; CHECK-P9-VECTOR-NEXT:    xxpermdi v2, vs0, vs1, 1
31; CHECK-P9-VECTOR-NEXT:    blr
32;
33; CHECK-P9-LABEL: testi0:
34; CHECK-P9:       # %bb.0:
35; CHECK-P9-NEXT:    lfd f1, 0(r4)
36; CHECK-P9-NEXT:    lxv vs0, 0(r3)
37; CHECK-P9-NEXT:    xxswapd vs1, f1
38; CHECK-P9-NEXT:    xxpermdi v2, vs0, vs1, 1
39; CHECK-P9-NEXT:    blr
40  %v = load <2 x double>, <2 x double>* %p1
41  %s = load double, double* %p2
42  %r = insertelement <2 x double> %v, double %s, i32 0
43  ret <2 x double> %r
44
45
46}
47
48define <2 x double> @testi1(<2 x double>* %p1, double* %p2) {
49; CHECK-LABEL: testi1:
50; CHECK:       # %bb.0:
51; CHECK-NEXT:    lxvd2x vs0, 0, r3
52; CHECK-NEXT:    lfdx f1, 0, r4
53; CHECK-NEXT:    xxswapd vs0, vs0
54; CHECK-NEXT:    xxspltd vs1, vs1, 0
55; CHECK-NEXT:    xxmrgld v2, vs1, vs0
56; CHECK-NEXT:    blr
57;
58; CHECK-P9-VECTOR-LABEL: testi1:
59; CHECK-P9-VECTOR:       # %bb.0:
60; CHECK-P9-VECTOR-NEXT:    lxvd2x vs0, 0, r3
61; CHECK-P9-VECTOR-NEXT:    lfdx f1, 0, r4
62; CHECK-P9-VECTOR-NEXT:    xxspltd vs1, vs1, 0
63; CHECK-P9-VECTOR-NEXT:    xxswapd vs0, vs0
64; CHECK-P9-VECTOR-NEXT:    xxmrgld v2, vs1, vs0
65; CHECK-P9-VECTOR-NEXT:    blr
66;
67; CHECK-P9-LABEL: testi1:
68; CHECK-P9:       # %bb.0:
69; CHECK-P9-NEXT:    lfd f1, 0(r4)
70; CHECK-P9-NEXT:    lxv vs0, 0(r3)
71; CHECK-P9-NEXT:    xxswapd vs1, f1
72; CHECK-P9-NEXT:    xxmrgld v2, vs1, vs0
73; CHECK-P9-NEXT:    blr
74  %v = load <2 x double>, <2 x double>* %p1
75  %s = load double, double* %p2
76  %r = insertelement <2 x double> %v, double %s, i32 1
77  ret <2 x double> %r
78
79
80}
81
82define double @teste0(<2 x double>* %p1) {
83; CHECK-LABEL: teste0:
84; CHECK:       # %bb.0:
85; CHECK-NEXT:    lxvd2x vs1, 0, r3
86; CHECK-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
87; CHECK-NEXT:    blr
88;
89; CHECK-P9-VECTOR-LABEL: teste0:
90; CHECK-P9-VECTOR:       # %bb.0:
91; CHECK-P9-VECTOR-NEXT:    lxvd2x vs1, 0, r3
92; CHECK-P9-VECTOR-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
93; CHECK-P9-VECTOR-NEXT:    blr
94;
95; CHECK-P9-LABEL: teste0:
96; CHECK-P9:       # %bb.0:
97; CHECK-P9-NEXT:    lfd f1, 0(r3)
98; CHECK-P9-NEXT:    blr
99  %v = load <2 x double>, <2 x double>* %p1
100  %r = extractelement <2 x double> %v, i32 0
101  ret double %r
102
103
104}
105
106define double @teste1(<2 x double>* %p1) {
107; CHECK-LABEL: teste1:
108; CHECK:       # %bb.0:
109; CHECK-NEXT:    lxvd2x vs0, 0, r3
110; CHECK-NEXT:    xxswapd vs1, vs0
111; CHECK-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
112; CHECK-NEXT:    blr
113;
114; CHECK-P9-VECTOR-LABEL: teste1:
115; CHECK-P9-VECTOR:       # %bb.0:
116; CHECK-P9-VECTOR-NEXT:    lxvd2x vs0, 0, r3
117; CHECK-P9-VECTOR-NEXT:    xxswapd vs1, vs0
118; CHECK-P9-VECTOR-NEXT:    # kill: def $f1 killed $f1 killed $vsl1
119; CHECK-P9-VECTOR-NEXT:    blr
120;
121; CHECK-P9-LABEL: teste1:
122; CHECK-P9:       # %bb.0:
123; CHECK-P9-NEXT:    lfd f1, 8(r3)
124; CHECK-P9-NEXT:    blr
125  %v = load <2 x double>, <2 x double>* %p1
126  %r = extractelement <2 x double> %v, i32 1
127  ret double %r
128
129
130}
131