]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.ssa] cmd/compile: implement "if SETEQ" branches
authorJosh Bleecher Snyder <josharian@gmail.com>
Mon, 20 Jul 2015 22:53:33 +0000 (15:53 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Tue, 21 Jul 2015 13:50:14 +0000 (13:50 +0000)
Change-Id: I814fd0c2f1a622cca7dfd1b771f81de309a1904c
Reviewed-on: https://go-review.googlesource.com/12441
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/ssa/gen/AMD64.rules
src/cmd/compile/internal/ssa/rewriteAMD64.go

index eba37104606f1c7e7718f745b37a14051e0f1f03..6c4608dc6c4fa8a71d4be919a0e4f09cdbf70eee 100644 (file)
@@ -95,6 +95,7 @@
 
 // block rewrites
 (If (SETL cmp) yes no) -> (LT cmp yes no)
+(If (SETEQ cmp) yes no) -> (EQ cmp yes no)
 (If (SETNE cmp) yes no) -> (NE cmp yes no)
 (If (SETB cmp) yes no) -> (ULT cmp yes no)
 (If cond yes no) && cond.Op == OpAMD64MOVBload -> (NE (TESTB <TypeFlags> cond cond) yes no)
index 9a879a39bb94a1ff907e0c806145a9bb384ba310..3c7e41e0e8d531b932d6eebc8c00e92ff6ed47f2 100644 (file)
@@ -2142,6 +2142,26 @@ func rewriteBlockAMD64(b *Block) bool {
                }
                goto ende4d36879bb8e1bd8facaa8c91ba99dcc
        ende4d36879bb8e1bd8facaa8c91ba99dcc:
+               ;
+               // match: (If (SETEQ cmp) yes no)
+               // cond:
+               // result: (EQ cmp yes no)
+               {
+                       v := b.Control
+                       if v.Op != OpAMD64SETEQ {
+                               goto endf113deb06abc88613840e6282942921a
+                       }
+                       cmp := v.Args[0]
+                       yes := b.Succs[0]
+                       no := b.Succs[1]
+                       b.Kind = BlockAMD64EQ
+                       b.Control = cmp
+                       b.Succs[0] = yes
+                       b.Succs[1] = no
+                       return true
+               }
+               goto endf113deb06abc88613840e6282942921a
+       endf113deb06abc88613840e6282942921a:
                ;
                // match: (If (SETNE cmp) yes no)
                // cond: