mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-05 20:26:35 +02:00
Allow optimizing non-mutating prims
This commit is contained in:
parent
19a8080103
commit
7fa4cd4ebd
2 changed files with 116 additions and 47 deletions
|
@ -573,10 +573,20 @@
|
|||
(inline-ok? (if->then exp) ivars args arg-used return)
|
||||
(inline-ok? (if->else exp) ivars args arg-used return))
|
||||
((app? exp)
|
||||
(for-each
|
||||
(lambda (e)
|
||||
(inline-ok? e ivars args arg-used return))
|
||||
(reverse exp))) ;; Ensure args are examined before function
|
||||
(cond
|
||||
((and (prim? (car exp))
|
||||
(not (prim:mutates? (car exp))))
|
||||
;; If primitive does not mutate its args, ignore if ivar is used
|
||||
(for-each
|
||||
(lambda (e)
|
||||
(if (not (ref? e))
|
||||
(inline-ok? e ivars args arg-used return)))
|
||||
(reverse (cdr exp))))
|
||||
(else
|
||||
(for-each
|
||||
(lambda (e)
|
||||
(inline-ok? e ivars args arg-used return))
|
||||
(reverse exp))))) ;; Ensure args are examined before function
|
||||
(else
|
||||
(error `(Unexpected expression passed to inline prim check ,exp)))))
|
||||
|
||||
|
|
|
@ -98,57 +98,116 @@
|
|||
; 3))))
|
||||
; 0)))))
|
||||
|
||||
;(define code
|
||||
;'(#((record-marker)
|
||||
; #((record-marker) #f (id args body))
|
||||
; #(6
|
||||
; ()
|
||||
; ((#((record-marker)
|
||||
; #((record-marker) #f (id args body))
|
||||
; #(5
|
||||
; (r$2)
|
||||
; ((#((record-marker)
|
||||
; #((record-marker) #f (id args body))
|
||||
; #(4
|
||||
; (x$3 y$2 z$1)
|
||||
; ((#((record-marker)
|
||||
; #((record-marker) #f (id args body))
|
||||
; #(3
|
||||
; (r$4)
|
||||
; ((#((record-marker)
|
||||
; #((record-marker) #f (id args body))
|
||||
; #(2
|
||||
; (r$3)
|
||||
; ((write #((record-marker)
|
||||
; #((record-marker) #f (id args body))
|
||||
; #(1 (r$1) ((r$1 %halt))))
|
||||
; r$3))))
|
||||
; (cons x$3 r$4)))))
|
||||
; (cons y$2 z$1)))))
|
||||
; 1
|
||||
; 2
|
||||
; 3))))
|
||||
; 0)))))
|
||||
;)
|
||||
|
||||
(define code
|
||||
'(#((record-marker)
|
||||
#((record-marker) #f (id args body))
|
||||
#(6
|
||||
()
|
||||
((#((record-marker)
|
||||
#((record-marker) #f (id args body))
|
||||
#(5
|
||||
(r$2)
|
||||
((#((record-marker)
|
||||
#((record-marker) #f (id args body))
|
||||
#(4
|
||||
(x$3 y$2 z$1)
|
||||
((#((record-marker)
|
||||
#((record-marker) #f (id args body))
|
||||
#(3
|
||||
(r$4)
|
||||
((#((record-marker)
|
||||
#((record-marker) #f (id args body))
|
||||
#(2
|
||||
(r$3)
|
||||
((write #((record-marker)
|
||||
#((record-marker) #f (id args body))
|
||||
#(1 (r$1) ((r$1 %halt))))
|
||||
r$3))))
|
||||
(cons x$3 r$4)))))
|
||||
(cons y$2 z$1)))))
|
||||
1
|
||||
2
|
||||
3))))
|
||||
0)))))
|
||||
'((define in-port:read-buf!
|
||||
#((record-marker)
|
||||
#((record-marker) #f (id args body))
|
||||
#(621
|
||||
(k$807 ptbl$260)
|
||||
((#((record-marker)
|
||||
#((record-marker) #f (id args body))
|
||||
#(619
|
||||
(result$261)
|
||||
((in-port:set-buf!
|
||||
#((record-marker)
|
||||
#((record-marker) #f (id args body))
|
||||
#(618 (r$809) ((k$807 result$261))))
|
||||
ptbl$260
|
||||
#f))))
|
||||
(cadr ptbl$260)))))))
|
||||
)
|
||||
|
||||
;(define code
|
||||
;'((define in-port:read-buf!
|
||||
;'((define and
|
||||
; #((record-marker)
|
||||
; #((record-marker) #f (id args body))
|
||||
; #(621
|
||||
; (k$807 ptbl$260)
|
||||
; #(2835
|
||||
; (k$3825 expr$1082 rename$1081 compare$1080)
|
||||
; ((#((record-marker)
|
||||
; #((record-marker) #f (id args body))
|
||||
; #(619
|
||||
; (result$261)
|
||||
; ((in-port:set-buf!
|
||||
; #((record-marker)
|
||||
; #((record-marker) #f (id args body))
|
||||
; #(618 (r$809) ((k$807 result$261))))
|
||||
; ptbl$260
|
||||
; #f))))
|
||||
; (cadr ptbl$260)))))))
|
||||
;)
|
||||
; #(2834
|
||||
; (r$3836)
|
||||
; ((if (null? r$3836)
|
||||
; (k$3825 #t)
|
||||
; (#((record-marker)
|
||||
; #((record-marker) #f (id args body))
|
||||
; #(2832
|
||||
; (r$3835)
|
||||
; ((if (null? r$3835)
|
||||
; (k$3825 (cadr expr$1082))
|
||||
; (#((record-marker)
|
||||
; #((record-marker) #f (id args body))
|
||||
; #(2829
|
||||
; (r$3834)
|
||||
; ((rename$1081
|
||||
; #((record-marker)
|
||||
; #((record-marker) #f (id args body))
|
||||
; #(2828
|
||||
; (r$3828)
|
||||
; ((#((record-marker)
|
||||
; #((record-marker) #f (id args body))
|
||||
; #(2827
|
||||
; (r$3829)
|
||||
; ((#((record-marker)
|
||||
; #((record-marker)
|
||||
; #f
|
||||
; (id args body))
|
||||
; #(2826
|
||||
; (r$3833)
|
||||
; ((rename$1081
|
||||
; #((record-marker)
|
||||
; #((record-marker)
|
||||
; #f
|
||||
; (id args body))
|
||||
; #(2825
|
||||
; (r$3831)
|
||||
; ((list k$3825
|
||||
; r$3828
|
||||
; r$3829
|
||||
; (cons r$3831
|
||||
; (cddr expr$1082))
|
||||
; #f))))
|
||||
; r$3833))))
|
||||
; 'and))))
|
||||
; (cadr expr$1082)))))
|
||||
; r$3834))))
|
||||
; 'if)))))
|
||||
; (cddr expr$1082))))))
|
||||
; (cdr expr$1082))))))
|
||||
;))
|
||||
|
||||
(pretty-print
|
||||
(optimize-cps code))
|
||||
|
|
Loading…
Add table
Reference in a new issue