]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/compiler/cfg/ssa/destruction/coalescing/coalescing-tests.factor
compiler.cfg.ssa.destruction.coalescing: new vocab to refactor and
[factor.git] / basis / compiler / cfg / ssa / destruction / coalescing / coalescing-tests.factor
diff --git a/basis/compiler/cfg/ssa/destruction/coalescing/coalescing-tests.factor b/basis/compiler/cfg/ssa/destruction/coalescing/coalescing-tests.factor
new file mode 100644 (file)
index 0000000..4eecdb0
--- /dev/null
@@ -0,0 +1,49 @@
+USING: assocs compiler.cfg.def-use compiler.cfg.instructions
+compiler.cfg.ssa.destruction.coalescing compiler.cfg.ssa.destruction.leaders
+cpu.architecture grouping kernel make namespaces random sequences tools.test ;
+QUALIFIED: sets
+IN: compiler.cfg.ssa.destruction.coalescing.tests
+
+! init-coalescing
+{
+    H{ { 123 123 } { 77 77 } }
+} [
+    H{ { 123 "bb1" } { 77 "bb2" } } defs set
+    init-coalescing
+    leader-map get
+] unit-test
+
+! try-eliminate-copy
+{ } [
+    10 10 f try-eliminate-copy
+] unit-test
+
+! coalesce-insn
+{ V{ { 2 1 } } } [
+    [
+        T{ ##copy { src 1 } { dst 2 } { rep int-rep } } coalesce-insn
+    ] V{ } make
+] unit-test
+
+{ V{ { 3 4 } { 7 8 } } } [
+    [
+        T{ ##parallel-copy { values V{ { 3 4 } { 7 8 } } } } coalesce-insn
+    ] V{ } make
+] unit-test
+
+! All this work to make the 'values' order non-deterministic.
+: make-phi-inputs ( -- assoc )
+    H{ } clone [
+        { 2287 2288 } [
+            10 iota 1 sample first rot set-at
+        ] with each
+    ] keep ;
+
+{ t } [
+    10 [
+        { 2286 2287 2288 } sets:unique leader-map set
+        2286 make-phi-inputs ##phi new-insn
+        coalesce-insn
+        2286 leader
+    ] replicate all-equal?
+] unit-test