diff --git a/collects/tests/typed-scheme/optimizer/tests/add1.rkt b/collects/tests/typed-scheme/optimizer/tests/add1.rkt new file mode 100644 index 0000000000..49e97d4048 --- /dev/null +++ b/collects/tests/typed-scheme/optimizer/tests/add1.rkt @@ -0,0 +1,17 @@ +#; +( +add1.rkt line 14 col 6 - add1 - fixnum add1 +add1.rkt line 15 col 6 - sub1 - fixnum sub1 +add1.rkt line 16 col 6 - add1 - float add1 +add1.rkt line 17 col 6 - sub1 - float sub1 +6 +2 +3.3 +1.25 +) + +#lang typed/racket #:optimize +(ann (add1 5) Fixnum) +(ann (sub1 3) Fixnum) +(ann (add1 2.3) Float) +(ann (sub1 2.25) Float) diff --git a/collects/typed-scheme/optimizer/fixnum.rkt b/collects/typed-scheme/optimizer/fixnum.rkt index c8ee0533ad..c8c7399e2a 100644 --- a/collects/typed-scheme/optimizer/fixnum.rkt +++ b/collects/typed-scheme/optimizer/fixnum.rkt @@ -150,4 +150,15 @@ #:when (subtypeof? #'n -NonNegFixnum) ; (abs min-fixnum) is not a fixnum #:with opt (begin (log-optimization "fixnum fxabs" #'op) - #'(unsafe-fxabs n.opt)))) + #'(unsafe-fxabs n.opt))) + + (pattern (#%plain-app (~and op (~literal add1)) n:fixnum-expr) + #:when (subtypeof? this-syntax -Fixnum) + #:with opt + (begin (log-optimization "fixnum add1" #'op) + #'(unsafe-fx+ n.opt 1))) + (pattern (#%plain-app (~and op (~literal sub1)) n:fixnum-expr) + #:when (subtypeof? this-syntax -Fixnum) + #:with opt + (begin (log-optimization "fixnum sub1" #'op) + #'(unsafe-fx- n.opt 1)))) diff --git a/collects/typed-scheme/optimizer/float.rkt b/collects/typed-scheme/optimizer/float.rkt index a6cf12636b..3b278de2d4 100644 --- a/collects/typed-scheme/optimizer/float.rkt +++ b/collects/typed-scheme/optimizer/float.rkt @@ -124,4 +124,13 @@ (pattern (#%plain-app (~and op (~literal zero?)) f:float-expr) #:with opt (begin (log-optimization "float zero?" #'op) - #'(unsafe-fl= f.opt 0.0)))) + #'(unsafe-fl= f.opt 0.0))) + + (pattern (#%plain-app (~and op (~literal add1)) n:float-expr) + #:with opt + (begin (log-optimization "float add1" #'op) + #'(unsafe-fl+ n.opt 1.0))) + (pattern (#%plain-app (~and op (~literal sub1)) n:float-expr) + #:with opt + (begin (log-optimization "float sub1" #'op) + #'(unsafe-fl- n.opt 1.0))))