Skip to content

Commit 43206d1

Browse files
authored
Hexagon: Add test for llvm.exp10 intrinsic (#148664)
This is mostly to test the libcall behavior
1 parent f071073 commit 43206d1

File tree

1 file changed

+232
-0
lines changed

1 file changed

+232
-0
lines changed
Lines changed: 232 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc -mtriple=hexagon < %s | FileCheck %s
3+
; RUN: llc -mtriple=hexagon-unknown-linux-gnu < %s | FileCheck %s
4+
; RUN: llc -mtriple=hexagon-unknown-linux-musl < %s | FileCheck %s
5+
6+
define half @exp10_f16(half %x) #0 {
7+
; CHECK-LABEL: exp10_f16:
8+
; CHECK: // %bb.0:
9+
; CHECK-NEXT: {
10+
; CHECK-NEXT: call __extendhfsf2
11+
; CHECK-NEXT: allocframe(r29,#0):raw
12+
; CHECK-NEXT: }
13+
; CHECK-NEXT: {
14+
; CHECK-NEXT: call exp10f
15+
; CHECK-NEXT: }
16+
; CHECK-NEXT: {
17+
; CHECK-NEXT: call __truncsfhf2
18+
; CHECK-NEXT: }
19+
; CHECK-NEXT: {
20+
; CHECK-NEXT: r31:30 = dealloc_return(r30):raw
21+
; CHECK-NEXT: }
22+
%r = call half @llvm.exp10.f16(half %x)
23+
ret half %r
24+
}
25+
26+
define <2 x half> @exp10_v2f16(<2 x half> %x) #0 {
27+
; CHECK-LABEL: exp10_v2f16:
28+
; CHECK: // %bb.0:
29+
; CHECK-NEXT: {
30+
; CHECK-NEXT: call __extendhfsf2
31+
; CHECK-NEXT: r16 = r1
32+
; CHECK-NEXT: memd(r29+#-16) = r17:16
33+
; CHECK-NEXT: allocframe(#8)
34+
; CHECK-NEXT: } // 8-byte Folded Spill
35+
; CHECK-NEXT: {
36+
; CHECK-NEXT: call exp10f
37+
; CHECK-NEXT: }
38+
; CHECK-NEXT: {
39+
; CHECK-NEXT: call __truncsfhf2
40+
; CHECK-NEXT: }
41+
; CHECK-NEXT: {
42+
; CHECK-NEXT: call __extendhfsf2
43+
; CHECK-NEXT: r17 = r0
44+
; CHECK-NEXT: r0 = r16
45+
; CHECK-NEXT: }
46+
; CHECK-NEXT: {
47+
; CHECK-NEXT: call exp10f
48+
; CHECK-NEXT: }
49+
; CHECK-NEXT: {
50+
; CHECK-NEXT: call __truncsfhf2
51+
; CHECK-NEXT: }
52+
; CHECK-NEXT: {
53+
; CHECK-NEXT: r1 = zxth(r0)
54+
; CHECK-NEXT: r2 = zxth(r17)
55+
; CHECK-NEXT: r17:16 = memd(r29+#0)
56+
; CHECK-NEXT: } // 8-byte Folded Reload
57+
; CHECK-NEXT: {
58+
; CHECK-NEXT: r0 = r2
59+
; CHECK-NEXT: dealloc_return
60+
; CHECK-NEXT: }
61+
%r = call <2 x half> @llvm.exp10.v2f16(<2 x half> %x)
62+
ret <2 x half> %r
63+
}
64+
65+
define float @exp10_f32(float %x) #0 {
66+
; CHECK-LABEL: exp10_f32:
67+
; CHECK: // %bb.0:
68+
; CHECK-NEXT: {
69+
; CHECK-NEXT: call exp10f
70+
; CHECK-NEXT: allocframe(r29,#0):raw
71+
; CHECK-NEXT: }
72+
; CHECK-NEXT: {
73+
; CHECK-NEXT: r31:30 = dealloc_return(r30):raw
74+
; CHECK-NEXT: }
75+
%r = call float @llvm.exp10.f32(float %x)
76+
ret float %r
77+
}
78+
79+
define <2 x float> @exp10_v2f32(<2 x float> %x) #0 {
80+
; CHECK-LABEL: exp10_v2f32:
81+
; CHECK: // %bb.0:
82+
; CHECK-NEXT: {
83+
; CHECK-NEXT: call exp10f
84+
; CHECK-NEXT: r16 = r1
85+
; CHECK-NEXT: memd(r29+#-16) = r17:16
86+
; CHECK-NEXT: allocframe(#8)
87+
; CHECK-NEXT: } // 8-byte Folded Spill
88+
; CHECK-NEXT: {
89+
; CHECK-NEXT: call exp10f
90+
; CHECK-NEXT: r17 = r0
91+
; CHECK-NEXT: r0 = r16
92+
; CHECK-NEXT: }
93+
; CHECK-NEXT: {
94+
; CHECK-NEXT: r1:0 = combine(r0,r17)
95+
; CHECK-NEXT: r17:16 = memd(r29+#0)
96+
; CHECK-NEXT: dealloc_return
97+
; CHECK-NEXT: } // 8-byte Folded Reload
98+
%r = call <2 x float> @llvm.exp10.v2f32(<2 x float> %x)
99+
ret <2 x float> %r
100+
}
101+
102+
define double @exp10_f64(double %x) #0 {
103+
; CHECK-LABEL: exp10_f64:
104+
; CHECK: // %bb.0:
105+
; CHECK-NEXT: {
106+
; CHECK-NEXT: call exp10
107+
; CHECK-NEXT: allocframe(r29,#0):raw
108+
; CHECK-NEXT: }
109+
; CHECK-NEXT: {
110+
; CHECK-NEXT: r31:30 = dealloc_return(r30):raw
111+
; CHECK-NEXT: }
112+
%r = call double @llvm.exp10.f64(double %x)
113+
ret double %r
114+
}
115+
116+
define <2 x double> @exp10_v2f64(<2 x double> %x) #0 {
117+
; CHECK-LABEL: exp10_v2f64:
118+
; CHECK: // %bb.0:
119+
; CHECK-NEXT: {
120+
; CHECK-NEXT: r16 = r0
121+
; CHECK-NEXT: r1:0 = combine(r3,r2)
122+
; CHECK-NEXT: memd(r29+#-16) = r17:16
123+
; CHECK-NEXT: allocframe(#24)
124+
; CHECK-NEXT: } // 8-byte Folded Spill
125+
; CHECK-NEXT: {
126+
; CHECK-NEXT: call exp10
127+
; CHECK-NEXT: r19:18 = combine(r5,r4)
128+
; CHECK-NEXT: memd(r29+#8) = r19:18
129+
; CHECK-NEXT: memd(r29+#0) = r21:20
130+
; CHECK-NEXT: } // 8-byte Folded Spill
131+
; CHECK-NEXT: {
132+
; CHECK-NEXT: call exp10
133+
; CHECK-NEXT: r21:20 = combine(r1,r0)
134+
; CHECK-NEXT: r1:0 = combine(r19,r18)
135+
; CHECK-NEXT: }
136+
; CHECK-NEXT: {
137+
; CHECK-NEXT: memd(r16+#8) = r1:0
138+
; CHECK-NEXT: memd(r16+#0) = r21:20
139+
; CHECK-NEXT: }
140+
; CHECK-NEXT: {
141+
; CHECK-NEXT: r17:16 = memd(r29+#16)
142+
; CHECK-NEXT: r19:18 = memd(r29+#8)
143+
; CHECK-NEXT: } // 8-byte Folded Reload
144+
; CHECK-NEXT: {
145+
; CHECK-NEXT: r21:20 = memd(r29+#0)
146+
; CHECK-NEXT: dealloc_return
147+
; CHECK-NEXT: } // 8-byte Folded Reload
148+
%r = call <2 x double> @llvm.exp10.v2f64(<2 x double> %x)
149+
ret <2 x double> %r
150+
}
151+
152+
define fp128 @exp10_f128(fp128 %x) #0 {
153+
; CHECK-LABEL: exp10_f128:
154+
; CHECK: // %bb.0:
155+
; CHECK-NEXT: {
156+
; CHECK-NEXT: r16 = r0
157+
; CHECK-NEXT: memd(r29+#-16) = r17:16
158+
; CHECK-NEXT: allocframe(#24)
159+
; CHECK-NEXT: } // 8-byte Folded Spill
160+
; CHECK-NEXT: {
161+
; CHECK-NEXT: call exp10l
162+
; CHECK-NEXT: r0 = add(r29,#0)
163+
; CHECK-NEXT: }
164+
; CHECK-NEXT: {
165+
; CHECK-NEXT: r1:0 = memd(r29+#0)
166+
; CHECK-NEXT: r3:2 = memd(r29+#8)
167+
; CHECK-NEXT: }
168+
; CHECK-NEXT: {
169+
; CHECK-NEXT: memd(r16+#8) = r3:2
170+
; CHECK-NEXT: memd(r16+#0) = r1:0
171+
; CHECK-NEXT: }
172+
; CHECK-NEXT: {
173+
; CHECK-NEXT: r17:16 = memd(r29+#16)
174+
; CHECK-NEXT: dealloc_return
175+
; CHECK-NEXT: } // 8-byte Folded Reload
176+
%r = call fp128 @llvm.exp10.f128(fp128 %x)
177+
ret fp128 %r
178+
}
179+
180+
define <2 x fp128> @exp10_v2f128(<2 x fp128> %x) #0 {
181+
; CHECK-LABEL: exp10_v2f128:
182+
; CHECK: // %bb.0:
183+
; CHECK-NEXT: {
184+
; CHECK-NEXT: r16 = r0
185+
; CHECK-NEXT: memd(r29+#-16) = r17:16
186+
; CHECK-NEXT: allocframe(#56)
187+
; CHECK-NEXT: } // 8-byte Folded Spill
188+
; CHECK-NEXT: {
189+
; CHECK-NEXT: r0 = add(r29,#16)
190+
; CHECK-NEXT: memd(r29+#40) = r19:18
191+
; CHECK-NEXT: memd(r29+#32) = r21:20
192+
; CHECK-NEXT: } // 8-byte Folded Spill
193+
; CHECK-NEXT: {
194+
; CHECK-NEXT: call exp10l
195+
; CHECK-NEXT: r19:18 = memd(r29+#64)
196+
; CHECK-NEXT: r21:20 = memd(r29+#72)
197+
; CHECK-NEXT: }
198+
; CHECK-NEXT: {
199+
; CHECK-NEXT: call exp10l
200+
; CHECK-NEXT: r0 = add(r29,#0)
201+
; CHECK-NEXT: r3:2 = combine(r19,r18)
202+
; CHECK-NEXT: r5:4 = combine(r21,r20)
203+
; CHECK-NEXT: }
204+
; CHECK-NEXT: {
205+
; CHECK-NEXT: r1:0 = memd(r29+#16)
206+
; CHECK-NEXT: r3:2 = memd(r29+#24)
207+
; CHECK-NEXT: }
208+
; CHECK-NEXT: {
209+
; CHECK-NEXT: r5:4 = memd(r29+#0)
210+
; CHECK-NEXT: r7:6 = memd(r29+#8)
211+
; CHECK-NEXT: }
212+
; CHECK-NEXT: {
213+
; CHECK-NEXT: memd(r16+#24) = r7:6
214+
; CHECK-NEXT: memd(r16+#16) = r5:4
215+
; CHECK-NEXT: }
216+
; CHECK-NEXT: {
217+
; CHECK-NEXT: memd(r16+#8) = r3:2
218+
; CHECK-NEXT: memd(r16+#0) = r1:0
219+
; CHECK-NEXT: }
220+
; CHECK-NEXT: {
221+
; CHECK-NEXT: r17:16 = memd(r29+#48)
222+
; CHECK-NEXT: r19:18 = memd(r29+#40)
223+
; CHECK-NEXT: } // 8-byte Folded Reload
224+
; CHECK-NEXT: {
225+
; CHECK-NEXT: r21:20 = memd(r29+#32)
226+
; CHECK-NEXT: dealloc_return
227+
; CHECK-NEXT: } // 8-byte Folded Reload
228+
%r = call <2 x fp128> @llvm.exp10.v2f128(<2 x fp128> %x)
229+
ret <2 x fp128> %r
230+
}
231+
232+
attributes #0 = { nounwind }

0 commit comments

Comments
 (0)