@@ -417,3 +417,87 @@ loop:
417417exit:
418418 ret void
419419}
420+
421+ ; FIXME: These are miscompilation issues.
422+ define void @test_fp_to_int_irrealizable_initval () {
423+ ; CHECK-LABEL: @test_fp_to_int_irrealizable_initval(
424+ ; CHECK-NEXT: entry:
425+ ; CHECK-NEXT: br label [[LOOP:%.*]]
426+ ; CHECK: loop:
427+ ; CHECK-NEXT: [[IV_INT:%.*]] = phi i32 [ 100000000, [[ENTRY:%.*]] ], [ [[IV_NEXT_INT:%.*]], [[LOOP]] ]
428+ ; CHECK-NEXT: call void @opaque()
429+ ; CHECK-NEXT: [[IV_NEXT_INT]] = add nsw i32 [[IV_INT]], -17
430+ ; CHECK-NEXT: [[CMP:%.*]] = icmp samesign ult i32 [[IV_NEXT_INT]], 25
431+ ; CHECK-NEXT: br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]
432+ ; CHECK: exit:
433+ ; CHECK-NEXT: ret void
434+ ;
435+ entry:
436+ br label %loop
437+
438+ loop:
439+ %iv = phi float [ 1 .000000e+08 , %entry ], [ %iv.next , %loop ]
440+ call void @opaque ()
441+ %iv.next = fadd float %iv , -1 .700000e+01
442+ %cmp = fcmp ult float %iv.next , 2 .500000e+01
443+ br i1 %cmp , label %exit , label %loop
444+
445+ exit:
446+ ret void
447+ }
448+
449+ define void @test_fp_to_int_irrealizable_exitval () {
450+ ; CHECK-LABEL: @test_fp_to_int_irrealizable_exitval(
451+ ; CHECK-NEXT: entry:
452+ ; CHECK-NEXT: br label [[LOOP:%.*]]
453+ ; CHECK: loop:
454+ ; CHECK-NEXT: [[IV_INT:%.*]] = phi i32 [ 25, [[ENTRY:%.*]] ], [ [[IV_NEXT_INT:%.*]], [[LOOP]] ]
455+ ; CHECK-NEXT: call void @opaque()
456+ ; CHECK-NEXT: [[IV_NEXT_INT]] = add nuw nsw i32 [[IV_INT]], 17
457+ ; CHECK-NEXT: [[CMP:%.*]] = icmp samesign ugt i32 [[IV_NEXT_INT]], 100000000
458+ ; CHECK-NEXT: br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]
459+ ; CHECK: exit:
460+ ; CHECK-NEXT: ret void
461+ ;
462+ entry:
463+ br label %loop
464+
465+ loop:
466+ %iv = phi float [ 2 .500000e+01 , %entry ], [ %iv.next , %loop ]
467+ call void @opaque ()
468+ %iv.next = fadd float %iv , 1 .700000e+01
469+ %cmp = fcmp ugt float %iv.next , 1 .000000e+08
470+ br i1 %cmp , label %exit , label %loop
471+
472+ exit:
473+ ret void
474+ }
475+
476+ define void @test_fp_to_int_irrealizable_negative_exitval () {
477+ ; CHECK-LABEL: @test_fp_to_int_irrealizable_negative_exitval(
478+ ; CHECK-NEXT: entry:
479+ ; CHECK-NEXT: br label [[LOOP:%.*]]
480+ ; CHECK: loop:
481+ ; CHECK-NEXT: [[IV_INT:%.*]] = phi i32 [ -25, [[ENTRY:%.*]] ], [ [[IV_NEXT_INT:%.*]], [[LOOP]] ]
482+ ; CHECK-NEXT: call void @opaque()
483+ ; CHECK-NEXT: [[IV_NEXT_INT]] = add nsw i32 [[IV_INT]], -17
484+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[IV_NEXT_INT]], -100000000
485+ ; CHECK-NEXT: br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]
486+ ; CHECK: exit:
487+ ; CHECK-NEXT: ret void
488+ ;
489+ entry:
490+ br label %loop
491+
492+ loop:
493+ %iv = phi float [ -2 .500000e+01 , %entry ], [ %iv.next , %loop ]
494+ call void @opaque ()
495+ %iv.next = fadd float %iv , -1 .700000e+01
496+ %cmp = fcmp ult float %iv.next , -1 .000000e+08
497+ br i1 %cmp , label %exit , label %loop
498+
499+ exit:
500+ ret void
501+ }
502+
503+ declare void @opaque ()
0 commit comments