mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-21 14:49:17 +02:00
45 lines
1 KiB
Scheme
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)))
|