@@ -149,6 +149,182 @@ TEST_F(MatchSelectPatternTest, FMinConstantZeroNsz) {
149
149
expectPattern ({SPF_FMINNUM, SPNB_RETURNS_OTHER, true });
150
150
}
151
151
152
+ TEST_F (MatchSelectPatternTest, FMinMismatchConstantZero1) {
153
+ parseAssembly (
154
+ " define float @test(float %a) {\n "
155
+ " %1 = fcmp olt float -0.0, %a\n "
156
+ " %A = select i1 %1, float 0.0, float %a\n "
157
+ " ret float %A\n "
158
+ " }\n " );
159
+ // FIXME: The sign of zero doesn't matter in fcmp.
160
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
161
+ }
162
+
163
+ TEST_F (MatchSelectPatternTest, FMinMismatchConstantZero2) {
164
+ parseAssembly (
165
+ " define float @test(float %a) {\n "
166
+ " %1 = fcmp ogt float %a, -0.0\n "
167
+ " %A = select i1 %1, float 0.0, float %a\n "
168
+ " ret float %A\n "
169
+ " }\n " );
170
+ // FIXME: The sign of zero doesn't matter in fcmp.
171
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
172
+ }
173
+
174
+ TEST_F (MatchSelectPatternTest, FMinMismatchConstantZero3) {
175
+ parseAssembly (
176
+ " define float @test(float %a) {\n "
177
+ " %1 = fcmp olt float 0.0, %a\n "
178
+ " %A = select i1 %1, float -0.0, float %a\n "
179
+ " ret float %A\n "
180
+ " }\n " );
181
+ // FIXME: The sign of zero doesn't matter in fcmp.
182
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
183
+ }
184
+
185
+ TEST_F (MatchSelectPatternTest, FMinMismatchConstantZero4) {
186
+ parseAssembly (
187
+ " define float @test(float %a) {\n "
188
+ " %1 = fcmp ogt float %a, 0.0\n "
189
+ " %A = select i1 %1, float -0.0, float %a\n "
190
+ " ret float %A\n "
191
+ " }\n " );
192
+ // FIXME: The sign of zero doesn't matter in fcmp.
193
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
194
+ }
195
+
196
+ TEST_F (MatchSelectPatternTest, FMinMismatchConstantZero5) {
197
+ parseAssembly (
198
+ " define float @test(float %a) {\n "
199
+ " %1 = fcmp ogt float -0.0, %a\n "
200
+ " %A = select i1 %1, float %a, float 0.0\n "
201
+ " ret float %A\n "
202
+ " }\n " );
203
+ // FIXME: The sign of zero doesn't matter in fcmp.
204
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
205
+ }
206
+
207
+ TEST_F (MatchSelectPatternTest, FMinMismatchConstantZero6) {
208
+ parseAssembly (
209
+ " define float @test(float %a) {\n "
210
+ " %1 = fcmp olt float %a, -0.0\n "
211
+ " %A = select i1 %1, float %a, float 0.0\n "
212
+ " ret float %A\n "
213
+ " }\n " );
214
+ // FIXME: The sign of zero doesn't matter in fcmp.
215
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
216
+ }
217
+
218
+ TEST_F (MatchSelectPatternTest, FMinMismatchConstantZero7) {
219
+ parseAssembly (
220
+ " define float @test(float %a) {\n "
221
+ " %1 = fcmp ogt float 0.0, %a\n "
222
+ " %A = select i1 %1, float %a, float -0.0\n "
223
+ " ret float %A\n "
224
+ " }\n " );
225
+ // FIXME: The sign of zero doesn't matter in fcmp.
226
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
227
+ }
228
+
229
+ TEST_F (MatchSelectPatternTest, FMinMismatchConstantZero8) {
230
+ parseAssembly (
231
+ " define float @test(float %a) {\n "
232
+ " %1 = fcmp olt float %a, 0.0\n "
233
+ " %A = select i1 %1, float %a, float -0.0\n "
234
+ " ret float %A\n "
235
+ " }\n " );
236
+ // FIXME: The sign of zero doesn't matter in fcmp.
237
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
238
+ }
239
+
240
+ TEST_F (MatchSelectPatternTest, FMaxMismatchConstantZero1) {
241
+ parseAssembly (
242
+ " define float @test(float %a) {\n "
243
+ " %1 = fcmp ogt float -0.0, %a\n "
244
+ " %A = select i1 %1, float 0.0, float %a\n "
245
+ " ret float %A\n "
246
+ " }\n " );
247
+ // FIXME: The sign of zero doesn't matter in fcmp.
248
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
249
+ }
250
+
251
+ TEST_F (MatchSelectPatternTest, FMaxMismatchConstantZero2) {
252
+ parseAssembly (
253
+ " define float @test(float %a) {\n "
254
+ " %1 = fcmp olt float %a, -0.0\n "
255
+ " %A = select i1 %1, float 0.0, float %a\n "
256
+ " ret float %A\n "
257
+ " }\n " );
258
+ // FIXME: The sign of zero doesn't matter in fcmp.
259
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
260
+ }
261
+
262
+ TEST_F (MatchSelectPatternTest, FMaxMismatchConstantZero3) {
263
+ parseAssembly (
264
+ " define float @test(float %a) {\n "
265
+ " %1 = fcmp ogt float 0.0, %a\n "
266
+ " %A = select i1 %1, float -0.0, float %a\n "
267
+ " ret float %A\n "
268
+ " }\n " );
269
+ // FIXME: The sign of zero doesn't matter in fcmp.
270
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
271
+ }
272
+
273
+ TEST_F (MatchSelectPatternTest, FMaxMismatchConstantZero4) {
274
+ parseAssembly (
275
+ " define float @test(float %a) {\n "
276
+ " %1 = fcmp olt float %a, 0.0\n "
277
+ " %A = select i1 %1, float -0.0, float %a\n "
278
+ " ret float %A\n "
279
+ " }\n " );
280
+ // FIXME: The sign of zero doesn't matter in fcmp.
281
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
282
+ }
283
+
284
+ TEST_F (MatchSelectPatternTest, FMaxMismatchConstantZero5) {
285
+ parseAssembly (
286
+ " define float @test(float %a) {\n "
287
+ " %1 = fcmp olt float -0.0, %a\n "
288
+ " %A = select i1 %1, float %a, float 0.0\n "
289
+ " ret float %A\n "
290
+ " }\n " );
291
+ // FIXME: The sign of zero doesn't matter in fcmp.
292
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
293
+ }
294
+
295
+ TEST_F (MatchSelectPatternTest, FMaxMismatchConstantZero6) {
296
+ parseAssembly (
297
+ " define float @test(float %a) {\n "
298
+ " %1 = fcmp ogt float %a, -0.0\n "
299
+ " %A = select i1 %1, float %a, float 0.0\n "
300
+ " ret float %A\n "
301
+ " }\n " );
302
+ // FIXME: The sign of zero doesn't matter in fcmp.
303
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
304
+ }
305
+
306
+ TEST_F (MatchSelectPatternTest, FMaxMismatchConstantZero7) {
307
+ parseAssembly (
308
+ " define float @test(float %a) {\n "
309
+ " %1 = fcmp olt float 0.0, %a\n "
310
+ " %A = select i1 %1, float %a, float -0.0\n "
311
+ " ret float %A\n "
312
+ " }\n " );
313
+ // FIXME: The sign of zero doesn't matter in fcmp.
314
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
315
+ }
316
+
317
+ TEST_F (MatchSelectPatternTest, FMaxMismatchConstantZero8) {
318
+ parseAssembly (
319
+ " define float @test(float %a) {\n "
320
+ " %1 = fcmp ogt float %a, 0.0\n "
321
+ " %A = select i1 %1, float %a, float -0.0\n "
322
+ " ret float %A\n "
323
+ " }\n " );
324
+ // FIXME: The sign of zero doesn't matter in fcmp.
325
+ expectPattern ({SPF_UNKNOWN, SPNB_NA, false });
326
+ }
327
+
152
328
TEST_F (MatchSelectPatternTest, VectorFMinimum) {
153
329
parseAssembly (
154
330
" define <4 x float> @test(<4 x float> %a) {\n "
0 commit comments