[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 19/30: Add exact-integer? as interesting Tree-IL effect-
From: |
Andy Wingo |
Subject: |
[Guile-commits] 19/30: Add exact-integer? as interesting Tree-IL effect-free primitive |
Date: |
Fri, 24 Nov 2017 09:24:22 -0500 (EST) |
wingo pushed a commit to branch master
in repository guile.
commit 980de88902ec7002b174c63a817c0f1cfe73fa1a
Author: Andy Wingo <address@hidden>
Date: Tue Nov 21 16:09:30 2017 +0100
Add exact-integer? as interesting Tree-IL effect-free primitive
* module/language/tree-il/primitives.scm (*interesting-primitive-names*):
(*effect-free-primitives*, *effect+exception-free-primitives*): Detect
use of exact-integer?.
* module/language/tree-il/compile-cps.scm (canonicalize): Compile
exact-integer? to a fixnum?-or-bignum? check.
---
module/language/cps/types.scm | 1 -
module/language/tree-il/compile-cps.scm | 10 ++++++++++
module/language/tree-il/primitives.scm | 3 +++
3 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/module/language/cps/types.scm b/module/language/cps/types.scm
index 6aec93b..63ee1ce 100644
--- a/module/language/cps/types.scm
+++ b/module/language/cps/types.scm
@@ -1352,7 +1352,6 @@ minimum, and maximum."
;; FIXME: If it's a flonum it may be an integer, but if it's not an
;; integer it also may be still be a flonum.
;; (define-simple-type-predicate-inferrer integer? (logior &exact-integer
&flonum))
-(define-simple-type-predicate-inferrer exact-integer? &exact-integer)
(define-simple-type-checker (exact? &number))
(define-type-inferrer (exact? val result)
diff --git a/module/language/tree-il/compile-cps.scm
b/module/language/tree-il/compile-cps.scm
index 7d7100f..cb43447 100644
--- a/module/language/tree-il/compile-cps.scm
+++ b/module/language/tree-il/compile-cps.scm
@@ -1072,6 +1072,16 @@ integer."
(($ <conditional>)
(reduce-conditional exp))
+ (($ <primcall> src 'exact-integer? (x))
+ ;; Both fixnum? and bignum? are branching primitives.
+ (with-lexicals src (x)
+ (make-conditional
+ src (make-primcall src 'fixnum? (list x))
+ (make-const src #t)
+ (make-conditional src (make-primcall src 'bignum? (list x))
+ (make-const src #t)
+ (make-const src #f)))))
+
(($ <primcall> src '<= (a b))
;; No need to reduce as < is a branching primitive.
(make-conditional src (make-primcall src '< (list b a))
diff --git a/module/language/tree-il/primitives.scm
b/module/language/tree-il/primitives.scm
index 646eea0..c9e1fc0 100644
--- a/module/language/tree-il/primitives.scm
+++ b/module/language/tree-il/primitives.scm
@@ -57,6 +57,7 @@
procedure? thunk?
complex? real? rational? inf? nan? integer? exact? inexact? even? odd?
+ exact-integer?
char<? char<=? char>=? char>?
@@ -174,6 +175,7 @@
symbol? variable? vector? struct? string? number? char?
bytevector? keyword? bitvector? atomic-box?
complex? real? rational? inf? nan? integer? exact? inexact? even? odd?
+ exact-integer?
char<? char<=? char>=? char>?
integer->char char->integer number->string string->number
struct-vtable
@@ -194,6 +196,7 @@
not
pair? null? nil? list?
symbol? variable? vector? struct? string? number? char?
+ exact-integer?
bytevector? keyword? bitvector?
procedure? thunk? atomic-box?
acons cons cons* list vector))
- [Guile-commits] 06/30: Separate u64 and s64 type inferrers now that ops are monomorphic, (continued)
- [Guile-commits] 06/30: Separate u64 and s64 type inferrers now that ops are monomorphic, Andy Wingo, 2017/11/24
- [Guile-commits] 18/30: Remove thunk?, integer? simple predicate inferrers, Andy Wingo, 2017/11/24
- [Guile-commits] 17/30: Add support for bignum? CPS primitive., Andy Wingo, 2017/11/24
- [Guile-commits] 22/30: Fix inference of generic < on NaN values, Andy Wingo, 2017/11/24
- [Guile-commits] 20/30: Add &exact-number helper definition, Andy Wingo, 2017/11/24
- [Guile-commits] 03/30: Better support for unboxed signed arithmetic, Andy Wingo, 2017/11/24
- [Guile-commits] 30/30: Optimize check-urange in assembler.scm, Andy Wingo, 2017/11/24
- [Guile-commits] 27/30: Add integer devirtualization pass., Andy Wingo, 2017/11/24
- [Guile-commits] 12/30: Remove effects-analysis exports that were undefined, Andy Wingo, 2017/11/24
- [Guile-commits] 11/30: Specialize fixnum and s64 phis, Andy Wingo, 2017/11/24
- [Guile-commits] 19/30: Add exact-integer? as interesting Tree-IL effect-free primitive,
Andy Wingo <=
- [Guile-commits] 24/30: Declare bignum? as effect-free, Andy Wingo, 2017/11/24
- [Guile-commits] 13/30: Minor compile-cps refactor, Andy Wingo, 2017/11/24
- [Guile-commits] 15/30: DCE eliminates effect-free branches to the same continuation, Andy Wingo, 2017/11/24
- [Guile-commits] 29/30: DCE of branches punches through dead terms, Andy Wingo, 2017/11/24
- [Guile-commits] 21/30: Improve type and range inference on bignums, Andy Wingo, 2017/11/24
- [Guile-commits] 10/30: Fix unboxed immediate range comparison type inference, Andy Wingo, 2017/11/24
- [Guile-commits] 04/30: Specialize-numbers reifies instructions that type-check, Andy Wingo, 2017/11/24
- [Guile-commits] 26/30: Better unboxing for logand over s64 values, Andy Wingo, 2017/11/24
- [Guile-commits] 16/30: intmap-remove returns empty-intmap if appropriate, Andy Wingo, 2017/11/24
- [Guile-commits] 25/30: Better type folding for = on exact numbers, Andy Wingo, 2017/11/24