;;;; Peephole optimizer for Scheme Code

(define peephole-optimizer
  (rule-simplifier
   (list

    (rule (if (? p) (? q) #f)
	  none
	  (and (? p) (? q)))

    (rule (and (? p) (and (? q) (? r)))
	  none
	  (and (? p) (? q) (? r)))

    (rule (if (? p) #t (? q))
	  none
	  (or (? p) (? q)))

    (rule (or (? p) (or (? q) (? r)))
	  none
	  (or (? p) (? q) (? r)))

    (rule (eqv? (? e) (quote ()))
	  none
	  (null? (? e)))

    (rule (let ((?? a) ((? x) (? x)) (?? b))
	    (? e))
	  none	;assumes no side effects in e
	  (let ((?? a) (?? b))
	    (? e)))

    (rule (let () (? e))
	  none
	  (? e))
    )))
