From 0d30866d045218e2626f60be3163df75da1e154c Mon Sep 17 00:00:00 2001 From: Eric Dobson Date: Tue, 17 Sep 2013 09:52:38 -0700 Subject: [PATCH] Make conjugate correctly optimize. --- .../typed-racket/optimizer/float-complex.rkt | 2 +- .../typed-racket/optimizer/known-bugs.rkt | 25 ++++++++++++++----- .../tests/float-complex-conjugate.rkt | 14 +++++++---- 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/float-complex.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/float-complex.rkt index 3d90ae2ef6..a3d0e9b29b 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/float-complex.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/float-complex.rkt @@ -241,7 +241,7 @@ #:do [(log-unboxing-opt "unboxed unary float complex")] #:with (bindings ...) #`(c.bindings ... - ((imag-binding) (unsafe-fl- 0.0 c.imag-binding)))) + ((imag-binding) (unsafe-fl* -1.0 c.imag-binding)))) (pattern (#%plain-app op:magnitude^ c:unboxed-float-complex-opt-expr) #:with real-binding (generate-temporary "unboxed-real-") diff --git a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/known-bugs.rkt b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/known-bugs.rkt index 44b84db4b3..669acc3916 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/known-bugs.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/known-bugs.rkt @@ -33,6 +33,19 @@ (when (equal? r-value tr-value) (fail-check "Known bug no longer exists."))))])) +(define-syntax good-opt + (syntax-parser + [(_ exp:expr) + #`(test-case #,(format "~a" (syntax->datum #'exp)) + (define r-value (racket-eval #'exp)) + (define tr-value (tr-eval #'exp)) + (with-check-info (['r-value r-value] + ['tr-value tr-value] + ['location (build-source-location-list (quote-syntax exp))]) + (when (not (equal? r-value tr-value)) + (fail-check "Optimizer regression"))))])) + + ;; TODO add this as a test ;; type-before = Single-Flonum-Complex ;; type-after = Float-Complex @@ -44,12 +57,12 @@ (test-suite "Known bugs" ;; Arguments are converted to inexact too early - (bad-opt (* (make-rectangular -inf.0 1) (* 1 1))) + (good-opt (* (make-rectangular -inf.0 1) (* 1 1))) (bad-opt (/ -inf.0-inf.0i 8)) - (bad-opt (- (* -1 1 +nan.0) 1.0+1.0i)) - (bad-opt (- (* (/ 6 11) (/ 1.2345678f0 123456.7f0)) (make-rectangular 0.0 0.3))) + (good-opt (- (* -1 1 +nan.0) 1.0+1.0i)) + (good-opt (- (* (/ 6 11) (/ 1.2345678f0 123456.7f0)) (make-rectangular 0.0 0.3))) (bad-opt (/ 1.0 0.0+0.0i)) - (bad-opt (+ 0.0+0.0i (* 1 1 +inf.0))) + (good-opt (+ 0.0+0.0i (* 1 1 +inf.0))) ;; Unary division has bad underflow (bad-opt (/ (make-rectangular 1e+100 1e-300))) @@ -75,11 +88,11 @@ (bad-opt (magnitude 3.0e300+4.0e300i)) ;; Negation should correctly compute sign of 0.0 - (bad-opt (- 0.0+0.0i)) + (good-opt (- 0.0+0.0i)) (bad-opt (- 0+0i 0.0+0.0i)) ;; Conjugate should correctly compute sign of 0.0 - (bad-opt (conjugate 0.0+0.0i)))) + (good-opt (conjugate 0.0+0.0i)))) (module+ main (require rackunit/text-ui) diff --git a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/tests/float-complex-conjugate.rkt b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/tests/float-complex-conjugate.rkt index 5d39541d81..5b6ac95836 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/tests/float-complex-conjugate.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/tests/float-complex-conjugate.rkt @@ -1,13 +1,16 @@ #;#; #<