From 72132ea3aa1b08182a492e841f28145b4ae868ba Mon Sep 17 00:00:00 2001 From: Gustavo Massaccesi Date: Sat, 27 Jun 2015 13:18:16 -0300 Subject: [PATCH] Reoptimize propagated constants Reduces them to #t or #f when they are copied to a Boolean context --- pkgs/racket-test-core/tests/racket/optimize.rktl | 2 ++ racket/src/racket/src/optimize.c | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 9eea012f02..3536e1c3d9 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -1689,6 +1689,8 @@ (test-comp '(lambda (x) (not (if x #f 2))) '(lambda (x) (not (if x #f #t)))) +(test-comp '(lambda (x) (let ([z 2]) (not (if x #f z)))) + '(lambda (x) (let ([z 2]) (not (if x #f #t))))) (test-comp '(lambda (x) (if x x #f)) '(lambda (x) x)) diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index 71e5c117ae..a5410cfd67 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -7372,7 +7372,8 @@ Scheme_Object *scheme_optimize_expr(Scheme_Object *expr, Optimize_Info *info, in if (val) return val; } else { - if (SAME_TYPE(SCHEME_TYPE(val), scheme_compiled_toplevel_type)) { + if (SAME_TYPE(SCHEME_TYPE(val), scheme_compiled_toplevel_type) + || (SCHEME_TYPE(val) > _scheme_compiled_values_types_)) { info->size -= 1; return scheme_optimize_expr(val, info, context); }