@@ -41,3 +41,259 @@ define float @test_minimum_const_nan(float %x) {
41
41
%r = call float @llvm.minimum.f32 (float %x , float 0x7fff000000000000 )
42
42
ret float %r
43
43
}
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