]> gitweb.factorcode.org Git - factor.git/commitdiff
compiler.cfg.linear-scan.allocation.splitting: better def for split-uses
authorBjörn Lindqvist <bjourne@gmail.com>
Sun, 20 Sep 2015 10:09:27 +0000 (12:09 +0200)
committerBjörn Lindqvist <bjourne@gmail.com>
Tue, 22 Sep 2015 06:52:37 +0000 (08:52 +0200)
it seems to be just as fast as the wordier one

basis/compiler/cfg/linear-scan/allocation/splitting/splitting-tests.factor
basis/compiler/cfg/linear-scan/allocation/splitting/splitting.factor

index 767eea8e2fccea84ef29e7993a6e9aaed6e782ad..12010e9fa440c9efe8bc2b84014214a4c3ac040b 100644 (file)
@@ -18,30 +18,35 @@ IN: compiler.cfg.linear-scan.allocation.splitting.tests
 {
     T{ live-interval-state
        { ranges { { 5 8 } } }
-       { uses
-         T{ slice
-            { from 0 }
-            { to 1 }
-            { seq {
-                T{ vreg-use { n 3 } { def-rep int-rep } }
-                T{ vreg-use { n 15 } { def-rep int-rep } }
-            } }
-         }
-       }
+       { uses { T{ vreg-use { n 3 } { def-rep int-rep } } } }
     }
     T{ live-interval-state
        { ranges { { 12 20 } } }
-       { uses
-         T{ slice
-            { from 1 }
-            { to 2 }
-            { seq {
-                T{ vreg-use { n 3 } { def-rep int-rep } }
-                T{ vreg-use { n 15 } { def-rep int-rep } }
-            } }
-         }
-       }
+       { uses { T{ vreg-use { n 15 } { def-rep int-rep } } } }
     }
 } [
     test-interval-easy 10 split-interval
 ] unit-test
+
+! split-uses
+{
+    { T{ vreg-use { n 3 } } }
+    { T{ vreg-use { n 9 } } }
+} [
+    { T{ vreg-use { n 3 } } T{ vreg-use { n 9 } } } 6 split-uses
+] unit-test
+
+{
+    { T{ vreg-use { n 10 } } T{ vreg-use { n 10 } } } { }
+} [
+    { T{ vreg-use { n 10 } } T{ vreg-use { n 10 } } } 12 split-uses
+] unit-test
+
+! This one is strange. Why is the middle one removed?
+{
+    { T{ vreg-use { n 3 } } }
+    { T{ vreg-use { n 5 } } }
+} [
+    { T{ vreg-use { n 3 } } T{ vreg-use { n 4 } } T{ vreg-use { n 5 } } }
+    4 split-uses
+] unit-test
index e2d6ec3aa33d309c4cea41b6c703c0abef0d8d02..4d30f24753059ebb1755d68d9ae5463f67ca309a 100644 (file)
@@ -7,13 +7,8 @@ compiler.cfg.linear-scan.ranges fry hints kernel locals math math.order
 namespaces sequences ;
 IN: compiler.cfg.linear-scan.allocation.splitting
 
-:: split-uses ( uses n -- before after )
-    uses n uses [ n>> <=> ] with search
-    n>> n <=> {
-        { +eq+ [ [ head-slice ] [ 1 + tail-slice ] 2bi ] }
-        { +lt+ [ 1 + cut-slice ] }
-        { +gt+ [ cut-slice ] }
-    } case ;
+: split-uses ( uses n -- before after )
+    [ '[ n>> _ < ] filter ] [ '[ n>> _ > ] filter ] 2bi ;
 
 ERROR: splitting-too-early ;