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