From 44b8e56ed0d809e83472037a7a58b7b64c162488 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 12 May 2018 07:07:38 -0600 Subject: [PATCH] bytecode optimizer: allow inline of `unsafe-undefined` Restores some function inlining that was lost by the change to optional-argument expansion. --- .../racket-test-core/tests/racket/optimize.rktl | 17 +++++++++++++++++ racket/src/racket/src/optimize.c | 1 + 2 files changed, 18 insertions(+) diff --git a/pkgs/racket-test-core/tests/racket/optimize.rktl b/pkgs/racket-test-core/tests/racket/optimize.rktl index 551597f8ab..09dcc34a5f 100644 --- a/pkgs/racket-test-core/tests/racket/optimize.rktl +++ b/pkgs/racket-test-core/tests/racket/optimize.rktl @@ -4319,6 +4319,23 @@ (test-comp '(lambda () (bytes=? #"123" #"456")) '(lambda () #f)) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check inlining with optional arguments + +(test-comp '(lambda (x) + (define (f z [y 2]) + (+ z y)) + (f x)) + '(lambda (x) + (+ x 2))) + +(test-comp '(lambda (x) + (define (f z [y (+ 1 1)]) + (+ z y)) + (f x)) + '(lambda (x) + (+ x 2))) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Check that the type information is shifted in the ;; right direction while inlining. diff --git a/racket/src/racket/src/optimize.c b/racket/src/racket/src/optimize.c index 805a8db82a..e37fb351c7 100644 --- a/racket/src/racket/src/optimize.c +++ b/racket/src/racket/src/optimize.c @@ -2269,6 +2269,7 @@ int scheme_ir_duplicate_ok(Scheme_Object *fb, int cross_linklet) { return (SCHEME_VOIDP(fb) || SAME_OBJ(fb, scheme_true) + || SAME_OBJ(fb, scheme_undefined) || SCHEME_FALSEP(fb) || (SCHEME_SYMBOLP(fb) && (!cross_linklet || (!SCHEME_SYM_WEIRDP(fb)