cmd/compile: allow naming of subexpressions

Allow names to be used for subexpressions of match rules.
For example:

(OpA x:(OpB y)) -> ..use x here to refer to the OpB value..

This gets rid of the .Args[0].Args[0]... way of naming we
used to use.

While we're here, give all subexpression matches names instead
of recomputing them with .Args[i] sequences each time they
are referenced.  Makes the generated rule code a bit smaller.

Change-Id: Ie42139f6f208933b75bd2ae8bd34e95419bc0e4e
Reviewed-on: https://go-review.googlesource.com/20997
Run-TryBot: Todd Neal <todd@tneal.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Todd Neal <todd@tneal.org>
diff --git a/src/cmd/compile/internal/ssa/rewritegeneric.go b/src/cmd/compile/internal/ssa/rewritegeneric.go
index ebc241e..4094d86 100644
--- a/src/cmd/compile/internal/ssa/rewritegeneric.go
+++ b/src/cmd/compile/internal/ssa/rewritegeneric.go
@@ -356,14 +356,16 @@
 	// cond:
 	// result: (Const16 [c+d])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst16)
 		v.AuxInt = c + d
 		return true
@@ -373,11 +375,12 @@
 	// result: (Add16 (Const16 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst16) {
 			break
 		}
@@ -392,10 +395,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		x := v.Args[1]
@@ -413,14 +417,16 @@
 	// cond:
 	// result: (Const32 [c+d])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst32)
 		v.AuxInt = c + d
 		return true
@@ -430,11 +436,12 @@
 	// result: (Add32 (Const32 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst32) {
 			break
 		}
@@ -449,10 +456,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		x := v.Args[1]
@@ -470,14 +478,16 @@
 	// cond:
 	// result: (Const32F [f2i(float64(i2f32(c) + i2f32(d)))])
 	for {
-		if v.Args[0].Op != OpConst32F {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32F {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32F {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32F {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst32F)
 		v.AuxInt = f2i(float64(i2f32(c) + i2f32(d)))
 		return true
@@ -491,14 +501,16 @@
 	// cond:
 	// result: (Const64 [c+d])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst64)
 		v.AuxInt = c + d
 		return true
@@ -508,11 +520,12 @@
 	// result: (Add64 (Const64 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst64) {
 			break
 		}
@@ -527,10 +540,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		x := v.Args[1]
@@ -548,14 +562,16 @@
 	// cond:
 	// result: (Const64F [f2i(i2f(c) + i2f(d))])
 	for {
-		if v.Args[0].Op != OpConst64F {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64F {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64F {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64F {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst64F)
 		v.AuxInt = f2i(i2f(c) + i2f(d))
 		return true
@@ -569,14 +585,16 @@
 	// cond:
 	// result: (Const8 [c+d])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst8)
 		v.AuxInt = c + d
 		return true
@@ -586,11 +604,12 @@
 	// result: (Add8 (Const8 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst8) {
 			break
 		}
@@ -605,10 +624,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		x := v.Args[1]
@@ -628,10 +648,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpOffPtr)
 		v.Type = t
 		v.AddArg(x)
@@ -648,11 +669,12 @@
 	// result: (And16 (Const16 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst16) {
 			break
 		}
@@ -668,7 +690,7 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -680,10 +702,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		if v.Args[0].AuxInt != -1 {
+		if v_0.AuxInt != -1 {
 			break
 		}
 		x := v.Args[1]
@@ -696,10 +719,11 @@
 	// cond:
 	// result: (Const16 [0])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst16)
@@ -716,11 +740,12 @@
 	// result: (And32 (Const32 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst32) {
 			break
 		}
@@ -736,7 +761,7 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -748,10 +773,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		if v.Args[0].AuxInt != -1 {
+		if v_0.AuxInt != -1 {
 			break
 		}
 		x := v.Args[1]
@@ -764,10 +790,11 @@
 	// cond:
 	// result: (Const32 [0])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst32)
@@ -784,11 +811,12 @@
 	// result: (And64 (Const64 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst64) {
 			break
 		}
@@ -804,7 +832,7 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -816,10 +844,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != -1 {
+		if v_0.AuxInt != -1 {
 			break
 		}
 		x := v.Args[1]
@@ -832,10 +861,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -847,10 +877,11 @@
 	// result: (Rsh64Ux64 (Lsh64x64 <t> x (Const64 <t> [nlz(y)])) (Const64 <t> [nlz(y)]))
 	for {
 		t := v.Type
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		y := v.Args[0].AuxInt
+		y := v_0.AuxInt
 		x := v.Args[1]
 		if !(nlz(y)+nto(y) == 64 && nto(y) >= 32) {
 			break
@@ -872,10 +903,11 @@
 	// result: (Lsh64x64 (Rsh64Ux64 <t> x (Const64 <t> [ntz(y)])) (Const64 <t> [ntz(y)]))
 	for {
 		t := v.Type
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		y := v.Args[0].AuxInt
+		y := v_0.AuxInt
 		x := v.Args[1]
 		if !(nlo(y)+ntz(y) == 64 && ntz(y) >= 32) {
 			break
@@ -902,11 +934,12 @@
 	// result: (And8 (Const8 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst8) {
 			break
 		}
@@ -922,7 +955,7 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -934,10 +967,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		if v.Args[0].AuxInt != -1 {
+		if v_0.AuxInt != -1 {
 			break
 		}
 		x := v.Args[1]
@@ -950,10 +984,11 @@
 	// cond:
 	// result: (Const8 [0])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst8)
@@ -1177,20 +1212,21 @@
 func rewriteValuegeneric_OpArrayIndex(v *Value, config *Config) bool {
 	b := v.Block
 	_ = b
-	// match: (ArrayIndex <t> [0] (Load ptr mem))
+	// match: (ArrayIndex <t> [0] x:(Load ptr mem))
 	// cond:
-	// result: @v.Args[0].Block (Load <t> ptr mem)
+	// result: @x.Block (Load <t> ptr mem)
 	for {
 		t := v.Type
 		if v.AuxInt != 0 {
 			break
 		}
-		if v.Args[0].Op != OpLoad {
+		x := v.Args[0]
+		if x.Op != OpLoad {
 			break
 		}
-		ptr := v.Args[0].Args[0]
-		mem := v.Args[0].Args[1]
-		b = v.Args[0].Block
+		ptr := x.Args[0]
+		mem := x.Args[1]
+		b = x.Block
 		v0 := b.NewValue0(v.Line, OpLoad, t)
 		v.reset(OpCopy)
 		v.AddArg(v0)
@@ -1207,10 +1243,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpCom16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpCom16 {
 			break
 		}
-		x := v.Args[0].Args[0]
+		x := v_0.Args[0]
 		v.reset(OpCopy)
 		v.Type = x.Type
 		v.AddArg(x)
@@ -1225,10 +1262,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpCom32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpCom32 {
 			break
 		}
-		x := v.Args[0].Args[0]
+		x := v_0.Args[0]
 		v.reset(OpCopy)
 		v.Type = x.Type
 		v.AddArg(x)
@@ -1243,10 +1281,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpCom64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpCom64 {
 			break
 		}
-		x := v.Args[0].Args[0]
+		x := v_0.Args[0]
 		v.reset(OpCopy)
 		v.Type = x.Type
 		v.AddArg(x)
@@ -1261,10 +1300,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpCom8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpCom8 {
 			break
 		}
-		x := v.Args[0].Args[0]
+		x := v_0.Args[0]
 		v.reset(OpCopy)
 		v.Type = x.Type
 		v.AddArg(x)
@@ -1279,10 +1319,11 @@
 	// cond:
 	// result: imag
 	for {
-		if v.Args[0].Op != OpComplexMake {
+		v_0 := v.Args[0]
+		if v_0.Op != OpComplexMake {
 			break
 		}
-		imag := v.Args[0].Args[1]
+		imag := v_0.Args[1]
 		v.reset(OpCopy)
 		v.Type = imag.Type
 		v.AddArg(imag)
@@ -1297,10 +1338,11 @@
 	// cond:
 	// result: real
 	for {
-		if v.Args[0].Op != OpComplexMake {
+		v_0 := v.Args[0]
+		if v_0.Op != OpComplexMake {
 			break
 		}
-		real := v.Args[0].Args[0]
+		real := v_0.Args[0]
 		v.reset(OpCopy)
 		v.Type = real.Type
 		v.AddArg(real)
@@ -1447,16 +1489,18 @@
 	// cond:
 	// result: (Add64 ptr off)
 	for {
-		if v.Args[0].Op != OpAdd64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAdd64 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpConvert {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpConvert {
 			break
 		}
-		ptr := v.Args[0].Args[0].Args[0]
-		mem := v.Args[0].Args[0].Args[1]
-		off := v.Args[0].Args[1]
-		if v.Args[1] != mem {
+		ptr := v_0_0.Args[0]
+		mem := v_0_0.Args[1]
+		off := v_0.Args[1]
+		if mem != v.Args[1] {
 			break
 		}
 		v.reset(OpAdd64)
@@ -1468,16 +1512,18 @@
 	// cond:
 	// result: (Add64 ptr off)
 	for {
-		if v.Args[0].Op != OpAdd64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAdd64 {
 			break
 		}
-		off := v.Args[0].Args[0]
-		if v.Args[0].Args[1].Op != OpConvert {
+		off := v_0.Args[0]
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConvert {
 			break
 		}
-		ptr := v.Args[0].Args[1].Args[0]
-		mem := v.Args[0].Args[1].Args[1]
-		if v.Args[1] != mem {
+		ptr := v_0_1.Args[0]
+		mem := v_0_1.Args[1]
+		if mem != v.Args[1] {
 			break
 		}
 		v.reset(OpAdd64)
@@ -1489,12 +1535,13 @@
 	// cond:
 	// result: ptr
 	for {
-		if v.Args[0].Op != OpConvert {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConvert {
 			break
 		}
-		ptr := v.Args[0].Args[0]
-		mem := v.Args[0].Args[1]
-		if v.Args[1] != mem {
+		ptr := v_0.Args[0]
+		mem := v_0.Args[1]
+		if mem != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -1511,10 +1558,11 @@
 	// cond:
 	// result: (Const64F [c])
 	for {
-		if v.Args[0].Op != OpConst32F {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32F {
 			break
 		}
-		c := v.Args[0].AuxInt
+		c := v_0.AuxInt
 		v.reset(OpConst64F)
 		v.AuxInt = c
 		return true
@@ -1528,10 +1576,11 @@
 	// cond:
 	// result: (Const32F [f2i(float64(i2f32(c)))])
 	for {
-		if v.Args[0].Op != OpConst64F {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64F {
 			break
 		}
-		c := v.Args[0].AuxInt
+		c := v_0.AuxInt
 		v.reset(OpConst32F)
 		v.AuxInt = f2i(float64(i2f32(c)))
 		return true
@@ -1547,10 +1596,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(c > 0 && smagic64ok(c) && smagic64m(c) > 0) {
 			break
 		}
@@ -1581,10 +1631,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(c > 0 && smagic64ok(c) && smagic64m(c) < 0) {
 			break
 		}
@@ -1618,10 +1669,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(c < 0 && smagic64ok(c) && smagic64m(c) > 0) {
 			break
 		}
@@ -1654,10 +1706,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(c < 0 && smagic64ok(c) && smagic64m(c) < 0) {
 			break
 		}
@@ -1698,10 +1751,11 @@
 	for {
 		t := v.Type
 		n := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(isPowerOfTwo(c)) {
 			break
 		}
@@ -1718,10 +1772,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(umagic64ok(c) && !umagic64a(c)) {
 			break
 		}
@@ -1743,10 +1798,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(umagic64ok(c) && umagic64a(c)) {
 			break
 		}
@@ -1775,7 +1831,7 @@
 	// result: (ConstBool [1])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConstBool)
@@ -1786,22 +1842,25 @@
 	// cond:
 	// result: (Eq16 (Const16 <t> [c-d]) x)
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		t := v.Args[0].Type
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpAdd16 {
+		t := v_0.Type
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpAdd16 {
 			break
 		}
-		if v.Args[1].Args[0].Op != OpConst16 {
+		v_1_0 := v_1.Args[0]
+		if v_1_0.Op != OpConst16 {
 			break
 		}
-		if v.Args[1].Args[0].Type != t {
+		if v_1_0.Type != t {
 			break
 		}
-		d := v.Args[1].Args[0].AuxInt
-		x := v.Args[1].Args[1]
+		d := v_1_0.AuxInt
+		x := v_1.Args[1]
 		v.reset(OpEq16)
 		v0 := b.NewValue0(v.Line, OpConst16, t)
 		v0.AuxInt = c - d
@@ -1814,11 +1873,12 @@
 	// result: (Eq16 (Const16 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst16) {
 			break
 		}
@@ -1833,14 +1893,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int16(c) == int16(d))])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int16(c) == int16(d))
 		return true
@@ -1855,7 +1917,7 @@
 	// result: (ConstBool [1])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConstBool)
@@ -1866,22 +1928,25 @@
 	// cond:
 	// result: (Eq32 (Const32 <t> [c-d]) x)
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		t := v.Args[0].Type
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpAdd32 {
+		t := v_0.Type
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpAdd32 {
 			break
 		}
-		if v.Args[1].Args[0].Op != OpConst32 {
+		v_1_0 := v_1.Args[0]
+		if v_1_0.Op != OpConst32 {
 			break
 		}
-		if v.Args[1].Args[0].Type != t {
+		if v_1_0.Type != t {
 			break
 		}
-		d := v.Args[1].Args[0].AuxInt
-		x := v.Args[1].Args[1]
+		d := v_1_0.AuxInt
+		x := v_1.Args[1]
 		v.reset(OpEq32)
 		v0 := b.NewValue0(v.Line, OpConst32, t)
 		v0.AuxInt = c - d
@@ -1894,11 +1959,12 @@
 	// result: (Eq32 (Const32 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst32) {
 			break
 		}
@@ -1913,14 +1979,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int32(c) == int32(d))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int32(c) == int32(d))
 		return true
@@ -1935,7 +2003,7 @@
 	// result: (ConstBool [1])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConstBool)
@@ -1946,22 +2014,25 @@
 	// cond:
 	// result: (Eq64 (Const64 <t> [c-d]) x)
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		t := v.Args[0].Type
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpAdd64 {
+		t := v_0.Type
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpAdd64 {
 			break
 		}
-		if v.Args[1].Args[0].Op != OpConst64 {
+		v_1_0 := v_1.Args[0]
+		if v_1_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].Args[0].Type != t {
+		if v_1_0.Type != t {
 			break
 		}
-		d := v.Args[1].Args[0].AuxInt
-		x := v.Args[1].Args[1]
+		d := v_1_0.AuxInt
+		x := v_1.Args[1]
 		v.reset(OpEq64)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
 		v0.AuxInt = c - d
@@ -1974,11 +2045,12 @@
 	// result: (Eq64 (Const64 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst64) {
 			break
 		}
@@ -1993,14 +2065,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int64(c) == int64(d))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int64(c) == int64(d))
 		return true
@@ -2015,7 +2089,7 @@
 	// result: (ConstBool [1])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConstBool)
@@ -2026,14 +2100,16 @@
 	// cond:
 	// result: (ConstBool [b2i((int8(c) != 0) == (int8(d) != 0))])
 	for {
-		if v.Args[0].Op != OpConstBool {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConstBool {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConstBool {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConstBool {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i((int8(c) != 0) == (int8(d) != 0))
 		return true
@@ -2042,10 +2118,11 @@
 	// cond:
 	// result: (Not x)
 	for {
-		if v.Args[0].Op != OpConstBool {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConstBool {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		x := v.Args[1]
@@ -2057,10 +2134,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConstBool {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConstBool {
 			break
 		}
-		if v.Args[0].AuxInt != 1 {
+		if v_0.AuxInt != 1 {
 			break
 		}
 		x := v.Args[1]
@@ -2073,22 +2151,25 @@
 	// cond:
 	// result: (Eq8 (Const8 <t> [c-d]) x)
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		t := v.Args[0].Type
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpAdd8 {
+		t := v_0.Type
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpAdd8 {
 			break
 		}
-		if v.Args[1].Args[0].Op != OpConst8 {
+		v_1_0 := v_1.Args[0]
+		if v_1_0.Op != OpConst8 {
 			break
 		}
-		if v.Args[1].Args[0].Type != t {
+		if v_1_0.Type != t {
 			break
 		}
-		d := v.Args[1].Args[0].AuxInt
-		x := v.Args[1].Args[1]
+		d := v_1_0.AuxInt
+		x := v_1.Args[1]
 		v.reset(OpEq8)
 		v0 := b.NewValue0(v.Line, OpConst8, t)
 		v0.AuxInt = c - d
@@ -2101,11 +2182,12 @@
 	// result: (Eq8 (Const8 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst8) {
 			break
 		}
@@ -2121,11 +2203,12 @@
 	// result: (Eq8 (ConstBool <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConstBool {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConstBool {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConstBool) {
 			break
 		}
@@ -2140,14 +2223,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int8(c)  == int8(d))])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int8(c) == int8(d))
 		return true
@@ -2182,7 +2267,8 @@
 	// result: (Not (IsNonNil p))
 	for {
 		p := v.Args[0]
-		if v.Args[1].Op != OpConstNil {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConstNil {
 			break
 		}
 		v.reset(OpNot)
@@ -2195,7 +2281,8 @@
 	// cond:
 	// result: (Not (IsNonNil p))
 	for {
-		if v.Args[0].Op != OpConstNil {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConstNil {
 			break
 		}
 		p := v.Args[1]
@@ -2234,14 +2321,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int16(c) >= int16(d))])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int16(c) >= int16(d))
 		return true
@@ -2255,14 +2344,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint16(c) >= uint16(d))])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint16(c) >= uint16(d))
 		return true
@@ -2276,14 +2367,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int32(c) >= int32(d))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int32(c) >= int32(d))
 		return true
@@ -2297,14 +2390,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint32(c) >= uint32(d))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint32(c) >= uint32(d))
 		return true
@@ -2318,14 +2413,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int64(c) >= int64(d))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int64(c) >= int64(d))
 		return true
@@ -2339,14 +2436,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint64(c) >= uint64(d))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint64(c) >= uint64(d))
 		return true
@@ -2360,14 +2459,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int8(c)  >= int8(d))])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int8(c) >= int8(d))
 		return true
@@ -2381,14 +2482,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint8(c)  >= uint8(d))])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint8(c) >= uint8(d))
 		return true
@@ -2402,14 +2505,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int16(c) > int16(d))])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int16(c) > int16(d))
 		return true
@@ -2423,14 +2528,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint16(c) > uint16(d))])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint16(c) > uint16(d))
 		return true
@@ -2444,14 +2551,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int32(c) > int32(d))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int32(c) > int32(d))
 		return true
@@ -2465,14 +2574,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint32(c) > uint32(d))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint32(c) > uint32(d))
 		return true
@@ -2486,14 +2597,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int64(c) > int64(d))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int64(c) > int64(d))
 		return true
