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