Filters for comparisons with inifinity.
This commit is contained in:
parent
12aaa229a3
commit
034d7245a4
209
collects/tests/typed-racket/optimizer/tests/dead-inf-comp.rkt
Normal file
209
collects/tests/typed-racket/optimizer/tests/dead-inf-comp.rkt
Normal 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))
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user