From 8796743cbdeb43c6f57b8cf9301c99307abddd3b Mon Sep 17 00:00:00 2001 From: Gustavo Massaccesi Date: Wed, 1 Jan 2020 21:05:35 -0300 Subject: [PATCH] cp0: reduce (if #t #f) It may help to reduce expressions like (and ) original commit: bf6d3134a306f0cf12768f344d647ceaf820e9fa --- mats/4.ms | 2 +- s/cp0.ss | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/mats/4.ms b/mats/4.ms index c302bcb23e..a1f983e722 100644 --- a/mats/4.ms +++ b/mats/4.ms @@ -316,7 +316,7 @@ (equivalent-expansion? (parameterize ([optimize-level 2] [enable-cp0 #t] [#%$suppress-primitive-inlining #f]) (expand/optimize '(if (begin (set! x y) (if (begin (set! z y) (zero? h)) #t #f)) e1 e2))) - '(begin (set! x y) (if (begin (set! z y) (#2%zero? h)) e1 e2))) + '(if (begin (set! x y) (set! z y) (#2%zero? h)) e1 e2)) (equivalent-expansion? (parameterize ([optimize-level 2] [enable-cp0 #t] [#%$suppress-primitive-inlining #f]) diff --git a/s/cp0.ss b/s/cp0.ss index c537959f80..d5eeefefc7 100644 --- a/s/cp0.ss +++ b/s/cp0.ss @@ -794,6 +794,10 @@ (record-equal? e1 e2 (if (eq? ctxt 'test) 'test 'value)) (simple? e1)) e1] + [(and (cp0-constant? (lambda (x) (eq? x #f)) e3) + (cp0-constant? (lambda (x) (eq? x #t)) e2) + (or (boolean-valued? e1) (eq? ctxt 'test))) + (make-nontail ctxt e1)] [(nanopass-case (Lsrc Expr) (result-exp e1) [(if ,e11 ,[result-exp : e12 -> re12] ,[result-exp : e13 -> re13]) (if (and (cp0-constant? re12) (cp0-constant? re13))