@@ -499,4 +499,61 @@ exit:
499499 ret void
500500}
501501
502+ define void @test_fp_to_int_irrealizable_exitval_int64_min () {
503+ ; CHECK-LABEL: @test_fp_to_int_irrealizable_exitval_int64_min(
504+ ; CHECK-NEXT: entry:
505+ ; CHECK-NEXT: br label [[LOOP:%.*]]
506+ ; CHECK: loop:
507+ ; CHECK-NEXT: [[IV:%.*]] = phi double [ 2.500000e+01, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
508+ ; CHECK-NEXT: call void @opaque()
509+ ; CHECK-NEXT: [[IV_NEXT]] = fadd double [[IV]], 1.700000e+01
510+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double [[IV_NEXT]], 0xC3E0000000000000
511+ ; CHECK-NEXT: br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]
512+ ; CHECK: exit:
513+ ; CHECK-NEXT: ret void
514+ ;
515+ entry:
516+ br label %loop
517+
518+ loop:
519+ %iv = phi double [ 2 .500000e+01 , %entry ], [ %iv.next , %loop ]
520+ call void @opaque ()
521+ %iv.next = fadd double %iv , 1 .700000e+01
522+ %cmp = fcmp ult double %iv.next , 0xC3E0000000000000
523+ br i1 %cmp , label %exit , label %loop
524+
525+ exit:
526+ ret void
527+ }
528+
529+ ; Init value is 2^53 fp. While it would be within the representable consecutive
530+ ; integers, start/stride/exit values currently needs to fit in a signed i32.
531+
532+ define void @test_fp_to_int_maybe_realizable_initval_pow_2_53 () {
533+ ; CHECK-LABEL: @test_fp_to_int_maybe_realizable_initval_pow_2_53(
534+ ; CHECK-NEXT: entry:
535+ ; CHECK-NEXT: br label [[LOOP:%.*]]
536+ ; CHECK: loop:
537+ ; CHECK-NEXT: [[IV:%.*]] = phi double [ 0x4340000000000000, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
538+ ; CHECK-NEXT: call void @opaque()
539+ ; CHECK-NEXT: [[IV_NEXT]] = fadd double [[IV]], -1.700000e+01
540+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double [[IV_NEXT]], 2.500000e+01
541+ ; CHECK-NEXT: br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]
542+ ; CHECK: exit:
543+ ; CHECK-NEXT: ret void
544+ ;
545+ entry:
546+ br label %loop
547+
548+ loop:
549+ %iv = phi double [ 0x4340000000000000 , %entry ], [ %iv.next , %loop ]
550+ call void @opaque ()
551+ %iv.next = fadd double %iv , -1 .700000e+01
552+ %cmp = fcmp ult double %iv.next , 2 .500000e+01
553+ br i1 %cmp , label %exit , label %loop
554+
555+ exit:
556+ ret void
557+ }
558+
502559declare void @opaque ()
0 commit comments