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