@@ -2507,14 +2620,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint64(c) > uint64(d))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint64(c) > uint64(d))
 		return true
@@ -2528,14 +2643,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int8(c)  > int8(d))])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int8(c) > int8(d))
 		return true
@@ -2549,14 +2666,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint8(c)  > uint8(d))])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint8(c) > uint8(d))
 		return true
@@ -2570,10 +2689,11 @@
 	// cond:
 	// result: data
 	for {
-		if v.Args[0].Op != OpIMake {
+		v_0 := v.Args[0]
+		if v_0.Op != OpIMake {
 			break
 		}
-		data := v.Args[0].Args[1]
+		data := v_0.Args[1]
 		v.reset(OpCopy)
 		v.Type = data.Type
 		v.AddArg(data)
@@ -2588,10 +2708,11 @@
 	// cond:
 	// result: itab
 	for {
-		if v.Args[0].Op != OpIMake {
+		v_0 := v.Args[0]
+		if v_0.Op != OpIMake {
 			break
 		}
-		itab := v.Args[0].Args[0]
+		itab := v_0.Args[0]
 		v.reset(OpCopy)
 		v.Type = itab.Type
 		v.AddArg(itab)
@@ -2679,7 +2800,7 @@
 	// result: (ConstBool [0])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConstBool)
@@ -2690,17 +2811,20 @@
 	// cond: inBounds32(c, d)
 	// result: (ConstBool [1])
 	for {
-		if v.Args[0].Op != OpAnd32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAnd32 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpConst32 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(inBounds32(c, d)) {
 			break
 		}
@@ -2712,17 +2836,20 @@
 	// cond: inBounds64(c, d)
 	// result: (ConstBool [1])
 	for {
-		if v.Args[0].Op != OpAnd64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAnd64 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpConst64 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(inBounds64(c, d)) {
 			break
 		}
@@ -2734,14 +2861,16 @@
 	// cond:
 	// result: (ConstBool [b2i(inBounds32(c,d))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(inBounds32(c, d))
 		return true
@@ -2750,14 +2879,16 @@
 	// cond:
 	// result: (ConstBool [b2i(inBounds64(c,d))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(inBounds64(c, d))
 		return true
@@ -2772,7 +2903,7 @@
 	// result: (ConstBool [1])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConstBool)
@@ -2783,17 +2914,20 @@
 	// cond: sliceInBounds32(c, d)
 	// result: (ConstBool [1])
 	for {
-		if v.Args[0].Op != OpAnd32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAnd32 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpConst32 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(sliceInBounds32(c, d)) {
 			break
 		}
@@ -2805,17 +2939,20 @@
 	// cond: sliceInBounds64(c, d)
 	// result: (ConstBool [1])
 	for {
-		if v.Args[0].Op != OpAnd64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAnd64 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpConst64 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(sliceInBounds64(c, d)) {
 			break
 		}
@@ -2827,10 +2964,11 @@
 	// cond:
 	// result: (ConstBool [1])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConstBool)
@@ -2841,10 +2979,11 @@
 	// cond:
 	// result: (ConstBool [1])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConstBool)
@@ -2855,14 +2994,16 @@
 	// cond:
 	// result: (ConstBool [b2i(sliceInBounds32(c,d))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(sliceInBounds32(c, d))
 		return true
@@ -2871,14 +3012,16 @@
 	// cond:
 	// result: (ConstBool [b2i(sliceInBounds64(c,d))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(sliceInBounds64(c, d))
 		return true
@@ -2887,14 +3030,16 @@
 	// cond:
 	// result: (ConstBool [1])
 	for {
-		if v.Args[0].Op != OpSliceLen {
+		v_0 := v.Args[0]
+		if v_0.Op != OpSliceLen {
 			break
 		}
-		x := v.Args[0].Args[0]
-		if v.Args[1].Op != OpSliceCap {
+		x := v_0.Args[0]
+		v_1 := v.Args[1]
+		if v_1.Op != OpSliceCap {
 			break
 		}
-		if v.Args[1].Args[0] != x {
+		if x != v_1.Args[0] {
 			break
 		}
 		v.reset(OpConstBool)
@@ -2910,14 +3055,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int16(c) <= int16(d))])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int16(c) <= int16(d))
 		return true
@@ -2931,14 +3078,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint16(c) <= uint16(d))])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint16(c) <= uint16(d))
 		return true
@@ -2952,14 +3101,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int32(c) <= int32(d))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int32(c) <= int32(d))
 		return true
@@ -2973,14 +3124,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint32(c) <= uint32(d))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint32(c) <= uint32(d))
 		return true
