Skip to content

Commit 6149a5f

Browse files
lthlsmshinwell
andauthored
flambda-backend: Simplify integer comparisons that use "compare" (#1851)
Co-authored-by: Mark Shinwell <mshinwell@pm.me>
1 parent a05adce commit 6149a5f

File tree

2 files changed

+183
-0
lines changed

2 files changed

+183
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
(* TEST *)
2+
3+
let check_list name list =
4+
Printf.printf "testing %S...\n" name;
5+
List.iteri
6+
(fun i (x, y) ->
7+
Printf.printf " #%d: %s\n"
8+
i
9+
(if x = y then "OK" else "KO"))
10+
list;
11+
Printf.printf "\n%!"
12+
13+
let check_int () = check_list "int" [
14+
compare (Sys.opaque_identity 1) 2 <= 0, true;
15+
compare (Sys.opaque_identity 3) 3 <= 0, true;
16+
compare (Sys.opaque_identity 1) min_int <= 0, false;
17+
compare (Sys.opaque_identity 1) 2 < 0, true;
18+
compare (Sys.opaque_identity 3) 3 < 0, false;
19+
compare (Sys.opaque_identity 1) min_int < 0, false;
20+
compare (Sys.opaque_identity max_int) (-1) >= 0, true;
21+
compare (Sys.opaque_identity 3) 3 >= 0, true;
22+
compare (Sys.opaque_identity 2) min_int >= 0, true;
23+
compare (Sys.opaque_identity max_int) (-1) > 0, true;
24+
compare (Sys.opaque_identity 3) 3 > 0, false;
25+
compare (Sys.opaque_identity 2) min_int > 0, true;
26+
compare (Sys.opaque_identity min_int) min_int = 0, true;
27+
compare (Sys.opaque_identity max_int) max_int = 0, true;
28+
compare (Sys.opaque_identity 1) 2 = 0, false;
29+
compare (Sys.opaque_identity min_int) min_int <> 0, false;
30+
compare (Sys.opaque_identity max_int) max_int <> 0, false;
31+
compare (Sys.opaque_identity 1) 2 <> 0, true;
32+
]
33+
34+
let () = check_int ()
35+
36+
let check_int32 () = check_list "int32" [
37+
compare (Sys.opaque_identity 1l) 2l <= 0, true;
38+
compare (Sys.opaque_identity 3l) 3l <= 0, true;
39+
compare (Sys.opaque_identity 1l) Int32.min_int <= 0, false;
40+
compare (Sys.opaque_identity 1l) 2l < 0, true;
41+
compare (Sys.opaque_identity 3l) 3l < 0, false;
42+
compare (Sys.opaque_identity 1l) Int32.min_int < 0, false;
43+
compare (Sys.opaque_identity Int32.max_int) (-1l) >= 0, true;
44+
compare (Sys.opaque_identity 3l) 3l >= 0, true;
45+
compare (Sys.opaque_identity 2l) Int32.min_int >= 0, true;
46+
compare (Sys.opaque_identity Int32.max_int) (-1l) > 0, true;
47+
compare (Sys.opaque_identity 3l) 3l > 0, false;
48+
compare (Sys.opaque_identity 2l) Int32.min_int > 0, true;
49+
compare (Sys.opaque_identity Int32.min_int) Int32.min_int = 0, true;
50+
compare (Sys.opaque_identity Int32.max_int) Int32.max_int = 0, true;
51+
compare (Sys.opaque_identity 1l) 2l = 0, false;
52+
compare (Sys.opaque_identity Int32.min_int) Int32.min_int <> 0, false;
53+
compare (Sys.opaque_identity Int32.max_int) Int32.max_int <> 0, false;
54+
compare (Sys.opaque_identity 1l) 2l <> 0, true;
55+
]
56+
57+
let () = check_int32 ()
58+
59+
let check_int64 () = check_list "int64" [
60+
compare (Sys.opaque_identity 1L) 2L <= 0, true;
61+
compare (Sys.opaque_identity 3L) 3L <= 0, true;
62+
compare (Sys.opaque_identity 1L) Int64.min_int <= 0, false;
63+
compare (Sys.opaque_identity 1L) 2L < 0, true;
64+
compare (Sys.opaque_identity 3L) 3L < 0, false;
65+
compare (Sys.opaque_identity 1L) Int64.min_int < 0, false;
66+
compare (Sys.opaque_identity Int64.max_int) (-1L) >= 0, true;
67+
compare (Sys.opaque_identity 3L) 3L >= 0, true;
68+
compare (Sys.opaque_identity 2L) Int64.min_int >= 0, true;
69+
compare (Sys.opaque_identity Int64.max_int) (-1L) > 0, true;
70+
compare (Sys.opaque_identity 3L) 3L > 0, false;
71+
compare (Sys.opaque_identity 2L) Int64.min_int > 0, true;
72+
compare (Sys.opaque_identity Int64.min_int) Int64.min_int = 0, true;
73+
compare (Sys.opaque_identity Int64.max_int) Int64.max_int = 0, true;
74+
compare (Sys.opaque_identity 1L) 2L = 0, false;
75+
compare (Sys.opaque_identity Int64.min_int) Int64.min_int <> 0, false;
76+
compare (Sys.opaque_identity Int64.max_int) Int64.max_int <> 0, false;
77+
compare (Sys.opaque_identity 1L) 2L <> 0, true;
78+
]
79+
80+
let () = check_int64 ()
81+
82+
let check_nativeint () = check_list "nativeint" [
83+
compare (Sys.opaque_identity 1n) 2n <= 0, true;
84+
compare (Sys.opaque_identity 3n) 3n <= 0, true;
85+
compare (Sys.opaque_identity 1n) Nativeint.min_int <= 0, false;
86+
compare (Sys.opaque_identity 1n) 2n < 0, true;
87+
compare (Sys.opaque_identity 3n) 3n < 0, false;
88+
compare (Sys.opaque_identity 1n) Nativeint.min_int < 0, false;
89+
compare (Sys.opaque_identity Nativeint.max_int) (-1n) >= 0, true;
90+
compare (Sys.opaque_identity 3n) 3n >= 0, true;
91+
compare (Sys.opaque_identity 2n) Nativeint.min_int >= 0, true;
92+
compare (Sys.opaque_identity Nativeint.max_int) (-1n) > 0, true;
93+
compare (Sys.opaque_identity 3n) 3n > 0, false;
94+
compare (Sys.opaque_identity 2n) Nativeint.min_int > 0, true;
95+
compare (Sys.opaque_identity Nativeint.min_int) Nativeint.min_int = 0, true;
96+
compare (Sys.opaque_identity Nativeint.max_int) Nativeint.max_int = 0, true;
97+
compare (Sys.opaque_identity 1n) 2n = 0, false;
98+
compare (Sys.opaque_identity Nativeint.min_int) Nativeint.min_int <> 0, false;
99+
compare (Sys.opaque_identity Nativeint.max_int) Nativeint.max_int <> 0, false;
100+
compare (Sys.opaque_identity 1n) 2n <> 0, true;
101+
]
102+
103+
let () = check_nativeint ()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
testing "int"...
2+
#0: OK
3+
#1: OK
4+
#2: OK
5+
#3: OK
6+
#4: OK
7+
#5: OK
8+
#6: OK
9+
#7: OK
10+
#8: OK
11+
#9: OK
12+
#10: OK
13+
#11: OK
14+
#12: OK
15+
#13: OK
16+
#14: OK
17+
#15: OK
18+
#16: OK
19+
#17: OK
20+
21+
testing "int32"...
22+
#0: OK
23+
#1: OK
24+
#2: OK
25+
#3: OK
26+
#4: OK
27+
#5: OK
28+
#6: OK
29+
#7: OK
30+
#8: OK
31+
#9: OK
32+
#10: OK
33+
#11: OK
34+
#12: OK
35+
#13: OK
36+
#14: OK
37+
#15: OK
38+
#16: OK
39+
#17: OK
40+
41+
testing "int64"...
42+
#0: OK
43+
#1: OK
44+
#2: OK
45+
#3: OK
46+
#4: OK
47+
#5: OK
48+
#6: OK
49+
#7: OK
50+
#8: OK
51+
#9: OK
52+
#10: OK
53+
#11: OK
54+
#12: OK
55+
#13: OK
56+
#14: OK
57+
#15: OK
58+
#16: OK
59+
#17: OK
60+
61+
testing "nativeint"...
62+
#0: OK
63+
#1: OK
64+
#2: OK
65+
#3: OK
66+
#4: OK
67+
#5: OK
68+
#6: OK
69+
#7: OK
70+
#8: OK
71+
#9: OK
72+
#10: OK
73+
#11: OK
74+
#12: OK
75+
#13: OK
76+
#14: OK
77+
#15: OK
78+
#16: OK
79+
#17: OK
80+

0 commit comments

Comments
 (0)