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=loongarch64 --mattr=+lasx < %s | FileCheck %s 3*f334db92SZhaoxin Yang 4*f334db92SZhaoxin Yangdeclare <8 x float> @llvm.powi.v8f32.i32(<8 x float>, i32) 5*f334db92SZhaoxin Yang 6*f334db92SZhaoxin Yangdefine <8 x float> @powi_v8f32(<8 x float> %va, i32 %b) nounwind { 7*f334db92SZhaoxin Yang; CHECK-LABEL: powi_v8f32: 8*f334db92SZhaoxin Yang; CHECK: # %bb.0: # %entry 9*f334db92SZhaoxin Yang; CHECK-NEXT: addi.d $sp, $sp, -80 10*f334db92SZhaoxin Yang; CHECK-NEXT: st.d $ra, $sp, 72 # 8-byte Folded Spill 11*f334db92SZhaoxin Yang; CHECK-NEXT: st.d $fp, $sp, 64 # 8-byte Folded Spill 12*f334db92SZhaoxin Yang; CHECK-NEXT: xvst $xr0, $sp, 0 # 32-byte Folded Spill 13*f334db92SZhaoxin Yang; CHECK-NEXT: addi.w $fp, $a0, 0 14*f334db92SZhaoxin Yang; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 0 15*f334db92SZhaoxin Yang; CHECK-NEXT: movgr2fr.w $fa0, $a0 16*f334db92SZhaoxin Yang; CHECK-NEXT: move $a0, $fp 17*f334db92SZhaoxin Yang; CHECK-NEXT: bl %plt(__powisf2) 18*f334db92SZhaoxin Yang; CHECK-NEXT: movfr2gr.s $a0, $fa0 19*f334db92SZhaoxin Yang; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 0 20*f334db92SZhaoxin Yang; CHECK-NEXT: xvst $xr0, $sp, 32 # 32-byte Folded Spill 21*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 0 # 32-byte Folded Reload 22*f334db92SZhaoxin Yang; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 1 23*f334db92SZhaoxin Yang; CHECK-NEXT: movgr2fr.w $fa0, $a0 24*f334db92SZhaoxin Yang; CHECK-NEXT: move $a0, $fp 25*f334db92SZhaoxin Yang; CHECK-NEXT: bl %plt(__powisf2) 26*f334db92SZhaoxin Yang; CHECK-NEXT: movfr2gr.s $a0, $fa0 27*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 32 # 32-byte Folded Reload 28*f334db92SZhaoxin Yang; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 1 29*f334db92SZhaoxin Yang; CHECK-NEXT: xvst $xr0, $sp, 32 # 32-byte Folded Spill 30*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 0 # 32-byte Folded Reload 31*f334db92SZhaoxin Yang; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 2 32*f334db92SZhaoxin Yang; CHECK-NEXT: movgr2fr.w $fa0, $a0 33*f334db92SZhaoxin Yang; CHECK-NEXT: move $a0, $fp 34*f334db92SZhaoxin Yang; CHECK-NEXT: bl %plt(__powisf2) 35*f334db92SZhaoxin Yang; CHECK-NEXT: movfr2gr.s $a0, $fa0 36*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 32 # 32-byte Folded Reload 37*f334db92SZhaoxin Yang; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 2 38*f334db92SZhaoxin Yang; CHECK-NEXT: xvst $xr0, $sp, 32 # 32-byte Folded Spill 39*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 0 # 32-byte Folded Reload 40*f334db92SZhaoxin Yang; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 3 41*f334db92SZhaoxin Yang; CHECK-NEXT: movgr2fr.w $fa0, $a0 42*f334db92SZhaoxin Yang; CHECK-NEXT: move $a0, $fp 43*f334db92SZhaoxin Yang; CHECK-NEXT: bl %plt(__powisf2) 44*f334db92SZhaoxin Yang; CHECK-NEXT: movfr2gr.s $a0, $fa0 45*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 32 # 32-byte Folded Reload 46*f334db92SZhaoxin Yang; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 3 47*f334db92SZhaoxin Yang; CHECK-NEXT: xvst $xr0, $sp, 32 # 32-byte Folded Spill 48*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 0 # 32-byte Folded Reload 49*f334db92SZhaoxin Yang; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 4 50*f334db92SZhaoxin Yang; CHECK-NEXT: movgr2fr.w $fa0, $a0 51*f334db92SZhaoxin Yang; CHECK-NEXT: move $a0, $fp 52*f334db92SZhaoxin Yang; CHECK-NEXT: bl %plt(__powisf2) 53*f334db92SZhaoxin Yang; CHECK-NEXT: movfr2gr.s $a0, $fa0 54*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 32 # 32-byte Folded Reload 55*f334db92SZhaoxin Yang; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 4 56*f334db92SZhaoxin Yang; CHECK-NEXT: xvst $xr0, $sp, 32 # 32-byte Folded Spill 57*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 0 # 32-byte Folded Reload 58*f334db92SZhaoxin Yang; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 5 59*f334db92SZhaoxin Yang; CHECK-NEXT: movgr2fr.w $fa0, $a0 60*f334db92SZhaoxin Yang; CHECK-NEXT: move $a0, $fp 61*f334db92SZhaoxin Yang; CHECK-NEXT: bl %plt(__powisf2) 62*f334db92SZhaoxin Yang; CHECK-NEXT: movfr2gr.s $a0, $fa0 63*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 32 # 32-byte Folded Reload 64*f334db92SZhaoxin Yang; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 5 65*f334db92SZhaoxin Yang; CHECK-NEXT: xvst $xr0, $sp, 32 # 32-byte Folded Spill 66*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 0 # 32-byte Folded Reload 67*f334db92SZhaoxin Yang; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 6 68*f334db92SZhaoxin Yang; CHECK-NEXT: movgr2fr.w $fa0, $a0 69*f334db92SZhaoxin Yang; CHECK-NEXT: move $a0, $fp 70*f334db92SZhaoxin Yang; CHECK-NEXT: bl %plt(__powisf2) 71*f334db92SZhaoxin Yang; CHECK-NEXT: movfr2gr.s $a0, $fa0 72*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 32 # 32-byte Folded Reload 73*f334db92SZhaoxin Yang; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 6 74*f334db92SZhaoxin Yang; CHECK-NEXT: xvst $xr0, $sp, 32 # 32-byte Folded Spill 75*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 0 # 32-byte Folded Reload 76*f334db92SZhaoxin Yang; CHECK-NEXT: xvpickve2gr.w $a0, $xr0, 7 77*f334db92SZhaoxin Yang; CHECK-NEXT: movgr2fr.w $fa0, $a0 78*f334db92SZhaoxin Yang; CHECK-NEXT: move $a0, $fp 79*f334db92SZhaoxin Yang; CHECK-NEXT: bl %plt(__powisf2) 80*f334db92SZhaoxin Yang; CHECK-NEXT: movfr2gr.s $a0, $fa0 81*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 32 # 32-byte Folded Reload 82*f334db92SZhaoxin Yang; CHECK-NEXT: xvinsgr2vr.w $xr0, $a0, 7 83*f334db92SZhaoxin Yang; CHECK-NEXT: ld.d $fp, $sp, 64 # 8-byte Folded Reload 84*f334db92SZhaoxin Yang; CHECK-NEXT: ld.d $ra, $sp, 72 # 8-byte Folded Reload 85*f334db92SZhaoxin Yang; CHECK-NEXT: addi.d $sp, $sp, 80 86*f334db92SZhaoxin Yang; CHECK-NEXT: ret 87*f334db92SZhaoxin Yangentry: 88*f334db92SZhaoxin Yang %res = call <8 x float> @llvm.powi.v8f32.i32(<8 x float> %va, i32 %b) 89*f334db92SZhaoxin Yang ret <8 x float> %res 90*f334db92SZhaoxin Yang} 91*f334db92SZhaoxin Yang 92*f334db92SZhaoxin Yangdeclare <4 x double> @llvm.powi.v4f64.i32(<4 x double>, i32) 93*f334db92SZhaoxin Yang 94*f334db92SZhaoxin Yangdefine <4 x double> @powi_v4f64(<4 x double> %va, i32 %b) nounwind { 95*f334db92SZhaoxin Yang; CHECK-LABEL: powi_v4f64: 96*f334db92SZhaoxin Yang; CHECK: # %bb.0: # %entry 97*f334db92SZhaoxin Yang; CHECK-NEXT: addi.d $sp, $sp, -80 98*f334db92SZhaoxin Yang; CHECK-NEXT: st.d $ra, $sp, 72 # 8-byte Folded Spill 99*f334db92SZhaoxin Yang; CHECK-NEXT: st.d $fp, $sp, 64 # 8-byte Folded Spill 100*f334db92SZhaoxin Yang; CHECK-NEXT: xvst $xr0, $sp, 0 # 32-byte Folded Spill 101*f334db92SZhaoxin Yang; CHECK-NEXT: addi.w $fp, $a0, 0 102*f334db92SZhaoxin Yang; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 0 103*f334db92SZhaoxin Yang; CHECK-NEXT: movgr2fr.d $fa0, $a0 104*f334db92SZhaoxin Yang; CHECK-NEXT: move $a0, $fp 105*f334db92SZhaoxin Yang; CHECK-NEXT: bl %plt(__powidf2) 106*f334db92SZhaoxin Yang; CHECK-NEXT: movfr2gr.d $a0, $fa0 107*f334db92SZhaoxin Yang; CHECK-NEXT: xvinsgr2vr.d $xr0, $a0, 0 108*f334db92SZhaoxin Yang; CHECK-NEXT: xvst $xr0, $sp, 32 # 32-byte Folded Spill 109*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 0 # 32-byte Folded Reload 110*f334db92SZhaoxin Yang; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 1 111*f334db92SZhaoxin Yang; CHECK-NEXT: movgr2fr.d $fa0, $a0 112*f334db92SZhaoxin Yang; CHECK-NEXT: move $a0, $fp 113*f334db92SZhaoxin Yang; CHECK-NEXT: bl %plt(__powidf2) 114*f334db92SZhaoxin Yang; CHECK-NEXT: movfr2gr.d $a0, $fa0 115*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 32 # 32-byte Folded Reload 116*f334db92SZhaoxin Yang; CHECK-NEXT: xvinsgr2vr.d $xr0, $a0, 1 117*f334db92SZhaoxin Yang; CHECK-NEXT: xvst $xr0, $sp, 32 # 32-byte Folded Spill 118*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 0 # 32-byte Folded Reload 119*f334db92SZhaoxin Yang; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 2 120*f334db92SZhaoxin Yang; CHECK-NEXT: movgr2fr.d $fa0, $a0 121*f334db92SZhaoxin Yang; CHECK-NEXT: move $a0, $fp 122*f334db92SZhaoxin Yang; CHECK-NEXT: bl %plt(__powidf2) 123*f334db92SZhaoxin Yang; CHECK-NEXT: movfr2gr.d $a0, $fa0 124*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 32 # 32-byte Folded Reload 125*f334db92SZhaoxin Yang; CHECK-NEXT: xvinsgr2vr.d $xr0, $a0, 2 126*f334db92SZhaoxin Yang; CHECK-NEXT: xvst $xr0, $sp, 32 # 32-byte Folded Spill 127*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 0 # 32-byte Folded Reload 128*f334db92SZhaoxin Yang; CHECK-NEXT: xvpickve2gr.d $a0, $xr0, 3 129*f334db92SZhaoxin Yang; CHECK-NEXT: movgr2fr.d $fa0, $a0 130*f334db92SZhaoxin Yang; CHECK-NEXT: move $a0, $fp 131*f334db92SZhaoxin Yang; CHECK-NEXT: bl %plt(__powidf2) 132*f334db92SZhaoxin Yang; CHECK-NEXT: movfr2gr.d $a0, $fa0 133*f334db92SZhaoxin Yang; CHECK-NEXT: xvld $xr0, $sp, 32 # 32-byte Folded Reload 134*f334db92SZhaoxin Yang; CHECK-NEXT: xvinsgr2vr.d $xr0, $a0, 3 135*f334db92SZhaoxin Yang; CHECK-NEXT: ld.d $fp, $sp, 64 # 8-byte Folded Reload 136*f334db92SZhaoxin Yang; CHECK-NEXT: ld.d $ra, $sp, 72 # 8-byte Folded Reload 137*f334db92SZhaoxin Yang; CHECK-NEXT: addi.d $sp, $sp, 80 138*f334db92SZhaoxin Yang; CHECK-NEXT: ret 139*f334db92SZhaoxin Yangentry: 140*f334db92SZhaoxin Yang %res = call <4 x double> @llvm.powi.v4f64.i32(<4 x double> %va, i32 %b) 141*f334db92SZhaoxin Yang ret <4 x double> %res 142*f334db92SZhaoxin Yang} 143