@@ -2994,14 +3147,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int64(c) <= int64(d))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int64(c) <= int64(d))
 		return true
@@ -3015,14 +3170,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint64(c) <= uint64(d))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint64(c) <= uint64(d))
 		return true
@@ -3036,14 +3193,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int8(c)  <= int8(d))])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int8(c) <= int8(d))
 		return true
@@ -3057,14 +3216,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint8(c)  <= uint8(d))])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint8(c) <= uint8(d))
 		return true
@@ -3078,14 +3239,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int16(c) < int16(d))])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int16(c) < int16(d))
 		return true
@@ -3099,14 +3262,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint16(c) < uint16(d))])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint16(c) < uint16(d))
 		return true
@@ -3120,14 +3285,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int32(c) < int32(d))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int32(c) < int32(d))
 		return true
@@ -3141,14 +3308,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint32(c) < uint32(d))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint32(c) < uint32(d))
 		return true
@@ -3162,14 +3331,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int64(c) < int64(d))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int64(c) < int64(d))
 		return true
@@ -3183,14 +3354,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint64(c) < uint64(d))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint64(c) < uint64(d))
 		return true
@@ -3204,14 +3377,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int8(c)  < int8(d))])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int8(c) < int8(d))
 		return true
@@ -3225,14 +3400,16 @@
 	// cond:
 	// result: (ConstBool [b2i(uint8(c)  < uint8(d))])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(uint8(c) < uint8(d))
 		return true
