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