[dev.ssa] cmd/compile: simplify repeated OCOM

Rewrite ^{n}x to be ^{n % 2}x.  This will eventually resolve a fuzz
issue that breaks v1.5.

Updates #11352

Change-Id: I1b3f93872d06222f9ff5f6fd5580178ebaf4c003
Reviewed-on: https://go-review.googlesource.com/13110
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 17608d7..bccf81b 100644
--- a/src/cmd/compile/internal/ssa/rewritegeneric.go
+++ b/src/cmd/compile/internal/ssa/rewritegeneric.go
@@ -76,6 +76,82 @@
 		goto end4894dd7b58383fee5f8a92be08437c33
 	end4894dd7b58383fee5f8a92be08437c33:
 		;
+	case OpCom16:
+		// match: (Com16 (Com16 x))
+		// cond:
+		// result: (Copy x)
+		{
+			if v.Args[0].Op != OpCom16 {
+				goto end388d572e5a72fd87a07da5cab243ebdc
+			}
+			x := v.Args[0].Args[0]
+			v.Op = OpCopy
+			v.AuxInt = 0
+			v.Aux = nil
+			v.resetArgs()
+			v.AddArg(x)
+			return true
+		}
+		goto end388d572e5a72fd87a07da5cab243ebdc
+	end388d572e5a72fd87a07da5cab243ebdc:
+		;
+	case OpCom32:
+		// match: (Com32 (Com32 x))
+		// cond:
+		// result: (Copy x)
+		{
+			if v.Args[0].Op != OpCom32 {
+				goto end5b2b3834acc7313649923604f685e7c5
+			}
+			x := v.Args[0].Args[0]
+			v.Op = OpCopy
+			v.AuxInt = 0
+			v.Aux = nil
+			v.resetArgs()
+			v.AddArg(x)
+			return true
+		}
+		goto end5b2b3834acc7313649923604f685e7c5
+	end5b2b3834acc7313649923604f685e7c5:
+		;
+	case OpCom64:
+		// match: (Com64 (Com64 x))
+		// cond:
+		// result: (Copy x)
+		{
+			if v.Args[0].Op != OpCom64 {
+				goto end6d6312f25d06a327d92f028b1ce50566
+			}
+			x := v.Args[0].Args[0]
+			v.Op = OpCopy
+			v.AuxInt = 0
+			v.Aux = nil
+			v.resetArgs()
+			v.AddArg(x)
+			return true
+		}
+		goto end6d6312f25d06a327d92f028b1ce50566
+	end6d6312f25d06a327d92f028b1ce50566:
+		;
+	case OpCom8:
+		// match: (Com8 (Com8 x))
+		// cond:
+		// result: (Copy x)
+		{
+			if v.Args[0].Op != OpCom8 {
+				goto end70cbd85c4b8e82c170dba7c23f8bc0f3
+			}
+			x := v.Args[0].Args[0]
+			v.Op = OpCopy
+			v.AuxInt = 0
+			v.Aux = nil
+			v.resetArgs()
+			v.AddArg(x)
+			return true
+		}
+		goto end70cbd85c4b8e82c170dba7c23f8bc0f3
+	end70cbd85c4b8e82c170dba7c23f8bc0f3:
+		;
 	case OpConstString:
 		// match: (ConstString {s})
 		// cond: