From 030c21a6b4881181ccdb89862201405ca1aa81c4 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Thu, 13 Oct 2016 02:40:41 -0400 Subject: - Now simplifying the PM paths to get rid of some of the pointless testing that results from ignoring some local bindings. --- src/lux/optimizer.clj | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/lux/optimizer.clj b/src/lux/optimizer.clj index 23b595886..f97f7810f 100644 --- a/src/lux/optimizer.clj +++ b/src/lux/optimizer.clj @@ -522,14 +522,33 @@ body ))) +(defn ^:private simplify-pattern [pattern] + (|case pattern + ($SeqPM ($TuplePM _idx) ($SeqPM ($PopPM) pattern*)) + (simplify-pattern pattern*) + + ($SeqPM ($TuplePM _idx) _right) + (|case (simplify-pattern _right) + ($SeqPM ($PopPM) pattern*) + pattern* + + _right* + ($SeqPM ($TuplePM _idx) _right*)) + + ($SeqPM _left _right) + ($SeqPM _left (simplify-pattern _right)) + + _ + pattern)) + (defn ^:private optimize-register-use [pattern body] (|let [p-vars (pattern-vars pattern) p-vars* (find-unused-vars p-vars body) adjusted-vars (adjust-register-indexes p-vars*) clean-pattern (clean-unused-pattern-registers adjusted-vars pattern) + simple-pattern (simplify-pattern clean-pattern) clean-body (clean-unused-body-registers adjusted-vars body)] - (&/T [clean-pattern - clean-body]))) + (&/T [simple-pattern clean-body]))) ;; This is the top-level function for optimizing PM, which transforms ;; each branch and then fuses them together. -- cgit v1.2.3