Skip to content

Commit c2f8bc9

Browse files
committed
[ARM] Add tests for fmin/max + inf folds (NFC)
1 parent 04febd3 commit c2f8bc9

File tree

1 file changed

+256
-0
lines changed

1 file changed

+256
-0
lines changed

llvm/test/CodeGen/ARM/fminmax-folds.ll

Lines changed: 256 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,259 @@ define float @test_minimum_const_nan(float %x) {
4141
%r = call float @llvm.minimum.f32(float %x, float 0x7fff000000000000)
4242
ret float %r
4343
}
44+
45+
define float @test_minnum_const_inf(float %x) {
46+
; CHECK-LABEL: test_minnum_const_inf:
47+
; CHECK: @ %bb.0:
48+
; CHECK-NEXT: vldr s0, .LCPI4_0
49+
; CHECK-NEXT: vmov s2, r0
50+
; CHECK-NEXT: vminnm.f32 s0, s2, s0
51+
; CHECK-NEXT: vmov r0, s0
52+
; CHECK-NEXT: bx lr
53+
; CHECK-NEXT: .p2align 2
54+
; CHECK-NEXT: @ %bb.1:
55+
; CHECK-NEXT: .LCPI4_0:
56+
; CHECK-NEXT: .long 0x7f800000 @ float +Inf
57+
%r = call float @llvm.minnum.f32(float %x, float 0x7ff0000000000000)
58+
ret float %r
59+
}
60+
61+
define float @test_maxnum_const_inf(float %x) {
62+
; CHECK-LABEL: test_maxnum_const_inf:
63+
; CHECK: @ %bb.0:
64+
; CHECK-NEXT: vldr s0, .LCPI5_0
65+
; CHECK-NEXT: vmov s2, r0
66+
; CHECK-NEXT: vmaxnm.f32 s0, s2, s0
67+
; CHECK-NEXT: vmov r0, s0
68+
; CHECK-NEXT: bx lr
69+
; CHECK-NEXT: .p2align 2
70+
; CHECK-NEXT: @ %bb.1:
71+
; CHECK-NEXT: .LCPI5_0:
72+
; CHECK-NEXT: .long 0x7f800000 @ float +Inf
73+
%r = call float @llvm.maxnum.f32(float %x, float 0x7ff0000000000000)
74+
ret float %r
75+
}
76+
77+
define float @test_maximum_const_inf(float %x) {
78+
; CHECK-LABEL: test_maximum_const_inf:
79+
; CHECK: @ %bb.0:
80+
; CHECK-NEXT: vldr s0, .LCPI6_0
81+
; CHECK-NEXT: vmov s2, r0
82+
; CHECK-NEXT: vmax.f32 d0, d1, d0
83+
; CHECK-NEXT: vmov r0, s0
84+
; CHECK-NEXT: bx lr
85+
; CHECK-NEXT: .p2align 2
86+
; CHECK-NEXT: @ %bb.1:
87+
; CHECK-NEXT: .LCPI6_0:
88+
; CHECK-NEXT: .long 0x7f800000 @ float +Inf
89+
%r = call float @llvm.maximum.f32(float %x, float 0x7ff0000000000000)
90+
ret float %r
91+
}
92+
93+
define float @test_minimum_const_inf(float %x) {
94+
; CHECK-LABEL: test_minimum_const_inf:
95+
; CHECK: @ %bb.0:
96+
; CHECK-NEXT: vldr s0, .LCPI7_0
97+
; CHECK-NEXT: vmov s2, r0
98+
; CHECK-NEXT: vmin.f32 d0, d1, d0
99+
; CHECK-NEXT: vmov r0, s0
100+
; CHECK-NEXT: bx lr
101+
; CHECK-NEXT: .p2align 2
102+
; CHECK-NEXT: @ %bb.1:
103+
; CHECK-NEXT: .LCPI7_0:
104+
; CHECK-NEXT: .long 0x7f800000 @ float +Inf
105+
%r = call float @llvm.minimum.f32(float %x, float 0x7ff0000000000000)
106+
ret float %r
107+
}
108+
109+
define float @test_minnum_const_ninf(float %x) {
110+
; CHECK-LABEL: test_minnum_const_ninf:
111+
; CHECK: @ %bb.0:
112+
; CHECK-NEXT: vldr s0, .LCPI8_0
113+
; CHECK-NEXT: vmov s2, r0
114+
; CHECK-NEXT: vminnm.f32 s0, s2, s0
115+
; CHECK-NEXT: vmov r0, s0
116+
; CHECK-NEXT: bx lr
117+
; CHECK-NEXT: .p2align 2
118+
; CHECK-NEXT: @ %bb.1:
119+
; CHECK-NEXT: .LCPI8_0:
120+
; CHECK-NEXT: .long 0xff800000 @ float -Inf
121+
%r = call float @llvm.minnum.f32(float %x, float 0xfff0000000000000)
122+
ret float %r
123+
}
124+
125+
define float @test_maxnum_const_ninf(float %x) {
126+
; CHECK-LABEL: test_maxnum_const_ninf:
127+
; CHECK: @ %bb.0:
128+
; CHECK-NEXT: vldr s0, .LCPI9_0
129+
; CHECK-NEXT: vmov s2, r0
130+
; CHECK-NEXT: vmaxnm.f32 s0, s2, s0
131+
; CHECK-NEXT: vmov r0, s0
132+
; CHECK-NEXT: bx lr
133+
; CHECK-NEXT: .p2align 2
134+
; CHECK-NEXT: @ %bb.1:
135+
; CHECK-NEXT: .LCPI9_0:
136+
; CHECK-NEXT: .long 0xff800000 @ float -Inf
137+
%r = call float @llvm.maxnum.f32(float %x, float 0xfff0000000000000)
138+
ret float %r
139+
}
140+
141+
define float @test_maximum_const_ninf(float %x) {
142+
; CHECK-LABEL: test_maximum_const_ninf:
143+
; CHECK: @ %bb.0:
144+
; CHECK-NEXT: vldr s0, .LCPI10_0
145+
; CHECK-NEXT: vmov s2, r0
146+
; CHECK-NEXT: vmax.f32 d0, d1, d0
147+
; CHECK-NEXT: vmov r0, s0
148+
; CHECK-NEXT: bx lr
149+
; CHECK-NEXT: .p2align 2
150+
; CHECK-NEXT: @ %bb.1:
151+
; CHECK-NEXT: .LCPI10_0:
152+
; CHECK-NEXT: .long 0xff800000 @ float -Inf
153+
%r = call float @llvm.maximum.f32(float %x, float 0xfff0000000000000)
154+
ret float %r
155+
}
156+
157+
define float @test_minimum_const_ninf(float %x) {
158+
; CHECK-LABEL: test_minimum_const_ninf:
159+
; CHECK: @ %bb.0:
160+
; CHECK-NEXT: vldr s0, .LCPI11_0
161+
; CHECK-NEXT: vmov s2, r0
162+
; CHECK-NEXT: vmin.f32 d0, d1, d0
163+
; CHECK-NEXT: vmov r0, s0
164+
; CHECK-NEXT: bx lr
165+
; CHECK-NEXT: .p2align 2
166+
; CHECK-NEXT: @ %bb.1:
167+
; CHECK-NEXT: .LCPI11_0:
168+
; CHECK-NEXT: .long 0xff800000 @ float -Inf
169+
%r = call float @llvm.minimum.f32(float %x, float 0xfff0000000000000)
170+
ret float %r
171+
}
172+
173+
define float @test_minnum_const_inf_nnan(float %x) {
174+
; CHECK-LABEL: test_minnum_const_inf_nnan:
175+
; CHECK: @ %bb.0:
176+
; CHECK-NEXT: vldr s0, .LCPI12_0
177+
; CHECK-NEXT: vmov s2, r0
178+
; CHECK-NEXT: vminnm.f32 s0, s2, s0
179+
; CHECK-NEXT: vmov r0, s0
180+
; CHECK-NEXT: bx lr
181+
; CHECK-NEXT: .p2align 2
182+
; CHECK-NEXT: @ %bb.1:
183+
; CHECK-NEXT: .LCPI12_0:
184+
; CHECK-NEXT: .long 0x7f800000 @ float +Inf
185+
%r = call nnan float @llvm.minnum.f32(float %x, float 0x7ff0000000000000)
186+
ret float %r
187+
}
188+
189+
define float @test_maxnum_const_inf_nnan(float %x) {
190+
; CHECK-LABEL: test_maxnum_const_inf_nnan:
191+
; CHECK: @ %bb.0:
192+
; CHECK-NEXT: vldr s0, .LCPI13_0
193+
; CHECK-NEXT: vmov s2, r0
194+
; CHECK-NEXT: vmaxnm.f32 s0, s2, s0
195+
; CHECK-NEXT: vmov r0, s0
196+
; CHECK-NEXT: bx lr
197+
; CHECK-NEXT: .p2align 2
198+
; CHECK-NEXT: @ %bb.1:
199+
; CHECK-NEXT: .LCPI13_0:
200+
; CHECK-NEXT: .long 0x7f800000 @ float +Inf
201+
%r = call nnan float @llvm.maxnum.f32(float %x, float 0x7ff0000000000000)
202+
ret float %r
203+
}
204+
205+
define float @test_maximum_const_inf_nnan(float %x) {
206+
; CHECK-LABEL: test_maximum_const_inf_nnan:
207+
; CHECK: @ %bb.0:
208+
; CHECK-NEXT: vldr s0, .LCPI14_0
209+
; CHECK-NEXT: vmov s2, r0
210+
; CHECK-NEXT: vmax.f32 d0, d1, d0
211+
; CHECK-NEXT: vmov r0, s0
212+
; CHECK-NEXT: bx lr
213+
; CHECK-NEXT: .p2align 2
214+
; CHECK-NEXT: @ %bb.1:
215+
; CHECK-NEXT: .LCPI14_0:
216+
; CHECK-NEXT: .long 0x7f800000 @ float +Inf
217+
%r = call nnan float @llvm.maximum.f32(float %x, float 0x7ff0000000000000)
218+
ret float %r
219+
}
220+
221+
define float @test_minimum_const_inf_nnan(float %x) {
222+
; CHECK-LABEL: test_minimum_const_inf_nnan:
223+
; CHECK: @ %bb.0:
224+
; CHECK-NEXT: vldr s0, .LCPI15_0
225+
; CHECK-NEXT: vmov s2, r0
226+
; CHECK-NEXT: vmin.f32 d0, d1, d0
227+
; CHECK-NEXT: vmov r0, s0
228+
; CHECK-NEXT: bx lr
229+
; CHECK-NEXT: .p2align 2
230+
; CHECK-NEXT: @ %bb.1:
231+
; CHECK-NEXT: .LCPI15_0:
232+
; CHECK-NEXT: .long 0x7f800000 @ float +Inf
233+
%r = call nnan float @llvm.minimum.f32(float %x, float 0x7ff0000000000000)
234+
ret float %r
235+
}
236+
237+
define float @test_minnum_const_ninf_nnan(float %x) {
238+
; CHECK-LABEL: test_minnum_const_ninf_nnan:
239+
; CHECK: @ %bb.0:
240+
; CHECK-NEXT: vldr s0, .LCPI16_0
241+
; CHECK-NEXT: vmov s2, r0
242+
; CHECK-NEXT: vminnm.f32 s0, s2, s0
243+
; CHECK-NEXT: vmov r0, s0
244+
; CHECK-NEXT: bx lr
245+
; CHECK-NEXT: .p2align 2
246+
; CHECK-NEXT: @ %bb.1:
247+
; CHECK-NEXT: .LCPI16_0:
248+
; CHECK-NEXT: .long 0xff800000 @ float -Inf
249+
%r = call nnan float @llvm.minnum.f32(float %x, float 0xfff0000000000000)
250+
ret float %r
251+
}
252+
253+
define float @test_maxnum_const_ninf_nnan(float %x) {
254+
; CHECK-LABEL: test_maxnum_const_ninf_nnan:
255+
; CHECK: @ %bb.0:
256+
; CHECK-NEXT: vldr s0, .LCPI17_0
257+
; CHECK-NEXT: vmov s2, r0
258+
; CHECK-NEXT: vmaxnm.f32 s0, s2, s0
259+
; CHECK-NEXT: vmov r0, s0
260+
; CHECK-NEXT: bx lr
261+
; CHECK-NEXT: .p2align 2
262+
; CHECK-NEXT: @ %bb.1:
263+
; CHECK-NEXT: .LCPI17_0:
264+
; CHECK-NEXT: .long 0xff800000 @ float -Inf
265+
%r = call nnan float @llvm.maxnum.f32(float %x, float 0xfff0000000000000)
266+
ret float %r
267+
}
268+
269+
define float @test_maximum_const_ninf_nnan(float %x) {
270+
; CHECK-LABEL: test_maximum_const_ninf_nnan:
271+
; CHECK: @ %bb.0:
272+
; CHECK-NEXT: vldr s0, .LCPI18_0
273+
; CHECK-NEXT: vmov s2, r0
274+
; CHECK-NEXT: vmax.f32 d0, d1, d0
275+
; CHECK-NEXT: vmov r0, s0
276+
; CHECK-NEXT: bx lr
277+
; CHECK-NEXT: .p2align 2
278+
; CHECK-NEXT: @ %bb.1:
279+
; CHECK-NEXT: .LCPI18_0:
280+
; CHECK-NEXT: .long 0xff800000 @ float -Inf
281+
%r = call nnan float @llvm.maximum.f32(float %x, float 0xfff0000000000000)
282+
ret float %r
283+
}
284+
285+
define float @test_minimum_const_ninf_nnan(float %x) {
286+
; CHECK-LABEL: test_minimum_const_ninf_nnan:
287+
; CHECK: @ %bb.0:
288+
; CHECK-NEXT: vldr s0, .LCPI19_0
289+
; CHECK-NEXT: vmov s2, r0
290+
; CHECK-NEXT: vmin.f32 d0, d1, d0
291+
; CHECK-NEXT: vmov r0, s0
292+
; CHECK-NEXT: bx lr
293+
; CHECK-NEXT: .p2align 2
294+
; CHECK-NEXT: @ %bb.1:
295+
; CHECK-NEXT: .LCPI19_0:
296+
; CHECK-NEXT: .long 0xff800000 @ float -Inf
297+
%r = call nnan float @llvm.minimum.f32(float %x, float 0xfff0000000000000)
298+
ret float %r
299+
}

0 commit comments

Comments
 (0)