@@ -27,4 +27,58 @@ for.cond.cleanup:
27
27
ret void
28
28
}
29
29
30
+
31
+ define i64 @test_fp_libcall () {
32
+ ; CHECK-LABEL: 'test_fp_libcall'
33
+ ; CHECK-NEXT: Determining loop execution counts for: @test_fp_libcall
34
+ ; CHECK-NEXT: Loop %loop: backedge-taken count is i32 90
35
+ ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 90
36
+ ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is i32 90
37
+ ; CHECK-NEXT: Loop %loop: Trip multiple is 91
38
+ ;
39
+ entry:
40
+ br label %loop
41
+
42
+ loop:
43
+ %iv = phi i64 [ 0 , %entry ], [ %iv.next , %loop ]
44
+ %fv = phi double [ 1 .000000e+00 , %entry ], [ %fv.next , %loop ]
45
+ call void @use (double %fv )
46
+ %fv.next = call double @llvm.sin.f64 (double %fv )
47
+ %iv.next = add i64 %iv , 1
48
+ %fcmp = fcmp une double %fv , 0x3FC6BA15EE8460B0
49
+ br i1 %fcmp , label %loop , label %exit
50
+
51
+ exit:
52
+ ret i64 %iv
53
+ }
54
+
55
+ define i64 @test_nan_sign () {
56
+ ; CHECK-LABEL: 'test_nan_sign'
57
+ ; CHECK-NEXT: Determining loop execution counts for: @test_nan_sign
58
+ ; CHECK-NEXT: Loop %loop: backedge-taken count is i32 46
59
+ ; CHECK-NEXT: Loop %loop: constant max backedge-taken count is i32 46
60
+ ; CHECK-NEXT: Loop %loop: symbolic max backedge-taken count is i32 46
61
+ ; CHECK-NEXT: Loop %loop: Trip multiple is 47
62
+ ;
63
+ entry:
64
+ br label %loop
65
+
66
+ loop:
67
+ %iv = phi i64 [ 0 , %entry ], [ %iv.next , %loop ]
68
+ %fv = phi double [ -1 .000000e+00 , %entry ], [ %fv.next , %loop ]
69
+ call void @use (double %fv )
70
+ %a = fsub double %fv , 0x7F86C16C16C16C16
71
+ %b = fadd double %a , %a
72
+ %fv.next = fsub double %b , %a
73
+ %iv.next = add i64 %iv , 1
74
+ %fv.bc = bitcast double %fv to i64
75
+ %icmp = icmp slt i64 %fv.bc , 0
76
+ br i1 %icmp , label %loop , label %exit
77
+
78
+ exit:
79
+ ret i64 %iv
80
+ }
81
+
30
82
declare void @dummy ()
83
+ declare void @use (double %i )
84
+ declare double @llvm.sin.f64 (double )
0 commit comments