X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcompiler%2Fir1opt.lisp;h=988348d5390aa368ec329f2b44a310534956765f;hb=20caa346e7b57cf8876cf67e166711f574b8955a;hp=bfad3a0508b3777d9bd9b198fbe294816cd5faac;hpb=18811631b81a9e7d4270c44896483199f3b7c7ac;p=sbcl.git diff --git a/src/compiler/ir1opt.lisp b/src/compiler/ir1opt.lisp index bfad3a0..988348d 100644 --- a/src/compiler/ir1opt.lisp +++ b/src/compiler/ir1opt.lisp @@ -337,7 +337,11 @@ (not (eq (block-home-lambda block) (block-home-lambda next))) ;; Stack analysis phase wants ENTRY to start a block. - (entry-p (block-start-node next))) + (entry-p (block-start-node next)) + (let ((last (block-last block))) + (and (valued-node-p last) + (awhen (node-lvar last) + (consp (lvar-uses it)))))) nil) (t (join-blocks block next) @@ -1769,7 +1773,9 @@ ;; FIXME: Do it in one step. (filter-lvar value - `(multiple-value-call #'list 'dummy)) + (if (cast-single-value-p cast) + `(list 'dummy) + `(multiple-value-call #'list 'dummy))) (filter-lvar (cast-value cast) ;; FIXME: Derived type.