guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 25/30: Better type folding for = on exact numbers


From: Andy Wingo
Subject: [Guile-commits] 25/30: Better type folding for = on exact numbers
Date: Fri, 24 Nov 2017 09:24:24 -0500 (EST)

wingo pushed a commit to branch master
in repository guile.

commit 695362a83035b1727a243e54fa28c4c0dad8e635
Author: Andy Wingo <address@hidden>
Date:   Wed Nov 22 11:13:55 2017 +0100

    Better type folding for = on exact numbers
    
    * module/language/cps/type-fold.scm (=): Fold to #f if values are exact
      but of different types.
      (s64-=): Add missing alias.
---
 module/language/cps/type-fold.scm | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/module/language/cps/type-fold.scm 
b/module/language/cps/type-fold.scm
index 0557533..cd928e7 100644
--- a/module/language/cps/type-fold.scm
+++ b/module/language/cps/type-fold.scm
@@ -178,11 +178,18 @@
 (define-branch-folder-alias imm-s64-< imm-u64-<)
 
 (define-binary-branch-folder (= type0 min0 max0 type1 min1 max1)
-  (case (compare-integer-ranges type0 min0 max0 type1 min1 max1)
-    ((=) (values #t #t))
-    ((< >) (values #t #f))
-    (else (values #f #f))))
+  (if (and (type<=? (logior type0 type1)
+                    (logior &exact-integer &fraction))
+           (zero? (logand type0 type1)))
+      ;; If both values are exact but of different types, they are not
+      ;; equal.
+      (values #t #f)
+      (case (compare-integer-ranges type0 min0 max0 type1 min1 max1)
+        ((=) (values #t #t))
+        ((< >) (values #t #f))
+        (else (values #f #f)))))
 (define-branch-folder-alias u64-= =)
+(define-branch-folder-alias s64-= =)
 
 
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]