]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: add rules to improve consecutive byte loads and stores on ppc64le
authorLynn Boger <laboger@linux.vnet.ibm.com>
Mon, 30 Oct 2017 16:30:45 +0000 (12:30 -0400)
committerLynn Boger <laboger@linux.vnet.ibm.com>
Fri, 3 Nov 2017 18:46:59 +0000 (18:46 +0000)
This adds new rules to recognize consecutive byte loads and
stores and lowers them to loads and stores such as lhz, lwz, ld,
sth, stw, std. This change only covers the little endian cases
on little endian machines, such as is found in encoding/binary
UintXX or PutUintXX for little endian. Big endian will be done
later.

Updates were also made to binary_test.go to allow the benchmark
for Uint and PutUint to actually use those functions because
the way they were written, those functions were being
optimized out.

Testcases were also added to cmd/compile/internal/gc/asm_test.go.

Updates #22496

The following improvement can be found in golang.org/x/crypto

poly1305:

Benchmark64-16              142           114           -19.72%
Benchmark1K-16              1717          1424          -17.06%
Benchmark64Unaligned-16     142           113           -20.42%
Benchmark1KUnaligned-16     1721          1428          -17.02%

chacha20poly1305:

BenchmarkChacha20Poly1305Open_64-16     1012       885   -12.55%
BenchmarkChacha20Poly1305Seal_64-16     971        836   -13.90%
BenchmarkChacha20Poly1305Open_1350-16   11113      9539  -14.16%
BenchmarkChacha20Poly1305Seal_1350-16   11013      9392  -14.72%
BenchmarkChacha20Poly1305Open_8K-16     61074      53431 -12.51%
BenchmarkChacha20Poly1305Seal_8K-16     61214      54806 -10.47%

Other improvements of around 10% found in crypto/tls.

Results after updating encoding/binary/binary_test.go:

BenchmarkLittleEndianPutUint64-16     1.87      0.93      -50.27%
BenchmarkLittleEndianPutUint32-16     1.19      0.93      -21.85%
BenchmarkLittleEndianPutUint16-16     1.16      1.03      -11.21%

Change-Id: I7bbe2fbcbd11362d58662fecd907a0c07e6ca2fb
Reviewed-on: https://go-review.googlesource.com/74410
Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michael Munday <mike.munday@ibm.com>
src/cmd/compile/internal/gc/asm_test.go
src/cmd/compile/internal/ssa/gen/PPC64.rules
src/cmd/compile/internal/ssa/rewritePPC64.go
src/encoding/binary/binary_test.go

