cyclone/opt-test.scm
Justin Ethier cd85a7ddde WIP
2017-08-26 19:00:45 -04:00

44 lines
1 KiB
Scheme

;; Testing the next set of optimizations
;; To run: ./opt-test < opt-test.data
;;
;; Timings: T430
;; Baseline - 2.511
;;
(import (scheme base)
(scheme write)
(scheme read))
#;(let ((x (read))
(y (read))
(z (read))
(iterations 10000000)
(sum 0))
(do ((i iterations (- i 1)))
((zero? i))
(set! sum (+ sum sum (* x y z)))
(set! sum (- sum sum (* x y z))))
(write sum))
;; Take an expression containing a single function call and break it up
;; into many calls of 2 arguments each.
(define (->dyadic expr)
(cond
((< (length expr) 4)
expr)
(else
(let ((fnc (car expr)))
(foldl
(lambda (x acc)
(list fnc acc x))
`(,fnc ,(cadr expr) ,(caddr expr))
(cdddr expr))))))
(write (->dyadic '(+ 1)))
(write (->dyadic '(+ 1 2)))
(write (->dyadic '(+ 1 2 3)))
(write (->dyadic '(+ 1 2 3 4)))
;(write
; (foldl
; (lambda (x acc)
; (list 'Cyc-fast-plus acc x))
; '(Cyc-fast-plus 1 2)
; '(3 4 5)))