cyclone/opt-test.scm
2017-08-28 19:02:11 -04:00

45 lines
1 KiB
Scheme

;; Testing the next set of optimizations
;; To run: ./opt-test < opt-test.data
;;
;; Timings: T430
;; Baseline - 2.511
;; Dyadic - 1.409
;;
(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)))