@@ -347,3 +347,91 @@ define double @masked_uint_to_fpext3(i32 %x) {
347
347
%r = fpext float %f to double
348
348
ret double %r
349
349
}
350
+
351
+ define i32 @fptosi_nonnorm (float nofpclass(norm) %x ) {
352
+ ; CHECK-LABEL: @fptosi_nonnorm(
353
+ ; CHECK-NEXT: ret i32 0
354
+ ;
355
+ %ret = fptosi float %x to i32
356
+ ret i32 %ret
357
+ }
358
+
359
+ define i32 @fptoui_nonnorm (float nofpclass(pnorm) %x ) {
360
+ ; CHECK-LABEL: @fptoui_nonnorm(
361
+ ; CHECK-NEXT: ret i32 0
362
+ ;
363
+ %ret = fptoui float %x to i32
364
+ ret i32 %ret
365
+ }
366
+
367
+ define i32 @fptosi_nonnnorm (float nofpclass(nnorm) %x ) {
368
+ ; CHECK-LABEL: @fptosi_nonnnorm(
369
+ ; CHECK-NEXT: [[RET:%.*]] = fptosi float [[X:%.*]] to i32
370
+ ; CHECK-NEXT: ret i32 [[RET]]
371
+ ;
372
+ %ret = fptosi float %x to i32
373
+ ret i32 %ret
374
+ }
375
+
376
+ define i32 @fptoui_nonnnorm (float nofpclass(nnorm) %x ) {
377
+ ; CHECK-LABEL: @fptoui_nonnnorm(
378
+ ; CHECK-NEXT: [[RET:%.*]] = fptoui float [[X:%.*]] to i32
379
+ ; CHECK-NEXT: ret i32 [[RET]]
380
+ ;
381
+ %ret = fptoui float %x to i32
382
+ ret i32 %ret
383
+ }
384
+
385
+ define i32 @fptosi_nonnorm_copysign (float %x ) {
386
+ ; CHECK-LABEL: @fptosi_nonnorm_copysign(
387
+ ; CHECK-NEXT: ret i32 0
388
+ ;
389
+ %val = call float @llvm.copysign.f32 (float 0 .0 , float %x )
390
+ %ret = fptosi float %val to i32
391
+ ret i32 %ret
392
+ }
393
+
394
+ define <2 x i32 > @fptosi_nonnorm_copysign_vec (<2 x float > %x ) {
395
+ ; CHECK-LABEL: @fptosi_nonnorm_copysign_vec(
396
+ ; CHECK-NEXT: ret <2 x i32> zeroinitializer
397
+ ;
398
+ %val = call <2 x float > @llvm.copysign.v2f32 (<2 x float > zeroinitializer , <2 x float > %x )
399
+ %ret = fptosi <2 x float > %val to <2 x i32 >
400
+ ret <2 x i32 > %ret
401
+ }
402
+
403
+ define i32 @fptosi_nonnorm_fmul (float %x ) {
404
+ ; CHECK-LABEL: @fptosi_nonnorm_fmul(
405
+ ; CHECK-NEXT: [[SEL:%.*]] = fmul float [[X:%.*]], 0.000000e+00
406
+ ; CHECK-NEXT: [[RET:%.*]] = fptosi float [[SEL]] to i32
407
+ ; CHECK-NEXT: ret i32 [[RET]]
408
+ ;
409
+ %sel = fmul float %x , 0 .000000e+00
410
+ %ret = fptosi float %sel to i32
411
+ ret i32 %ret
412
+ }
413
+
414
+ define i32 @fptosi_select (i1 %cond ) {
415
+ ; CHECK-LABEL: @fptosi_select(
416
+ ; CHECK-NEXT: [[RET:%.*]] = select i1 [[COND:%.*]], i32 1, i32 -1
417
+ ; CHECK-NEXT: ret i32 [[RET]]
418
+ ;
419
+ %sel = select i1 %cond , float 1 .0 , float -1 .0
420
+ %ret = fptosi float %sel to i32
421
+ ret i32 %ret
422
+ }
423
+
424
+ define i32 @mul_pos_zero_convert (i32 %a ) {
425
+ ; CHECK-LABEL: @mul_pos_zero_convert(
426
+ ; CHECK-NEXT: entry:
427
+ ; CHECK-NEXT: [[FP:%.*]] = sitofp i32 [[A:%.*]] to float
428
+ ; CHECK-NEXT: [[RET:%.*]] = fmul float [[FP]], 0.000000e+00
429
+ ; CHECK-NEXT: [[CONV:%.*]] = fptosi float [[RET]] to i32
430
+ ; CHECK-NEXT: ret i32 [[CONV]]
431
+ ;
432
+ entry:
433
+ %fp = sitofp i32 %a to float
434
+ %ret = fmul float %fp , 0 .000000e+00
435
+ %conv = fptosi float %ret to i32
436
+ ret i32 %conv
437
+ }
0 commit comments