[racket-dev] [plt] Push #28619: master branch updated

From: Vincent St-Amour (stamourv at ccs.neu.edu)
Date: Fri Apr 25 14:02:47 EDT 2014

It shouldn't. I used `list', not `cons'.

Vincent


At Fri, 25 Apr 2014 10:47:23 -0700,
Eric Dobson wrote:
> 
> Doesn't this make the dead clauses return void the function instead of
> void the value? Not that they ever should run.
> 
> On Fri, Apr 25, 2014 at 10:45 AM,  <stamourv at racket-lang.org> wrote:
> > stamourv has updated `master' from b40619ffd5 to ce3033a0c7.
> >   http://git.racket-lang.org/plt/b40619ffd5..ce3033a0c7
> >
> > =====[ One Commit ]=====================================================
> > Directory summary:
> >   52.9% pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/
> >   47.0% pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/tests/
> >
> > ~~~~~~~~~~
> >
> > ce3033a Vincent St-Amour <stamourv at racket-lang.org> 2014-04-25 13:40
> > :
> > | Keep dead case-lambda clauses around to avoid changing arity.
> > |
> > | Closes PR14468.
> > :
> >   A pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/tests/dead-case-lambda.rkt
> >   M .../tests/typed-racket/optimizer/tests/unboxed-for.rkt      |  2 +-
> >   M .../typed-racket-lib/typed-racket/optimizer/dead-code.rkt   | 10 +++++++---
> >
> > =====[ Overall Diff ]===================================================
> >
> > pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/dead-code.rkt
> > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > --- OLD/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/dead-code.rkt
> > +++ NEW/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/dead-code.rkt
> > @@ -49,9 +49,13 @@
> >          (begin0
> >            (case-lambda
> >              #,@(for/list ((formals (in-syntax #'(formals ...)))
> > -                          (bodies  (in-syntax #'(bodies ...)))
> > -                          #:unless (dead-lambda-branch? formals))
> > -                  (cons formals (stx-map (optimize) bodies))))
> > +                          (bodies  (in-syntax #'(bodies ...))))
> > +                 (if (dead-lambda-branch? formals)
> > +                     ;; keep the clause (to have a case-lambda with the right arity)
> > +                     ;; but not the body (to make the function smaller for inlining)
> > +                     ;; TODO could do better, and keep a single clause per arity
> > +                     (list formals #'(void)) ; return type doesn't matter, should never run
> > +                     (cons formals (stx-map (optimize) bodies)))))
> >            ;; We need to keep the syntax objects around in the generated code with the correct bindings
> >            ;; so that CheckSyntax displays the arrows correctly
> >            #,@(for/list ((formals (in-syntax #'(formals ...)))
> >
> > pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/tests/dead-case-lambda.rkt
> > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > --- /dev/null
> > +++ NEW/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/tests/dead-case-lambda.rkt
> > @@ -0,0 +1,19 @@
> > +#;#;
> > +#<<END
> > +TR opt: dead-case-lambda.rkt 4:10 () -- dead case-lambda branch
> > +TR opt: dead-case-lambda.rkt 6:10 (d . rst) -- dead case-lambda branch
> > +END
> > +#<<END
> > +(arity-at-least 0)
> > +
> > +END
> > +
> > +#lang typed/racket
> > +#reader tests/typed-racket/optimizer/reset-port
> > +
> > +(procedure-arity
> > +  (ann (case-lambda
> > +         [() (void)]
> > +         [(d) (void)]
> > +         [(d . rst) (void)])
> > +          (Any -> Any)))
> >
> > pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/tests/unboxed-for.rkt
> > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > --- OLD/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/tests/unboxed-for.rkt
> > +++ NEW/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/tests/unboxed-for.rkt
> > @@ -2,7 +2,6 @@
> >  #<<END
> >  TR opt: unboxed-for.rkt 2:0 (for/fold: : Float-Complex ((sum : Float-Complex 0.0+0.0i)) ((i : Float-Complex (quote (1.0+2.0i 2.0+4.0i)))) (+ i sum)) -- call to fun with unboxed args
> >  TR opt: unboxed-for.rkt 2:0 (for/fold: : Float-Complex ((sum : Float-Complex 0.0+0.0i)) ((i : Float-Complex (quote (1.0+2.0i 2.0+4.0i)))) (+ i sum)) -- fun -> unboxed fun
> > -TR opt: unboxed-for.rkt 2:0 (for/fold: : Float-Complex ((sum : Float-Complex 0.0+0.0i)) ((i : Float-Complex (quote (1.0+2.0i 2.0+4.0i)))) (+ i sum)) -- unbox float-complex
> >  TR opt: unboxed-for.rkt 2:0 (for/fold: : Float-Complex ((sum : Float-Complex 0.0+0.0i)) ((i : Float-Complex (quote (1.0+2.0i 2.0+4.0i)))) (+ i sum)) -- unboxed call site
> >  TR opt: unboxed-for.rkt 2:0 (for/fold: : Float-Complex ((sum : Float-Complex 0.0+0.0i)) ((i : Float-Complex (quote (1.0+2.0i 2.0+4.0i)))) (+ i sum)) -- unboxed call site
> >  TR opt: unboxed-for.rkt 2:0 (for/fold: : Float-Complex ((sum : Float-Complex 0.0+0.0i)) ((i : Float-Complex (quote (1.0+2.0i 2.0+4.0i)))) (+ i sum)) -- unboxed let bindings
> > @@ -17,6 +16,7 @@ TR opt: unboxed-for.rkt 2:53 0.0+0.0i -- unboxed literal
> >  TR opt: unboxed-for.rkt 3:13 i -- unboxed complex variable
> >  TR opt: unboxed-for.rkt 3:13 i -- unboxed complex variable
> >  TR opt: unboxed-for.rkt 3:33 (quote (1.0+2.0i 2.0+4.0i)) -- in-list
> > +TR opt: unboxed-for.rkt 3:33 (quote (1.0+2.0i 2.0+4.0i)) -- unbox float-complex
> >  TR opt: unboxed-for.rkt 4:11 sum -- leave var unboxed
> >  TR opt: unboxed-for.rkt 4:6 (+ i sum) -- unboxed binary float complex
> >  TR opt: unboxed-for.rkt 4:9 i -- leave var unboxed

Posted on the dev mailing list.