Filters for comparisons with inifinity.

This commit is contained in:
Vincent St-Amour 2013-02-20 17:52:02 -05:00
parent 12aaa229a3
commit 034d7245a4
3 changed files with 245 additions and 0 deletions

View File

@ -0,0 +1,209 @@
#;
(
TR opt: dead-inf-comp.rkt 105:4 (quote dead) -- dead else branch
TR opt: dead-inf-comp.rkt 107:4 (quote dead) -- dead then branch
TR opt: dead-inf-comp.rkt 110:4 (quote dead) -- dead then branch
TR opt: dead-inf-comp.rkt 114:4 (quote dead) -- dead else branch
TR opt: dead-inf-comp.rkt 118:4 (quote dead) -- dead else branch
TR opt: dead-inf-comp.rkt 120:4 (quote dead) -- dead then branch
TR opt: dead-inf-comp.rkt 123:4 (quote dead) -- dead then branch
TR opt: dead-inf-comp.rkt 127:4 (quote dead) -- dead else branch
TR opt: dead-inf-comp.rkt 131:4 (quote dead) -- dead else branch
TR opt: dead-inf-comp.rkt 133:4 (quote dead) -- dead then branch
TR opt: dead-inf-comp.rkt 136:4 (quote dead) -- dead then branch
TR opt: dead-inf-comp.rkt 140:4 (quote dead) -- dead else branch
TR opt: dead-inf-comp.rkt 144:4 (quote dead) -- dead else branch
TR opt: dead-inf-comp.rkt 146:4 (quote dead) -- dead then branch
TR opt: dead-inf-comp.rkt 149:4 (quote dead) -- dead then branch
TR opt: dead-inf-comp.rkt 153:4 (quote dead) -- dead else branch
TR opt: dead-inf-comp.rkt 158:4 (quote dead) -- dead else branch
TR info: dead-inf-comp.rkt 156:4 (< rat +inf.f) -- exact real arith
TR opt: dead-inf-comp.rkt 160:4 (quote dead) -- dead then branch
TR info: dead-inf-comp.rkt 159:4 (< +inf.f rat) -- exact real arith
TR opt: dead-inf-comp.rkt 163:4 (quote dead) -- dead then branch
TR info: dead-inf-comp.rkt 162:4 (< rat -inf.f) -- exact real arith
TR opt: dead-inf-comp.rkt 167:4 (quote dead) -- dead else branch
TR info: dead-inf-comp.rkt 165:4 (< -inf.f rat) -- exact real arith
TR opt: dead-inf-comp.rkt 171:4 (quote dead) -- dead else branch
TR info: dead-inf-comp.rkt 169:4 (> +inf.f rat) -- exact real arith
TR opt: dead-inf-comp.rkt 173:4 (quote dead) -- dead then branch
TR info: dead-inf-comp.rkt 172:4 (> rat +inf.f) -- exact real arith
TR opt: dead-inf-comp.rkt 176:4 (quote dead) -- dead then branch
TR info: dead-inf-comp.rkt 175:4 (> -inf.f rat) -- exact real arith
TR opt: dead-inf-comp.rkt 180:4 (quote dead) -- dead else branch
TR info: dead-inf-comp.rkt 178:4 (> rat -inf.f) -- exact real arith
TR opt: dead-inf-comp.rkt 184:4 (quote dead) -- dead else branch
TR info: dead-inf-comp.rkt 182:4 (<= rat +inf.f) -- exact real arith
TR opt: dead-inf-comp.rkt 186:4 (quote dead) -- dead then branch
TR info: dead-inf-comp.rkt 185:4 (<= +inf.f rat) -- exact real arith
TR opt: dead-inf-comp.rkt 189:4 (quote dead) -- dead then branch
TR info: dead-inf-comp.rkt 188:4 (<= rat -inf.f) -- exact real arith
TR opt: dead-inf-comp.rkt 193:4 (quote dead) -- dead else branch
TR info: dead-inf-comp.rkt 191:4 (<= -inf.f rat) -- exact real arith
TR opt: dead-inf-comp.rkt 197:4 (quote dead) -- dead else branch
TR info: dead-inf-comp.rkt 195:4 (>= +inf.f rat) -- exact real arith
TR opt: dead-inf-comp.rkt 199:4 (quote dead) -- dead then branch
TR info: dead-inf-comp.rkt 198:4 (>= rat +inf.f) -- exact real arith
TR opt: dead-inf-comp.rkt 202:4 (quote dead) -- dead then branch
TR info: dead-inf-comp.rkt 201:4 (>= -inf.f rat) -- exact real arith
TR opt: dead-inf-comp.rkt 206:4 (quote dead) -- dead else branch
TR info: dead-inf-comp.rkt 204:4 (>= rat -inf.f) -- exact real arith
TR opt: dead-inf-comp.rkt 99:0 #%module-begin -- in-range
TR opt: dead-inf-comp.rkt 99:0 #%module-begin -- dead else branch
TR opt: dead-inf-comp.rkt 99:0 #%module-begin -- dead else branch
TR opt: dead-inf-comp.rkt 99:0 #%module-begin -- dead else branch
TR opt: dead-inf-comp.rkt 209:0 (for: ((i (in-range 5 +inf.0 2)) (j 3)) (displayln i)) -- dead else branch
TR opt: dead-inf-comp.rkt 209:0 (for: ((i (in-range 5 +inf.0 2)) (j 3)) (displayln i)) -- dead else branch
TR info: dead-inf-comp.rkt 209:41 displayln -- hidden parameter
TR opt: dead-inf-comp.rkt 209:0 (for: ((i (in-range 5 +inf.0 2)) (j 3)) (displayln i)) -- dead else branch
TR opt: dead-inf-comp.rkt 209:0 (for: ((i (in-range 5 +inf.0 2)) (j 3)) (displayln i)) -- dead else branch
TR opt: dead-inf-comp.rkt 209:0 (for: ((i (in-range 5 +inf.0 2)) (j 3)) (displayln i)) -- dead else branch
TR info: dead-inf-comp.rkt 209:41 displayln -- hidden parameter
TR opt: dead-inf-comp.rkt 209:0 (for: ((i (in-range 5 +inf.0 2)) (j 3)) (displayln i)) -- dead else branch
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
'live
5
7
9
)
#lang typed/racket/base
(define: rat : Exact-Rational 2/3)
(if (< rat +inf.0)
'live
'dead)
(if (< +inf.0 rat)
'dead
'live)
(if (< rat -inf.0)
'dead
'live)
(if (< -inf.0 rat)
'live
'dead)
(if (> +inf.0 rat)
'live
'dead)
(if (> rat +inf.0)
'dead
'live)
(if (> -inf.0 rat)
'dead
'live)
(if (> rat -inf.0)
'live
'dead)
(if (<= rat +inf.0)
'live
'dead)
(if (<= +inf.0 rat)
'dead
'live)
(if (<= rat -inf.0)
'dead
'live)
(if (<= -inf.0 rat)
'live
'dead)
(if (>= +inf.0 rat)
'live
'dead)
(if (>= rat +inf.0)
'dead
'live)
(if (>= -inf.0 rat)
'dead
'live)
(if (>= rat -inf.0)
'live
'dead)
;; single flonums
(if (< rat +inf.f)
'live
'dead)
(if (< +inf.f rat)
'dead
'live)
(if (< rat -inf.f)
'dead
'live)
(if (< -inf.f rat)
'live
'dead)
(if (> +inf.f rat)
'live
'dead)
(if (> rat +inf.f)
'dead
'live)
(if (> -inf.f rat)
'dead
'live)
(if (> rat -inf.f)
'live
'dead)
(if (<= rat +inf.f)
'live
'dead)
(if (<= +inf.f rat)
'dead
'live)
(if (<= rat -inf.f)
'dead
'live)
(if (<= -inf.f rat)
'live
'dead)
(if (>= +inf.f rat)
'live
'dead)
(if (>= rat +inf.f)
'dead
'live)
(if (>= -inf.f rat)
'dead
'live)
(if (>= rat -inf.f)
'live
'dead)
(for: ([i (in-range 5 +inf.0 2)] [j 3]) (displayln i))

View File

@ -838,6 +838,14 @@
(-> -NegRat -Fixnum B : (-FS -top (-filter -NegFixnum 1)))
(-> -NonPosInt -Fixnum B : (-FS -top (-and (-filter -NonPosFixnum 0) (-filter -NonPosFixnum 1))))
(-> -NonPosRat -Fixnum B : (-FS -top (-filter -NonPosFixnum 1)))
(-> -Rat (-val +inf.0) B : (-FS -top (-filter (Un) 0))) ; guaranteed
(-> (-val +inf.0) -Rat B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> -Rat (-val -inf.0) B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> (-val -inf.0) -Rat B : (-FS -top (-filter (Un) 0))) ; guaranteed
(-> -Rat (-val +inf.f) B : (-FS -top (-filter (Un) 0))) ; guaranteed
(-> (-val +inf.f) -Rat B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> -Rat (-val -inf.f) B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> (-val -inf.f) -Rat B : (-FS -top (-filter (Un) 0))) ; guaranteed
;; If applying filters resulted in the interesection of the filter and the
;; original type, we'd only need the cases for Fixnums and those for Reals.
;; Cases for Integers and co would fall out naturally from the Real cases,
@ -895,6 +903,14 @@
(-> -Fixnum -NegRat B : (-FS -top (-filter -NegFixnum 0)))
(-> -Fixnum -NonPosInt B : (-FS -top (-and (-filter -NonPosFixnum 0) (-filter -NonPosFixnum 1))))
(-> -Fixnum -NonPosRat B : (-FS -top (-filter -NonPosFixnum 0)))
(-> (-val +inf.0) -Rat B : (-FS -top (-filter (Un) 0))) ; guaranteed
(-> -Rat (-val +inf.0) B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> (-val -inf.0) -Rat B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> -Rat (-val -inf.0) B : (-FS -top (-filter (Un) 0))) ; guaranteed
(-> (-val +inf.f) -Rat B : (-FS -top (-filter (Un) 0))) ; guaranteed
(-> -Rat (-val +inf.f) B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> (-val -inf.f) -Rat B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> -Rat (-val -inf.f) B : (-FS -top (-filter (Un) 0))) ; guaranteed
(>-type-pattern -Int -PosInt -Nat -NegInt -NonPosInt -Zero)
(>-type-pattern -Rat -PosRat -NonNegRat -NegRat -NonPosRat -Zero)
(>-type-pattern -Flonum -PosFlonum -NonNegFlonum -NegFlonum -NonPosFlonum)
@ -948,6 +964,14 @@
(-> -Fixnum -NegReal B : (-FS (-filter -NegFixnum 0) -top))
(-> -Fixnum -NonPosInt B : (-FS (-and (-filter -NonPosFixnum 0) (-filter -NonPosFixnum 1)) -top))
(-> -Fixnum -NonPosReal B : (-FS (-filter -NonPosFixnum 0) -top))
(-> -Rat (-val +inf.0) B : (-FS -top (-filter (Un) 0))) ; guaranteed
(-> (-val +inf.0) -Rat B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> -Rat (-val -inf.0) B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> (-val -inf.0) -Rat B : (-FS -top (-filter (Un) 0))) ; guaranteed
(-> -Rat (-val +inf.f) B : (-FS -top (-filter (Un) 0))) ; guaranteed
(-> (-val +inf.f) -Rat B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> -Rat (-val -inf.f) B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> (-val -inf.f) -Rat B : (-FS -top (-filter (Un) 0))) ; guaranteed
(<=-type-pattern -Int -PosInt -Nat -NegInt -NonPosInt -Zero)
(<=-type-pattern -Rat -PosRat -NonNegRat -NegRat -NonPosRat -Zero)
(<=-type-pattern -Flonum -PosFlonum -NonNegFlonum -NegFlonum -NonPosFlonum)
@ -1001,6 +1025,14 @@
(-> -NegReal -Fixnum B : (-FS (-filter -NegFixnum 1) -top))
(-> -NonPosInt -Fixnum B : (-FS (-and (-filter -NonPosFixnum 0) (-filter -NonPosFixnum 1)) -top))
(-> -NonPosReal -Fixnum B : (-FS (-filter -NonPosFixnum 1) -top))
(-> (-val +inf.0) -Rat B : (-FS -top (-filter (Un) 0))) ; guaranteed
(-> -Rat (-val +inf.0) B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> (-val -inf.0) -Rat B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> -Rat (-val -inf.0) B : (-FS -top (-filter (Un) 0))) ; guaranteed
(-> (-val +inf.f) -Rat B : (-FS -top (-filter (Un) 0))) ; guaranteed
(-> -Rat (-val +inf.f) B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> (-val -inf.f) -Rat B : (-FS (-filter (Un) 0) -top)) ; can't happen
(-> -Rat (-val -inf.f) B : (-FS -top (-filter (Un) 0))) ; guaranteed
(>=-type-pattern -Int -PosInt -Nat -NegInt -NonPosInt -Zero)
(>=-type-pattern -Rat -PosRat -NonNegRat -NegRat -NonPosRat -Zero)
(>=-type-pattern -Flonum -PosFlonum -NonNegFlonum -NegFlonum -NonPosFlonum)

View File

@ -51,12 +51,16 @@
[(~var i (3d (lambda (x) (eqv? x 0.0)))) -FlonumPosZero]
[(~var i (3d (lambda (x) (eqv? x -0.0)))) -FlonumNegZero]
[(~var i (3d (lambda (x) (eqv? x +nan.0)))) -FlonumNan]
[(~var i (3d (lambda (x) (eqv? x +inf.0)))) (-val +inf.0)]
[(~var i (3d (lambda (x) (eqv? x -inf.0)))) (-val -inf.0)]
[(~var i (3d (conjoin flonum? positive?))) -PosFlonum]
[(~var i (3d (conjoin flonum? negative?))) -NegFlonum]
[(~var i (3d flonum?)) -Flonum] ; for nan
[(~var i (3d (lambda (x) (eqv? x 0.0f0)))) -SingleFlonumPosZero]
[(~var i (3d (lambda (x) (eqv? x -0.0f0)))) -SingleFlonumNegZero]
[(~var i (3d (lambda (x) (eqv? x +nan.f)))) -SingleFlonumNan]
[(~var i (3d (lambda (x) (eqv? x +inf.f)))) (-val +inf.f)]
[(~var i (3d (lambda (x) (eqv? x -inf.f)))) (-val -inf.f)]
[(~var i (3d (conjoin single-flonum? positive?))) -PosSingleFlonum]
[(~var i (3d (conjoin single-flonum? negative?))) -NegSingleFlonum]
[(~var i (3d single-flonum?)) -SingleFlonum] ; for nan