]> gitweb.factorcode.org Git - factor.git/commitdiff
compiler.tree.propagation: improved interval inference for absq eliminates a conditio...
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Wed, 19 Aug 2009 07:33:41 +0000 (02:33 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Wed, 19 Aug 2009 07:33:41 +0000 (02:33 -0500)
basis/compiler/tree/propagation/known-words/known-words.factor
basis/compiler/tree/propagation/propagation-tests.factor
basis/compiler/tree/propagation/simple/simple.factor

index 7c684f5b7f6892daa3eba9aa90d3be27523498a4..a9b77681fb8139162a91bf42feb14927a0eb43d9 100644 (file)
@@ -2,7 +2,7 @@
 ! See http://factorcode.org/license.txt for BSD license.
 USING: kernel effects accessors math math.private
 math.integers.private math.partial-dispatch math.intervals
-math.parser math.order layouts words sequences sequences.private
+math.parser math.order math.functions layouts words sequences sequences.private
 arrays assocs classes classes.algebra combinators generic.math
 splitting fry locals classes.tuple alien.accessors
 classes.tuple.private slots.private definitions strings.private
@@ -41,6 +41,8 @@ IN: compiler.tree.propagation.known-words
 
 \ abs [ [ interval-abs ] ?change-interval ] "outputs" set-word-prop
 
+\ absq [ [ interval-absq ] ?change-interval ] "outputs" set-word-prop
+
 : math-closure ( class -- newclass )
     { fixnum bignum integer rational float real number object }
     [ class<= ] with find nip ;
index 1c9b27dfbcf662d2aee71ec4e2ef66449eeb6178..321941741eff964c3b085b9d2c026b94d8fcbfc9 100644 (file)
@@ -56,9 +56,9 @@ IN: compiler.tree.propagation.tests
 
 [ float ] [ [ { float real } declare + ] final-math-class ] unit-test
 
-[ rational ] [ [ { ratio ratio } declare + ] final-math-class ] unit-test
+[ rational ] [ [ { ratio ratio } declare + ] final-math-class ] unit-test
 
-[ rational ] [ [ { rational ratio } declare + ] final-math-class ] unit-test
+[ rational ] [ [ { rational ratio } declare + ] final-math-class ] unit-test
 
 [ number ] [ [ { complex complex } declare + ] final-math-class ] unit-test
 
@@ -157,6 +157,18 @@ IN: compiler.tree.propagation.tests
 
 [ V{ t } ] [ [ abs 40 mod 0 >= ] final-literals ] unit-test
 
+[ t ] [ [ abs ] final-info first interval>> [0,inf] = ] unit-test
+
+[ t ] [ [ absq ] final-info first interval>> [0,inf] = ] unit-test
+
+[ t ] [ [ { float } declare abs ] final-info first interval>> [0,inf] = ] unit-test
+
+[ t ] [ [ { float } declare absq ] final-info first interval>> [0,inf] = ] unit-test
+
+[ t ] [ [ [ - absq ] [ + ] 2map-reduce ] final-info first interval>> [0,inf] = ] unit-test
+
+[ t ] [ [ { double-array double-array } declare [ - absq ] [ + ] 2map-reduce ] final-info first interval>> [0,inf] = ] unit-test
+
 [ V{ string } ] [
     [ dup string? not [ "Oops" throw ] [ ] if ] final-classes
 ] unit-test
index 5837d59ef9b0a0f3143b67c681b2cc4d44fb3f62..88c9831a24307a0169cfd2990035a15533d9f47d 100644 (file)
@@ -119,7 +119,9 @@ M: #declare propagate-before
 M: #call propagate-before
     dup word>> {
         { [ 2dup foldable-call? ] [ fold-call ] }
-        { [ 2dup do-inlining ] [ 2drop ] }
+        { [ 2dup do-inlining ] [
+            [ output-value-infos ] [ drop out-d>> ] 2bi refine-value-infos 
+        ] }
         [
             [ [ output-value-infos ] [ drop out-d>> ] 2bi set-value-infos ]
             [ compute-constraints ]