index edcdf04286bca531389629f1af57037b32eb386b..57853001fd5dd6409c5ba609fc49061ac8ca93b1 100644 (file)
@@ -265,7 +265,7 @@ var allAsmTests = []*asmTests{
        {
                arch:    "ppc64le",
                os:      "linux",
-               imports: []string{"math", "math/bits"},
+               imports: []string{"encoding/binary", "math", "math/bits"},
                tests:   linuxPPC64LETests,
        },
        {
@@ -2359,6 +2359,61 @@ var linuxPPC64LETests = []*asmTest{
                pos: []string{"\tFABS\t"},
        },
 
+       {
+               fn: `
+               func f14(b []byte) uint16 {
+                       return binary.LittleEndian.Uint16(b)
+       }
+               `,
+               pos: []string{"\tMOVHZ\t"},
+       },
+       {
+               fn: `
+               func f15(b []byte) uint32 {
+                       return binary.LittleEndian.Uint32(b)
+               }
+               `,
+               pos: []string{"\tMOVWZ\t"},
+       },
+
+       {
+               fn: `
+               func f16(b []byte) uint64 {
+                       return binary.LittleEndian.Uint64(b)
+               }
+               `,
+               pos: []string{"\tMOVD\t"},
+               neg: []string{"MOVBZ", "MOVHZ", "MOVWZ"},
+       },
+
+       {
+               fn: `
+               func f17(b []byte, v uint16) {
+                       binary.LittleEndian.PutUint16(b, v)
+               }
+               `,
+               pos: []string{"\tMOVH\t"},
+       },
+
+       {
+               fn: `
+               func f18(b []byte, v uint32) {
+                       binary.LittleEndian.PutUint32(b, v)
+               }
+               `,
+               pos: []string{"\tMOVW\t"},
+       },
+
+       {
+               fn: `
+               func f19(b []byte, v uint64) {
+                       binary.LittleEndian.PutUint64(b, v)
+               }
+               `,
+               pos: []string{"\tMOVD\t"},
+               neg: []string{"MOVB", "MOVH", "MOVW"},
+       },
+
        {
                // check that stack store is optimized away
                fn: `
index c7c6b610b3d54a4df89c33369673115b27d92a7c..4fd6a5a102220f9ccaf4b451fdd0089e58e17e47 100644 (file)
 (FSUB (FMUL x y) z) -> (FMSUB x y z)
 (FADDS (FMULS x y) z) -> (FMADDS x y z)
 (FSUBS (FMULS x y) z) -> (FMSUBS x y z)
+
+
+// The following statements are found in encoding/binary functions UintXX (load) and PutUintXX (store)
+// and convert the statements in these functions from multiple single byte loads or stores to
+// the single largest possible load or store. For now only little endian loads and stores on
+// little endian machines are implemented. Longer rules make use of the match with shorter rules
+// where possible.
+// TODO implement big endian loads and stores for little endian machines (using byte reverse
+// loads and stores).
+// b[0] | b[1]<<8 -> load 16-bit Little endian
+(OR <t> x0:(MOVBZload [i0] {s} p mem)
+       o1:(SLWconst x1:(MOVBZload [i1] {s} p mem) [8]))
+       && !config.BigEndian
+       && i1 == i0+1
+       && x0.Uses ==1 && x1.Uses == 1
+       && o1.Uses == 1
+       && mergePoint(b, x0, x1) != nil
+       && clobber(x0) && clobber(x1) && clobber(o1)
+        -> @mergePoint(b,x0,x1) (MOVHZload <t> {s} [i0] p mem)
+
+// b[0] | b[1]<<8 | b[2]<<16 | b[3]<<24 -> load 32-bit Little endian
+(OR <t> s1:(SLWconst x2:(MOVBZload [i3] {s} p mem) [24])
+       o0:(OR <t> s0:(SLWconst x1:(MOVBZload [i2] {s} p mem) [16]) x0:(MOVHZload [i0] {s} p mem)))
+       && !config.BigEndian
+       && i2 == i0+2
+       && i3 == i0+3
+       && x0.Uses ==1 && x1.Uses == 1 && x2.Uses == 1
+       && o0.Uses == 1
+       && s0.Uses == 1 && s1.Uses == 1
+       && mergePoint(b, x0, x1, x2) != nil
+       && clobber(x0) && clobber(x1) && clobber(x2)
+       && clobber(s0) && clobber(s1)
+       && clobber(o0)
+        -> @mergePoint(b,x0,x1,x2) (MOVWZload <t> {s} [i0] p mem)
+
+// b[0] | b[1]<<8 | b[2]<<16 | b[3]<<24 | b[4] <<32 | b[5]<<40 | b[6]<<48 | b[7]<<56 -> load 64-bit Little endian
+// Can't build on shorter rules because they use SLW instead of SLD
+// Offset must be multiple of 4 for MOVD
+(OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56])
+       o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])
+       o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])
+       o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])
+       o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])
+       o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])
+       o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))))))))
+       && !config.BigEndian
+       && i0%4 == 0
+       && i1 == i0+1
+       && i2 == i0+2
+       && i3 == i0+3
+       && i4 == i0+4
+       && i5 == i0+5
+       && i6 == i0+6
+       && i7 == i0+7
+       && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1
+       && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1
+       && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1
+       && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil
+       && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)
+       && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)
+       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+         -> @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+
+// 2 byte store Little endian as in:
+//      b[0] = byte(v)
+//      b[1] = byte(v >> 8)
+(MOVBstore [i1] {s} p (SRWconst (MOVHZreg w) [8])
+       x0:(MOVBstore [i0] {s} p w mem))
+       && !config.BigEndian
+       && x0.Uses == 1
+       && i1 == i0+1
+       && clobber(x0)
+         -> (MOVHstore [i0] {s} p w mem)
+
+// 4 byte store Little endian as in:
+//     b[0] = byte(v)
+//     b[1] = byte(v >> 8)
+//     b[2] = byte(v >> 16)
+//     b[3] = byte(v >> 24)
+(MOVBstore [i3] {s} p (SRWconst w [24])
+       x0:(MOVBstore [i2] {s} p (SRWconst w [16])
+       x1:(MOVBstore [i1] {s} p (SRWconst w [8])
+       x2:(MOVBstore [i0] {s} p w mem))))
+       && !config.BigEndian
+       && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1
+       && i1 == i0+1 && i2 == i0+2 && i3 == i0+3
+       && clobber(x0) && clobber(x1) && clobber(x2)
+         -> (MOVWstore [i0] {s} p w mem)
+
+// 8 byte store Little endian as in:
+//     b[0] = byte(v)
+//     b[1] = byte(v >> 8)
+//     b[2] = byte(v >> 16)
+//     b[3] = byte(v >> 24)
+//     b[4] = byte(v >> 32)
+//     b[5] = byte(v >> 40)
+//     b[6] = byte(v >> 48)
+//     b[7] = byte(v >> 56)
+// Offset must be multiple of 4 for MOVDstore
+// Can't build on previous rules for 2 or 4 bytes because they use SRW not SRD
+(MOVBstore [i7] {s} p (SRDconst w [56])
+       x0:(MOVBstore [i6] {s} p (SRDconst w [48])
+       x1:(MOVBstore [i5] {s} p (SRDconst w [40])
+       x2:(MOVBstore [i4] {s} p (SRDconst w [32])
+       x3:(MOVBstore [i3] {s} p (SRDconst w [24])
+       x4:(MOVBstore [i2] {s} p (SRDconst w [16])
+       x5:(MOVBstore [i1] {s} p (SRDconst w [8])
+       x6:(MOVBstore [i0] {s} p w mem))))))))
+       && !config.BigEndian
+       && i0%4 == 0
+       && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1
+       && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7
+       && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6)
+         -> (MOVDstore [i0] {s} p w mem)
index 4c6ba64fad339edb3b8f8c0394d8b5f754b1e543..6a000f4431188a6b86960a9fdb5a1c6fbd445608 100644 (file)
@@ -488,7 +488,7 @@ func rewriteValuePPC64(v *Value) bool {
        case OpPPC64NotEqual:
                return rewriteValuePPC64_OpPPC64NotEqual_0(v)
        case OpPPC64OR:
-               return rewriteValuePPC64_OpPPC64OR_0(v) || rewriteValuePPC64_OpPPC64OR_10(v)
+               return rewriteValuePPC64_OpPPC64OR_0(v) || rewriteValuePPC64_OpPPC64OR_10(v) || rewriteValuePPC64_OpPPC64OR_20(v) || rewriteValuePPC64_OpPPC64OR_30(v) || rewriteValuePPC64_OpPPC64OR_40(v) || rewriteValuePPC64_OpPPC64OR_50(v) || rewriteValuePPC64_OpPPC64OR_60(v) || rewriteValuePPC64_OpPPC64OR_70(v) || rewriteValuePPC64_OpPPC64OR_80(v) || rewriteValuePPC64_OpPPC64OR_90(v) || rewriteValuePPC64_OpPPC64OR_100(v) || rewriteValuePPC64_OpPPC64OR_110(v) || rewriteValuePPC64_OpPPC64OR_120(v) || rewriteValuePPC64_OpPPC64OR_130(v) || rewriteValuePPC64_OpPPC64OR_140(v)
        case OpPPC64ORN:
                return rewriteValuePPC64_OpPPC64ORN_0(v)
        case OpPPC64ORconst:
@@ -7150,6 +7150,10 @@ func rewriteValuePPC64_OpPPC64MOVBreg_0(v *Value) bool {
        return false
 }
 func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool {
+       b := v.Block
+       _ = b
+       config := b.Func.Config
+       _ = config
        // match: (MOVBstore [off1] {sym} (ADDconst [off2] x) val mem)
        // cond: is16Bit(off1+off2)
        // result: (MOVBstore [off1+off2] {sym} x val mem)
@@ -7271,6 +7275,315 @@ func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool {
                v.AddArg(mem)
                return true
        }
+       // match: (MOVBstore [i1] {s} p (SRWconst (MOVHZreg w) [8]) x0:(MOVBstore [i0] {s} p w mem))
+       // cond: !config.BigEndian      && x0.Uses == 1         && i1 == i0+1   && clobber(x0)
+       // result: (MOVHstore [i0] {s} p w mem)
+       for {
+               i1 := v.AuxInt
+               s := v.Aux
+               _ = v.Args[2]
+               p := v.Args[0]
+               v_1 := v.Args[1]
+               if v_1.Op != OpPPC64SRWconst {
+                       break
+               }
+               if v_1.AuxInt != 8 {
+                       break
+               }
+               v_1_0 := v_1.Args[0]
+               if v_1_0.Op != OpPPC64MOVHZreg {
+                       break
+               }
+               w := v_1_0.Args[0]
+               x0 := v.Args[2]
+               if x0.Op != OpPPC64MOVBstore {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[2]
+               if p != x0.Args[0] {
+                       break
+               }
+               if w != x0.Args[1] {
+                       break
+               }
+               mem := x0.Args[2]
+               if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+1 && clobber(x0)) {
+                       break
+               }
+               v.reset(OpPPC64MOVHstore)
+               v.AuxInt = i0
+               v.Aux = s
+               v.AddArg(p)
+               v.AddArg(w)
+               v.AddArg(mem)
+               return true
+       }
+       // match: (MOVBstore [i3] {s} p (SRWconst w [24]) x0:(MOVBstore [i2] {s} p (SRWconst w [16]) x1:(MOVBstore [i1] {s} p (SRWconst w [8]) x2:(MOVBstore [i0] {s} p w mem))))
+       // cond: !config.BigEndian      && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1         && i1 == i0+1 && i2 == i0+2 && i3 == i0+3       && clobber(x0) && clobber(x1) && clobber(x2)
+       // result: (MOVWstore [i0] {s} p w mem)
+       for {
+               i3 := v.AuxInt
+               s := v.Aux
+               _ = v.Args[2]
+               p := v.Args[0]
+               v_1 := v.Args[1]
+               if v_1.Op != OpPPC64SRWconst {
+                       break
+               }
+               if v_1.AuxInt != 24 {
+                       break
+               }
+               w := v_1.Args[0]
+               x0 := v.Args[2]
+               if x0.Op != OpPPC64MOVBstore {
+                       break
+               }
+               i2 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[2]
+               if p != x0.Args[0] {
+                       break
+               }
+               x0_1 := x0.Args[1]
+               if x0_1.Op != OpPPC64SRWconst {
+                       break
+               }
+               if x0_1.AuxInt != 16 {
+                       break
+               }
+               if w != x0_1.Args[0] {
+                       break
+               }
+               x1 := x0.Args[2]
+               if x1.Op != OpPPC64MOVBstore {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[2]
+               if p != x1.Args[0] {
+                       break
+               }
+               x1_1 := x1.Args[1]
+               if x1_1.Op != OpPPC64SRWconst {
+                       break
+               }
+               if x1_1.AuxInt != 8 {
+                       break
+               }
+               if w != x1_1.Args[0] {
+                       break
+               }
+               x2 := x1.Args[2]
+               if x2.Op != OpPPC64MOVBstore {
+                       break
+               }
+               i0 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[2]
+               if p != x2.Args[0] {
+                       break
+               }
+               if w != x2.Args[1] {
+                       break
+               }
+               mem := x2.Args[2]
+               if !(!config.BigEndian && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && clobber(x0) && clobber(x1) && clobber(x2)) {
+                       break
+               }
+               v.reset(OpPPC64MOVWstore)
+               v.AuxInt = i0
+               v.Aux = s
+               v.AddArg(p)
+               v.AddArg(w)
+               v.AddArg(mem)
+               return true
+       }
+       // match: (MOVBstore [i7] {s} p (SRDconst w [56]) x0:(MOVBstore [i6] {s} p (SRDconst w [48]) x1:(MOVBstore [i5] {s} p (SRDconst w [40]) x2:(MOVBstore [i4] {s} p (SRDconst w [32]) x3:(MOVBstore [i3] {s} p (SRDconst w [24]) x4:(MOVBstore [i2] {s} p (SRDconst w [16]) x5:(MOVBstore [i1] {s} p (SRDconst w [8]) x6:(MOVBstore [i0] {s} p w mem))))))))
+       // cond: !config.BigEndian      && i0%4 == 0    && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1         && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7       && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6)
+       // result: (MOVDstore [i0] {s} p w mem)
+       for {
+               i7 := v.AuxInt
+               s := v.Aux
+               _ = v.Args[2]
+               p := v.Args[0]
+               v_1 := v.Args[1]
+               if v_1.Op != OpPPC64SRDconst {
+                       break
+               }
+               if v_1.AuxInt != 56 {
+                       break
+               }
+               w := v_1.Args[0]
+               x0 := v.Args[2]
+               if x0.Op != OpPPC64MOVBstore {
+                       break
+               }
+               i6 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[2]
+               if p != x0.Args[0] {
+                       break
+               }
+               x0_1 := x0.Args[1]
+               if x0_1.Op != OpPPC64SRDconst {
+                       break
+               }
+               if x0_1.AuxInt != 48 {
+                       break
+               }
+               if w != x0_1.Args[0] {
+                       break
+               }
+               x1 := x0.Args[2]
+               if x1.Op != OpPPC64MOVBstore {
+                       break
+               }
+               i5 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[2]
+               if p != x1.Args[0] {
+                       break
+               }
+               x1_1 := x1.Args[1]
+               if x1_1.Op != OpPPC64SRDconst {
+                       break
+               }
+               if x1_1.AuxInt != 40 {
+                       break
+               }
+               if w != x1_1.Args[0] {
+                       break
+               }
+               x2 := x1.Args[2]
+               if x2.Op != OpPPC64MOVBstore {
+                       break
+               }
+               i4 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[2]
+               if p != x2.Args[0] {
+                       break
+               }
+               x2_1 := x2.Args[1]
+               if x2_1.Op != OpPPC64SRDconst {
+                       break
+               }
+               if x2_1.AuxInt != 32 {
+                       break
+               }
+               if w != x2_1.Args[0] {
+                       break
+               }
+               x3 := x2.Args[2]
+               if x3.Op != OpPPC64MOVBstore {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[2]
+               if p != x3.Args[0] {
+                       break
+               }
+               x3_1 := x3.Args[1]
+               if x3_1.Op != OpPPC64SRDconst {
+                       break
+               }
+               if x3_1.AuxInt != 24 {
+                       break
+               }
+               if w != x3_1.Args[0] {
+                       break
+               }
+               x4 := x3.Args[2]
+               if x4.Op != OpPPC64MOVBstore {
+                       break
+               }
+               i2 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[2]
+               if p != x4.Args[0] {
+                       break
+               }
+               x4_1 := x4.Args[1]
+               if x4_1.Op != OpPPC64SRDconst {
+                       break
+               }
+               if x4_1.AuxInt != 16 {
+                       break
+               }
+               if w != x4_1.Args[0] {
+                       break
+               }
+               x5 := x4.Args[2]
+               if x5.Op != OpPPC64MOVBstore {
+                       break
+               }
+               i1 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[2]
+               if p != x5.Args[0] {
+                       break
+               }
+               x5_1 := x5.Args[1]
+               if x5_1.Op != OpPPC64SRDconst {
+                       break
+               }
+               if x5_1.AuxInt != 8 {
+                       break
+               }
+               if w != x5_1.Args[0] {
+                       break
+               }
+               x6 := x5.Args[2]
+               if x6.Op != OpPPC64MOVBstore {
+                       break
+               }
+               i0 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[2]
+               if p != x6.Args[0] {
+                       break
+               }
+               if w != x6.Args[1] {
+                       break
+               }
+               mem := x6.Args[2]
+               if !(!config.BigEndian && i0%4 == 0 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6)) {
+                       break
+               }
+               v.reset(OpPPC64MOVDstore)
+               v.AuxInt = i0
+               v.Aux = s
+               v.AddArg(p)
+               v.AddArg(w)
+               v.AddArg(mem)
+               return true
+       }
        return false
 }
 func rewriteValuePPC64_OpPPC64MOVBstorezero_0(v *Value) bool {
@@ -9050,6 +9363,10 @@ func rewriteValuePPC64_OpPPC64OR_0(v *Value) bool {
        return false
 }
 func rewriteValuePPC64_OpPPC64OR_10(v *Value) bool {
+       b := v.Block
+       _ = b
+       config := b.Func.Config
+       _ = config
        // match: (OR x (MOVDconst [c]))
        // cond: isU32Bit(c)
        // result: (ORconst [c] x)
@@ -9088,6 +9405,29957 @@ func rewriteValuePPC64_OpPPC64OR_10(v *Value) bool {
                v.AddArg(x)
                return true
        }
+       // match: (OR <t> x0:(MOVBZload [i0] {s} p mem) o1:(SLWconst x1:(MOVBZload [i1] {s} p mem) [8]))
+       // cond: !config.BigEndian      && i1 == i0+1   && x0.Uses ==1 && x1.Uses == 1  && o1.Uses == 1         && mergePoint(b, x0, x1) != nil         && clobber(x0) && clobber(x1) && clobber(o1)
+       // result: @mergePoint(b,x0,x1) (MOVHZload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               x0 := v.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               s := x0.Aux
+               _ = x0.Args[1]
+               p := x0.Args[0]
+               mem := x0.Args[1]
+               o1 := v.Args[1]
+               if o1.Op != OpPPC64SLWconst {
+                       break
+               }
+               if o1.AuxInt != 8 {
+                       break
+               }
+               x1 := o1.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && o1.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(o1)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVHZload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o1:(SLWconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))
+       // cond: !config.BigEndian      && i1 == i0+1   && x0.Uses ==1 && x1.Uses == 1  && o1.Uses == 1         && mergePoint(b, x0, x1) != nil         && clobber(x0) && clobber(x1) && clobber(o1)
+       // result: @mergePoint(b,x0,x1) (MOVHZload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o1 := v.Args[0]
+               if o1.Op != OpPPC64SLWconst {
+                       break
+               }
+               if o1.AuxInt != 8 {
+                       break
+               }
+               x1 := o1.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               s := x1.Aux
+               _ = x1.Args[1]
+               p := x1.Args[0]
+               mem := x1.Args[1]
+               x0 := v.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i1 == i0+1 && x0.Uses == 1 && x1.Uses == 1 && o1.Uses == 1 && mergePoint(b, x0, x1) != nil && clobber(x0) && clobber(x1) && clobber(o1)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVHZload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s1:(SLWconst x2:(MOVBZload [i3] {s} p mem) [24]) o0:(OR <t> s0:(SLWconst x1:(MOVBZload [i2] {s} p mem) [16]) x0:(MOVHZload [i0] {s} p mem)))
+       // cond: !config.BigEndian      && i2 == i0+2   && i3 == i0+3   && x0.Uses ==1 && x1.Uses == 1 && x2.Uses == 1  && o0.Uses == 1         && s0.Uses == 1 && s1.Uses == 1         && mergePoint(b, x0, x1, x2) != nil     && clobber(x0) && clobber(x1) && clobber(x2)    && clobber(s0) && clobber(s1)   && clobber(o0)
+       // result: @mergePoint(b,x0,x1,x2) (MOVWZload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s1 := v.Args[0]
+               if s1.Op != OpPPC64SLWconst {
+                       break
+               }
+               if s1.AuxInt != 24 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x2.AuxInt
+               s := x2.Aux
+               _ = x2.Args[1]
+               p := x2.Args[0]
+               mem := x2.Args[1]
+               o0 := v.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLWconst {
+                       break
+               }
+               if s0.AuxInt != 16 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVHZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVWZload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s1:(SLWconst x2:(MOVBZload [i3] {s} p mem) [24]) o0:(OR <t> x0:(MOVHZload [i0] {s} p mem) s0:(SLWconst x1:(MOVBZload [i2] {s} p mem) [16])))
+       // cond: !config.BigEndian      && i2 == i0+2   && i3 == i0+3   && x0.Uses ==1 && x1.Uses == 1 && x2.Uses == 1  && o0.Uses == 1         && s0.Uses == 1 && s1.Uses == 1         && mergePoint(b, x0, x1, x2) != nil     && clobber(x0) && clobber(x1) && clobber(x2)    && clobber(s0) && clobber(s1)   && clobber(o0)
+       // result: @mergePoint(b,x0,x1,x2) (MOVWZload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s1 := v.Args[0]
+               if s1.Op != OpPPC64SLWconst {
+                       break
+               }
+               if s1.AuxInt != 24 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x2.AuxInt
+               s := x2.Aux
+               _ = x2.Args[1]
+               p := x2.Args[0]
+               mem := x2.Args[1]
+               o0 := v.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVHZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLWconst {
+                       break
+               }
+               if s0.AuxInt != 16 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVWZload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o0:(OR <t> s0:(SLWconst x1:(MOVBZload [i2] {s} p mem) [16]) x0:(MOVHZload [i0] {s} p mem)) s1:(SLWconst x2:(MOVBZload [i3] {s} p mem) [24]))
+       // cond: !config.BigEndian      && i2 == i0+2   && i3 == i0+3   && x0.Uses ==1 && x1.Uses == 1 && x2.Uses == 1  && o0.Uses == 1         && s0.Uses == 1 && s1.Uses == 1         && mergePoint(b, x0, x1, x2) != nil     && clobber(x0) && clobber(x1) && clobber(x2)    && clobber(s0) && clobber(s1)   && clobber(o0)
+       // result: @mergePoint(b,x0,x1,x2) (MOVWZload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o0 := v.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLWconst {
+                       break
+               }
+               if s0.AuxInt != 16 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x1.AuxInt
+               s := x1.Aux
+               _ = x1.Args[1]
+               p := x1.Args[0]
+               mem := x1.Args[1]
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVHZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := v.Args[1]
+               if s1.Op != OpPPC64SLWconst {
+                       break
+               }
+               if s1.AuxInt != 24 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVWZload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o0:(OR <t> x0:(MOVHZload [i0] {s} p mem) s0:(SLWconst x1:(MOVBZload [i2] {s} p mem) [16])) s1:(SLWconst x2:(MOVBZload [i3] {s} p mem) [24]))
+       // cond: !config.BigEndian      && i2 == i0+2   && i3 == i0+3   && x0.Uses ==1 && x1.Uses == 1 && x2.Uses == 1  && o0.Uses == 1         && s0.Uses == 1 && s1.Uses == 1         && mergePoint(b, x0, x1, x2) != nil     && clobber(x0) && clobber(x1) && clobber(x2)    && clobber(s0) && clobber(s1)   && clobber(o0)
+       // result: @mergePoint(b,x0,x1,x2) (MOVWZload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o0 := v.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVHZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               s := x0.Aux
+               _ = x0.Args[1]
+               p := x0.Args[0]
+               mem := x0.Args[1]
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLWconst {
+                       break
+               }
+               if s0.AuxInt != 16 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := v.Args[1]
+               if s1.Op != OpPPC64SLWconst {
+                       break
+               }
+               if s1.AuxInt != 24 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i2 == i0+2 && i3 == i0+3 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && o0.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && mergePoint(b, x0, x1, x2) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(s0) && clobber(s1) && clobber(o0)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVWZload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))))))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))))))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       return false
+}
+func rewriteValuePPC64_OpPPC64OR_20(v *Value) bool {
+       b := v.Block
+       _ = b
+       config := b.Func.Config
+       _ = config
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])))))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])))))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       return false
+}
+func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool {
+       b := v.Block
+       _ = b
+       config := b.Func.Config
+       _ = config
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       return false
+}
+func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool {
+       b := v.Block
+       _ = b
+       config := b.Func.Config
+       _ = config
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       return false
+}
+func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool {
+       b := v.Block
+       _ = b
+       config := b.Func.Config
+       _ = config
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)))))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])))))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       return false
+}
+func rewriteValuePPC64_OpPPC64OR_60(v *Value) bool {
+       b := v.Block
+       _ = b
+       config := b.Func.Config
+       _ = config
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       return false
+}
+func rewriteValuePPC64_OpPPC64OR_70(v *Value) bool {
+       b := v.Block
+       _ = b
+       config := b.Func.Config
+       _ = config
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       return false
+}
+func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool {
+       b := v.Block
+       _ = b
+       config := b.Func.Config
+       _ = config
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]) o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               s6 := v.Args[0]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               s := x7.Aux
+               _ = x7.Args[1]
+               p := x7.Args[0]
+               mem := x7.Args[1]
+               o5 := v.Args[1]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))))))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))))))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])))))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])))))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       return false
+}
+func rewriteValuePPC64_OpPPC64OR_90(v *Value) bool {
+       b := v.Block
+       _ = b
+       config := b.Func.Config
+       _ = config
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       return false
+}
+func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool {
+       b := v.Block
+       _ = b
+       config := b.Func.Config
+       _ = config
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       return false
+}
+func rewriteValuePPC64_OpPPC64OR_110(v *Value) bool {
+       b := v.Block
+       _ = b
+       config := b.Func.Config
+       _ = config
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48]) o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]))) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               s5 := o5.Args[0]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               s := x6.Aux
+               _ = x6.Args[1]
+               p := x6.Args[0]
+               mem := x6.Args[1]
+               o4 := o5.Args[1]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)))))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])))))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       return false
+}
+func rewriteValuePPC64_OpPPC64OR_120(v *Value) bool {
+       b := v.Block
+       _ = b
+       config := b.Func.Config
+       _ = config
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40]) o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]))) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               s4 := o4.Args[0]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               s := x5.Aux
+               _ = x5.Args[1]
+               p := x5.Args[0]
+               mem := x5.Args[1]
+               o3 := o4.Args[1]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       return false
+}
+func rewriteValuePPC64_OpPPC64OR_130(v *Value) bool {
+       b := v.Block
+       _ = b
+       config := b.Func.Config
+       _ = config
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               s := x4.Aux
+               _ = x4.Args[1]
+               p := x4.Args[0]
+               mem := x4.Args[1]
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               s := x4.Aux
+               _ = x4.Args[1]
+               p := x4.Args[0]
+               mem := x4.Args[1]
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               s := x4.Aux
+               _ = x4.Args[1]
+               p := x4.Args[0]
+               mem := x4.Args[1]
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               s := x4.Aux
+               _ = x4.Args[1]
+               p := x4.Args[0]
+               mem := x4.Args[1]
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               s := x4.Aux
+               _ = x4.Args[1]
+               p := x4.Args[0]
+               mem := x4.Args[1]
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               s := x4.Aux
+               _ = x4.Args[1]
+               p := x4.Args[0]
+               mem := x4.Args[1]
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               s := x4.Aux
+               _ = x4.Args[1]
+               p := x4.Args[0]
+               mem := x4.Args[1]
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32]) o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]))) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               s3 := o3.Args[0]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               s := x4.Aux
+               _ = x4.Args[1]
+               p := x4.Args[0]
+               mem := x4.Args[1]
+               o2 := o3.Args[1]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               s := x3.Aux
+               _ = x3.Args[1]
+               p := x3.Args[0]
+               mem := x3.Args[1]
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               s := x3.Aux
+               _ = x3.Args[1]
+               p := x3.Args[0]
+               mem := x3.Args[1]
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       return false
+}
+func rewriteValuePPC64_OpPPC64OR_140(v *Value) bool {
+       b := v.Block
+       _ = b
+       config := b.Func.Config
+       _ = config
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               s := x3.Aux
+               _ = x3.Args[1]
+               p := x3.Args[0]
+               mem := x3.Args[1]
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24]) o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]))) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               s2 := o2.Args[0]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               s := x3.Aux
+               _ = x3.Args[1]
+               p := x3.Args[0]
+               mem := x3.Args[1]
+               o1 := o2.Args[1]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               s := x2.Aux
+               _ = x2.Args[1]
+               p := x2.Args[0]
+               mem := x2.Args[1]
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16]) o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]))) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               s1 := o1.Args[0]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               s := x2.Aux
+               _ = x2.Args[1]
+               p := x2.Args[0]
+               mem := x2.Args[1]
+               o0 := o1.Args[1]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               s0 := o0.Args[0]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               s := x1.Aux
+               _ = x1.Args[1]
+               p := x1.Args[0]
+               mem := x1.Args[1]
+               x0 := o0.Args[1]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               if x0.Aux != s {
+                       break
+               }
+               _ = x0.Args[1]
+               if p != x0.Args[0] {
+                       break
+               }
+               if mem != x0.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
+       // match: (OR <t> o5:(OR <t> o4:(OR <t> o3:(OR <t> o2:(OR <t> o1:(OR <t> o0:(OR <t> x0:(MOVBZload [i0] {s} p mem) s0:(SLDconst x1:(MOVBZload [i1] {s} p mem) [8])) s1:(SLDconst x2:(MOVBZload [i2] {s} p mem) [16])) s2:(SLDconst x3:(MOVBZload [i3] {s} p mem) [24])) s3:(SLDconst x4:(MOVBZload [i4] {s} p mem) [32])) s4:(SLDconst x5:(MOVBZload [i5] {s} p mem) [40])) s5:(SLDconst x6:(MOVBZload [i6] {s} p mem) [48])) s6:(SLDconst x7:(MOVBZload [i7] {s} p mem) [56]))
+       // cond: !config.BigEndian      && i0%4 == 0    && i1 == i0+1   && i2 == i0+2   && i3 == i0+3   && i4 == i0+4   && i5 == i0+5   && i6 == i0+6   && i7 == i0+7   && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses ==1 && x7.Uses == 1  && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1         && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1         && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil         && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7)         && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber (s6)       && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)
+       // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem)
+       for {
+               t := v.Type
+               _ = v.Args[1]
+               o5 := v.Args[0]
+               if o5.Op != OpPPC64OR {
+                       break
+               }
+               if o5.Type != t {
+                       break
+               }
+               _ = o5.Args[1]
+               o4 := o5.Args[0]
+               if o4.Op != OpPPC64OR {
+                       break
+               }
+               if o4.Type != t {
+                       break
+               }
+               _ = o4.Args[1]
+               o3 := o4.Args[0]
+               if o3.Op != OpPPC64OR {
+                       break
+               }
+               if o3.Type != t {
+                       break
+               }
+               _ = o3.Args[1]
+               o2 := o3.Args[0]
+               if o2.Op != OpPPC64OR {
+                       break
+               }
+               if o2.Type != t {
+                       break
+               }
+               _ = o2.Args[1]
+               o1 := o2.Args[0]
+               if o1.Op != OpPPC64OR {
+                       break
+               }
+               if o1.Type != t {
+                       break
+               }
+               _ = o1.Args[1]
+               o0 := o1.Args[0]
+               if o0.Op != OpPPC64OR {
+                       break
+               }
+               if o0.Type != t {
+                       break
+               }
+               _ = o0.Args[1]
+               x0 := o0.Args[0]
+               if x0.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i0 := x0.AuxInt
+               s := x0.Aux
+               _ = x0.Args[1]
+               p := x0.Args[0]
+               mem := x0.Args[1]
+               s0 := o0.Args[1]
+               if s0.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s0.AuxInt != 8 {
+                       break
+               }
+               x1 := s0.Args[0]
+               if x1.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i1 := x1.AuxInt
+               if x1.Aux != s {
+                       break
+               }
+               _ = x1.Args[1]
+               if p != x1.Args[0] {
+                       break
+               }
+               if mem != x1.Args[1] {
+                       break
+               }
+               s1 := o1.Args[1]
+               if s1.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s1.AuxInt != 16 {
+                       break
+               }
+               x2 := s1.Args[0]
+               if x2.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i2 := x2.AuxInt
+               if x2.Aux != s {
+                       break
+               }
+               _ = x2.Args[1]
+               if p != x2.Args[0] {
+                       break
+               }
+               if mem != x2.Args[1] {
+                       break
+               }
+               s2 := o2.Args[1]
+               if s2.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s2.AuxInt != 24 {
+                       break
+               }
+               x3 := s2.Args[0]
+               if x3.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i3 := x3.AuxInt
+               if x3.Aux != s {
+                       break
+               }
+               _ = x3.Args[1]
+               if p != x3.Args[0] {
+                       break
+               }
+               if mem != x3.Args[1] {
+                       break
+               }
+               s3 := o3.Args[1]
+               if s3.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s3.AuxInt != 32 {
+                       break
+               }
+               x4 := s3.Args[0]
+               if x4.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i4 := x4.AuxInt
+               if x4.Aux != s {
+                       break
+               }
+               _ = x4.Args[1]
+               if p != x4.Args[0] {
+                       break
+               }
+               if mem != x4.Args[1] {
+                       break
+               }
+               s4 := o4.Args[1]
+               if s4.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s4.AuxInt != 40 {
+                       break
+               }
+               x5 := s4.Args[0]
+               if x5.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i5 := x5.AuxInt
+               if x5.Aux != s {
+                       break
+               }
+               _ = x5.Args[1]
+               if p != x5.Args[0] {
+                       break
+               }
+               if mem != x5.Args[1] {
+                       break
+               }
+               s5 := o5.Args[1]
+               if s5.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s5.AuxInt != 48 {
+                       break
+               }
+               x6 := s5.Args[0]
+               if x6.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i6 := x6.AuxInt
+               if x6.Aux != s {
+                       break
+               }
+               _ = x6.Args[1]
+               if p != x6.Args[0] {
+                       break
+               }
+               if mem != x6.Args[1] {
+                       break
+               }
+               s6 := v.Args[1]
+               if s6.Op != OpPPC64SLDconst {
+                       break
+               }
+               if s6.AuxInt != 56 {
+                       break
+               }
+               x7 := s6.Args[0]
+               if x7.Op != OpPPC64MOVBZload {
+                       break
+               }
+               i7 := x7.AuxInt
+               if x7.Aux != s {
+                       break
+               }
+               _ = x7.Args[1]
+               if p != x7.Args[0] {
+                       break
+               }
+               if mem != x7.Args[1] {
+                       break
+               }
+               if !(!config.BigEndian && i0%4 == 0 && i1 == i0+1 && i2 == i0+2 && i3 == i0+3 && i4 == i0+4 && i5 == i0+5 && i6 == i0+6 && i7 == i0+7 && x0.Uses == 1 && x1.Uses == 1 && x2.Uses == 1 && x3.Uses == 1 && x4.Uses == 1 && x5.Uses == 1 && x6.Uses == 1 && x7.Uses == 1 && o0.Uses == 1 && o1.Uses == 1 && o2.Uses == 1 && o3.Uses == 1 && o4.Uses == 1 && o5.Uses == 1 && s0.Uses == 1 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && s4.Uses == 1 && s5.Uses == 1 && s6.Uses == 1 && mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) != nil && clobber(x0) && clobber(x1) && clobber(x2) && clobber(x3) && clobber(x4) && clobber(x5) && clobber(x6) && clobber(x7) && clobber(s0) && clobber(s1) && clobber(s2) && clobber(s3) && clobber(s4) && clobber(s5) && clobber(s6) && clobber(o0) && clobber(o1) && clobber(o2) && clobber(o3) && clobber(o4) && clobber(o5)) {
+                       break
+               }
+               b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7)
+               v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t)
+               v.reset(OpCopy)
+               v.AddArg(v0)
+               v0.AuxInt = i0
+               v0.Aux = s
+               v0.AddArg(p)
+               v0.AddArg(mem)
+               return true
+       }
        return false
 }
 func rewriteValuePPC64_OpPPC64ORN_0(v *Value) bool {
index 0547bee43706ed6b461d78f864125dfe523cc6b1..af402575e458cf6d4ac6822532cfc402428a9129 100644 (file)
@@ -109,6 +109,7 @@ var little = []byte{
 
 var src = []byte{1, 2, 3, 4, 5, 6, 7, 8}
 var res = []int32{0x01020304, 0x05060708}
+var putbuf = []byte{0, 0, 0, 0, 0, 0, 0, 0}
 
 func checkResult(t *testing.T, dir string, order ByteOrder, err error, have, want interface{}) {
        if err != nil {
@@ -502,25 +503,42 @@ func BenchmarkWriteSlice1000Int32s(b *testing.B) {
 }
 
 func BenchmarkPutUint16(b *testing.B) {
-       buf := [2]byte{}
        b.SetBytes(2)
        for i := 0; i < b.N; i++ {
-               BigEndian.PutUint16(buf[:], uint16(i))
+               BigEndian.PutUint16(putbuf[:], uint16(i))
        }
 }
 
 func BenchmarkPutUint32(b *testing.B) {
-       buf := [4]byte{}
        b.SetBytes(4)
        for i := 0; i < b.N; i++ {
-               BigEndian.PutUint32(buf[:], uint32(i))
+               BigEndian.PutUint32(putbuf[:], uint32(i))
        }
 }
 
 func BenchmarkPutUint64(b *testing.B) {
-       buf := [8]byte{}
        b.SetBytes(8)
        for i := 0; i < b.N; i++ {
-               BigEndian.PutUint64(buf[:], uint64(i))
+               BigEndian.PutUint64(putbuf[:], uint64(i))
+       }
+}
+func BenchmarkLittleEndianPutUint16(b *testing.B) {
+       b.SetBytes(2)
+       for i := 0; i < b.N; i++ {
+               LittleEndian.PutUint16(putbuf[:], uint16(i))
+       }
+}
+
+func BenchmarkLittleEndianPutUint32(b *testing.B) {
+       b.SetBytes(4)
+       for i := 0; i < b.N; i++ {
+               LittleEndian.PutUint32(putbuf[:], uint32(i))
+       }
+}
+
+func BenchmarkLittleEndianPutUint64(b *testing.B) {
+       b.SetBytes(8)
+       for i := 0; i < b.N; i++ {
+               LittleEndian.PutUint64(putbuf[:], uint64(i))
        }
 }