Cleanup vector optimizations.

This commit is contained in:
Eric Dobson 2013-09-04 22:15:13 -07:00
parent 9bafe3b674
commit 2ddcfbc1e4
2 changed files with 148 additions and 180 deletions

View File

@ -11,115 +11,99 @@
(provide vector-opt-expr) (provide vector-opt-expr)
(define-literal-syntax-class vector-length-proc
(vector-length unsafe-vector-length unsafe-vector*-length))
(define-literal-syntax-class vector-length)
(define-literal-syntax-class vector-ref)
(define-literal-syntax-class vector-set!)
(define-literal-syntax-class flvector-length)
(define-unsafe-syntax-class flvector-ref)
(define-unsafe-syntax-class flvector-set!)
(define-syntax-class vector-op (define-syntax-class vector-op
#:commit #:commit
;; we need the non-* versions of these unsafe operations to be chaperone-safe ;; we need the non-* versions of these unsafe operations to be chaperone-safe
(pattern (~literal vector-ref) #:with unsafe #'unsafe-vector-ref #:with unsafe-no-impersonator #'unsafe-vector*-ref) (pattern :vector-ref^ #:with unsafe #'unsafe-vector-ref #:with unsafe-no-impersonator #'unsafe-vector*-ref)
(pattern (~literal vector-set!) #:with unsafe #'unsafe-vector-set! #:with unsafe-no-impersonator #'unsafe-vector*-set!)) (pattern :vector-set!^ #:with unsafe #'unsafe-vector-set! #:with unsafe-no-impersonator #'unsafe-vector*-set!))
(define-syntax-class flvector-op (define-merged-syntax-class flvector-op (flvector-ref^ flvector-set!^))
#:commit
(pattern (~literal flvector-ref) #:with unsafe #'unsafe-flvector-ref)
(pattern (~literal flvector-set!) #:with unsafe #'unsafe-flvector-set!))
(define-syntax-class known-length-vector-expr (define-syntax-class known-length-vector-expr
#:commit #:commit
(pattern e:expr #:attributes (len opt)
#:when (match (type-of #'e) (pattern (~and e :opt-expr)
[(tc-result1: (HeterogeneousVector: _)) #t] #:attr tys (match (type-of #'e)
[_ #f]) [(tc-result1: (HeterogeneousVector: tys)) tys]
#:with opt ((optimize) #'e))) [_ #f])
#:when (attribute tys)
#:attr len (length (attribute tys))))
(define-syntax-class vector-opt-expr (define-syntax-class vector-opt-expr
#:commit #:commit
#:literal-sets (kernel-literals)
#:attributes (opt)
;; vector-length of a known-length vector ;; vector-length of a known-length vector
(pattern (#%plain-app (~and op (~or (~literal vector-length) (pattern (#%plain-app op:vector-length-proc v:known-length-vector-expr)
(~literal unsafe-vector-length) #:do [(log-opt "known-length vector-length" "Static vector length computation.")]
(~literal unsafe-vector*-length))) ; v may have side effects
v:known-length-vector-expr) #:with opt #`(let () v.opt #,(attribute v.len)))
#:with opt ;; optimize vector-length on all vectors.
(begin (log-optimization "known-length vector-length"
"Static vector length computation."
this-syntax)
(add-disappeared-use #'op)
(match (type-of #'v)
[(tc-result1: (HeterogeneousVector: es))
#`(let () v.opt #,(length es))]))) ; v may have side effects
;; we can optimize vector-length on all vectors.
;; since the program typechecked, we know the arg is a vector. ;; since the program typechecked, we know the arg is a vector.
;; we can optimize no matter what. ;; we can optimize no matter what.
(pattern (#%plain-app (~and op (~literal vector-length)) v:expr) (pattern (#%plain-app op:vector-length^ v:opt-expr)
#:with opt #:do [(log-opt "vector-length" "Vector check elimination.")]
(begin (log-optimization "vector-length" "Vector check elimination." this-syntax) #:with opt #'(unsafe-vector-length v.opt))
(add-disappeared-use #'op)
#`(unsafe-vector-length #,((optimize) #'v))))
;; same for flvector-length ;; same for flvector-length
(pattern (#%plain-app (~and op (~literal flvector-length)) v:expr) (pattern (#%plain-app op:flvector-length^ v:opt-expr)
#:with opt #:do [(log-opt "flvector-length" "Float vector check elimination.")]
(begin (log-optimization "flvector-length" "Float vector check elimination." this-syntax) #:with opt #'(unsafe-flvector-length v.opt))
(add-disappeared-use #'op)
#`(unsafe-flvector-length #,((optimize) #'v))))
;; we can optimize vector ref and set! on vectors of known length if we know ;; we can optimize vector ref and set! on vectors of known length if we know
;; the index is within bounds (for now, literal or singleton type) ;; the index is within bounds (for now, literal or singleton type)
(pattern (#%plain-app op:vector-op v:known-length-vector-expr i:expr new:expr ...) (pattern (#%plain-app op:vector-op v:known-length-vector-expr i:value-expr new:opt-expr ...)
#:when (let ((len (match (type-of #'v) #:when (<= 0 (attribute i.val) (sub1 (attribute v.len)))
[(tc-result1: (HeterogeneousVector: es)) (length es)] #:do [(log-opt "vector" "Vector bounds checking elimination.")]
[_ 0])) #:with opt #'(op.unsafe v.opt i.opt new.opt ...))
(ival (or (syntax-parse #'i [((~literal quote) i:number) (syntax-e #'i)] [_ #f])
(match (type-of #'i)
[(tc-result1: (Value: (? number? i))) i]
[_ #f]))))
(and (integer? ival) (exact? ival) (<= 0 ival (sub1 len))))
#:with opt
(begin (log-optimization "vector" "Vector bounds checking elimination." this-syntax)
(add-disappeared-use #'op)
#`(op.unsafe v.opt #,((optimize) #'i)
#,@(stx-map (optimize) #'(new ...)))))
;; we can do the bounds checking separately, to eliminate some of the checks ;; we can do the bounds checking separately, to eliminate some of the checks
(pattern (#%plain-app op:vector-op v:expr i:fixnum-expr new:expr ...) (pattern (#%plain-app op:vector-op v:opt-expr i:fixnum-expr new:opt-expr ...)
#:with opt #:do [(log-opt "vector partial bounds checking elimination"
(begin (log-optimization "vector partial bounds checking elimination" "Partial bounds checking elimination.")]
"Partial bounds checking elimination." #:with opt
this-syntax) (let ([safe-fallback #'(op new-v new-i new.opt ...)]
(add-disappeared-use #'op) [i-known-nonneg? (subtypeof? #'i -NonNegFixnum)])
(let ([safe-fallback #`(op new-v new-i #,@(stx-map (optimize) #'(new ...)))] #`(let ([new-i i.opt]
[i-known-nonneg? (subtypeof? #'i -NonNegFixnum)]) [new-v v.opt])
#`(let ([new-i #,((optimize) #'i)] ;; do the impersonator check up front, to avoid doing it twice (length and op)
[new-v #,((optimize) #'v)]) (if (impersonator? new-v)
;; do the impersonator check up front, to avoid doing it twice (length and op) (if #,(let ([one-sided #'(unsafe-fx< new-i (unsafe-vector*-length new-v))])
(if (impersonator? new-v) (if i-known-nonneg?
(if #,(let ([one-sided #'(unsafe-fx< new-i (unsafe-vector*-length new-v))]) ;; we know it's nonnegative, one-sided check
(if i-known-nonneg? one-sided
;; we know it's nonnegative, one-sided check #`(and (unsafe-fx>= new-i 0)
one-sided #,one-sided)))
#`(and (unsafe-fx>= new-i 0) (op.unsafe new-v new-i new.opt ...)
#,one-sided))) #,safe-fallback) ; will error. to give the right error message
(op.unsafe new-v new-i #,@(stx-map (optimize) #'(new ...))) ;; not an impersonator, can use unsafe-vector* ops
#,safe-fallback) ; will error. to give the right error message (if #,(let ([one-sided #'(unsafe-fx< new-i (unsafe-vector-length new-v))])
;; not an impersonator, can use unsafe-vector* ops (if i-known-nonneg?
(if #,(let ([one-sided #'(unsafe-fx< new-i (unsafe-vector-length new-v))]) one-sided
(if i-known-nonneg? #`(and (unsafe-fx>= new-i 0)
one-sided #,one-sided)))
#`(and (unsafe-fx>= new-i 0) (op.unsafe-no-impersonator new-v new-i new.opt ...)
#,one-sided))) #,safe-fallback)))))
(op.unsafe-no-impersonator new-v new-i #,@(stx-map (optimize) #'(new ...)))
#,safe-fallback))))))
;; similarly for flvectors ;; similarly for flvectors
(pattern (#%plain-app op:flvector-op v:expr i:fixnum-expr new:expr ...) (pattern (#%plain-app op:flvector-op v:opt-expr i:fixnum-expr new:opt-expr ...)
#:with opt #:do [(log-opt "flvector partial bounds checking elimination"
(begin (log-optimization "flvector partial bounds checking elimination" "Partial bounds checking elimination.")]
"Partial bounds checking elimination." #:with opt
this-syntax) (let ([safe-fallback #'(op new-v new-i new.opt ...)]
(add-disappeared-use #'op) [i-known-nonneg? (subtypeof? #'i -NonNegFixnum)])
(let ([safe-fallback #`(op new-v new-i #,@(stx-map (optimize) #'(new ...)))] #`(let ([new-i i.opt]
[i-known-nonneg? (subtypeof? #'i -NonNegFixnum)]) [new-v v.opt])
#`(let ([new-i #,((optimize) #'i)] (if #,(let ([one-sided #'(unsafe-fx< new-i (unsafe-flvector-length new-v))])
[new-v #,((optimize) #'v)]) (if i-known-nonneg?
(if #,(let ([one-sided #'(unsafe-fx< new-i (unsafe-flvector-length new-v))]) one-sided
(if i-known-nonneg? #`(and (unsafe-fx>= new-i 0)
one-sided #,one-sided)))
#`(and (unsafe-fx>= new-i 0) (op.unsafe new-v new-i new.opt ...)
#,one-sided))) #,safe-fallback)))))
(op.unsafe new-v new-i #,@(stx-map (optimize) #'(new ...)))
#,safe-fallback))))))

View File

@ -1,92 +1,76 @@
#;#; #;#;
#<<END #<<END
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 77:0 #%module-begin -- dead else branch
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 77:0 #%module-begin -- dead else branch
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 77:0 #%module-begin -- dead else branch
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 102:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- binary fixnum comp TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- binary fixnum comp TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- binary fixnum comp TR opt: vector-sum.rkt 86:0 (for ((i (in-range 1))) (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i)))) -- dead else branch
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- binary fixnum comp TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- binary fixnum comp
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- binary fixnum comp
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- binary fixnum comp
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- binary fixnum comp
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- fixnum bounded expr TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- fixnum bounded expr TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- fixnum bounded expr TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- dead else branch
TR opt: vector-sum.rkt 103:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- fixnum bounded expr TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- fixnum bounded expr
TR opt: vector-sum.rkt 104:21 (sin (exact->inexact i)) -- unary float TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- fixnum bounded expr
TR opt: vector-sum.rkt 104:21 (sin (exact->inexact i)) -- unary float TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- fixnum bounded expr
TR opt: vector-sum.rkt 104:21 (sin (exact->inexact i)) -- unary float TR opt: vector-sum.rkt 87:2 (for: ((i : Nonnegative-Fixnum (in-range l))) (vector-set! v i (sin (exact->inexact i)))) -- fixnum bounded expr
TR opt: vector-sum.rkt 104:21 (sin (exact->inexact i)) -- unary float TR opt: vector-sum.rkt 88:21 (sin (exact->inexact i)) -- unary float
TR opt: vector-sum.rkt 104:21 (sin (exact->inexact i)) -- unary float TR opt: vector-sum.rkt 88:21 (sin (exact->inexact i)) -- unary float
TR opt: vector-sum.rkt 104:21 (sin (exact->inexact i)) -- unary float TR opt: vector-sum.rkt 88:21 (sin (exact->inexact i)) -- unary float
TR opt: vector-sum.rkt 104:21 (sin (exact->inexact i)) -- unary float TR opt: vector-sum.rkt 88:21 (sin (exact->inexact i)) -- unary float
TR opt: vector-sum.rkt 104:21 (sin (exact->inexact i)) -- unary float TR opt: vector-sum.rkt 88:26 (exact->inexact i) -- fixnum to float
TR opt: vector-sum.rkt 104:21 (sin (exact->inexact i)) -- unary float TR opt: vector-sum.rkt 88:26 (exact->inexact i) -- fixnum to float
TR opt: vector-sum.rkt 104:21 (sin (exact->inexact i)) -- unary float TR opt: vector-sum.rkt 88:26 (exact->inexact i) -- fixnum to float
TR opt: vector-sum.rkt 104:21 (sin (exact->inexact i)) -- unary float TR opt: vector-sum.rkt 88:26 (exact->inexact i) -- fixnum to float
TR opt: vector-sum.rkt 104:21 (sin (exact->inexact i)) -- unary float TR opt: vector-sum.rkt 88:4 (vector-set! v i (sin (exact->inexact i))) -- vector partial bounds checking elimination
TR opt: vector-sum.rkt 104:26 (exact->inexact i) -- fixnum to float TR opt: vector-sum.rkt 88:4 (vector-set! v i (sin (exact->inexact i))) -- vector partial bounds checking elimination
TR opt: vector-sum.rkt 104:26 (exact->inexact i) -- fixnum to float TR opt: vector-sum.rkt 88:4 (vector-set! v i (sin (exact->inexact i))) -- vector partial bounds checking elimination
TR opt: vector-sum.rkt 104:26 (exact->inexact i) -- fixnum to float TR opt: vector-sum.rkt 88:4 (vector-set! v i (sin (exact->inexact i))) -- vector partial bounds checking elimination
TR opt: vector-sum.rkt 104:26 (exact->inexact i) -- fixnum to float TR opt: vector-sum.rkt 89:15 sum -- dead else branch
TR opt: vector-sum.rkt 104:26 (exact->inexact i) -- fixnum to float TR opt: vector-sum.rkt 89:15 sum -- dead else branch
TR opt: vector-sum.rkt 104:26 (exact->inexact i) -- fixnum to float TR opt: vector-sum.rkt 89:15 sum -- dead else branch
TR opt: vector-sum.rkt 104:26 (exact->inexact i) -- fixnum to float TR opt: vector-sum.rkt 89:15 sum -- dead else branch
TR opt: vector-sum.rkt 104:26 (exact->inexact i) -- fixnum to float TR opt: vector-sum.rkt 89:15 sum -- dead else branch
TR opt: vector-sum.rkt 104:26 (exact->inexact i) -- fixnum to float TR opt: vector-sum.rkt 89:15 sum -- dead else branch
TR opt: vector-sum.rkt 104:26 (exact->inexact i) -- fixnum to float TR opt: vector-sum.rkt 89:15 sum -- dead else branch
TR opt: vector-sum.rkt 104:26 (exact->inexact i) -- fixnum to float TR opt: vector-sum.rkt 89:15 sum -- dead else branch
TR opt: vector-sum.rkt 104:26 (exact->inexact i) -- fixnum to float TR opt: vector-sum.rkt 89:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- binary fixnum comp
TR opt: vector-sum.rkt 104:4 (vector-set! v i (sin (exact->inexact i))) -- vector partial bounds checking elimination TR opt: vector-sum.rkt 89:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- binary fixnum comp
TR opt: vector-sum.rkt 104:4 (vector-set! v i (sin (exact->inexact i))) -- vector partial bounds checking elimination TR opt: vector-sum.rkt 89:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- binary fixnum comp
TR opt: vector-sum.rkt 104:4 (vector-set! v i (sin (exact->inexact i))) -- vector partial bounds checking elimination TR opt: vector-sum.rkt 89:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- binary fixnum comp
TR opt: vector-sum.rkt 104:4 (vector-set! v i (sin (exact->inexact i))) -- vector partial bounds checking elimination TR opt: vector-sum.rkt 89:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- fixnum bounded expr
TR opt: vector-sum.rkt 105:15 sum -- dead else branch TR opt: vector-sum.rkt 89:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- fixnum bounded expr
TR opt: vector-sum.rkt 105:15 sum -- dead else branch TR opt: vector-sum.rkt 89:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- fixnum bounded expr
TR opt: vector-sum.rkt 105:15 sum -- dead else branch TR opt: vector-sum.rkt 89:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- fixnum bounded expr
TR opt: vector-sum.rkt 105:15 sum -- dead else branch TR opt: vector-sum.rkt 91:11 (vector-ref v i) -- vector partial bounds checking elimination
TR opt: vector-sum.rkt 105:15 sum -- dead else branch TR opt: vector-sum.rkt 91:11 (vector-ref v i) -- vector partial bounds checking elimination
TR opt: vector-sum.rkt 105:15 sum -- dead else branch TR opt: vector-sum.rkt 91:11 (vector-ref v i) -- vector partial bounds checking elimination
TR opt: vector-sum.rkt 105:15 sum -- dead else branch TR opt: vector-sum.rkt 91:11 (vector-ref v i) -- vector partial bounds checking elimination
TR opt: vector-sum.rkt 105:15 sum -- dead else branch TR opt: vector-sum.rkt 91:4 (+ sum (vector-ref v i)) -- binary float
TR opt: vector-sum.rkt 105:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- binary fixnum comp TR opt: vector-sum.rkt 91:4 (+ sum (vector-ref v i)) -- binary float
TR opt: vector-sum.rkt 105:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- binary fixnum comp TR opt: vector-sum.rkt 91:4 (+ sum (vector-ref v i)) -- binary float
TR opt: vector-sum.rkt 105:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- binary fixnum comp TR opt: vector-sum.rkt 91:4 (+ sum (vector-ref v i)) -- binary float
TR opt: vector-sum.rkt 105:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- binary fixnum comp
TR opt: vector-sum.rkt 105:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- fixnum bounded expr
TR opt: vector-sum.rkt 105:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- fixnum bounded expr
TR opt: vector-sum.rkt 105:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- fixnum bounded expr
TR opt: vector-sum.rkt 105:2 (for/fold: ((sum : Float 0.0)) ((i : Nonnegative-Fixnum (in-range l))) (+ sum (vector-ref v i))) -- fixnum bounded expr
TR opt: vector-sum.rkt 107:11 (vector-ref v i) -- vector partial bounds checking elimination
TR opt: vector-sum.rkt 107:11 (vector-ref v i) -- vector partial bounds checking elimination
TR opt: vector-sum.rkt 107:11 (vector-ref v i) -- vector partial bounds checking elimination
TR opt: vector-sum.rkt 107:11 (vector-ref v i) -- vector partial bounds checking elimination
TR opt: vector-sum.rkt 107:4 (+ sum (vector-ref v i)) -- binary float
TR opt: vector-sum.rkt 107:4 (+ sum (vector-ref v i)) -- binary float
TR opt: vector-sum.rkt 107:4 (+ sum (vector-ref v i)) -- binary float
TR opt: vector-sum.rkt 107:4 (+ sum (vector-ref v i)) -- binary float
TR opt: vector-sum.rkt 93:0 #%module-begin -- dead else branch
TR opt: vector-sum.rkt 93:0 #%module-begin -- dead else branch
TR opt: vector-sum.rkt 93:0 #%module-begin -- dead else branch
END END
"" ""