Fix optimization of first, rest, etc.
original commit: 054f4d9b563ab40c22523e6b115e1a35822b3d3d
This commit is contained in:
parent
afb83b7e91
commit
a76bd4d52d
|
@ -2,16 +2,16 @@
|
|||
(
|
||||
TR opt: derived-pair.rkt 23:0 (caar (cons (cons 1 2) 3)) -- pair
|
||||
TR opt: derived-pair.rkt 23:0 (caar (cons (cons 1 2) 3)) -- pair
|
||||
TR opt: derived-pair.rkt 23:0 (caar (cons (cons 1 2) 3)) -- derived pair
|
||||
|
||||
TR opt: derived-pair.rkt 24:0 (cadr (cons 1 (cons 2 3))) -- pair
|
||||
TR opt: derived-pair.rkt 24:0 (cadr (cons 1 (cons 2 3))) -- pair
|
||||
TR opt: derived-pair.rkt 24:0 (cadr (cons 1 (cons 2 3))) -- derived pair
|
||||
|
||||
TR opt: derived-pair.rkt 25:0 (cdar (cons (cons 1 2) 3)) -- pair
|
||||
TR opt: derived-pair.rkt 25:0 (cdar (cons (cons 1 2) 3)) -- pair
|
||||
TR opt: derived-pair.rkt 25:0 (cdar (cons (cons 1 2) 3)) -- derived pair
|
||||
|
||||
TR opt: derived-pair.rkt 26:0 (cddr (cons 1 (cons 2 3))) -- pair
|
||||
TR opt: derived-pair.rkt 26:0 (cddr (cons 1 (cons 2 3))) -- pair
|
||||
TR opt: derived-pair.rkt 26:0 (cddr (cons 1 (cons 2 3))) -- derived pair
|
||||
|
||||
1
|
||||
2
|
||||
2
|
||||
|
|
|
@ -3,35 +3,35 @@
|
|||
TR opt: derived-pair2.rkt 47:0 (caaar (cons (cons (cons 1 2) 3) 4)) -- pair
|
||||
TR opt: derived-pair2.rkt 47:0 (caaar (cons (cons (cons 1 2) 3) 4)) -- pair
|
||||
TR opt: derived-pair2.rkt 47:0 (caaar (cons (cons (cons 1 2) 3) 4)) -- pair
|
||||
TR opt: derived-pair2.rkt 47:0 (caaar (cons (cons (cons 1 2) 3) 4)) -- derived pair
|
||||
|
||||
TR opt: derived-pair2.rkt 48:0 (caadr (cons 1 (cons (cons 2 3) 4))) -- pair
|
||||
TR opt: derived-pair2.rkt 48:0 (caadr (cons 1 (cons (cons 2 3) 4))) -- pair
|
||||
TR opt: derived-pair2.rkt 48:0 (caadr (cons 1 (cons (cons 2 3) 4))) -- pair
|
||||
TR opt: derived-pair2.rkt 48:0 (caadr (cons 1 (cons (cons 2 3) 4))) -- derived pair
|
||||
|
||||
TR opt: derived-pair2.rkt 49:0 (cadar (cons (cons 1 (cons 2 3)) 4)) -- pair
|
||||
TR opt: derived-pair2.rkt 49:0 (cadar (cons (cons 1 (cons 2 3)) 4)) -- pair
|
||||
TR opt: derived-pair2.rkt 49:0 (cadar (cons (cons 1 (cons 2 3)) 4)) -- pair
|
||||
TR opt: derived-pair2.rkt 49:0 (cadar (cons (cons 1 (cons 2 3)) 4)) -- derived pair
|
||||
|
||||
TR opt: derived-pair2.rkt 50:0 (caddr (cons 1 (cons 2 (cons 3 4)))) -- pair
|
||||
TR opt: derived-pair2.rkt 50:0 (caddr (cons 1 (cons 2 (cons 3 4)))) -- pair
|
||||
TR opt: derived-pair2.rkt 50:0 (caddr (cons 1 (cons 2 (cons 3 4)))) -- pair
|
||||
TR opt: derived-pair2.rkt 50:0 (caddr (cons 1 (cons 2 (cons 3 4)))) -- derived pair
|
||||
|
||||
TR opt: derived-pair2.rkt 51:0 (cdaar (cons (cons (cons 1 2) 3) 4)) -- pair
|
||||
TR opt: derived-pair2.rkt 51:0 (cdaar (cons (cons (cons 1 2) 3) 4)) -- pair
|
||||
TR opt: derived-pair2.rkt 51:0 (cdaar (cons (cons (cons 1 2) 3) 4)) -- pair
|
||||
TR opt: derived-pair2.rkt 51:0 (cdaar (cons (cons (cons 1 2) 3) 4)) -- derived pair
|
||||
|
||||
TR opt: derived-pair2.rkt 52:0 (cdadr (cons 1 (cons (cons 2 3) 4))) -- pair
|
||||
TR opt: derived-pair2.rkt 52:0 (cdadr (cons 1 (cons (cons 2 3) 4))) -- pair
|
||||
TR opt: derived-pair2.rkt 52:0 (cdadr (cons 1 (cons (cons 2 3) 4))) -- pair
|
||||
TR opt: derived-pair2.rkt 52:0 (cdadr (cons 1 (cons (cons 2 3) 4))) -- derived pair
|
||||
|
||||
TR opt: derived-pair2.rkt 53:0 (cddar (cons (cons 1 (cons 2 3)) 4)) -- pair
|
||||
TR opt: derived-pair2.rkt 53:0 (cddar (cons (cons 1 (cons 2 3)) 4)) -- pair
|
||||
TR opt: derived-pair2.rkt 53:0 (cddar (cons (cons 1 (cons 2 3)) 4)) -- pair
|
||||
TR opt: derived-pair2.rkt 53:0 (cddar (cons (cons 1 (cons 2 3)) 4)) -- derived pair
|
||||
|
||||
TR opt: derived-pair2.rkt 54:0 (cdddr (cons 1 (cons 2 (cons 3 4)))) -- pair
|
||||
TR opt: derived-pair2.rkt 54:0 (cdddr (cons 1 (cons 2 (cons 3 4)))) -- pair
|
||||
TR opt: derived-pair2.rkt 54:0 (cdddr (cons 1 (cons 2 (cons 3 4)))) -- pair
|
||||
TR opt: derived-pair2.rkt 54:0 (cdddr (cons 1 (cons 2 (cons 3 4)))) -- derived pair
|
||||
|
||||
1
|
||||
2
|
||||
2
|
||||
|
|
|
@ -4,82 +4,82 @@ TR opt: derived-pair3.rkt 103:0 (caaaar (cons (cons (cons (cons 1 2) 3) 4) 5)) -
|
|||
TR opt: derived-pair3.rkt 103:0 (caaaar (cons (cons (cons (cons 1 2) 3) 4) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 103:0 (caaaar (cons (cons (cons (cons 1 2) 3) 4) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 103:0 (caaaar (cons (cons (cons (cons 1 2) 3) 4) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 103:0 (caaaar (cons (cons (cons (cons 1 2) 3) 4) 5)) -- derived pair
|
||||
|
||||
TR opt: derived-pair3.rkt 104:0 (caaadr (cons 1 (cons (cons (cons 2 3) 4) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 104:0 (caaadr (cons 1 (cons (cons (cons 2 3) 4) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 104:0 (caaadr (cons 1 (cons (cons (cons 2 3) 4) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 104:0 (caaadr (cons 1 (cons (cons (cons 2 3) 4) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 104:0 (caaadr (cons 1 (cons (cons (cons 2 3) 4) 5))) -- derived pair
|
||||
|
||||
TR opt: derived-pair3.rkt 105:0 (caadar (cons (cons 1 (cons (cons 2 3) 4)) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 105:0 (caadar (cons (cons 1 (cons (cons 2 3) 4)) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 105:0 (caadar (cons (cons 1 (cons (cons 2 3) 4)) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 105:0 (caadar (cons (cons 1 (cons (cons 2 3) 4)) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 105:0 (caadar (cons (cons 1 (cons (cons 2 3) 4)) 5)) -- derived pair
|
||||
|
||||
TR opt: derived-pair3.rkt 106:0 (caaddr (cons 1 (cons 2 (cons (cons 3 4) 5)))) -- pair
|
||||
TR opt: derived-pair3.rkt 106:0 (caaddr (cons 1 (cons 2 (cons (cons 3 4) 5)))) -- pair
|
||||
TR opt: derived-pair3.rkt 106:0 (caaddr (cons 1 (cons 2 (cons (cons 3 4) 5)))) -- pair
|
||||
TR opt: derived-pair3.rkt 106:0 (caaddr (cons 1 (cons 2 (cons (cons 3 4) 5)))) -- pair
|
||||
TR opt: derived-pair3.rkt 106:0 (caaddr (cons 1 (cons 2 (cons (cons 3 4) 5)))) -- derived pair
|
||||
|
||||
TR opt: derived-pair3.rkt 107:0 (cadaar (cons (cons (cons 1 (cons 2 3)) 4) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 107:0 (cadaar (cons (cons (cons 1 (cons 2 3)) 4) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 107:0 (cadaar (cons (cons (cons 1 (cons 2 3)) 4) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 107:0 (cadaar (cons (cons (cons 1 (cons 2 3)) 4) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 107:0 (cadaar (cons (cons (cons 1 (cons 2 3)) 4) 5)) -- derived pair
|
||||
|
||||
TR opt: derived-pair3.rkt 108:0 (cadadr (cons 1 (cons (cons 2 (cons 3 4)) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 108:0 (cadadr (cons 1 (cons (cons 2 (cons 3 4)) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 108:0 (cadadr (cons 1 (cons (cons 2 (cons 3 4)) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 108:0 (cadadr (cons 1 (cons (cons 2 (cons 3 4)) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 108:0 (cadadr (cons 1 (cons (cons 2 (cons 3 4)) 5))) -- derived pair
|
||||
|
||||
TR opt: derived-pair3.rkt 109:0 (caddar (cons (cons 1 (cons 2 (cons 3 4))) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 109:0 (caddar (cons (cons 1 (cons 2 (cons 3 4))) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 109:0 (caddar (cons (cons 1 (cons 2 (cons 3 4))) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 109:0 (caddar (cons (cons 1 (cons 2 (cons 3 4))) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 109:0 (caddar (cons (cons 1 (cons 2 (cons 3 4))) 5)) -- derived pair
|
||||
|
||||
TR opt: derived-pair3.rkt 110:0 (cadddr (cons 1 (cons 2 (cons 3 (cons 4 5))))) -- pair
|
||||
TR opt: derived-pair3.rkt 110:0 (cadddr (cons 1 (cons 2 (cons 3 (cons 4 5))))) -- pair
|
||||
TR opt: derived-pair3.rkt 110:0 (cadddr (cons 1 (cons 2 (cons 3 (cons 4 5))))) -- pair
|
||||
TR opt: derived-pair3.rkt 110:0 (cadddr (cons 1 (cons 2 (cons 3 (cons 4 5))))) -- pair
|
||||
TR opt: derived-pair3.rkt 110:0 (cadddr (cons 1 (cons 2 (cons 3 (cons 4 5))))) -- derived pair
|
||||
|
||||
TR opt: derived-pair3.rkt 111:0 (cdaaar (cons (cons (cons (cons 1 2) 3) 4) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 111:0 (cdaaar (cons (cons (cons (cons 1 2) 3) 4) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 111:0 (cdaaar (cons (cons (cons (cons 1 2) 3) 4) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 111:0 (cdaaar (cons (cons (cons (cons 1 2) 3) 4) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 111:0 (cdaaar (cons (cons (cons (cons 1 2) 3) 4) 5)) -- derived pair
|
||||
|
||||
TR opt: derived-pair3.rkt 112:0 (cdaadr (cons 1 (cons (cons (cons 2 3) 4) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 112:0 (cdaadr (cons 1 (cons (cons (cons 2 3) 4) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 112:0 (cdaadr (cons 1 (cons (cons (cons 2 3) 4) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 112:0 (cdaadr (cons 1 (cons (cons (cons 2 3) 4) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 112:0 (cdaadr (cons 1 (cons (cons (cons 2 3) 4) 5))) -- derived pair
|
||||
|
||||
TR opt: derived-pair3.rkt 113:0 (cdadar (cons (cons 1 (cons (cons 2 3) 4)) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 113:0 (cdadar (cons (cons 1 (cons (cons 2 3) 4)) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 113:0 (cdadar (cons (cons 1 (cons (cons 2 3) 4)) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 113:0 (cdadar (cons (cons 1 (cons (cons 2 3) 4)) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 113:0 (cdadar (cons (cons 1 (cons (cons 2 3) 4)) 5)) -- derived pair
|
||||
|
||||
TR opt: derived-pair3.rkt 114:0 (cdaddr (cons 1 (cons 2 (cons (cons 3 4) 5)))) -- pair
|
||||
TR opt: derived-pair3.rkt 114:0 (cdaddr (cons 1 (cons 2 (cons (cons 3 4) 5)))) -- pair
|
||||
TR opt: derived-pair3.rkt 114:0 (cdaddr (cons 1 (cons 2 (cons (cons 3 4) 5)))) -- pair
|
||||
TR opt: derived-pair3.rkt 114:0 (cdaddr (cons 1 (cons 2 (cons (cons 3 4) 5)))) -- pair
|
||||
TR opt: derived-pair3.rkt 114:0 (cdaddr (cons 1 (cons 2 (cons (cons 3 4) 5)))) -- derived pair
|
||||
|
||||
TR opt: derived-pair3.rkt 115:0 (cddaar (cons (cons (cons 1 (cons 2 3)) 4) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 115:0 (cddaar (cons (cons (cons 1 (cons 2 3)) 4) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 115:0 (cddaar (cons (cons (cons 1 (cons 2 3)) 4) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 115:0 (cddaar (cons (cons (cons 1 (cons 2 3)) 4) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 115:0 (cddaar (cons (cons (cons 1 (cons 2 3)) 4) 5)) -- derived pair
|
||||
|
||||
TR opt: derived-pair3.rkt 116:0 (cddadr (cons 1 (cons (cons 2 (cons 3 4)) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 116:0 (cddadr (cons 1 (cons (cons 2 (cons 3 4)) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 116:0 (cddadr (cons 1 (cons (cons 2 (cons 3 4)) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 116:0 (cddadr (cons 1 (cons (cons 2 (cons 3 4)) 5))) -- pair
|
||||
TR opt: derived-pair3.rkt 116:0 (cddadr (cons 1 (cons (cons 2 (cons 3 4)) 5))) -- derived pair
|
||||
|
||||
TR opt: derived-pair3.rkt 117:0 (cdddar (cons (cons 1 (cons 2 (cons 3 4))) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 117:0 (cdddar (cons (cons 1 (cons 2 (cons 3 4))) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 117:0 (cdddar (cons (cons 1 (cons 2 (cons 3 4))) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 117:0 (cdddar (cons (cons 1 (cons 2 (cons 3 4))) 5)) -- pair
|
||||
TR opt: derived-pair3.rkt 117:0 (cdddar (cons (cons 1 (cons 2 (cons 3 4))) 5)) -- derived pair
|
||||
|
||||
TR opt: derived-pair3.rkt 118:0 (cddddr (cons 1 (cons 2 (cons 3 (cons 4 5))))) -- pair
|
||||
TR opt: derived-pair3.rkt 118:0 (cddddr (cons 1 (cons 2 (cons 3 (cons 4 5))))) -- pair
|
||||
TR opt: derived-pair3.rkt 118:0 (cddddr (cons 1 (cons 2 (cons 3 (cons 4 5))))) -- pair
|
||||
TR opt: derived-pair3.rkt 118:0 (cddddr (cons 1 (cons 2 (cons 3 (cons 4 5))))) -- pair
|
||||
TR opt: derived-pair3.rkt 118:0 (cddddr (cons 1 (cons 2 (cons 3 (cons 4 5))))) -- derived pair
|
||||
|
||||
1
|
||||
2
|
||||
2
|
||||
|
|
32
collects/tests/typed-racket/optimizer/tests/list.rkt
Normal file
32
collects/tests/typed-racket/optimizer/tests/list.rkt
Normal file
|
@ -0,0 +1,32 @@
|
|||
#;
|
||||
(
|
||||
TR opt: list.rkt 27:0 (first l) -- pair
|
||||
TR opt: list.rkt 28:0 (rest l) -- pair
|
||||
TR opt: list.rkt 29:0 (second l) -- pair
|
||||
TR opt: list.rkt 29:0 (second l) -- pair
|
||||
TR missed opt: list.rkt 30:0 (rest (rest l)) -- car/cdr on a potentially empty list -- caused by: 30:6 (rest l)
|
||||
TR opt: list.rkt 30:6 (rest l) -- pair
|
||||
TR opt: list.rkt 31:0 (third l) -- pair
|
||||
TR opt: list.rkt 31:0 (third l) -- pair
|
||||
TR opt: list.rkt 31:0 (third l) -- pair
|
||||
TR opt: list.rkt 32:0 (fourth l) -- pair
|
||||
TR opt: list.rkt 32:0 (fourth l) -- pair
|
||||
TR opt: list.rkt 32:0 (fourth l) -- pair
|
||||
TR opt: list.rkt 32:0 (fourth l) -- pair
|
||||
1
|
||||
'(2 3 4)
|
||||
2
|
||||
'(3 4)
|
||||
3
|
||||
4
|
||||
)
|
||||
|
||||
#lang typed/racket
|
||||
|
||||
(define: l : (List Integer Integer Integer Integer) '(1 2 3 4))
|
||||
(first l)
|
||||
(rest l)
|
||||
(second l)
|
||||
(rest (rest l))
|
||||
(third l)
|
||||
(fourth l)
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
(require syntax/parse unstable/syntax
|
||||
racket/match
|
||||
(for-template scheme/base scheme/unsafe/ops)
|
||||
(for-template scheme/base scheme/unsafe/ops racket/list)
|
||||
"../utils/utils.rkt"
|
||||
(utils tc-utils)
|
||||
(rep type-rep)
|
||||
|
@ -48,9 +48,8 @@
|
|||
(define-syntax-class pair-opt-expr
|
||||
#:commit
|
||||
(pattern e:pair-derived-opt-expr
|
||||
#:with opt
|
||||
(begin (log-optimization "derived pair" pair-opt-msg this-syntax)
|
||||
#'e.opt))
|
||||
;; no logging here, redundant with actual pair opt
|
||||
#:with opt #'e.opt)
|
||||
(pattern (#%plain-app op:pair-op p:expr)
|
||||
#:when (or (has-pair-type? #'p)
|
||||
;; in this case, we have a potentially empty list, but
|
||||
|
@ -131,6 +130,7 @@
|
|||
(cdddar #'cdr #'cdr #'cdr #'car)
|
||||
(cddddr #'cdr #'cdr #'cdr #'cdr)
|
||||
(first #'car)
|
||||
(rest #'cdr)
|
||||
(second #'car #'cdr)
|
||||
(third #'car #'cdr #'cdr)
|
||||
(fourth #'car #'cdr #'cdr #'cdr)
|
||||
|
|
Loading…
Reference in New Issue
Block a user