Optimize integers used as sequences.

original commit: a62444fa3e218aa7675c546051badfd6b7b9ae13
This commit is contained in:
Vincent St-Amour 2012-05-02 14:53:36 -04:00
parent 8b65ec4e4b
commit 4522587510
3 changed files with 25 additions and 2 deletions

View File

@ -0,0 +1,10 @@
#;
(
TR opt: in-range.rkt 6:0 #%module-begin -- in-range
0123)
#lang typed/scheme
#:optimize
(for ([i 4])
(display i))

View File

@ -8,7 +8,7 @@
(types numeric-tower type-table)
(optimizer utils numeric-utils logging fixnum))
(provide float-opt-expr float-arg-expr)
(provide float-opt-expr float-arg-expr int-expr)
(define (mk-float-tbl generic)

View File

@ -6,7 +6,8 @@
"../utils/utils.rkt" "../utils/tc-utils.rkt"
(rep type-rep)
(types abbrev type-table utils)
(optimizer utils logging string))
(optimizer utils logging string
float)) ; for int-expr
(provide sequence-opt-expr)
@ -86,4 +87,16 @@
0
(lambda (x) (unsafe-fx< x len))
(lambda (x) #t)
(lambda (x y) #t)))))
(pattern (#%plain-app op:id _ s) ; one-arg in-range
#:when (id-from? #'op 'make-sequence 'racket/private/for)
#:with s*:int-expr #'s
#:with opt
(begin (log-optimization "in-range" seq-opt-msg this-syntax)
#'(let* ((end s*.opt))
(values (lambda (x) x)
(lambda (x) (unsafe-fx+ 1 x))
0
(lambda (x) (unsafe-fx< x end))
(lambda (x) #t)
(lambda (x y) #t))))))