• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s
2
3;;; Test floating divide intrinsic instructions
4;;;
5;;; Note:
6;;;   We test VFDIV*vvl, VFDIV*vvl_v, VFDIV*rvl, VFDIV*rvl_v, VFDIV*vvml_v, and
7;;;   VFDIV*rvml_v instructions.
8
9; Function Attrs: nounwind readnone
10define fastcc <256 x double> @vfdivd_vvvl(<256 x double> %0, <256 x double> %1) {
11; CHECK-LABEL: vfdivd_vvvl:
12; CHECK:       # %bb.0:
13; CHECK-NEXT:    lea %s0, 256
14; CHECK-NEXT:    lvl %s0
15; CHECK-NEXT:    vfdiv.d %v0, %v0, %v1
16; CHECK-NEXT:    b.l.t (, %s10)
17  %3 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vvvl(<256 x double> %0, <256 x double> %1, i32 256)
18  ret <256 x double> %3
19}
20
21; Function Attrs: nounwind readnone
22declare <256 x double> @llvm.ve.vl.vfdivd.vvvl(<256 x double>, <256 x double>, i32)
23
24; Function Attrs: nounwind readnone
25define fastcc <256 x double> @vfdivd_vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2) {
26; CHECK-LABEL: vfdivd_vvvvl:
27; CHECK:       # %bb.0:
28; CHECK-NEXT:    lea %s0, 128
29; CHECK-NEXT:    lvl %s0
30; CHECK-NEXT:    vfdiv.d %v2, %v0, %v1
31; CHECK-NEXT:    lea %s16, 256
32; CHECK-NEXT:    lvl %s16
33; CHECK-NEXT:    vor %v0, (0)1, %v2
34; CHECK-NEXT:    b.l.t (, %s10)
35  %4 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2, i32 128)
36  ret <256 x double> %4
37}
38
39; Function Attrs: nounwind readnone
40declare <256 x double> @llvm.ve.vl.vfdivd.vvvvl(<256 x double>, <256 x double>, <256 x double>, i32)
41
42; Function Attrs: nounwind readnone
43define fastcc <256 x double> @vfdivd_vsvl(double %0, <256 x double> %1) {
44; CHECK-LABEL: vfdivd_vsvl:
45; CHECK:       # %bb.0:
46; CHECK-NEXT:    lea %s1, 256
47; CHECK-NEXT:    lvl %s1
48; CHECK-NEXT:    vfdiv.d %v0, %s0, %v0
49; CHECK-NEXT:    b.l.t (, %s10)
50  %3 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vsvl(double %0, <256 x double> %1, i32 256)
51  ret <256 x double> %3
52}
53
54; Function Attrs: nounwind readnone
55declare <256 x double> @llvm.ve.vl.vfdivd.vsvl(double, <256 x double>, i32)
56
57; Function Attrs: nounwind readnone
58define fastcc <256 x double> @vfdivd_vsvvl(double %0, <256 x double> %1, <256 x double> %2) {
59; CHECK-LABEL: vfdivd_vsvvl:
60; CHECK:       # %bb.0:
61; CHECK-NEXT:    lea %s1, 128
62; CHECK-NEXT:    lvl %s1
63; CHECK-NEXT:    vfdiv.d %v1, %s0, %v0
64; CHECK-NEXT:    lea %s16, 256
65; CHECK-NEXT:    lvl %s16
66; CHECK-NEXT:    vor %v0, (0)1, %v1
67; CHECK-NEXT:    b.l.t (, %s10)
68  %4 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vsvvl(double %0, <256 x double> %1, <256 x double> %2, i32 128)
69  ret <256 x double> %4
70}
71
72; Function Attrs: nounwind readnone
73declare <256 x double> @llvm.ve.vl.vfdivd.vsvvl(double, <256 x double>, <256 x double>, i32)
74
75; Function Attrs: nounwind readnone
76define fastcc <256 x double> @vfdivd_vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) {
77; CHECK-LABEL: vfdivd_vvvmvl:
78; CHECK:       # %bb.0:
79; CHECK-NEXT:    lea %s0, 128
80; CHECK-NEXT:    lvl %s0
81; CHECK-NEXT:    vfdiv.d %v2, %v0, %v1, %vm1
82; CHECK-NEXT:    lea %s16, 256
83; CHECK-NEXT:    lvl %s16
84; CHECK-NEXT:    vor %v0, (0)1, %v2
85; CHECK-NEXT:    b.l.t (, %s10)
86  %5 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128)
87  ret <256 x double> %5
88}
89
90; Function Attrs: nounwind readnone
91declare <256 x double> @llvm.ve.vl.vfdivd.vvvmvl(<256 x double>, <256 x double>, <256 x i1>, <256 x double>, i32)
92
93; Function Attrs: nounwind readnone
94define fastcc <256 x double> @vfdivd_vsvmvl(double %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) {
95; CHECK-LABEL: vfdivd_vsvmvl:
96; CHECK:       # %bb.0:
97; CHECK-NEXT:    lea %s1, 128
98; CHECK-NEXT:    lvl %s1
99; CHECK-NEXT:    vfdiv.d %v1, %s0, %v0, %vm1
100; CHECK-NEXT:    lea %s16, 256
101; CHECK-NEXT:    lvl %s16
102; CHECK-NEXT:    vor %v0, (0)1, %v1
103; CHECK-NEXT:    b.l.t (, %s10)
104  %5 = tail call fast <256 x double> @llvm.ve.vl.vfdivd.vsvmvl(double %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128)
105  ret <256 x double> %5
106}
107
108; Function Attrs: nounwind readnone
109declare <256 x double> @llvm.ve.vl.vfdivd.vsvmvl(double, <256 x double>, <256 x i1>, <256 x double>, i32)
110
111; Function Attrs: nounwind readnone
112define fastcc <256 x double> @vfdivs_vvvl(<256 x double> %0, <256 x double> %1) {
113; CHECK-LABEL: vfdivs_vvvl:
114; CHECK:       # %bb.0:
115; CHECK-NEXT:    lea %s0, 256
116; CHECK-NEXT:    lvl %s0
117; CHECK-NEXT:    vfdiv.s %v0, %v0, %v1
118; CHECK-NEXT:    b.l.t (, %s10)
119  %3 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vvvl(<256 x double> %0, <256 x double> %1, i32 256)
120  ret <256 x double> %3
121}
122
123; Function Attrs: nounwind readnone
124declare <256 x double> @llvm.ve.vl.vfdivs.vvvl(<256 x double>, <256 x double>, i32)
125
126; Function Attrs: nounwind readnone
127define fastcc <256 x double> @vfdivs_vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2) {
128; CHECK-LABEL: vfdivs_vvvvl:
129; CHECK:       # %bb.0:
130; CHECK-NEXT:    lea %s0, 128
131; CHECK-NEXT:    lvl %s0
132; CHECK-NEXT:    vfdiv.s %v2, %v0, %v1
133; CHECK-NEXT:    lea %s16, 256
134; CHECK-NEXT:    lvl %s16
135; CHECK-NEXT:    vor %v0, (0)1, %v2
136; CHECK-NEXT:    b.l.t (, %s10)
137  %4 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vvvvl(<256 x double> %0, <256 x double> %1, <256 x double> %2, i32 128)
138  ret <256 x double> %4
139}
140
141; Function Attrs: nounwind readnone
142declare <256 x double> @llvm.ve.vl.vfdivs.vvvvl(<256 x double>, <256 x double>, <256 x double>, i32)
143
144; Function Attrs: nounwind readnone
145define fastcc <256 x double> @vfdivs_vsvl(float %0, <256 x double> %1) {
146; CHECK-LABEL: vfdivs_vsvl:
147; CHECK:       # %bb.0:
148; CHECK-NEXT:    lea %s1, 256
149; CHECK-NEXT:    lvl %s1
150; CHECK-NEXT:    vfdiv.s %v0, %s0, %v0
151; CHECK-NEXT:    b.l.t (, %s10)
152  %3 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vsvl(float %0, <256 x double> %1, i32 256)
153  ret <256 x double> %3
154}
155
156; Function Attrs: nounwind readnone
157declare <256 x double> @llvm.ve.vl.vfdivs.vsvl(float, <256 x double>, i32)
158
159; Function Attrs: nounwind readnone
160define fastcc <256 x double> @vfdivs_vsvvl(float %0, <256 x double> %1, <256 x double> %2) {
161; CHECK-LABEL: vfdivs_vsvvl:
162; CHECK:       # %bb.0:
163; CHECK-NEXT:    lea %s1, 128
164; CHECK-NEXT:    lvl %s1
165; CHECK-NEXT:    vfdiv.s %v1, %s0, %v0
166; CHECK-NEXT:    lea %s16, 256
167; CHECK-NEXT:    lvl %s16
168; CHECK-NEXT:    vor %v0, (0)1, %v1
169; CHECK-NEXT:    b.l.t (, %s10)
170  %4 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vsvvl(float %0, <256 x double> %1, <256 x double> %2, i32 128)
171  ret <256 x double> %4
172}
173
174; Function Attrs: nounwind readnone
175declare <256 x double> @llvm.ve.vl.vfdivs.vsvvl(float, <256 x double>, <256 x double>, i32)
176
177; Function Attrs: nounwind readnone
178define fastcc <256 x double> @vfdivs_vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) {
179; CHECK-LABEL: vfdivs_vvvmvl:
180; CHECK:       # %bb.0:
181; CHECK-NEXT:    lea %s0, 128
182; CHECK-NEXT:    lvl %s0
183; CHECK-NEXT:    vfdiv.s %v2, %v0, %v1, %vm1
184; CHECK-NEXT:    lea %s16, 256
185; CHECK-NEXT:    lvl %s16
186; CHECK-NEXT:    vor %v0, (0)1, %v2
187; CHECK-NEXT:    b.l.t (, %s10)
188  %5 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vvvmvl(<256 x double> %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128)
189  ret <256 x double> %5
190}
191
192; Function Attrs: nounwind readnone
193declare <256 x double> @llvm.ve.vl.vfdivs.vvvmvl(<256 x double>, <256 x double>, <256 x i1>, <256 x double>, i32)
194
195; Function Attrs: nounwind readnone
196define fastcc <256 x double> @vfdivs_vsvmvl(float %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3) {
197; CHECK-LABEL: vfdivs_vsvmvl:
198; CHECK:       # %bb.0:
199; CHECK-NEXT:    lea %s1, 128
200; CHECK-NEXT:    lvl %s1
201; CHECK-NEXT:    vfdiv.s %v1, %s0, %v0, %vm1
202; CHECK-NEXT:    lea %s16, 256
203; CHECK-NEXT:    lvl %s16
204; CHECK-NEXT:    vor %v0, (0)1, %v1
205; CHECK-NEXT:    b.l.t (, %s10)
206  %5 = tail call fast <256 x double> @llvm.ve.vl.vfdivs.vsvmvl(float %0, <256 x double> %1, <256 x i1> %2, <256 x double> %3, i32 128)
207  ret <256 x double> %5
208}
209
210; Function Attrs: nounwind readnone
211declare <256 x double> @llvm.ve.vl.vfdivs.vsvmvl(float, <256 x double>, <256 x i1>, <256 x double>, i32)
212