@@ -3248,12 +3425,13 @@
 	for {
 		t1 := v.Type
 		p1 := v.Args[0]
-		if v.Args[1].Op != OpStore {
+		v_1 := v.Args[1]
+		if v_1.Op != OpStore {
 			break
 		}
-		w := v.Args[1].AuxInt
-		p2 := v.Args[1].Args[0]
-		x := v.Args[1].Args[1]
+		w := v_1.AuxInt
+		p2 := v_1.Args[0]
+		x := v_1.Args[1]
 		if !(isSamePtr(p1, p2) && t1.Compare(x.Type) == CMPeq && w == t1.Size()) {
 			break
 		}
@@ -3519,25 +3697,30 @@
 	// cond: c1 >= c2 && c3 >= c2
 	// result: (Lsh16x16 x (Const16 <config.fe.TypeUInt16()> [c1-c2+c3]))
 	for {
-		if v.Args[0].Op != OpRsh16Ux16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpRsh16Ux16 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpLsh16x16 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpLsh16x16 {
 			break
 		}
-		x := v.Args[0].Args[0].Args[0]
-		if v.Args[0].Args[0].Args[1].Op != OpConst16 {
+		x := v_0_0.Args[0]
+		v_0_0_1 := v_0_0.Args[1]
+		if v_0_0_1.Op != OpConst16 {
 			break
 		}
-		c1 := v.Args[0].Args[0].Args[1].AuxInt
-		if v.Args[0].Args[1].Op != OpConst16 {
+		c1 := v_0_0_1.AuxInt
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst16 {
 			break
 		}
-		c2 := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c2 := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		c3 := v.Args[1].AuxInt
+		c3 := v_1.AuxInt
 		if !(c1 >= c2 && c3 >= c2) {
 			break
 		}
@@ -3554,10 +3737,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpLsh16x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -3576,10 +3760,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpLsh16x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -3596,14 +3781,16 @@
 	// cond:
 	// result: (Const16 [int64(int16(c) << uint64(d))])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst16)
 		v.AuxInt = int64(int16(c) << uint64(d))
 		return true
@@ -3612,10 +3799,11 @@
 	// cond:
 	// result: (Const16 [0])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst16)
@@ -3627,10 +3815,11 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].AuxInt != 0 {
+		if v_1.AuxInt != 0 {
 			break
 		}
 		v.reset(OpCopy)
@@ -3642,10 +3831,11 @@
 	// cond: uint64(c) >= 16
 	// result: (Const16 [0])
 	for {
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(uint64(c) >= 16) {
 			break
 		}
@@ -3658,18 +3848,21 @@
 	// result: (Lsh16x64 x (Const64 <t> [c+d]))
 	for {
 		t := v.Type
-		if v.Args[0].Op != OpLsh16x64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpLsh16x64 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		if v.Args[0].Args[1].Op != OpConst64 {
+		x := v_0.Args[0]
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(!uaddOvf(c, d)) {
 			break
 		}
@@ -3691,10 +3884,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpLsh16x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -3713,10 +3907,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpLsh32x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -3733,25 +3928,30 @@
 	// cond: c1 >= c2 && c3 >= c2
 	// result: (Lsh32x32 x (Const32 <config.fe.TypeUInt32()> [c1-c2+c3]))
 	for {
-		if v.Args[0].Op != OpRsh32Ux32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpRsh32Ux32 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpLsh32x32 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpLsh32x32 {
 			break
 		}
-		x := v.Args[0].Args[0].Args[0]
-		if v.Args[0].Args[0].Args[1].Op != OpConst32 {
+		x := v_0_0.Args[0]
+		v_0_0_1 := v_0_0.Args[1]
+		if v_0_0_1.Op != OpConst32 {
 			break
 		}
-		c1 := v.Args[0].Args[0].Args[1].AuxInt
-		if v.Args[0].Args[1].Op != OpConst32 {
+		c1 := v_0_0_1.AuxInt
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst32 {
 			break
 		}
-		c2 := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c2 := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		c3 := v.Args[1].AuxInt
+		c3 := v_1.AuxInt
 		if !(c1 >= c2 && c3 >= c2) {
 			break
 		}
@@ -3768,10 +3968,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpLsh32x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -3788,14 +3989,16 @@
 	// cond:
 	// result: (Const32 [int64(int32(c) << uint64(d))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst32)
 		v.AuxInt = int64(int32(c) << uint64(d))
 		return true
@@ -3804,10 +4007,11 @@
 	// cond:
 	// result: (Const32 [0])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst32)
@@ -3819,10 +4023,11 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].AuxInt != 0 {
+		if v_1.AuxInt != 0 {
 			break
 		}
 		v.reset(OpCopy)
@@ -3834,10 +4039,11 @@
 	// cond: uint64(c) >= 32
 	// result: (Const32 [0])
 	for {
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(uint64(c) >= 32) {
 			break
 		}
@@ -3850,18 +4056,21 @@
 	// result: (Lsh32x64 x (Const64 <t> [c+d]))
 	for {
 		t := v.Type
-		if v.Args[0].Op != OpLsh32x64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpLsh32x64 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		if v.Args[0].Args[1].Op != OpConst64 {
+		x := v_0.Args[0]
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(!uaddOvf(c, d)) {
 			break
 		}
@@ -3883,10 +4092,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpLsh32x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -3905,10 +4115,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpLsh64x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -3920,10 +4131,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -3941,10 +4153,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpLsh64x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -3956,10 +4169,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -3975,14 +4189,16 @@
 	// cond:
 	// result: (Const64 [c << uint64(d)])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst64)
 		v.AuxInt = c << uint64(d)
 		return true
@@ -3991,10 +4207,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -4005,25 +4222,30 @@
 	// cond: c1 >= c2 && c3 >= c2
 	// result: (Lsh64x64 x (Const64 <config.fe.TypeUInt64()> [c1-c2+c3]))
 	for {
-		if v.Args[0].Op != OpRsh64Ux64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpRsh64Ux64 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpLsh64x64 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpLsh64x64 {
 			break
 		}
-		x := v.Args[0].Args[0].Args[0]
-		if v.Args[0].Args[0].Args[1].Op != OpConst64 {
+		x := v_0_0.Args[0]
+		v_0_0_1 := v_0_0.Args[1]
+		if v_0_0_1.Op != OpConst64 {
 			break
 		}
-		c1 := v.Args[0].Args[0].Args[1].AuxInt
-		if v.Args[0].Args[1].Op != OpConst64 {
+		c1 := v_0_0_1.AuxInt
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		c2 := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c2 := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c3 := v.Args[1].AuxInt
+		c3 := v_1.AuxInt
 		if !(c1 >= c2 && c3 >= c2) {
 			break
 		}
@@ -4039,10 +4261,11 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].AuxInt != 0 {
+		if v_1.AuxInt != 0 {
 			break
 		}
 		v.reset(OpCopy)
@@ -4054,10 +4277,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -4068,10 +4292,11 @@
 	// cond: uint64(c) >= 64
 	// result: (Const64 [0])
 	for {
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(uint64(c) >= 64) {
 			break
 		}
@@ -4084,18 +4309,21 @@
 	// result: (Lsh64x64 x (Const64 <t> [c+d]))
 	for {
 		t := v.Type
-		if v.Args[0].Op != OpLsh64x64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpLsh64x64 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		if v.Args[0].Args[1].Op != OpConst64 {
+		x := v_0.Args[0]
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(!uaddOvf(c, d)) {
 			break
 		}
@@ -4117,10 +4345,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpLsh64x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -4132,10 +4361,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -4153,10 +4383,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpLsh8x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -4175,10 +4406,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpLsh8x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -4195,14 +4427,16 @@
 	// cond:
 	// result: (Const8  [int64(int8(c) << uint64(d))])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst8)
 		v.AuxInt = int64(int8(c) << uint64(d))
 		return true
@@ -4211,10 +4445,11 @@
 	// cond:
 	// result: (Const8  [0])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst8)
@@ -4226,10 +4461,11 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].AuxInt != 0 {
+		if v_1.AuxInt != 0 {
 			break
 		}
 		v.reset(OpCopy)
@@ -4241,10 +4477,11 @@
 	// cond: uint64(c) >= 8
 	// result: (Const8 [0])
 	for {
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(uint64(c) >= 8) {
 			break
 		}
@@ -4257,18 +4494,21 @@
 	// result: (Lsh8x64  x (Const64 <t> [c+d]))
 	for {
 		t := v.Type
-		if v.Args[0].Op != OpLsh8x64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpLsh8x64 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		if v.Args[0].Args[1].Op != OpConst64 {
+		x := v_0.Args[0]
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(!uaddOvf(c, d)) {
 			break
 		}
@@ -4288,25 +4528,30 @@
 	// cond: c1 >= c2 && c3 >= c2
 	// result: (Lsh8x8 x (Const8 <config.fe.TypeUInt8()> [c1-c2+c3]))
 	for {
-		if v.Args[0].Op != OpRsh8Ux8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpRsh8Ux8 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpLsh8x8 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpLsh8x8 {
 			break
 		}
-		x := v.Args[0].Args[0].Args[0]
-		if v.Args[0].Args[0].Args[1].Op != OpConst8 {
+		x := v_0_0.Args[0]
+		v_0_0_1 := v_0_0.Args[1]
+		if v_0_0_1.Op != OpConst8 {
 			break
 		}
-		c1 := v.Args[0].Args[0].Args[1].AuxInt
-		if v.Args[0].Args[1].Op != OpConst8 {
+		c1 := v_0_0_1.AuxInt
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst8 {
 			break
 		}
-		c2 := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c2 := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		c3 := v.Args[1].AuxInt
+		c3 := v_1.AuxInt
 		if !(c1 >= c2 && c3 >= c2) {
 			break
 		}
@@ -4323,10 +4568,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpLsh8x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -4345,10 +4591,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(smagic64ok(c)) {
 			break
 		}
@@ -4378,10 +4625,11 @@
 	for {
 		t := v.Type
 		n := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(isPowerOfTwo(c)) {
 			break
 		}
@@ -4398,10 +4646,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(umagic64ok(c)) {
 			break
 		}
@@ -4429,14 +4678,16 @@
 	// cond:
 	// result: (Const16 [c*d])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst16)
 		v.AuxInt = c * d
 		return true
@@ -4446,11 +4697,12 @@
 	// result: (Mul16 (Const16 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst16) {
 			break
 		}
@@ -4465,10 +4717,11 @@
 	// cond:
 	// result: (Const16 [0])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst16)
@@ -4484,14 +4737,16 @@
 	// cond:
 	// result: (Const32 [c*d])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst32)
 		v.AuxInt = c * d
 		return true
@@ -4501,11 +4756,12 @@
 	// result: (Mul32 (Const32 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst32) {
 			break
 		}
@@ -4520,25 +4776,28 @@
 	// cond:
 	// result: (Add32 (Const32 <t> [c*d]) (Mul32 <t> (Const32 <t> [c]) x))
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		t := v.Args[0].Type
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpAdd32 {
+		t := v_0.Type
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpAdd32 {
 			break
 		}
-		if v.Args[1].Type != t {
+		if v_1.Type != t {
 			break
 		}
-		if v.Args[1].Args[0].Op != OpConst32 {
+		v_1_0 := v_1.Args[0]
+		if v_1_0.Op != OpConst32 {
 			break
 		}
-		if v.Args[1].Args[0].Type != t {
+		if v_1_0.Type != t {
 			break
 		}
-		d := v.Args[1].Args[0].AuxInt
-		x := v.Args[1].Args[1]
+		d := v_1_0.AuxInt
+		x := v_1.Args[1]
 		v.reset(OpAdd32)
 		v0 := b.NewValue0(v.Line, OpConst32, t)
 		v0.AuxInt = c * d
@@ -4555,10 +4814,11 @@
 	// cond:
 	// result: (Const32 [0])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst32)
@@ -4574,14 +4834,16 @@
 	// cond:
 	// result: (Const32F [f2i(float64(i2f32(c) * i2f32(d)))])
 	for {
-		if v.Args[0].Op != OpConst32F {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32F {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32F {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32F {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst32F)
 		v.AuxInt = f2i(float64(i2f32(c) * i2f32(d)))
 		return true
@@ -4595,14 +4857,16 @@
 	// cond:
 	// result: (Const64 [c*d])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst64)
 		v.AuxInt = c * d
 		return true
@@ -4612,11 +4876,12 @@
 	// result: (Mul64 (Const64 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst64) {
 			break
 		}
@@ -4631,25 +4896,28 @@
 	// cond:
 	// result: (Add64 (Const64 <t> [c*d]) (Mul64 <t> (Const64 <t> [c]) x))
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		t := v.Args[0].Type
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpAdd64 {
+		t := v_0.Type
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpAdd64 {
 			break
 		}
-		if v.Args[1].Type != t {
+		if v_1.Type != t {
 			break
 		}
-		if v.Args[1].Args[0].Op != OpConst64 {
+		v_1_0 := v_1.Args[0]
+		if v_1_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].Args[0].Type != t {
+		if v_1_0.Type != t {
 			break
 		}
-		d := v.Args[1].Args[0].AuxInt
-		x := v.Args[1].Args[1]
+		d := v_1_0.AuxInt
+		x := v_1.Args[1]
 		v.reset(OpAdd64)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
 		v0.AuxInt = c * d
@@ -4666,10 +4934,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -4685,14 +4954,16 @@
 	// cond:
 	// result: (Const64F [f2i(i2f(c) * i2f(d))])
 	for {
-		if v.Args[0].Op != OpConst64F {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64F {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64F {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64F {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst64F)
 		v.AuxInt = f2i(i2f(c) * i2f(d))
 		return true
@@ -4706,14 +4977,16 @@
 	// cond:
 	// result: (Const8 [c*d])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst8)
 		v.AuxInt = c * d
 		return true
@@ -4723,11 +4996,12 @@
 	// result: (Mul8 (Const8 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst8) {
 			break
 		}
@@ -4742,10 +5016,11 @@
 	// cond:
 	// result: (Const8 [0])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst8)
@@ -4761,11 +5036,12 @@
 	// cond:
 	// result: (Sub16 y x)
 	for {
-		if v.Args[0].Op != OpSub16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpSub16 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		y := v.Args[0].Args[1]
+		x := v_0.Args[0]
+		y := v_0.Args[1]
 		v.reset(OpSub16)
 		v.AddArg(y)
 		v.AddArg(x)
@@ -4780,11 +5056,12 @@
 	// cond:
 	// result: (Sub32 y x)
 	for {
-		if v.Args[0].Op != OpSub32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpSub32 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		y := v.Args[0].Args[1]
+		x := v_0.Args[0]
+		y := v_0.Args[1]
 		v.reset(OpSub32)
 		v.AddArg(y)
 		v.AddArg(x)
@@ -4799,11 +5076,12 @@
 	// cond:
 	// result: (Sub64 y x)
 	for {
-		if v.Args[0].Op != OpSub64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpSub64 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		y := v.Args[0].Args[1]
+		x := v_0.Args[0]
+		y := v_0.Args[1]
 		v.reset(OpSub64)
 		v.AddArg(y)
 		v.AddArg(x)
@@ -4818,11 +5096,12 @@
 	// cond:
 	// result: (Sub8 y x)
 	for {
-		if v.Args[0].Op != OpSub8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpSub8 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		y := v.Args[0].Args[1]
+		x := v_0.Args[0]
+		y := v_0.Args[1]
 		v.reset(OpSub8)
 		v.AddArg(y)
 		v.AddArg(x)
@@ -4838,7 +5117,7 @@
 	// result: (ConstBool [0])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConstBool)
@@ -4849,22 +5128,25 @@
 	// cond:
 	// result: (Neq16 (Const16 <t> [c-d]) x)
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		t := v.Args[0].Type
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpAdd16 {
+		t := v_0.Type
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpAdd16 {
 			break
 		}
-		if v.Args[1].Args[0].Op != OpConst16 {
+		v_1_0 := v_1.Args[0]
+		if v_1_0.Op != OpConst16 {
 			break
 		}
-		if v.Args[1].Args[0].Type != t {
+		if v_1_0.Type != t {
 			break
 		}
-		d := v.Args[1].Args[0].AuxInt
-		x := v.Args[1].Args[1]
+		d := v_1_0.AuxInt
+		x := v_1.Args[1]
 		v.reset(OpNeq16)
 		v0 := b.NewValue0(v.Line, OpConst16, t)
 		v0.AuxInt = c - d
@@ -4877,11 +5159,12 @@
 	// result: (Neq16 (Const16 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst16) {
 			break
 		}
@@ -4896,14 +5179,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int16(c) != int16(d))])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int16(c) != int16(d))
 		return true
@@ -4918,7 +5203,7 @@
 	// result: (ConstBool [0])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConstBool)
@@ -4929,22 +5214,25 @@
 	// cond:
 	// result: (Neq32 (Const32 <t> [c-d]) x)
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		t := v.Args[0].Type
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpAdd32 {
+		t := v_0.Type
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpAdd32 {
 			break
 		}
-		if v.Args[1].Args[0].Op != OpConst32 {
+		v_1_0 := v_1.Args[0]
+		if v_1_0.Op != OpConst32 {
 			break
 		}
-		if v.Args[1].Args[0].Type != t {
+		if v_1_0.Type != t {
 			break
 		}
-		d := v.Args[1].Args[0].AuxInt
-		x := v.Args[1].Args[1]
+		d := v_1_0.AuxInt
+		x := v_1.Args[1]
 		v.reset(OpNeq32)
 		v0 := b.NewValue0(v.Line, OpConst32, t)
 		v0.AuxInt = c - d
@@ -4957,11 +5245,12 @@
 	// result: (Neq32 (Const32 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst32) {
 			break
 		}
@@ -4976,14 +5265,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int32(c) != int32(d))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int32(c) != int32(d))
 		return true
@@ -4998,7 +5289,7 @@
 	// result: (ConstBool [0])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConstBool)
@@ -5009,22 +5300,25 @@
 	// cond:
 	// result: (Neq64 (Const64 <t> [c-d]) x)
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		t := v.Args[0].Type
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpAdd64 {
+		t := v_0.Type
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpAdd64 {
 			break
 		}
-		if v.Args[1].Args[0].Op != OpConst64 {
+		v_1_0 := v_1.Args[0]
+		if v_1_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].Args[0].Type != t {
+		if v_1_0.Type != t {
 			break
 		}
-		d := v.Args[1].Args[0].AuxInt
-		x := v.Args[1].Args[1]
+		d := v_1_0.AuxInt
+		x := v_1.Args[1]
 		v.reset(OpNeq64)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
 		v0.AuxInt = c - d
@@ -5037,11 +5331,12 @@
 	// result: (Neq64 (Const64 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst64) {
 			break
 		}
@@ -5056,14 +5351,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int64(c) != int64(d))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int64(c) != int64(d))
 		return true
@@ -5078,7 +5375,7 @@
 	// result: (ConstBool [0])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConstBool)
@@ -5089,14 +5386,16 @@
 	// cond:
 	// result: (ConstBool [b2i((int8(c) != 0) != (int8(d) != 0))])
 	for {
-		if v.Args[0].Op != OpConstBool {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConstBool {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConstBool {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConstBool {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i((int8(c) != 0) != (int8(d) != 0))
 		return true
@@ -5105,10 +5404,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConstBool {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConstBool {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		x := v.Args[1]
@@ -5121,10 +5421,11 @@
 	// cond:
 	// result: (Not x)
 	for {
-		if v.Args[0].Op != OpConstBool {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConstBool {
 			break
 		}
-		if v.Args[0].AuxInt != 1 {
+		if v_0.AuxInt != 1 {
 			break
 		}
 		x := v.Args[1]
@@ -5136,22 +5437,25 @@
 	// cond:
 	// result: (Neq8 (Const8 <t> [c-d]) x)
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		t := v.Args[0].Type
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpAdd8 {
+		t := v_0.Type
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpAdd8 {
 			break
 		}
-		if v.Args[1].Args[0].Op != OpConst8 {
+		v_1_0 := v_1.Args[0]
+		if v_1_0.Op != OpConst8 {
 			break
 		}
-		if v.Args[1].Args[0].Type != t {
+		if v_1_0.Type != t {
 			break
 		}
-		d := v.Args[1].Args[0].AuxInt
-		x := v.Args[1].Args[1]
+		d := v_1_0.AuxInt
+		x := v_1.Args[1]
 		v.reset(OpNeq8)
 		v0 := b.NewValue0(v.Line, OpConst8, t)
 		v0.AuxInt = c - d
@@ -5164,11 +5468,12 @@
 	// result: (Neq8 (Const8 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst8) {
 			break
 		}
@@ -5184,11 +5489,12 @@
 	// result: (Neq8 (ConstBool <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConstBool {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConstBool {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConstBool) {
 			break
 		}
@@ -5203,14 +5509,16 @@
 	// cond:
 	// result: (ConstBool [b2i(int8(c)  != int8(d))])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConstBool)
 		v.AuxInt = b2i(int8(c) != int8(d))
 		return true
@@ -5245,7 +5553,8 @@
 	// result: (IsNonNil p)
 	for {
 		p := v.Args[0]
-		if v.Args[1].Op != OpConstNil {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConstNil {
 			break
 		}
 		v.reset(OpIsNonNil)
@@ -5256,7 +5565,8 @@
 	// cond:
 	// result: (IsNonNil p)
 	for {
-		if v.Args[0].Op != OpConstNil {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConstNil {
 			break
 		}
 		p := v.Args[1]
@@ -5289,27 +5599,30 @@
 func rewriteValuegeneric_OpNilCheck(v *Value, config *Config) bool {
 	b := v.Block
 	_ = b
-	// match: (NilCheck (Phi x (Add64 (Const64 [c]) y)) mem)
-	// cond: c > 0 && v.Args[0] == y
+	// match: (NilCheck z:(Phi x (Add64 (Const64 [c]) y)) mem)
+	// cond: c > 0 && z == y
 	// result: (NilCheck x mem)
 	for {
-		if v.Args[0].Op != OpPhi {
+		z := v.Args[0]
+		if z.Op != OpPhi {
 			break
 		}
-		x := v.Args[0].Args[0]
-		if v.Args[0].Args[1].Op != OpAdd64 {
+		x := z.Args[0]
+		z_1 := z.Args[1]
+		if z_1.Op != OpAdd64 {
 			break
 		}
-		if v.Args[0].Args[1].Args[0].Op != OpConst64 {
+		z_1_0 := z_1.Args[0]
+		if z_1_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].Args[1].Args[0].AuxInt
-		y := v.Args[0].Args[1].Args[1]
-		if len(v.Args[0].Args) != 2 {
+		c := z_1_0.AuxInt
+		y := z_1.Args[1]
+		if len(z.Args) != 2 {
 			break
 		}
 		mem := v.Args[1]
-		if !(c > 0 && v.Args[0] == y) {
+		if !(c > 0 && z == y) {
 			break
 		}
 		v.reset(OpNilCheck)
@@ -5326,11 +5639,12 @@
 	// cond:
 	// result: (OffPtr p [a+b])
 	for {
-		if v.Args[0].Op != OpOffPtr {
+		v_0 := v.Args[0]
+		if v_0.Op != OpOffPtr {
 			break
 		}
-		p := v.Args[0].Args[0]
-		b := v.Args[0].AuxInt
+		p := v_0.Args[0]
+		b := v_0.AuxInt
 		a := v.AuxInt
 		v.reset(OpOffPtr)
 		v.AddArg(p)
@@ -5363,11 +5677,12 @@
 	// result: (Or16 (Const16 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst16) {
 			break
 		}
@@ -5383,7 +5698,7 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -5395,10 +5710,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		x := v.Args[1]
@@ -5411,10 +5727,11 @@
 	// cond:
 	// result: (Const16 [-1])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		if v.Args[0].AuxInt != -1 {
+		if v_0.AuxInt != -1 {
 			break
 		}
 		v.reset(OpConst16)
@@ -5431,11 +5748,12 @@
 	// result: (Or32 (Const32 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst32) {
 			break
 		}
@@ -5451,7 +5769,7 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -5463,10 +5781,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		x := v.Args[1]
@@ -5479,10 +5798,11 @@
 	// cond:
 	// result: (Const32 [-1])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		if v.Args[0].AuxInt != -1 {
+		if v_0.AuxInt != -1 {
 			break
 		}
 		v.reset(OpConst32)
@@ -5499,11 +5819,12 @@
 	// result: (Or64 (Const64 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst64) {
 			break
 		}
@@ -5519,7 +5840,7 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -5531,10 +5852,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		x := v.Args[1]
@@ -5547,10 +5869,11 @@
 	// cond:
 	// result: (Const64 [-1])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != -1 {
+		if v_0.AuxInt != -1 {
 			break
 		}
 		v.reset(OpConst64)
@@ -5567,11 +5890,12 @@
 	// result: (Or8 (Const8 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst8) {
 			break
 		}
@@ -5587,7 +5911,7 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -5599,10 +5923,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		x := v.Args[1]
@@ -5615,10 +5940,11 @@
 	// cond:
 	// result: (Const8 [-1])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		if v.Args[0].AuxInt != -1 {
+		if v_0.AuxInt != -1 {
 			break
 		}
 		v.reset(OpConst8)
@@ -5634,14 +5960,16 @@
 	// cond: int8(c) == int8(d)
 	// result: (Const8 [c])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if len(v.Args) != 2 {
 			break
 		}
@@ -5656,14 +5984,16 @@
 	// cond: int16(c) == int16(d)
 	// result: (Const16 [c])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if len(v.Args) != 2 {
 			break
 		}
@@ -5678,14 +6008,16 @@
 	// cond: int32(c) == int32(d)
 	// result: (Const32 [c])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if len(v.Args) != 2 {
 			break
 		}
@@ -5700,14 +6032,16 @@
 	// cond:
 	// result: (Const64 [c])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].AuxInt != c {
+		if v_1.AuxInt != c {
 			break
 		}
 		if len(v.Args) != 2 {
@@ -5771,25 +6105,30 @@
 	// cond: c1 >= c2 && c3 >= c2
 	// result: (Rsh16Ux16 x (Const16 <config.fe.TypeUInt16()> [c1-c2+c3]))
 	for {
-		if v.Args[0].Op != OpLsh16x16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpLsh16x16 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpRsh16Ux16 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpRsh16Ux16 {
 			break
 		}
-		x := v.Args[0].Args[0].Args[0]
-		if v.Args[0].Args[0].Args[1].Op != OpConst16 {
+		x := v_0_0.Args[0]
+		v_0_0_1 := v_0_0.Args[1]
+		if v_0_0_1.Op != OpConst16 {
 			break
 		}
-		c1 := v.Args[0].Args[0].Args[1].AuxInt
-		if v.Args[0].Args[1].Op != OpConst16 {
+		c1 := v_0_0_1.AuxInt
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst16 {
 			break
 		}
-		c2 := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c2 := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		c3 := v.Args[1].AuxInt
+		c3 := v_1.AuxInt
 		if !(c1 >= c2 && c3 >= c2) {
 			break
 		}
@@ -5806,10 +6145,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh16Ux64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -5828,10 +6168,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh16Ux64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -5848,14 +6189,16 @@
 	// cond:
 	// result: (Const16 [int64(uint16(c) >> uint64(d))])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst16)
 		v.AuxInt = int64(uint16(c) >> uint64(d))
 		return true
@@ -5864,10 +6207,11 @@
 	// cond:
 	// result: (Const16 [0])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst16)
@@ -5879,10 +6223,11 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].AuxInt != 0 {
+		if v_1.AuxInt != 0 {
 			break
 		}
 		v.reset(OpCopy)
@@ -5894,10 +6239,11 @@
 	// cond: uint64(c) >= 16
 	// result: (Const16 [0])
 	for {
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(uint64(c) >= 16) {
 			break
 		}
@@ -5910,18 +6256,21 @@
 	// result: (Rsh16Ux64 x (Const64 <t> [c+d]))
 	for {
 		t := v.Type
-		if v.Args[0].Op != OpRsh16Ux64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpRsh16Ux64 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		if v.Args[0].Args[1].Op != OpConst64 {
+		x := v_0.Args[0]
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(!uaddOvf(c, d)) {
 			break
 		}
@@ -5943,10 +6292,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh16Ux64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -5965,10 +6315,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh16x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -5987,10 +6338,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh16x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6007,14 +6359,16 @@
 	// cond:
 	// result: (Const16 [int64(int16(c) >> uint64(d))])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst16)
 		v.AuxInt = int64(int16(c) >> uint64(d))
 		return true
@@ -6023,10 +6377,11 @@
 	// cond:
 	// result: (Const16 [0])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst16)
@@ -6038,10 +6393,11 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].AuxInt != 0 {
+		if v_1.AuxInt != 0 {
 			break
 		}
 		v.reset(OpCopy)
@@ -6054,18 +6410,21 @@
 	// result: (Rsh16x64 x (Const64 <t> [c+d]))
 	for {
 		t := v.Type
-		if v.Args[0].Op != OpRsh16x64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpRsh16x64 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		if v.Args[0].Args[1].Op != OpConst64 {
+		x := v_0.Args[0]
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(!uaddOvf(c, d)) {
 			break
 		}
@@ -6087,10 +6446,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh16x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6109,10 +6469,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh32Ux64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6129,25 +6490,30 @@
 	// cond: c1 >= c2 && c3 >= c2
 	// result: (Rsh32Ux32 x (Const32 <config.fe.TypeUInt32()> [c1-c2+c3]))
 	for {
-		if v.Args[0].Op != OpLsh32x32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpLsh32x32 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpRsh32Ux32 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpRsh32Ux32 {
 			break
 		}
-		x := v.Args[0].Args[0].Args[0]
-		if v.Args[0].Args[0].Args[1].Op != OpConst32 {
+		x := v_0_0.Args[0]
+		v_0_0_1 := v_0_0.Args[1]
+		if v_0_0_1.Op != OpConst32 {
 			break
 		}
-		c1 := v.Args[0].Args[0].Args[1].AuxInt
-		if v.Args[0].Args[1].Op != OpConst32 {
+		c1 := v_0_0_1.AuxInt
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst32 {
 			break
 		}
-		c2 := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c2 := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		c3 := v.Args[1].AuxInt
+		c3 := v_1.AuxInt
 		if !(c1 >= c2 && c3 >= c2) {
 			break
 		}
@@ -6164,10 +6530,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh32Ux64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6184,14 +6551,16 @@
 	// cond:
 	// result: (Const32 [int64(uint32(c) >> uint64(d))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst32)
 		v.AuxInt = int64(uint32(c) >> uint64(d))
 		return true
@@ -6200,10 +6569,11 @@
 	// cond:
 	// result: (Const32 [0])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst32)
@@ -6215,10 +6585,11 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].AuxInt != 0 {
+		if v_1.AuxInt != 0 {
 			break
 		}
 		v.reset(OpCopy)
@@ -6230,10 +6601,11 @@
 	// cond: uint64(c) >= 32
 	// result: (Const32 [0])
 	for {
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(uint64(c) >= 32) {
 			break
 		}
@@ -6246,18 +6618,21 @@
 	// result: (Rsh32Ux64 x (Const64 <t> [c+d]))
 	for {
 		t := v.Type
-		if v.Args[0].Op != OpRsh32Ux64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpRsh32Ux64 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		if v.Args[0].Args[1].Op != OpConst64 {
+		x := v_0.Args[0]
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(!uaddOvf(c, d)) {
 			break
 		}
@@ -6279,10 +6654,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh32Ux64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6301,10 +6677,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh32x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6323,10 +6700,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh32x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6343,14 +6721,16 @@
 	// cond:
 	// result: (Const32 [int64(int32(c) >> uint64(d))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst32)
 		v.AuxInt = int64(int32(c) >> uint64(d))
 		return true
@@ -6359,10 +6739,11 @@
 	// cond:
 	// result: (Const32 [0])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst32)
@@ -6374,10 +6755,11 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].AuxInt != 0 {
+		if v_1.AuxInt != 0 {
 			break
 		}
 		v.reset(OpCopy)
@@ -6390,18 +6772,21 @@
 	// result: (Rsh32x64 x (Const64 <t> [c+d]))
 	for {
 		t := v.Type
-		if v.Args[0].Op != OpRsh32x64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpRsh32x64 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		if v.Args[0].Args[1].Op != OpConst64 {
+		x := v_0.Args[0]
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(!uaddOvf(c, d)) {
 			break
 		}
@@ -6423,10 +6808,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh32x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6445,10 +6831,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh64Ux64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6460,10 +6847,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -6481,10 +6869,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh64Ux64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6496,10 +6885,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -6515,14 +6905,16 @@
 	// cond:
 	// result: (Const64 [int64(uint64(c) >> uint64(d))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst64)
 		v.AuxInt = int64(uint64(c) >> uint64(d))
 		return true
@@ -6531,10 +6923,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -6545,25 +6938,30 @@
 	// cond: c1 >= c2 && c3 >= c2
 	// result: (Rsh64Ux64 x (Const64 <config.fe.TypeUInt64()> [c1-c2+c3]))
 	for {
-		if v.Args[0].Op != OpLsh64x64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpLsh64x64 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpRsh64Ux64 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpRsh64Ux64 {
 			break
 		}
-		x := v.Args[0].Args[0].Args[0]
-		if v.Args[0].Args[0].Args[1].Op != OpConst64 {
+		x := v_0_0.Args[0]
+		v_0_0_1 := v_0_0.Args[1]
+		if v_0_0_1.Op != OpConst64 {
 			break
 		}
-		c1 := v.Args[0].Args[0].Args[1].AuxInt
-		if v.Args[0].Args[1].Op != OpConst64 {
+		c1 := v_0_0_1.AuxInt
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		c2 := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c2 := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c3 := v.Args[1].AuxInt
+		c3 := v_1.AuxInt
 		if !(c1 >= c2 && c3 >= c2) {
 			break
 		}
@@ -6579,10 +6977,11 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].AuxInt != 0 {
+		if v_1.AuxInt != 0 {
 			break
 		}
 		v.reset(OpCopy)
@@ -6594,10 +6993,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -6608,10 +7008,11 @@
 	// cond: uint64(c) >= 64
 	// result: (Const64 [0])
 	for {
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(uint64(c) >= 64) {
 			break
 		}
@@ -6624,18 +7025,21 @@
 	// result: (Rsh64Ux64 x (Const64 <t> [c+d]))
 	for {
 		t := v.Type
-		if v.Args[0].Op != OpRsh64Ux64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpRsh64Ux64 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		if v.Args[0].Args[1].Op != OpConst64 {
+		x := v_0.Args[0]
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(!uaddOvf(c, d)) {
 			break
 		}
@@ -6657,10 +7061,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh64Ux64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6672,10 +7077,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -6693,10 +7099,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh64x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6708,10 +7115,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -6729,10 +7137,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh64x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6744,10 +7153,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -6763,14 +7173,16 @@
 	// cond:
 	// result: (Const64 [c >> uint64(d)])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst64)
 		v.AuxInt = c >> uint64(d)
 		return true
@@ -6779,10 +7191,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -6794,10 +7207,11 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].AuxInt != 0 {
+		if v_1.AuxInt != 0 {
 			break
 		}
 		v.reset(OpCopy)
@@ -6809,10 +7223,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -6824,18 +7239,21 @@
 	// result: (Rsh64x64 x (Const64 <t> [c+d]))
 	for {
 		t := v.Type
-		if v.Args[0].Op != OpRsh64x64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpRsh64x64 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		if v.Args[0].Args[1].Op != OpConst64 {
+		x := v_0.Args[0]
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(!uaddOvf(c, d)) {
 			break
 		}
@@ -6857,10 +7275,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh64x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6872,10 +7291,11 @@
 	// cond:
 	// result: (Const64 [0])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst64)
@@ -6893,10 +7313,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh8Ux64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6915,10 +7336,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh8Ux64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -6935,14 +7357,16 @@
 	// cond:
 	// result: (Const8  [int64(uint8(c) >> uint64(d))])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst8)
 		v.AuxInt = int64(uint8(c) >> uint64(d))
 		return true
@@ -6951,10 +7375,11 @@
 	// cond:
 	// result: (Const8  [0])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst8)
@@ -6966,10 +7391,11 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].AuxInt != 0 {
+		if v_1.AuxInt != 0 {
 			break
 		}
 		v.reset(OpCopy)
@@ -6981,10 +7407,11 @@
 	// cond: uint64(c) >= 8
 	// result: (Const8 [0])
 	for {
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		if !(uint64(c) >= 8) {
 			break
 		}
@@ -6997,18 +7424,21 @@
 	// result: (Rsh8Ux64  x (Const64 <t> [c+d]))
 	for {
 		t := v.Type
-		if v.Args[0].Op != OpRsh8Ux64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpRsh8Ux64 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		if v.Args[0].Args[1].Op != OpConst64 {
+		x := v_0.Args[0]
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(!uaddOvf(c, d)) {
 			break
 		}
@@ -7028,25 +7458,30 @@
 	// cond: c1 >= c2 && c3 >= c2
 	// result: (Rsh8Ux8 x (Const8 <config.fe.TypeUInt8()> [c1-c2+c3]))
 	for {
-		if v.Args[0].Op != OpLsh8x8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpLsh8x8 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpRsh8Ux8 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpRsh8Ux8 {
 			break
 		}
-		x := v.Args[0].Args[0].Args[0]
-		if v.Args[0].Args[0].Args[1].Op != OpConst8 {
+		x := v_0_0.Args[0]
+		v_0_0_1 := v_0_0.Args[1]
+		if v_0_0_1.Op != OpConst8 {
 			break
 		}
-		c1 := v.Args[0].Args[0].Args[1].AuxInt
-		if v.Args[0].Args[1].Op != OpConst8 {
+		c1 := v_0_0_1.AuxInt
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst8 {
 			break
 		}
-		c2 := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c2 := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		c3 := v.Args[1].AuxInt
+		c3 := v_1.AuxInt
 		if !(c1 >= c2 && c3 >= c2) {
 			break
 		}
@@ -7063,10 +7498,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh8Ux64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -7085,10 +7521,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh8x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -7107,10 +7544,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh8x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -7127,14 +7565,16 @@
 	// cond:
 	// result: (Const8  [int64(int8(c) >> uint64(d))])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst8)
 		v.AuxInt = int64(int8(c) >> uint64(d))
 		return true
@@ -7143,10 +7583,11 @@
 	// cond:
 	// result: (Const8  [0])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		v.reset(OpConst8)
@@ -7158,10 +7599,11 @@
 	// result: x
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		if v.Args[1].AuxInt != 0 {
+		if v_1.AuxInt != 0 {
 			break
 		}
 		v.reset(OpCopy)
@@ -7174,18 +7616,21 @@
 	// result: (Rsh8x64  x (Const64 <t> [c+d]))
 	for {
 		t := v.Type
-		if v.Args[0].Op != OpRsh8x64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpRsh8x64 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		if v.Args[0].Args[1].Op != OpConst64 {
+		x := v_0.Args[0]
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].Args[1].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0_1.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		if !(!uaddOvf(c, d)) {
 			break
 		}
@@ -7207,10 +7652,11 @@
 	for {
 		t := v.Type
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		c := v.Args[1].AuxInt
+		c := v_1.AuxInt
 		v.reset(OpRsh8x64)
 		v.AddArg(x)
 		v0 := b.NewValue0(v.Line, OpConst64, t)
@@ -7227,14 +7673,16 @@
 	// cond:
 	// result: (Const64 <t> [c])
 	for {
-		if v.Args[0].Op != OpSliceMake {
+		v_0 := v.Args[0]
+		if v_0.Op != OpSliceMake {
 			break
 		}
-		if v.Args[0].Args[2].Op != OpConst64 {
+		v_0_2 := v_0.Args[2]
+		if v_0_2.Op != OpConst64 {
 			break
 		}
-		t := v.Args[0].Args[2].Type
-		c := v.Args[0].Args[2].AuxInt
+		t := v_0_2.Type
+		c := v_0_2.AuxInt
 		v.reset(OpConst64)
 		v.Type = t
 		v.AuxInt = c
@@ -7244,13 +7692,15 @@
 	// cond:
 	// result: (SliceCap x)
 	for {
-		if v.Args[0].Op != OpSliceMake {
+		v_0 := v.Args[0]
+		if v_0.Op != OpSliceMake {
 			break
 		}
-		if v.Args[0].Args[2].Op != OpSliceCap {
+		v_0_2 := v_0.Args[2]
+		if v_0_2.Op != OpSliceCap {
 			break
 		}
-		x := v.Args[0].Args[2].Args[0]
+		x := v_0_2.Args[0]
 		v.reset(OpSliceCap)
 		v.AddArg(x)
 		return true
@@ -7264,14 +7714,16 @@
 	// cond:
 	// result: (Const64 <t> [c])
 	for {
-		if v.Args[0].Op != OpSliceMake {
+		v_0 := v.Args[0]
+		if v_0.Op != OpSliceMake {
 			break
 		}
-		if v.Args[0].Args[1].Op != OpConst64 {
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		t := v.Args[0].Args[1].Type
-		c := v.Args[0].Args[1].AuxInt
+		t := v_0_1.Type
+		c := v_0_1.AuxInt
 		v.reset(OpConst64)
 		v.Type = t
 		v.AuxInt = c
@@ -7281,13 +7733,15 @@
 	// cond:
 	// result: (SliceLen x)
 	for {
-		if v.Args[0].Op != OpSliceMake {
+		v_0 := v.Args[0]
+		if v_0.Op != OpSliceMake {
 			break
 		}
-		if v.Args[0].Args[1].Op != OpSliceLen {
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpSliceLen {
 			break
 		}
-		x := v.Args[0].Args[1].Args[0]
+		x := v_0_1.Args[0]
 		v.reset(OpSliceLen)
 		v.AddArg(x)
 		return true
@@ -7301,14 +7755,16 @@
 	// cond:
 	// result: (Const64 <t> [c])
 	for {
-		if v.Args[0].Op != OpSliceMake {
+		v_0 := v.Args[0]
+		if v_0.Op != OpSliceMake {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpConst64 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpConst64 {
 			break
 		}
-		t := v.Args[0].Args[0].Type
-		c := v.Args[0].Args[0].AuxInt
+		t := v_0_0.Type
+		c := v_0_0.AuxInt
 		v.reset(OpConst64)
 		v.Type = t
 		v.AuxInt = c
@@ -7318,13 +7774,15 @@
 	// cond:
 	// result: (SlicePtr x)
 	for {
-		if v.Args[0].Op != OpSliceMake {
+		v_0 := v.Args[0]
+		if v_0.Op != OpSliceMake {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpSlicePtr {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpSlicePtr {
 			break
 		}
-		x := v.Args[0].Args[0].Args[0]
+		x := v_0_0.Args[0]
 		v.reset(OpSlicePtr)
 		v.AddArg(x)
 		return true
@@ -7338,7 +7796,8 @@
 	// cond:
 	// result: mem
 	for {
-		if v.Args[1].Op != OpStructMake0 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpStructMake0 {
 			break
 		}
 		mem := v.Args[2]
@@ -7352,11 +7811,12 @@
 	// result: (Store [t.FieldType(0).Size()] dst f0 mem)
 	for {
 		dst := v.Args[0]
-		if v.Args[1].Op != OpStructMake1 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpStructMake1 {
 			break
 		}
-		t := v.Args[1].Type
-		f0 := v.Args[1].Args[0]
+		t := v_1.Type
+		f0 := v_1.Args[0]
 		mem := v.Args[2]
 		v.reset(OpStore)
 		v.AuxInt = t.FieldType(0).Size()
@@ -7370,12 +7830,13 @@
 	// result: (Store [t.FieldType(1).Size()]     (OffPtr <t.FieldType(1).PtrTo()> [t.FieldOff(1)] dst)     f1     (Store [t.FieldType(0).Size()] dst f0 mem))
 	for {
 		dst := v.Args[0]
-		if v.Args[1].Op != OpStructMake2 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpStructMake2 {
 			break
 		}
-		t := v.Args[1].Type
-		f0 := v.Args[1].Args[0]
-		f1 := v.Args[1].Args[1]
+		t := v_1.Type
+		f0 := v_1.Args[0]
+		f1 := v_1.Args[1]
 		mem := v.Args[2]
 		v.reset(OpStore)
 		v.AuxInt = t.FieldType(1).Size()
@@ -7397,13 +7858,14 @@
 	// result: (Store [t.FieldType(2).Size()]     (OffPtr <t.FieldType(2).PtrTo()> [t.FieldOff(2)] dst)     f2     (Store [t.FieldType(1).Size()]       (OffPtr <t.FieldType(1).PtrTo()> [t.FieldOff(1)] dst)       f1       (Store [t.FieldType(0).Size()] dst f0 mem)))
 	for {
 		dst := v.Args[0]
-		if v.Args[1].Op != OpStructMake3 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpStructMake3 {
 			break
 		}
-		t := v.Args[1].Type
-		f0 := v.Args[1].Args[0]
-		f1 := v.Args[1].Args[1]
-		f2 := v.Args[1].Args[2]
+		t := v_1.Type
+		f0 := v_1.Args[0]
+		f1 := v_1.Args[1]
+		f2 := v_1.Args[2]
 		mem := v.Args[2]
 		v.reset(OpStore)
 		v.AuxInt = t.FieldType(2).Size()
@@ -7433,14 +7895,15 @@
 	// result: (Store [t.FieldType(3).Size()]     (OffPtr <t.FieldType(3).PtrTo()> [t.FieldOff(3)] dst)     f3     (Store [t.FieldType(2).Size()]       (OffPtr <t.FieldType(2).PtrTo()> [t.FieldOff(2)] dst)       f2       (Store [t.FieldType(1).Size()]         (OffPtr <t.FieldType(1).PtrTo()> [t.FieldOff(1)] dst)         f1         (Store [t.FieldType(0).Size()] dst f0 mem))))
 	for {
 		dst := v.Args[0]
-		if v.Args[1].Op != OpStructMake4 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpStructMake4 {
 			break
 		}
-		t := v.Args[1].Type
-		f0 := v.Args[1].Args[0]
-		f1 := v.Args[1].Args[1]
-		f2 := v.Args[1].Args[2]
-		f3 := v.Args[1].Args[3]
+		t := v_1.Type
+		f0 := v_1.Args[0]
+		f1 := v_1.Args[1]
+		f2 := v_1.Args[2]
+		f3 := v_1.Args[3]
 		mem := v.Args[2]
 		v.reset(OpStore)
 		v.AuxInt = t.FieldType(3).Size()
@@ -7481,11 +7944,12 @@
 			break
 		}
 		dst := v.Args[0]
-		if v.Args[1].Op != OpComplexMake {
+		v_1 := v.Args[1]
+		if v_1.Op != OpComplexMake {
 			break
 		}
-		real := v.Args[1].Args[0]
-		imag := v.Args[1].Args[1]
+		real := v_1.Args[0]
+		imag := v_1.Args[1]
 		mem := v.Args[2]
 		v.reset(OpStore)
 		v.AuxInt = 4
@@ -7510,11 +7974,12 @@
 			break
 		}
 		dst := v.Args[0]
-		if v.Args[1].Op != OpComplexMake {
+		v_1 := v.Args[1]
+		if v_1.Op != OpComplexMake {
 			break
 		}
-		real := v.Args[1].Args[0]
-		imag := v.Args[1].Args[1]
+		real := v_1.Args[0]
+		imag := v_1.Args[1]
 		mem := v.Args[2]
 		v.reset(OpStore)
 		v.AuxInt = 8
@@ -7539,11 +8004,12 @@
 			break
 		}
 		dst := v.Args[0]
-		if v.Args[1].Op != OpStringMake {
+		v_1 := v.Args[1]
+		if v_1.Op != OpStringMake {
 			break
 		}
-		ptr := v.Args[1].Args[0]
-		len := v.Args[1].Args[1]
+		ptr := v_1.Args[0]
+		len := v_1.Args[1]
 		mem := v.Args[2]
 		v.reset(OpStore)
 		v.AuxInt = config.PtrSize
@@ -7568,12 +8034,13 @@
 			break
 		}
 		dst := v.Args[0]
-		if v.Args[1].Op != OpSliceMake {
+		v_1 := v.Args[1]
+		if v_1.Op != OpSliceMake {
 			break
 		}
-		ptr := v.Args[1].Args[0]
-		len := v.Args[1].Args[1]
-		cap := v.Args[1].Args[2]
+		ptr := v_1.Args[0]
+		len := v_1.Args[1]
+		cap := v_1.Args[2]
 		mem := v.Args[2]
 		v.reset(OpStore)
 		v.AuxInt = config.PtrSize
@@ -7606,11 +8073,12 @@
 			break
 		}
 		dst := v.Args[0]
-		if v.Args[1].Op != OpIMake {
+		v_1 := v.Args[1]
+		if v_1.Op != OpIMake {
 			break
 		}
-		itab := v.Args[1].Args[0]
-		data := v.Args[1].Args[1]
+		itab := v_1.Args[0]
+		data := v_1.Args[1]
 		mem := v.Args[2]
 		v.reset(OpStore)
 		v.AuxInt = config.PtrSize
@@ -7633,13 +8101,14 @@
 	for {
 		size := v.AuxInt
 		dst := v.Args[0]
-		if v.Args[1].Op != OpLoad {
+		v_1 := v.Args[1]
+		if v_1.Op != OpLoad {
 			break
 		}
-		t := v.Args[1].Type
-		src := v.Args[1].Args[0]
-		mem := v.Args[1].Args[1]
-		if v.Args[2] != mem {
+		t := v_1.Type
+		src := v_1.Args[0]
+		mem := v_1.Args[1]
+		if mem != v.Args[2] {
 			break
 		}
 		if !(!config.fe.CanSSA(t)) {
@@ -7658,17 +8127,19 @@
 	for {
 		size := v.AuxInt
 		dst := v.Args[0]
-		if v.Args[1].Op != OpLoad {
+		v_1 := v.Args[1]
+		if v_1.Op != OpLoad {
 			break
 		}
-		t := v.Args[1].Type
-		src := v.Args[1].Args[0]
-		mem := v.Args[1].Args[1]
-		if v.Args[2].Op != OpVarDef {
+		t := v_1.Type
+		src := v_1.Args[0]
+		mem := v_1.Args[1]
+		v_2 := v.Args[2]
+		if v_2.Op != OpVarDef {
 			break
 		}
-		x := v.Args[2].Aux
-		if v.Args[2].Args[0] != mem {
+		x := v_2.Aux
+		if mem != v_2.Args[0] {
 			break
 		}
 		if !(!config.fe.CanSSA(t)) {
@@ -7693,14 +8164,16 @@
 	// cond:
 	// result: (Const64 <t> [c])
 	for {
-		if v.Args[0].Op != OpStringMake {
+		v_0 := v.Args[0]
+		if v_0.Op != OpStringMake {
 			break
 		}
-		if v.Args[0].Args[1].Op != OpConst64 {
+		v_0_1 := v_0.Args[1]
+		if v_0_1.Op != OpConst64 {
 			break
 		}
-		t := v.Args[0].Args[1].Type
-		c := v.Args[0].Args[1].AuxInt
+		t := v_0_1.Type
+		c := v_0_1.AuxInt
 		v.reset(OpConst64)
 		v.Type = t
 		v.AuxInt = c
@@ -7715,14 +8188,16 @@
 	// cond:
 	// result: (Const64 <t> [c])
 	for {
-		if v.Args[0].Op != OpStringMake {
+		v_0 := v.Args[0]
+		if v_0.Op != OpStringMake {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpConst64 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpConst64 {
 			break
 		}
-		t := v.Args[0].Args[0].Type
-		c := v.Args[0].Args[0].AuxInt
+		t := v_0_0.Type
+		c := v_0_0.AuxInt
 		v.reset(OpConst64)
 		v.Type = t
 		v.AuxInt = c
@@ -7737,10 +8212,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpStructMake1 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpStructMake1 {
 			break
 		}
-		x := v.Args[0].Args[0]
+		x := v_0.Args[0]
 		v.reset(OpCopy)
 		v.Type = x.Type
 		v.AddArg(x)
@@ -7753,10 +8229,11 @@
 		if v.AuxInt != 0 {
 			break
 		}
-		if v.Args[0].Op != OpStructMake2 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpStructMake2 {
 			break
 		}
-		x := v.Args[0].Args[0]
+		x := v_0.Args[0]
 		v.reset(OpCopy)
 		v.Type = x.Type
 		v.AddArg(x)
@@ -7769,10 +8246,11 @@
 		if v.AuxInt != 1 {
 			break
 		}
-		if v.Args[0].Op != OpStructMake2 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpStructMake2 {
 			break
 		}
-		x := v.Args[0].Args[1]
+		x := v_0.Args[1]
 		v.reset(OpCopy)
 		v.Type = x.Type
 		v.AddArg(x)
@@ -7785,10 +8263,11 @@
 		if v.AuxInt != 0 {
 			break
 		}
-		if v.Args[0].Op != OpStructMake3 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpStructMake3 {
 			break
 		}
-		x := v.Args[0].Args[0]
+		x := v_0.Args[0]
 		v.reset(OpCopy)
 		v.Type = x.Type
 		v.AddArg(x)
@@ -7801,10 +8280,11 @@
 		if v.AuxInt != 1 {
 			break
 		}
-		if v.Args[0].Op != OpStructMake3 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpStructMake3 {
 			break
 		}
-		x := v.Args[0].Args[1]
+		x := v_0.Args[1]
 		v.reset(OpCopy)
 		v.Type = x.Type
 		v.AddArg(x)
@@ -7817,10 +8297,11 @@
 		if v.AuxInt != 2 {
 			break
 		}
-		if v.Args[0].Op != OpStructMake3 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpStructMake3 {
 			break
 		}
-		x := v.Args[0].Args[2]
+		x := v_0.Args[2]
 		v.reset(OpCopy)
 		v.Type = x.Type
 		v.AddArg(x)
@@ -7833,10 +8314,11 @@
 		if v.AuxInt != 0 {
 			break
 		}
-		if v.Args[0].Op != OpStructMake4 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpStructMake4 {
 			break
 		}
-		x := v.Args[0].Args[0]
+		x := v_0.Args[0]
 		v.reset(OpCopy)
 		v.Type = x.Type
 		v.AddArg(x)
@@ -7849,10 +8331,11 @@
 		if v.AuxInt != 1 {
 			break
 		}
-		if v.Args[0].Op != OpStructMake4 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpStructMake4 {
 			break
 		}
-		x := v.Args[0].Args[1]
+		x := v_0.Args[1]
 		v.reset(OpCopy)
 		v.Type = x.Type
 		v.AddArg(x)
@@ -7865,10 +8348,11 @@
 		if v.AuxInt != 2 {
 			break
 		}
-		if v.Args[0].Op != OpStructMake4 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpStructMake4 {
 			break
 		}
-		x := v.Args[0].Args[2]
+		x := v_0.Args[2]
 		v.reset(OpCopy)
 		v.Type = x.Type
 		v.AddArg(x)
@@ -7881,30 +8365,32 @@
 		if v.AuxInt != 3 {
 			break
 		}
-		if v.Args[0].Op != OpStructMake4 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpStructMake4 {
 			break
 		}
-		x := v.Args[0].Args[3]
+		x := v_0.Args[3]
 		v.reset(OpCopy)
 		v.Type = x.Type
 		v.AddArg(x)
 		return true
 	}
-	// match: (StructSelect [i] (Load <t> ptr mem))
+	// match: (StructSelect [i] x:(Load <t> ptr mem))
 	// cond: !config.fe.CanSSA(t)
-	// result: @v.Args[0].Block (Load <v.Type> (OffPtr <v.Type.PtrTo()> [t.FieldOff(int(i))] ptr) mem)
+	// result: @x.Block (Load <v.Type> (OffPtr <v.Type.PtrTo()> [t.FieldOff(int(i))] ptr) mem)
 	for {
 		i := v.AuxInt
-		if v.Args[0].Op != OpLoad {
+		x := v.Args[0]
+		if x.Op != OpLoad {
 			break
 		}
-		t := v.Args[0].Type
-		ptr := v.Args[0].Args[0]
-		mem := v.Args[0].Args[1]
+		t := x.Type
+		ptr := x.Args[0]
+		mem := x.Args[1]
 		if !(!config.fe.CanSSA(t)) {
 			break
 		}
-		b = v.Args[0].Block
+		b = x.Block
 		v0 := b.NewValue0(v.Line, OpLoad, v.Type)
 		v.reset(OpCopy)
 		v.AddArg(v0)
@@ -7924,14 +8410,16 @@
 	// cond:
 	// result: (Const16 [c-d])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst16 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst16)
 		v.AuxInt = c - d
 		return true
@@ -7941,11 +8429,12 @@
 	// result: (Add16 (Const16 <t> [-c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst16) {
 			break
 		}
@@ -7961,7 +8450,7 @@
 	// result: (Const16 [0])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConst16)
@@ -7972,12 +8461,13 @@
 	// cond:
 	// result: y
 	for {
-		if v.Args[0].Op != OpAdd16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAdd16 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		y := v.Args[0].Args[1]
-		if v.Args[1] != x {
+		x := v_0.Args[0]
+		y := v_0.Args[1]
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -7989,12 +8479,13 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpAdd16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAdd16 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		y := v.Args[0].Args[1]
-		if v.Args[1] != y {
+		x := v_0.Args[0]
+		y := v_0.Args[1]
+		if y != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -8011,14 +8502,16 @@
 	// cond:
 	// result: (Const32 [c-d])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst32)
 		v.AuxInt = c - d
 		return true
@@ -8028,11 +8521,12 @@
 	// result: (Add32 (Const32 <t> [-c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst32) {
 			break
 		}
@@ -8048,7 +8542,7 @@
 	// result: (Const32 [0])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConst32)
@@ -8059,12 +8553,13 @@
 	// cond:
 	// result: y
 	for {
-		if v.Args[0].Op != OpAdd32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAdd32 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		y := v.Args[0].Args[1]
-		if v.Args[1] != x {
+		x := v_0.Args[0]
+		y := v_0.Args[1]
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -8076,12 +8571,13 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpAdd32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAdd32 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		y := v.Args[0].Args[1]
-		if v.Args[1] != y {
+		x := v_0.Args[0]
+		y := v_0.Args[1]
+		if y != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -8098,14 +8594,16 @@
 	// cond:
 	// result: (Const32F [f2i(float64(i2f32(c) - i2f32(d)))])
 	for {
-		if v.Args[0].Op != OpConst32F {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32F {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst32F {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32F {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst32F)
 		v.AuxInt = f2i(float64(i2f32(c) - i2f32(d)))
 		return true
@@ -8119,14 +8617,16 @@
 	// cond:
 	// result: (Const64 [c-d])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst64)
 		v.AuxInt = c - d
 		return true
@@ -8136,11 +8636,12 @@
 	// result: (Add64 (Const64 <t> [-c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst64) {
 			break
 		}
@@ -8156,7 +8657,7 @@
 	// result: (Const64 [0])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConst64)
@@ -8167,12 +8668,13 @@
 	// cond:
 	// result: y
 	for {
-		if v.Args[0].Op != OpAdd64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAdd64 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		y := v.Args[0].Args[1]
-		if v.Args[1] != x {
+		x := v_0.Args[0]
+		y := v_0.Args[1]
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -8184,12 +8686,13 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpAdd64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAdd64 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		y := v.Args[0].Args[1]
-		if v.Args[1] != y {
+		x := v_0.Args[0]
+		y := v_0.Args[1]
+		if y != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -8206,14 +8709,16 @@
 	// cond:
 	// result: (Const64F [f2i(i2f(c) - i2f(d))])
 	for {
-		if v.Args[0].Op != OpConst64F {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64F {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst64F {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64F {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst64F)
 		v.AuxInt = f2i(i2f(c) - i2f(d))
 		return true
@@ -8227,14 +8732,16 @@
 	// cond:
 	// result: (Const8 [c-d])
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		c := v.Args[0].AuxInt
-		if v.Args[1].Op != OpConst8 {
+		c := v_0.AuxInt
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		d := v.Args[1].AuxInt
+		d := v_1.AuxInt
 		v.reset(OpConst8)
 		v.AuxInt = c - d
 		return true
@@ -8244,11 +8751,12 @@
 	// result: (Add8 (Const8 <t> [-c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst8) {
 			break
 		}
@@ -8264,7 +8772,7 @@
 	// result: (Const8 [0])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConst8)
@@ -8275,12 +8783,13 @@
 	// cond:
 	// result: y
 	for {
-		if v.Args[0].Op != OpAdd8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAdd8 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		y := v.Args[0].Args[1]
-		if v.Args[1] != x {
+		x := v_0.Args[0]
+		y := v_0.Args[1]
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -8292,12 +8801,13 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpAdd8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAdd8 {
 			break
 		}
-		x := v.Args[0].Args[0]
-		y := v.Args[0].Args[1]
-		if v.Args[1] != y {
+		x := v_0.Args[0]
+		y := v_0.Args[1]
+		if y != v.Args[1] {
 			break
 		}
 		v.reset(OpCopy)
@@ -8314,10 +8824,11 @@
 	// cond:
 	// result: (Const8 [int64(int8(c))])
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		c := v.Args[0].AuxInt
+		c := v_0.AuxInt
 		v.reset(OpConst8)
 		v.AuxInt = int64(int8(c))
 		return true
@@ -8326,14 +8837,16 @@
 	// cond: y&0xFF == 0xFF
 	// result: (Trunc16to8 x)
 	for {
-		if v.Args[0].Op != OpAnd16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAnd16 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpConst16 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpConst16 {
 			break
 		}
-		y := v.Args[0].Args[0].AuxInt
-		x := v.Args[0].Args[1]
+		y := v_0_0.AuxInt
+		x := v_0.Args[1]
 		if !(y&0xFF == 0xFF) {
 			break
 		}
@@ -8350,10 +8863,11 @@
 	// cond:
 	// result: (Const16 [int64(int16(c))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
+		c := v_0.AuxInt
 		v.reset(OpConst16)
 		v.AuxInt = int64(int16(c))
 		return true
@@ -8362,14 +8876,16 @@
 	// cond: y&0xFFFF == 0xFFFF
 	// result: (Trunc32to16 x)
 	for {
-		if v.Args[0].Op != OpAnd32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAnd32 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpConst32 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpConst32 {
 			break
 		}
-		y := v.Args[0].Args[0].AuxInt
-		x := v.Args[0].Args[1]
+		y := v_0_0.AuxInt
+		x := v_0.Args[1]
 		if !(y&0xFFFF == 0xFFFF) {
 			break
 		}
@@ -8386,10 +8902,11 @@
 	// cond:
 	// result: (Const8 [int64(int8(c))])
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		c := v.Args[0].AuxInt
+		c := v_0.AuxInt
 		v.reset(OpConst8)
 		v.AuxInt = int64(int8(c))
 		return true
@@ -8398,14 +8915,16 @@
 	// cond: y&0xFF == 0xFF
 	// result: (Trunc32to8 x)
 	for {
-		if v.Args[0].Op != OpAnd32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAnd32 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpConst32 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpConst32 {
 			break
 		}
-		y := v.Args[0].Args[0].AuxInt
-		x := v.Args[0].Args[1]
+		y := v_0_0.AuxInt
+		x := v_0.Args[1]
 		if !(y&0xFF == 0xFF) {
 			break
 		}
@@ -8422,10 +8941,11 @@
 	// cond:
 	// result: (Const16 [int64(int16(c))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
+		c := v_0.AuxInt
 		v.reset(OpConst16)
 		v.AuxInt = int64(int16(c))
 		return true
@@ -8434,14 +8954,16 @@
 	// cond: y&0xFFFF == 0xFFFF
 	// result: (Trunc64to16 x)
 	for {
-		if v.Args[0].Op != OpAnd64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAnd64 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpConst64 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpConst64 {
 			break
 		}
-		y := v.Args[0].Args[0].AuxInt
-		x := v.Args[0].Args[1]
+		y := v_0_0.AuxInt
+		x := v_0.Args[1]
 		if !(y&0xFFFF == 0xFFFF) {
 			break
 		}
@@ -8458,10 +8980,11 @@
 	// cond:
 	// result: (Const32 [int64(int32(c))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
+		c := v_0.AuxInt
 		v.reset(OpConst32)
 		v.AuxInt = int64(int32(c))
 		return true
@@ -8470,14 +8993,16 @@
 	// cond: y&0xFFFFFFFF == 0xFFFFFFFF
 	// result: (Trunc64to32 x)
 	for {
-		if v.Args[0].Op != OpAnd64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAnd64 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpConst64 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpConst64 {
 			break
 		}
-		y := v.Args[0].Args[0].AuxInt
-		x := v.Args[0].Args[1]
+		y := v_0_0.AuxInt
+		x := v_0.Args[1]
 		if !(y&0xFFFFFFFF == 0xFFFFFFFF) {
 			break
 		}
@@ -8494,10 +9019,11 @@
 	// cond:
 	// result: (Const8 [int64(int8(c))])
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		c := v.Args[0].AuxInt
+		c := v_0.AuxInt
 		v.reset(OpConst8)
 		v.AuxInt = int64(int8(c))
 		return true
@@ -8506,14 +9032,16 @@
 	// cond: y&0xFF == 0xFF
 	// result: (Trunc64to8 x)
 	for {
-		if v.Args[0].Op != OpAnd64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpAnd64 {
 			break
 		}
-		if v.Args[0].Args[0].Op != OpConst64 {
+		v_0_0 := v_0.Args[0]
+		if v_0_0.Op != OpConst64 {
 			break
 		}
-		y := v.Args[0].Args[0].AuxInt
-		x := v.Args[0].Args[1]
+		y := v_0_0.AuxInt
+		x := v_0.Args[1]
 		if !(y&0xFF == 0xFF) {
 			break
 		}
@@ -8531,11 +9059,12 @@
 	// result: (Xor16 (Const16 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst16 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst16 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst16) {
 			break
 		}
@@ -8551,7 +9080,7 @@
 	// result: (Const16 [0])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConst16)
@@ -8562,10 +9091,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst16 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst16 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		x := v.Args[1]
@@ -8584,11 +9114,12 @@
 	// result: (Xor32 (Const32 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst32 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst32 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst32) {
 			break
 		}
@@ -8604,7 +9135,7 @@
 	// result: (Const32 [0])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConst32)
@@ -8615,10 +9146,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst32 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst32 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		x := v.Args[1]
@@ -8637,11 +9169,12 @@
 	// result: (Xor64 (Const64 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst64 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst64 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst64) {
 			break
 		}
@@ -8657,7 +9190,7 @@
 	// result: (Const64 [0])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConst64)
@@ -8668,10 +9201,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst64 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst64 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		x := v.Args[1]
@@ -8690,11 +9224,12 @@
 	// result: (Xor8 (Const8 <t> [c]) x)
 	for {
 		x := v.Args[0]
-		if v.Args[1].Op != OpConst8 {
+		v_1 := v.Args[1]
+		if v_1.Op != OpConst8 {
 			break
 		}
-		t := v.Args[1].Type
-		c := v.Args[1].AuxInt
+		t := v_1.Type
+		c := v_1.AuxInt
 		if !(x.Op != OpConst8) {
 			break
 		}
@@ -8710,7 +9245,7 @@
 	// result: (Const8 [0])
 	for {
 		x := v.Args[0]
-		if v.Args[1] != x {
+		if x != v.Args[1] {
 			break
 		}
 		v.reset(OpConst8)
@@ -8721,10 +9256,11 @@
 	// cond:
 	// result: x
 	for {
-		if v.Args[0].Op != OpConst8 {
+		v_0 := v.Args[0]
+		if v_0.Op != OpConst8 {
 			break
 		}
-		if v.Args[0].AuxInt != 0 {
+		if v_0.AuxInt != 0 {
 			break
 		}
 		x := v.Args[1]
@@ -8746,7 +9282,8 @@
 			if v.Op != OpNilCheck {
 				break
 			}
-			if v.Args[0].Op != OpGetG {
+			v_0 := v.Args[0]
+			if v_0.Op != OpGetG {
 				break
 			}
 			next := b.Succs[0]