xref: /llvm-project/llvm/test/CodeGen/LoongArch/lasx/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=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