From c7744fae69b314f1eaf68b2b60de3e90d4cad264 Mon Sep 17 00:00:00 2001 From: felix Date: Wed, 18 Sep 2019 14:59:51 +0200 Subject: [PATCH] Revert "Revert half of "Add some optimizer simplification rules"" This reverts commit d8727f4a9bdfded30813a5a433b57eddf60c068f. --- optimizer.scm | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/optimizer.scm b/optimizer.scm index bd163710..fc2d3165 100644 --- a/optimizer.scm +++ b/optimizer.scm @@ -830,6 +830,38 @@ args1) nargs) #t)) + (else (loop (cdr args) + (cons (car args) nargs) + ok))))))) + + ;; (let (( (##core#inline ...))) + ;; ( ... ...)) + ;; -> ( ... (##core#inline ...) ...) + ;; ...)) + ;; - is used only once. + `((let (var) (##core#inline (op) . args1) + (##core#call p . args2)) + (var op args1 p args2) + ,(lambda (db may-rewrite var op args1 p args2) + (and may-rewrite ; give other optimizations a chance first + (= 1 (length (db-get-list db var 'references))) + (let loop ((args args2) (nargs '()) (ok #f)) + (cond ((null? args) + (and ok + (make-node + '##core#call p + (reverse nargs)))) + ((and (eq? '##core#variable + (node-class (car args))) + (eq? var + (car (node-parameters (car args))))) + (loop (cdr args) + (cons (make-node + '##core#inline + (list op) + args1) + nargs) + #t)) (else (loop (cdr args) (cons (car args) nargs) ok)))))))) -- 2.19.1