From 9fea49db55500f9baff0aaffdc155e7cdbf8425b Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Fri, 16 Jul 2010 19:46:33 -0400 Subject: [PATCH] Added optimization for zero?. original commit: 47195410cbbe7d19ac6e33175fd57bfce6e6c4b3 --- collects/tests/typed-scheme/optimizer/generic/zero.rkt | 4 ++++ collects/typed-scheme/optimizer/fixnum.rkt | 7 ++++++- collects/typed-scheme/optimizer/float.rkt | 7 ++++++- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 collects/tests/typed-scheme/optimizer/generic/zero.rkt diff --git a/collects/tests/typed-scheme/optimizer/generic/zero.rkt b/collects/tests/typed-scheme/optimizer/generic/zero.rkt new file mode 100644 index 00000000..dc78943c --- /dev/null +++ b/collects/tests/typed-scheme/optimizer/generic/zero.rkt @@ -0,0 +1,4 @@ +#lang typed/scheme #:optimize +(require racket/unsafe/ops) +(zero? 1) +(zero? (sqrt 3.0)) diff --git a/collects/typed-scheme/optimizer/fixnum.rkt b/collects/typed-scheme/optimizer/fixnum.rkt index 8959261e..17044a15 100644 --- a/collects/typed-scheme/optimizer/fixnum.rkt +++ b/collects/typed-scheme/optimizer/fixnum.rkt @@ -74,4 +74,9 @@ (pattern (#%plain-app (~and op (~literal exact->inexact)) n:fixnum-expr) #:with opt (begin (log-optimization "fixnum to float" #'op) - #'(unsafe-fx->fl n.opt)))) + #'(unsafe-fx->fl n.opt))) + + (pattern (#%plain-app (~and op (~literal zero?)) n:fixnum-expr) + #:with opt + (begin (log-optimization "fixnum zero?" #'op) + #'(unsafe-fx= n.opt 0)))) diff --git a/collects/typed-scheme/optimizer/float.rkt b/collects/typed-scheme/optimizer/float.rkt index 549cc493..9890d7b3 100644 --- a/collects/typed-scheme/optimizer/float.rkt +++ b/collects/typed-scheme/optimizer/float.rkt @@ -85,4 +85,9 @@ (pattern (#%plain-app (~and op (~literal exact->inexact)) f:float-expr) #:with opt (begin (log-optimization "float to float" #'op) - #'f.opt))) + #'f.opt)) + + (pattern (#%plain-app (~and op (~literal zero?)) f:float-expr) + #:with opt + (begin (log-optimization "float zero?" #'op) + #'(unsafe-fl= f.opt 0.0))))