[dev.ssa] cmd/compile/internal/ssa/gen: add more simplifications rules

This is a follow up on https://go-review.googlesource.com/#/c/12420/
with some rules moved to AMD64 closer to the existing rules.

Change-Id: Id346bb0fc4459b3c49b826a59cc74308a590310e
Reviewed-on: https://go-review.googlesource.com/12906
Reviewed-by: Keith Randall <khr@golang.org>
diff --git a/src/cmd/compile/internal/ssa/rewritegeneric.go b/src/cmd/compile/internal/ssa/rewritegeneric.go
index 7d889b8..17608d7 100644
--- a/src/cmd/compile/internal/ssa/rewritegeneric.go
+++ b/src/cmd/compile/internal/ssa/rewritegeneric.go
@@ -102,6 +102,82 @@
 		goto end68cc91679848c7c30bd8b0a8ed533843
 	end68cc91679848c7c30bd8b0a8ed533843:
 		;
+	case OpEq16:
+		// match: (Eq16 x x)
+		// cond:
+		// result: (ConstBool {true})
+		{
+			x := v.Args[0]
+			if v.Args[1] != x {
+				goto enda503589f9b617e708a5ad3ddb047809f
+			}
+			v.Op = OpConstBool
+			v.AuxInt = 0
+			v.Aux = nil
+			v.resetArgs()
+			v.Aux = true
+			return true
+		}
+		goto enda503589f9b617e708a5ad3ddb047809f
+	enda503589f9b617e708a5ad3ddb047809f:
+		;
+	case OpEq32:
+		// match: (Eq32 x x)
+		// cond:
+		// result: (ConstBool {true})
+		{
+			x := v.Args[0]
+			if v.Args[1] != x {
+				goto endc94ae3b97d0090257b02152e437b3e17
+			}
+			v.Op = OpConstBool
+			v.AuxInt = 0
+			v.Aux = nil
+			v.resetArgs()
+			v.Aux = true
+			return true
+		}
+		goto endc94ae3b97d0090257b02152e437b3e17
+	endc94ae3b97d0090257b02152e437b3e17:
+		;
+	case OpEq64:
+		// match: (Eq64 x x)
+		// cond:
+		// result: (ConstBool {true})
+		{
+			x := v.Args[0]
+			if v.Args[1] != x {
+				goto end4d21cead60174989467a9c8202dbb91d
+			}
+			v.Op = OpConstBool
+			v.AuxInt = 0
+			v.Aux = nil
+			v.resetArgs()
+			v.Aux = true
+			return true
+		}
+		goto end4d21cead60174989467a9c8202dbb91d
+	end4d21cead60174989467a9c8202dbb91d:
+		;
+	case OpEq8:
+		// match: (Eq8 x x)
+		// cond:
+		// result: (ConstBool {true})
+		{
+			x := v.Args[0]
+			if v.Args[1] != x {
+				goto end73dce8bba164e4f4a1dd701bf8cfb362
+			}
+			v.Op = OpConstBool
+			v.AuxInt = 0
+			v.Aux = nil
+			v.resetArgs()
+			v.Aux = true
+			return true
+		}
+		goto end73dce8bba164e4f4a1dd701bf8cfb362
+	end73dce8bba164e4f4a1dd701bf8cfb362:
+		;
 	case OpEqFat:
 		// match: (EqFat x y)
 		// cond: x.Op == OpConstNil && y.Op != OpConstNil
@@ -256,6 +332,82 @@
 		goto end808c190f346658bb1ad032bf37a1059f
 	end808c190f346658bb1ad032bf37a1059f:
 		;
+	case OpNeq16:
+		// match: (Neq16 x x)
+		// cond:
+		// result: (ConstBool {false})
+		{
+			x := v.Args[0]
+			if v.Args[1] != x {
+				goto end192755dd3c2be992e9d3deb53794a8d2
+			}
+			v.Op = OpConstBool
+			v.AuxInt = 0
+			v.Aux = nil
+			v.resetArgs()
+			v.Aux = false
+			return true
+		}
+		goto end192755dd3c2be992e9d3deb53794a8d2
+	end192755dd3c2be992e9d3deb53794a8d2:
+		;
+	case OpNeq32:
+		// match: (Neq32 x x)
+		// cond:
+		// result: (ConstBool {false})
+		{
+			x := v.Args[0]
+			if v.Args[1] != x {
+				goto endeb23619fc85950a8df7b31126252c4dd
+			}
+			v.Op = OpConstBool
+			v.AuxInt = 0
+			v.Aux = nil
+			v.resetArgs()
+			v.Aux = false
+			return true
+		}
+		goto endeb23619fc85950a8df7b31126252c4dd
+	endeb23619fc85950a8df7b31126252c4dd:
+		;
+	case OpNeq64:
+		// match: (Neq64 x x)
+		// cond:
+		// result: (ConstBool {false})
+		{
+			x := v.Args[0]
+			if v.Args[1] != x {
+				goto endfc6eea780fb4056afb9e4287076da60c
+			}
+			v.Op = OpConstBool
+			v.AuxInt = 0
+			v.Aux = nil
+			v.resetArgs()
+			v.Aux = false
+			return true
+		}
+		goto endfc6eea780fb4056afb9e4287076da60c
+	endfc6eea780fb4056afb9e4287076da60c:
+		;
+	case OpNeq8:
+		// match: (Neq8 x x)
+		// cond:
+		// result: (ConstBool {false})
+		{
+			x := v.Args[0]
+			if v.Args[1] != x {
+				goto endcccf700d93c6d57765b80f92f7b3fa81
+			}
+			v.Op = OpConstBool
+			v.AuxInt = 0
+			v.Aux = nil
+			v.resetArgs()
+			v.Aux = false
+			return true
+		}
+		goto endcccf700d93c6d57765b80f92f7b3fa81
+	endcccf700d93c6d57765b80f92f7b3fa81:
+		;
 	case OpNeqFat:
 		// match: (NeqFat x y)
 		// cond: x.Op == OpConstNil && y.Op != OpConstNil
@@ -422,7 +574,7 @@
 			t := v.Args[1].Type
 			src := v.Args[1].Args[0]
 			mem := v.Args[1].Args[1]
-			if v.Args[2] != v.Args[1].Args[1] {
+			if v.Args[2] != mem {
 				goto end324ffb6d2771808da4267f62c854e9c8
 			}
 			if !(t.Size() > 8) {