]> gitweb.factorcode.org Git - factor.git/commitdiff
convert ##compare with immediates to ##compare-imm
authorDoug Coleman <doug.coleman@gmail.com>
Sat, 4 Jul 2009 00:19:33 +0000 (19:19 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Sat, 4 Jul 2009 00:19:33 +0000 (19:19 -0500)
basis/compiler/cfg/value-numbering/rewrite/rewrite.factor

index bbfeb3f8bf51c770fcd4398578fe275c6fa3f20f..9fb6e66e9f5ae2b88df6b4945b96c4f9a895d369 100755 (executable)
@@ -70,21 +70,25 @@ M: ##compare-imm-branch rewrite
         dup rewrite-tagged-comparison? [ rewrite-tagged-comparison ] when
     ] when ;
 
-: flip-comparison? ( insn -- ? )
-    dup cc>> cc= eq? [ src1>> vreg>expr constant-expr? ] [ drop f ] if ;
-
-: flip-comparison ( insn -- insn' )
-    [ dst>> ]
-    [ src2>> ]
-    [ src1>> vreg>constant ] tri
-    cc= i \ ##compare-imm new-insn ;
+: >compare-imm ( insn swap? -- insn' )
+    [
+        {
+            [ dst>> ]
+            [ src1>> ]
+            [ src2>> ]
+            [ cc>> ]
+        } cleave
+    ] dip [ [ swap ] [ ] bi* ] when
+    [ vreg>constant ] dip
+    i \ ##compare-imm new-insn ; inline
 
 M: ##compare rewrite
-    dup flip-comparison? [
-        flip-comparison
-        dup number-values
-        rewrite
-    ] when ;
+    dup [ src1>> ] [ src2>> ] bi
+    [ vreg>expr constant-expr? ] bi@ 2array {
+        { { f t } [ f >compare-imm ] }
+        { { t f } [ t >compare-imm ] }
+        [ drop ]
+    } case ;
 
 : rewrite-redundant-comparison? ( insn -- ? )
     {