Skip to content

Commit 61e3c84

Browse files
authored
[LoongArch][NFC] Pre-commit tests for flog2 (llvm#162976)
1 parent c7f3c0b commit 61e3c84

File tree

3 files changed

+458
-0
lines changed

3 files changed

+458
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
2+
; RUN: llc --mtriple=loongarch32 --mattr=+d < %s | FileCheck %s --check-prefix=LA32
3+
; RUN: llc --mtriple=loongarch64 --mattr=+d < %s | FileCheck %s --check-prefix=LA64
4+
5+
declare float @llvm.log2.f32(float)
6+
declare double @llvm.log2.f64(double)
7+
8+
define float @flog2_s(float %x) nounwind {
9+
; LA32-LABEL: flog2_s:
10+
; LA32: # %bb.0:
11+
; LA32-NEXT: b log2f
12+
;
13+
; LA64-LABEL: flog2_s:
14+
; LA64: # %bb.0:
15+
; LA64-NEXT: pcaddu18i $t8, %call36(log2f)
16+
; LA64-NEXT: jr $t8
17+
%y = call float @llvm.log2.f32(float %x)
18+
ret float %y
19+
}
20+
21+
define double @flog2_d(double %x) nounwind {
22+
; LA32-LABEL: flog2_d:
23+
; LA32: # %bb.0:
24+
; LA32-NEXT: b log2
25+
;
26+
; LA64-LABEL: flog2_d:
27+
; LA64: # %bb.0:
28+
; LA64-NEXT: pcaddu18i $t8, %call36(log2)
29+
; LA64-NEXT: jr $t8
30+
%y = call double @llvm.log2.f64(double %x)
31+
ret double %y
32+
}
Lines changed: 264 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,264 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
2+
; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s | FileCheck %s --check-prefix=LA32
3+
; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s --check-prefix=LA64
4+
5+
declare <8 x float> @llvm.log2.v8f32(<8 x float>)
6+
declare <4 x double> @llvm.log2.v4f64(<4 x double>)
7+
8+
define void @flog2_v8f32(ptr %res, ptr %a) nounwind {
9+
; LA32-LABEL: flog2_v8f32:
10+
; LA32: # %bb.0: # %entry
11+
; LA32-NEXT: addi.w $sp, $sp, -128
12+
; LA32-NEXT: st.w $ra, $sp, 124 # 4-byte Folded Spill
13+
; LA32-NEXT: st.w $fp, $sp, 120 # 4-byte Folded Spill
14+
; LA32-NEXT: xvld $xr0, $a1, 0
15+
; LA32-NEXT: xvst $xr0, $sp, 80 # 32-byte Folded Spill
16+
; LA32-NEXT: move $fp, $a0
17+
; LA32-NEXT: xvpickve.w $xr0, $xr0, 5
18+
; LA32-NEXT: # kill: def $f0 killed $f0 killed $xr0
19+
; LA32-NEXT: bl log2f
20+
; LA32-NEXT: # kill: def $f0 killed $f0 def $vr0
21+
; LA32-NEXT: vst $vr0, $sp, 48 # 16-byte Folded Spill
22+
; LA32-NEXT: xvld $xr0, $sp, 80 # 32-byte Folded Reload
23+
; LA32-NEXT: xvpickve.w $xr0, $xr0, 4
24+
; LA32-NEXT: # kill: def $f0 killed $f0 killed $xr0
25+
; LA32-NEXT: bl log2f
26+
; LA32-NEXT: # kill: def $f0 killed $f0 def $xr0
27+
; LA32-NEXT: vld $vr1, $sp, 48 # 16-byte Folded Reload
28+
; LA32-NEXT: vextrins.w $vr0, $vr1, 16
29+
; LA32-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
30+
; LA32-NEXT: xvld $xr0, $sp, 80 # 32-byte Folded Reload
31+
; LA32-NEXT: xvpickve.w $xr0, $xr0, 6
32+
; LA32-NEXT: # kill: def $f0 killed $f0 killed $xr0
33+
; LA32-NEXT: bl log2f
34+
; LA32-NEXT: # kill: def $f0 killed $f0 def $vr0
35+
; LA32-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
36+
; LA32-NEXT: vextrins.w $vr1, $vr0, 32
37+
; LA32-NEXT: xvst $xr1, $sp, 48 # 32-byte Folded Spill
38+
; LA32-NEXT: xvld $xr0, $sp, 80 # 32-byte Folded Reload
39+
; LA32-NEXT: xvpickve.w $xr0, $xr0, 7
40+
; LA32-NEXT: # kill: def $f0 killed $f0 killed $xr0
41+
; LA32-NEXT: bl log2f
42+
; LA32-NEXT: # kill: def $f0 killed $f0 def $vr0
43+
; LA32-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
44+
; LA32-NEXT: vextrins.w $vr1, $vr0, 48
45+
; LA32-NEXT: xvst $xr1, $sp, 48 # 32-byte Folded Spill
46+
; LA32-NEXT: xvld $xr0, $sp, 80 # 32-byte Folded Reload
47+
; LA32-NEXT: xvpickve.w $xr0, $xr0, 1
48+
; LA32-NEXT: # kill: def $f0 killed $f0 killed $xr0
49+
; LA32-NEXT: bl log2f
50+
; LA32-NEXT: # kill: def $f0 killed $f0 def $vr0
51+
; LA32-NEXT: vst $vr0, $sp, 16 # 16-byte Folded Spill
52+
; LA32-NEXT: xvld $xr0, $sp, 80 # 32-byte Folded Reload
53+
; LA32-NEXT: xvpickve.w $xr0, $xr0, 0
54+
; LA32-NEXT: # kill: def $f0 killed $f0 killed $xr0
55+
; LA32-NEXT: bl log2f
56+
; LA32-NEXT: # kill: def $f0 killed $f0 def $xr0
57+
; LA32-NEXT: vld $vr1, $sp, 16 # 16-byte Folded Reload
58+
; LA32-NEXT: vextrins.w $vr0, $vr1, 16
59+
; LA32-NEXT: xvst $xr0, $sp, 16 # 32-byte Folded Spill
60+
; LA32-NEXT: xvld $xr0, $sp, 80 # 32-byte Folded Reload
61+
; LA32-NEXT: xvpickve.w $xr0, $xr0, 2
62+
; LA32-NEXT: # kill: def $f0 killed $f0 killed $xr0
63+
; LA32-NEXT: bl log2f
64+
; LA32-NEXT: # kill: def $f0 killed $f0 def $vr0
65+
; LA32-NEXT: xvld $xr1, $sp, 16 # 32-byte Folded Reload
66+
; LA32-NEXT: vextrins.w $vr1, $vr0, 32
67+
; LA32-NEXT: xvst $xr1, $sp, 16 # 32-byte Folded Spill
68+
; LA32-NEXT: xvld $xr0, $sp, 80 # 32-byte Folded Reload
69+
; LA32-NEXT: xvpickve.w $xr0, $xr0, 3
70+
; LA32-NEXT: # kill: def $f0 killed $f0 killed $xr0
71+
; LA32-NEXT: bl log2f
72+
; LA32-NEXT: # kill: def $f0 killed $f0 def $vr0
73+
; LA32-NEXT: xvld $xr1, $sp, 16 # 32-byte Folded Reload
74+
; LA32-NEXT: vextrins.w $vr1, $vr0, 48
75+
; LA32-NEXT: xvld $xr0, $sp, 48 # 32-byte Folded Reload
76+
; LA32-NEXT: xvpermi.q $xr1, $xr0, 2
77+
; LA32-NEXT: xvst $xr1, $fp, 0
78+
; LA32-NEXT: ld.w $fp, $sp, 120 # 4-byte Folded Reload
79+
; LA32-NEXT: ld.w $ra, $sp, 124 # 4-byte Folded Reload
80+
; LA32-NEXT: addi.w $sp, $sp, 128
81+
; LA32-NEXT: ret
82+
;
83+
; LA64-LABEL: flog2_v8f32:
84+
; LA64: # %bb.0: # %entry
85+
; LA64-NEXT: addi.d $sp, $sp, -128
86+
; LA64-NEXT: st.d $ra, $sp, 120 # 8-byte Folded Spill
87+
; LA64-NEXT: st.d $fp, $sp, 112 # 8-byte Folded Spill
88+
; LA64-NEXT: xvld $xr0, $a1, 0
89+
; LA64-NEXT: xvst $xr0, $sp, 80 # 32-byte Folded Spill
90+
; LA64-NEXT: move $fp, $a0
91+
; LA64-NEXT: xvpickve.w $xr0, $xr0, 5
92+
; LA64-NEXT: # kill: def $f0 killed $f0 killed $xr0
93+
; LA64-NEXT: pcaddu18i $ra, %call36(log2f)
94+
; LA64-NEXT: jirl $ra, $ra, 0
95+
; LA64-NEXT: # kill: def $f0 killed $f0 def $vr0
96+
; LA64-NEXT: vst $vr0, $sp, 48 # 16-byte Folded Spill
97+
; LA64-NEXT: xvld $xr0, $sp, 80 # 32-byte Folded Reload
98+
; LA64-NEXT: xvpickve.w $xr0, $xr0, 4
99+
; LA64-NEXT: # kill: def $f0 killed $f0 killed $xr0
100+
; LA64-NEXT: pcaddu18i $ra, %call36(log2f)
101+
; LA64-NEXT: jirl $ra, $ra, 0
102+
; LA64-NEXT: # kill: def $f0 killed $f0 def $xr0
103+
; LA64-NEXT: vld $vr1, $sp, 48 # 16-byte Folded Reload
104+
; LA64-NEXT: vextrins.w $vr0, $vr1, 16
105+
; LA64-NEXT: xvst $xr0, $sp, 48 # 32-byte Folded Spill
106+
; LA64-NEXT: xvld $xr0, $sp, 80 # 32-byte Folded Reload
107+
; LA64-NEXT: xvpickve.w $xr0, $xr0, 6
108+
; LA64-NEXT: # kill: def $f0 killed $f0 killed $xr0
109+
; LA64-NEXT: pcaddu18i $ra, %call36(log2f)
110+
; LA64-NEXT: jirl $ra, $ra, 0
111+
; LA64-NEXT: # kill: def $f0 killed $f0 def $vr0
112+
; LA64-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
113+
; LA64-NEXT: vextrins.w $vr1, $vr0, 32
114+
; LA64-NEXT: xvst $xr1, $sp, 48 # 32-byte Folded Spill
115+
; LA64-NEXT: xvld $xr0, $sp, 80 # 32-byte Folded Reload
116+
; LA64-NEXT: xvpickve.w $xr0, $xr0, 7
117+
; LA64-NEXT: # kill: def $f0 killed $f0 killed $xr0
118+
; LA64-NEXT: pcaddu18i $ra, %call36(log2f)
119+
; LA64-NEXT: jirl $ra, $ra, 0
120+
; LA64-NEXT: # kill: def $f0 killed $f0 def $vr0
121+
; LA64-NEXT: xvld $xr1, $sp, 48 # 32-byte Folded Reload
122+
; LA64-NEXT: vextrins.w $vr1, $vr0, 48
123+
; LA64-NEXT: xvst $xr1, $sp, 48 # 32-byte Folded Spill
124+
; LA64-NEXT: xvld $xr0, $sp, 80 # 32-byte Folded Reload
125+
; LA64-NEXT: xvpickve.w $xr0, $xr0, 1
126+
; LA64-NEXT: # kill: def $f0 killed $f0 killed $xr0
127+
; LA64-NEXT: pcaddu18i $ra, %call36(log2f)
128+
; LA64-NEXT: jirl $ra, $ra, 0
129+
; LA64-NEXT: # kill: def $f0 killed $f0 def $vr0
130+
; LA64-NEXT: vst $vr0, $sp, 16 # 16-byte Folded Spill
131+
; LA64-NEXT: xvld $xr0, $sp, 80 # 32-byte Folded Reload
132+
; LA64-NEXT: xvpickve.w $xr0, $xr0, 0
133+
; LA64-NEXT: # kill: def $f0 killed $f0 killed $xr0
134+
; LA64-NEXT: pcaddu18i $ra, %call36(log2f)
135+
; LA64-NEXT: jirl $ra, $ra, 0
136+
; LA64-NEXT: # kill: def $f0 killed $f0 def $xr0
137+
; LA64-NEXT: vld $vr1, $sp, 16 # 16-byte Folded Reload
138+
; LA64-NEXT: vextrins.w $vr0, $vr1, 16
139+
; LA64-NEXT: xvst $xr0, $sp, 16 # 32-byte Folded Spill
140+
; LA64-NEXT: xvld $xr0, $sp, 80 # 32-byte Folded Reload
141+
; LA64-NEXT: xvpickve.w $xr0, $xr0, 2
142+
; LA64-NEXT: # kill: def $f0 killed $f0 killed $xr0
143+
; LA64-NEXT: pcaddu18i $ra, %call36(log2f)
144+
; LA64-NEXT: jirl $ra, $ra, 0
145+
; LA64-NEXT: # kill: def $f0 killed $f0 def $vr0
146+
; LA64-NEXT: xvld $xr1, $sp, 16 # 32-byte Folded Reload
147+
; LA64-NEXT: vextrins.w $vr1, $vr0, 32
148+
; LA64-NEXT: xvst $xr1, $sp, 16 # 32-byte Folded Spill
149+
; LA64-NEXT: xvld $xr0, $sp, 80 # 32-byte Folded Reload
150+
; LA64-NEXT: xvpickve.w $xr0, $xr0, 3
151+
; LA64-NEXT: # kill: def $f0 killed $f0 killed $xr0
152+
; LA64-NEXT: pcaddu18i $ra, %call36(log2f)
153+
; LA64-NEXT: jirl $ra, $ra, 0
154+
; LA64-NEXT: # kill: def $f0 killed $f0 def $vr0
155+
; LA64-NEXT: xvld $xr1, $sp, 16 # 32-byte Folded Reload
156+
; LA64-NEXT: vextrins.w $vr1, $vr0, 48
157+
; LA64-NEXT: xvld $xr0, $sp, 48 # 32-byte Folded Reload
158+
; LA64-NEXT: xvpermi.q $xr1, $xr0, 2
159+
; LA64-NEXT: xvst $xr1, $fp, 0
160+
; LA64-NEXT: ld.d $fp, $sp, 112 # 8-byte Folded Reload
161+
; LA64-NEXT: ld.d $ra, $sp, 120 # 8-byte Folded Reload
162+
; LA64-NEXT: addi.d $sp, $sp, 128
163+
; LA64-NEXT: ret
164+
entry:
165+
%v = load <8 x float>, ptr %a
166+
%r = call <8 x float> @llvm.log2.v8f32(<8 x float> %v)
167+
store <8 x float> %r, ptr %res
168+
ret void
169+
}
170+
171+
define void @flog2_v4f64(ptr %res, ptr %a) nounwind {
172+
; LA32-LABEL: flog2_v4f64:
173+
; LA32: # %bb.0: # %entry
174+
; LA32-NEXT: addi.w $sp, $sp, -112
175+
; LA32-NEXT: st.w $ra, $sp, 108 # 4-byte Folded Spill
176+
; LA32-NEXT: st.w $fp, $sp, 104 # 4-byte Folded Spill
177+
; LA32-NEXT: xvld $xr0, $a1, 0
178+
; LA32-NEXT: xvst $xr0, $sp, 64 # 32-byte Folded Spill
179+
; LA32-NEXT: move $fp, $a0
180+
; LA32-NEXT: xvpickve.d $xr0, $xr0, 3
181+
; LA32-NEXT: # kill: def $f0_64 killed $f0_64 killed $xr0
182+
; LA32-NEXT: bl log2
183+
; LA32-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
184+
; LA32-NEXT: vst $vr0, $sp, 32 # 16-byte Folded Spill
185+
; LA32-NEXT: xvld $xr0, $sp, 64 # 32-byte Folded Reload
186+
; LA32-NEXT: xvpickve.d $xr0, $xr0, 2
187+
; LA32-NEXT: # kill: def $f0_64 killed $f0_64 killed $xr0
188+
; LA32-NEXT: bl log2
189+
; LA32-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
190+
; LA32-NEXT: vld $vr1, $sp, 32 # 16-byte Folded Reload
191+
; LA32-NEXT: vextrins.d $vr0, $vr1, 16
192+
; LA32-NEXT: xvst $xr0, $sp, 32 # 32-byte Folded Spill
193+
; LA32-NEXT: xvld $xr0, $sp, 64 # 32-byte Folded Reload
194+
; LA32-NEXT: xvpickve.d $xr0, $xr0, 1
195+
; LA32-NEXT: # kill: def $f0_64 killed $f0_64 killed $xr0
196+
; LA32-NEXT: bl log2
197+
; LA32-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
198+
; LA32-NEXT: vst $vr0, $sp, 16 # 16-byte Folded Spill
199+
; LA32-NEXT: xvld $xr0, $sp, 64 # 32-byte Folded Reload
200+
; LA32-NEXT: xvpickve.d $xr0, $xr0, 0
201+
; LA32-NEXT: # kill: def $f0_64 killed $f0_64 killed $xr0
202+
; LA32-NEXT: bl log2
203+
; LA32-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
204+
; LA32-NEXT: vld $vr1, $sp, 16 # 16-byte Folded Reload
205+
; LA32-NEXT: vextrins.d $vr0, $vr1, 16
206+
; LA32-NEXT: xvld $xr1, $sp, 32 # 32-byte Folded Reload
207+
; LA32-NEXT: xvpermi.q $xr0, $xr1, 2
208+
; LA32-NEXT: xvst $xr0, $fp, 0
209+
; LA32-NEXT: ld.w $fp, $sp, 104 # 4-byte Folded Reload
210+
; LA32-NEXT: ld.w $ra, $sp, 108 # 4-byte Folded Reload
211+
; LA32-NEXT: addi.w $sp, $sp, 112
212+
; LA32-NEXT: ret
213+
;
214+
; LA64-LABEL: flog2_v4f64:
215+
; LA64: # %bb.0: # %entry
216+
; LA64-NEXT: addi.d $sp, $sp, -112
217+
; LA64-NEXT: st.d $ra, $sp, 104 # 8-byte Folded Spill
218+
; LA64-NEXT: st.d $fp, $sp, 96 # 8-byte Folded Spill
219+
; LA64-NEXT: xvld $xr0, $a1, 0
220+
; LA64-NEXT: xvst $xr0, $sp, 64 # 32-byte Folded Spill
221+
; LA64-NEXT: move $fp, $a0
222+
; LA64-NEXT: xvpickve.d $xr0, $xr0, 3
223+
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 killed $xr0
224+
; LA64-NEXT: pcaddu18i $ra, %call36(log2)
225+
; LA64-NEXT: jirl $ra, $ra, 0
226+
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
227+
; LA64-NEXT: vst $vr0, $sp, 32 # 16-byte Folded Spill
228+
; LA64-NEXT: xvld $xr0, $sp, 64 # 32-byte Folded Reload
229+
; LA64-NEXT: xvpickve.d $xr0, $xr0, 2
230+
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 killed $xr0
231+
; LA64-NEXT: pcaddu18i $ra, %call36(log2)
232+
; LA64-NEXT: jirl $ra, $ra, 0
233+
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
234+
; LA64-NEXT: vld $vr1, $sp, 32 # 16-byte Folded Reload
235+
; LA64-NEXT: vextrins.d $vr0, $vr1, 16
236+
; LA64-NEXT: xvst $xr0, $sp, 32 # 32-byte Folded Spill
237+
; LA64-NEXT: xvld $xr0, $sp, 64 # 32-byte Folded Reload
238+
; LA64-NEXT: xvpickve.d $xr0, $xr0, 1
239+
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 killed $xr0
240+
; LA64-NEXT: pcaddu18i $ra, %call36(log2)
241+
; LA64-NEXT: jirl $ra, $ra, 0
242+
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $vr0
243+
; LA64-NEXT: vst $vr0, $sp, 16 # 16-byte Folded Spill
244+
; LA64-NEXT: xvld $xr0, $sp, 64 # 32-byte Folded Reload
245+
; LA64-NEXT: xvpickve.d $xr0, $xr0, 0
246+
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 killed $xr0
247+
; LA64-NEXT: pcaddu18i $ra, %call36(log2)
248+
; LA64-NEXT: jirl $ra, $ra, 0
249+
; LA64-NEXT: # kill: def $f0_64 killed $f0_64 def $xr0
250+
; LA64-NEXT: vld $vr1, $sp, 16 # 16-byte Folded Reload
251+
; LA64-NEXT: vextrins.d $vr0, $vr1, 16
252+
; LA64-NEXT: xvld $xr1, $sp, 32 # 32-byte Folded Reload
253+
; LA64-NEXT: xvpermi.q $xr0, $xr1, 2
254+
; LA64-NEXT: xvst $xr0, $fp, 0
255+
; LA64-NEXT: ld.d $fp, $sp, 96 # 8-byte Folded Reload
256+
; LA64-NEXT: ld.d $ra, $sp, 104 # 8-byte Folded Reload
257+
; LA64-NEXT: addi.d $sp, $sp, 112
258+
; LA64-NEXT: ret
259+
entry:
260+
%v = load <4 x double>, ptr %a
261+
%r = call <4 x double> @llvm.log2.v4f64(<4 x double> %v)
262+
store <4 x double> %r, ptr %res
263+
ret void
264+
}

0 commit comments

Comments
 (0)