github.com/yukk001/go1.10.8@v0.0.0-20190813125351-6df2d3982e20/src/cmd/compile/internal/ssa/rewritePPC64.go (about) 1 // Code generated from gen/PPC64.rules; DO NOT EDIT. 2 // generated with: cd gen; go run *.go 3 4 package ssa 5 6 import "math" 7 import "cmd/internal/obj" 8 import "cmd/internal/objabi" 9 import "cmd/compile/internal/types" 10 11 var _ = math.MinInt8 // in case not otherwise used 12 var _ = obj.ANOP // in case not otherwise used 13 var _ = objabi.GOROOT // in case not otherwise used 14 var _ = types.TypeMem // in case not otherwise used 15 16 func rewriteValuePPC64(v *Value) bool { 17 switch v.Op { 18 case OpAbs: 19 return rewriteValuePPC64_OpAbs_0(v) 20 case OpAdd16: 21 return rewriteValuePPC64_OpAdd16_0(v) 22 case OpAdd32: 23 return rewriteValuePPC64_OpAdd32_0(v) 24 case OpAdd32F: 25 return rewriteValuePPC64_OpAdd32F_0(v) 26 case OpAdd64: 27 return rewriteValuePPC64_OpAdd64_0(v) 28 case OpAdd64F: 29 return rewriteValuePPC64_OpAdd64F_0(v) 30 case OpAdd8: 31 return rewriteValuePPC64_OpAdd8_0(v) 32 case OpAddPtr: 33 return rewriteValuePPC64_OpAddPtr_0(v) 34 case OpAddr: 35 return rewriteValuePPC64_OpAddr_0(v) 36 case OpAnd16: 37 return rewriteValuePPC64_OpAnd16_0(v) 38 case OpAnd32: 39 return rewriteValuePPC64_OpAnd32_0(v) 40 case OpAnd64: 41 return rewriteValuePPC64_OpAnd64_0(v) 42 case OpAnd8: 43 return rewriteValuePPC64_OpAnd8_0(v) 44 case OpAndB: 45 return rewriteValuePPC64_OpAndB_0(v) 46 case OpAtomicAdd32: 47 return rewriteValuePPC64_OpAtomicAdd32_0(v) 48 case OpAtomicAdd64: 49 return rewriteValuePPC64_OpAtomicAdd64_0(v) 50 case OpAtomicAnd8: 51 return rewriteValuePPC64_OpAtomicAnd8_0(v) 52 case OpAtomicCompareAndSwap32: 53 return rewriteValuePPC64_OpAtomicCompareAndSwap32_0(v) 54 case OpAtomicCompareAndSwap64: 55 return rewriteValuePPC64_OpAtomicCompareAndSwap64_0(v) 56 case OpAtomicExchange32: 57 return rewriteValuePPC64_OpAtomicExchange32_0(v) 58 case OpAtomicExchange64: 59 return rewriteValuePPC64_OpAtomicExchange64_0(v) 60 case OpAtomicLoad32: 61 return rewriteValuePPC64_OpAtomicLoad32_0(v) 62 case OpAtomicLoad64: 63 return rewriteValuePPC64_OpAtomicLoad64_0(v) 64 case OpAtomicLoadPtr: 65 return rewriteValuePPC64_OpAtomicLoadPtr_0(v) 66 case OpAtomicOr8: 67 return rewriteValuePPC64_OpAtomicOr8_0(v) 68 case OpAtomicStore32: 69 return rewriteValuePPC64_OpAtomicStore32_0(v) 70 case OpAtomicStore64: 71 return rewriteValuePPC64_OpAtomicStore64_0(v) 72 case OpAvg64u: 73 return rewriteValuePPC64_OpAvg64u_0(v) 74 case OpBitLen32: 75 return rewriteValuePPC64_OpBitLen32_0(v) 76 case OpBitLen64: 77 return rewriteValuePPC64_OpBitLen64_0(v) 78 case OpCeil: 79 return rewriteValuePPC64_OpCeil_0(v) 80 case OpClosureCall: 81 return rewriteValuePPC64_OpClosureCall_0(v) 82 case OpCom16: 83 return rewriteValuePPC64_OpCom16_0(v) 84 case OpCom32: 85 return rewriteValuePPC64_OpCom32_0(v) 86 case OpCom64: 87 return rewriteValuePPC64_OpCom64_0(v) 88 case OpCom8: 89 return rewriteValuePPC64_OpCom8_0(v) 90 case OpConst16: 91 return rewriteValuePPC64_OpConst16_0(v) 92 case OpConst32: 93 return rewriteValuePPC64_OpConst32_0(v) 94 case OpConst32F: 95 return rewriteValuePPC64_OpConst32F_0(v) 96 case OpConst64: 97 return rewriteValuePPC64_OpConst64_0(v) 98 case OpConst64F: 99 return rewriteValuePPC64_OpConst64F_0(v) 100 case OpConst8: 101 return rewriteValuePPC64_OpConst8_0(v) 102 case OpConstBool: 103 return rewriteValuePPC64_OpConstBool_0(v) 104 case OpConstNil: 105 return rewriteValuePPC64_OpConstNil_0(v) 106 case OpConvert: 107 return rewriteValuePPC64_OpConvert_0(v) 108 case OpCopysign: 109 return rewriteValuePPC64_OpCopysign_0(v) 110 case OpCtz32: 111 return rewriteValuePPC64_OpCtz32_0(v) 112 case OpCtz64: 113 return rewriteValuePPC64_OpCtz64_0(v) 114 case OpCvt32Fto32: 115 return rewriteValuePPC64_OpCvt32Fto32_0(v) 116 case OpCvt32Fto64: 117 return rewriteValuePPC64_OpCvt32Fto64_0(v) 118 case OpCvt32Fto64F: 119 return rewriteValuePPC64_OpCvt32Fto64F_0(v) 120 case OpCvt32to32F: 121 return rewriteValuePPC64_OpCvt32to32F_0(v) 122 case OpCvt32to64F: 123 return rewriteValuePPC64_OpCvt32to64F_0(v) 124 case OpCvt64Fto32: 125 return rewriteValuePPC64_OpCvt64Fto32_0(v) 126 case OpCvt64Fto32F: 127 return rewriteValuePPC64_OpCvt64Fto32F_0(v) 128 case OpCvt64Fto64: 129 return rewriteValuePPC64_OpCvt64Fto64_0(v) 130 case OpCvt64to32F: 131 return rewriteValuePPC64_OpCvt64to32F_0(v) 132 case OpCvt64to64F: 133 return rewriteValuePPC64_OpCvt64to64F_0(v) 134 case OpDiv16: 135 return rewriteValuePPC64_OpDiv16_0(v) 136 case OpDiv16u: 137 return rewriteValuePPC64_OpDiv16u_0(v) 138 case OpDiv32: 139 return rewriteValuePPC64_OpDiv32_0(v) 140 case OpDiv32F: 141 return rewriteValuePPC64_OpDiv32F_0(v) 142 case OpDiv32u: 143 return rewriteValuePPC64_OpDiv32u_0(v) 144 case OpDiv64: 145 return rewriteValuePPC64_OpDiv64_0(v) 146 case OpDiv64F: 147 return rewriteValuePPC64_OpDiv64F_0(v) 148 case OpDiv64u: 149 return rewriteValuePPC64_OpDiv64u_0(v) 150 case OpDiv8: 151 return rewriteValuePPC64_OpDiv8_0(v) 152 case OpDiv8u: 153 return rewriteValuePPC64_OpDiv8u_0(v) 154 case OpEq16: 155 return rewriteValuePPC64_OpEq16_0(v) 156 case OpEq32: 157 return rewriteValuePPC64_OpEq32_0(v) 158 case OpEq32F: 159 return rewriteValuePPC64_OpEq32F_0(v) 160 case OpEq64: 161 return rewriteValuePPC64_OpEq64_0(v) 162 case OpEq64F: 163 return rewriteValuePPC64_OpEq64F_0(v) 164 case OpEq8: 165 return rewriteValuePPC64_OpEq8_0(v) 166 case OpEqB: 167 return rewriteValuePPC64_OpEqB_0(v) 168 case OpEqPtr: 169 return rewriteValuePPC64_OpEqPtr_0(v) 170 case OpFloor: 171 return rewriteValuePPC64_OpFloor_0(v) 172 case OpGeq16: 173 return rewriteValuePPC64_OpGeq16_0(v) 174 case OpGeq16U: 175 return rewriteValuePPC64_OpGeq16U_0(v) 176 case OpGeq32: 177 return rewriteValuePPC64_OpGeq32_0(v) 178 case OpGeq32F: 179 return rewriteValuePPC64_OpGeq32F_0(v) 180 case OpGeq32U: 181 return rewriteValuePPC64_OpGeq32U_0(v) 182 case OpGeq64: 183 return rewriteValuePPC64_OpGeq64_0(v) 184 case OpGeq64F: 185 return rewriteValuePPC64_OpGeq64F_0(v) 186 case OpGeq64U: 187 return rewriteValuePPC64_OpGeq64U_0(v) 188 case OpGeq8: 189 return rewriteValuePPC64_OpGeq8_0(v) 190 case OpGeq8U: 191 return rewriteValuePPC64_OpGeq8U_0(v) 192 case OpGetCallerSP: 193 return rewriteValuePPC64_OpGetCallerSP_0(v) 194 case OpGetClosurePtr: 195 return rewriteValuePPC64_OpGetClosurePtr_0(v) 196 case OpGreater16: 197 return rewriteValuePPC64_OpGreater16_0(v) 198 case OpGreater16U: 199 return rewriteValuePPC64_OpGreater16U_0(v) 200 case OpGreater32: 201 return rewriteValuePPC64_OpGreater32_0(v) 202 case OpGreater32F: 203 return rewriteValuePPC64_OpGreater32F_0(v) 204 case OpGreater32U: 205 return rewriteValuePPC64_OpGreater32U_0(v) 206 case OpGreater64: 207 return rewriteValuePPC64_OpGreater64_0(v) 208 case OpGreater64F: 209 return rewriteValuePPC64_OpGreater64F_0(v) 210 case OpGreater64U: 211 return rewriteValuePPC64_OpGreater64U_0(v) 212 case OpGreater8: 213 return rewriteValuePPC64_OpGreater8_0(v) 214 case OpGreater8U: 215 return rewriteValuePPC64_OpGreater8U_0(v) 216 case OpHmul32: 217 return rewriteValuePPC64_OpHmul32_0(v) 218 case OpHmul32u: 219 return rewriteValuePPC64_OpHmul32u_0(v) 220 case OpHmul64: 221 return rewriteValuePPC64_OpHmul64_0(v) 222 case OpHmul64u: 223 return rewriteValuePPC64_OpHmul64u_0(v) 224 case OpInterCall: 225 return rewriteValuePPC64_OpInterCall_0(v) 226 case OpIsInBounds: 227 return rewriteValuePPC64_OpIsInBounds_0(v) 228 case OpIsNonNil: 229 return rewriteValuePPC64_OpIsNonNil_0(v) 230 case OpIsSliceInBounds: 231 return rewriteValuePPC64_OpIsSliceInBounds_0(v) 232 case OpLeq16: 233 return rewriteValuePPC64_OpLeq16_0(v) 234 case OpLeq16U: 235 return rewriteValuePPC64_OpLeq16U_0(v) 236 case OpLeq32: 237 return rewriteValuePPC64_OpLeq32_0(v) 238 case OpLeq32F: 239 return rewriteValuePPC64_OpLeq32F_0(v) 240 case OpLeq32U: 241 return rewriteValuePPC64_OpLeq32U_0(v) 242 case OpLeq64: 243 return rewriteValuePPC64_OpLeq64_0(v) 244 case OpLeq64F: 245 return rewriteValuePPC64_OpLeq64F_0(v) 246 case OpLeq64U: 247 return rewriteValuePPC64_OpLeq64U_0(v) 248 case OpLeq8: 249 return rewriteValuePPC64_OpLeq8_0(v) 250 case OpLeq8U: 251 return rewriteValuePPC64_OpLeq8U_0(v) 252 case OpLess16: 253 return rewriteValuePPC64_OpLess16_0(v) 254 case OpLess16U: 255 return rewriteValuePPC64_OpLess16U_0(v) 256 case OpLess32: 257 return rewriteValuePPC64_OpLess32_0(v) 258 case OpLess32F: 259 return rewriteValuePPC64_OpLess32F_0(v) 260 case OpLess32U: 261 return rewriteValuePPC64_OpLess32U_0(v) 262 case OpLess64: 263 return rewriteValuePPC64_OpLess64_0(v) 264 case OpLess64F: 265 return rewriteValuePPC64_OpLess64F_0(v) 266 case OpLess64U: 267 return rewriteValuePPC64_OpLess64U_0(v) 268 case OpLess8: 269 return rewriteValuePPC64_OpLess8_0(v) 270 case OpLess8U: 271 return rewriteValuePPC64_OpLess8U_0(v) 272 case OpLoad: 273 return rewriteValuePPC64_OpLoad_0(v) 274 case OpLsh16x16: 275 return rewriteValuePPC64_OpLsh16x16_0(v) 276 case OpLsh16x32: 277 return rewriteValuePPC64_OpLsh16x32_0(v) 278 case OpLsh16x64: 279 return rewriteValuePPC64_OpLsh16x64_0(v) 280 case OpLsh16x8: 281 return rewriteValuePPC64_OpLsh16x8_0(v) 282 case OpLsh32x16: 283 return rewriteValuePPC64_OpLsh32x16_0(v) 284 case OpLsh32x32: 285 return rewriteValuePPC64_OpLsh32x32_0(v) 286 case OpLsh32x64: 287 return rewriteValuePPC64_OpLsh32x64_0(v) 288 case OpLsh32x8: 289 return rewriteValuePPC64_OpLsh32x8_0(v) 290 case OpLsh64x16: 291 return rewriteValuePPC64_OpLsh64x16_0(v) 292 case OpLsh64x32: 293 return rewriteValuePPC64_OpLsh64x32_0(v) 294 case OpLsh64x64: 295 return rewriteValuePPC64_OpLsh64x64_0(v) 296 case OpLsh64x8: 297 return rewriteValuePPC64_OpLsh64x8_0(v) 298 case OpLsh8x16: 299 return rewriteValuePPC64_OpLsh8x16_0(v) 300 case OpLsh8x32: 301 return rewriteValuePPC64_OpLsh8x32_0(v) 302 case OpLsh8x64: 303 return rewriteValuePPC64_OpLsh8x64_0(v) 304 case OpLsh8x8: 305 return rewriteValuePPC64_OpLsh8x8_0(v) 306 case OpMod16: 307 return rewriteValuePPC64_OpMod16_0(v) 308 case OpMod16u: 309 return rewriteValuePPC64_OpMod16u_0(v) 310 case OpMod32: 311 return rewriteValuePPC64_OpMod32_0(v) 312 case OpMod32u: 313 return rewriteValuePPC64_OpMod32u_0(v) 314 case OpMod64: 315 return rewriteValuePPC64_OpMod64_0(v) 316 case OpMod64u: 317 return rewriteValuePPC64_OpMod64u_0(v) 318 case OpMod8: 319 return rewriteValuePPC64_OpMod8_0(v) 320 case OpMod8u: 321 return rewriteValuePPC64_OpMod8u_0(v) 322 case OpMove: 323 return rewriteValuePPC64_OpMove_0(v) || rewriteValuePPC64_OpMove_10(v) 324 case OpMul16: 325 return rewriteValuePPC64_OpMul16_0(v) 326 case OpMul32: 327 return rewriteValuePPC64_OpMul32_0(v) 328 case OpMul32F: 329 return rewriteValuePPC64_OpMul32F_0(v) 330 case OpMul64: 331 return rewriteValuePPC64_OpMul64_0(v) 332 case OpMul64F: 333 return rewriteValuePPC64_OpMul64F_0(v) 334 case OpMul8: 335 return rewriteValuePPC64_OpMul8_0(v) 336 case OpNeg16: 337 return rewriteValuePPC64_OpNeg16_0(v) 338 case OpNeg32: 339 return rewriteValuePPC64_OpNeg32_0(v) 340 case OpNeg32F: 341 return rewriteValuePPC64_OpNeg32F_0(v) 342 case OpNeg64: 343 return rewriteValuePPC64_OpNeg64_0(v) 344 case OpNeg64F: 345 return rewriteValuePPC64_OpNeg64F_0(v) 346 case OpNeg8: 347 return rewriteValuePPC64_OpNeg8_0(v) 348 case OpNeq16: 349 return rewriteValuePPC64_OpNeq16_0(v) 350 case OpNeq32: 351 return rewriteValuePPC64_OpNeq32_0(v) 352 case OpNeq32F: 353 return rewriteValuePPC64_OpNeq32F_0(v) 354 case OpNeq64: 355 return rewriteValuePPC64_OpNeq64_0(v) 356 case OpNeq64F: 357 return rewriteValuePPC64_OpNeq64F_0(v) 358 case OpNeq8: 359 return rewriteValuePPC64_OpNeq8_0(v) 360 case OpNeqB: 361 return rewriteValuePPC64_OpNeqB_0(v) 362 case OpNeqPtr: 363 return rewriteValuePPC64_OpNeqPtr_0(v) 364 case OpNilCheck: 365 return rewriteValuePPC64_OpNilCheck_0(v) 366 case OpNot: 367 return rewriteValuePPC64_OpNot_0(v) 368 case OpOffPtr: 369 return rewriteValuePPC64_OpOffPtr_0(v) 370 case OpOr16: 371 return rewriteValuePPC64_OpOr16_0(v) 372 case OpOr32: 373 return rewriteValuePPC64_OpOr32_0(v) 374 case OpOr64: 375 return rewriteValuePPC64_OpOr64_0(v) 376 case OpOr8: 377 return rewriteValuePPC64_OpOr8_0(v) 378 case OpOrB: 379 return rewriteValuePPC64_OpOrB_0(v) 380 case OpPPC64ADD: 381 return rewriteValuePPC64_OpPPC64ADD_0(v) 382 case OpPPC64ADDconst: 383 return rewriteValuePPC64_OpPPC64ADDconst_0(v) 384 case OpPPC64AND: 385 return rewriteValuePPC64_OpPPC64AND_0(v) 386 case OpPPC64ANDconst: 387 return rewriteValuePPC64_OpPPC64ANDconst_0(v) 388 case OpPPC64CMP: 389 return rewriteValuePPC64_OpPPC64CMP_0(v) 390 case OpPPC64CMPU: 391 return rewriteValuePPC64_OpPPC64CMPU_0(v) 392 case OpPPC64CMPUconst: 393 return rewriteValuePPC64_OpPPC64CMPUconst_0(v) 394 case OpPPC64CMPW: 395 return rewriteValuePPC64_OpPPC64CMPW_0(v) 396 case OpPPC64CMPWU: 397 return rewriteValuePPC64_OpPPC64CMPWU_0(v) 398 case OpPPC64CMPWUconst: 399 return rewriteValuePPC64_OpPPC64CMPWUconst_0(v) 400 case OpPPC64CMPWconst: 401 return rewriteValuePPC64_OpPPC64CMPWconst_0(v) 402 case OpPPC64CMPconst: 403 return rewriteValuePPC64_OpPPC64CMPconst_0(v) 404 case OpPPC64Equal: 405 return rewriteValuePPC64_OpPPC64Equal_0(v) 406 case OpPPC64FABS: 407 return rewriteValuePPC64_OpPPC64FABS_0(v) 408 case OpPPC64FADD: 409 return rewriteValuePPC64_OpPPC64FADD_0(v) 410 case OpPPC64FADDS: 411 return rewriteValuePPC64_OpPPC64FADDS_0(v) 412 case OpPPC64FCEIL: 413 return rewriteValuePPC64_OpPPC64FCEIL_0(v) 414 case OpPPC64FFLOOR: 415 return rewriteValuePPC64_OpPPC64FFLOOR_0(v) 416 case OpPPC64FMOVDload: 417 return rewriteValuePPC64_OpPPC64FMOVDload_0(v) 418 case OpPPC64FMOVDstore: 419 return rewriteValuePPC64_OpPPC64FMOVDstore_0(v) 420 case OpPPC64FMOVSload: 421 return rewriteValuePPC64_OpPPC64FMOVSload_0(v) 422 case OpPPC64FMOVSstore: 423 return rewriteValuePPC64_OpPPC64FMOVSstore_0(v) 424 case OpPPC64FNEG: 425 return rewriteValuePPC64_OpPPC64FNEG_0(v) 426 case OpPPC64FSQRT: 427 return rewriteValuePPC64_OpPPC64FSQRT_0(v) 428 case OpPPC64FSUB: 429 return rewriteValuePPC64_OpPPC64FSUB_0(v) 430 case OpPPC64FSUBS: 431 return rewriteValuePPC64_OpPPC64FSUBS_0(v) 432 case OpPPC64FTRUNC: 433 return rewriteValuePPC64_OpPPC64FTRUNC_0(v) 434 case OpPPC64GreaterEqual: 435 return rewriteValuePPC64_OpPPC64GreaterEqual_0(v) 436 case OpPPC64GreaterThan: 437 return rewriteValuePPC64_OpPPC64GreaterThan_0(v) 438 case OpPPC64LessEqual: 439 return rewriteValuePPC64_OpPPC64LessEqual_0(v) 440 case OpPPC64LessThan: 441 return rewriteValuePPC64_OpPPC64LessThan_0(v) 442 case OpPPC64MFVSRD: 443 return rewriteValuePPC64_OpPPC64MFVSRD_0(v) 444 case OpPPC64MOVBZload: 445 return rewriteValuePPC64_OpPPC64MOVBZload_0(v) 446 case OpPPC64MOVBZreg: 447 return rewriteValuePPC64_OpPPC64MOVBZreg_0(v) 448 case OpPPC64MOVBreg: 449 return rewriteValuePPC64_OpPPC64MOVBreg_0(v) 450 case OpPPC64MOVBstore: 451 return rewriteValuePPC64_OpPPC64MOVBstore_0(v) 452 case OpPPC64MOVBstorezero: 453 return rewriteValuePPC64_OpPPC64MOVBstorezero_0(v) 454 case OpPPC64MOVDload: 455 return rewriteValuePPC64_OpPPC64MOVDload_0(v) 456 case OpPPC64MOVDstore: 457 return rewriteValuePPC64_OpPPC64MOVDstore_0(v) 458 case OpPPC64MOVDstorezero: 459 return rewriteValuePPC64_OpPPC64MOVDstorezero_0(v) 460 case OpPPC64MOVHZload: 461 return rewriteValuePPC64_OpPPC64MOVHZload_0(v) 462 case OpPPC64MOVHZreg: 463 return rewriteValuePPC64_OpPPC64MOVHZreg_0(v) 464 case OpPPC64MOVHload: 465 return rewriteValuePPC64_OpPPC64MOVHload_0(v) 466 case OpPPC64MOVHreg: 467 return rewriteValuePPC64_OpPPC64MOVHreg_0(v) 468 case OpPPC64MOVHstore: 469 return rewriteValuePPC64_OpPPC64MOVHstore_0(v) 470 case OpPPC64MOVHstorezero: 471 return rewriteValuePPC64_OpPPC64MOVHstorezero_0(v) 472 case OpPPC64MOVWZload: 473 return rewriteValuePPC64_OpPPC64MOVWZload_0(v) 474 case OpPPC64MOVWZreg: 475 return rewriteValuePPC64_OpPPC64MOVWZreg_0(v) 476 case OpPPC64MOVWload: 477 return rewriteValuePPC64_OpPPC64MOVWload_0(v) 478 case OpPPC64MOVWreg: 479 return rewriteValuePPC64_OpPPC64MOVWreg_0(v) 480 case OpPPC64MOVWstore: 481 return rewriteValuePPC64_OpPPC64MOVWstore_0(v) 482 case OpPPC64MOVWstorezero: 483 return rewriteValuePPC64_OpPPC64MOVWstorezero_0(v) 484 case OpPPC64MTVSRD: 485 return rewriteValuePPC64_OpPPC64MTVSRD_0(v) 486 case OpPPC64MaskIfNotCarry: 487 return rewriteValuePPC64_OpPPC64MaskIfNotCarry_0(v) 488 case OpPPC64NotEqual: 489 return rewriteValuePPC64_OpPPC64NotEqual_0(v) 490 case OpPPC64OR: 491 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) 492 case OpPPC64ORN: 493 return rewriteValuePPC64_OpPPC64ORN_0(v) 494 case OpPPC64ORconst: 495 return rewriteValuePPC64_OpPPC64ORconst_0(v) 496 case OpPPC64SUB: 497 return rewriteValuePPC64_OpPPC64SUB_0(v) 498 case OpPPC64XOR: 499 return rewriteValuePPC64_OpPPC64XOR_0(v) || rewriteValuePPC64_OpPPC64XOR_10(v) 500 case OpPPC64XORconst: 501 return rewriteValuePPC64_OpPPC64XORconst_0(v) 502 case OpPopCount16: 503 return rewriteValuePPC64_OpPopCount16_0(v) 504 case OpPopCount32: 505 return rewriteValuePPC64_OpPopCount32_0(v) 506 case OpPopCount64: 507 return rewriteValuePPC64_OpPopCount64_0(v) 508 case OpPopCount8: 509 return rewriteValuePPC64_OpPopCount8_0(v) 510 case OpRound32F: 511 return rewriteValuePPC64_OpRound32F_0(v) 512 case OpRound64F: 513 return rewriteValuePPC64_OpRound64F_0(v) 514 case OpRsh16Ux16: 515 return rewriteValuePPC64_OpRsh16Ux16_0(v) 516 case OpRsh16Ux32: 517 return rewriteValuePPC64_OpRsh16Ux32_0(v) 518 case OpRsh16Ux64: 519 return rewriteValuePPC64_OpRsh16Ux64_0(v) 520 case OpRsh16Ux8: 521 return rewriteValuePPC64_OpRsh16Ux8_0(v) 522 case OpRsh16x16: 523 return rewriteValuePPC64_OpRsh16x16_0(v) 524 case OpRsh16x32: 525 return rewriteValuePPC64_OpRsh16x32_0(v) 526 case OpRsh16x64: 527 return rewriteValuePPC64_OpRsh16x64_0(v) 528 case OpRsh16x8: 529 return rewriteValuePPC64_OpRsh16x8_0(v) 530 case OpRsh32Ux16: 531 return rewriteValuePPC64_OpRsh32Ux16_0(v) 532 case OpRsh32Ux32: 533 return rewriteValuePPC64_OpRsh32Ux32_0(v) 534 case OpRsh32Ux64: 535 return rewriteValuePPC64_OpRsh32Ux64_0(v) 536 case OpRsh32Ux8: 537 return rewriteValuePPC64_OpRsh32Ux8_0(v) 538 case OpRsh32x16: 539 return rewriteValuePPC64_OpRsh32x16_0(v) 540 case OpRsh32x32: 541 return rewriteValuePPC64_OpRsh32x32_0(v) 542 case OpRsh32x64: 543 return rewriteValuePPC64_OpRsh32x64_0(v) 544 case OpRsh32x8: 545 return rewriteValuePPC64_OpRsh32x8_0(v) 546 case OpRsh64Ux16: 547 return rewriteValuePPC64_OpRsh64Ux16_0(v) 548 case OpRsh64Ux32: 549 return rewriteValuePPC64_OpRsh64Ux32_0(v) 550 case OpRsh64Ux64: 551 return rewriteValuePPC64_OpRsh64Ux64_0(v) 552 case OpRsh64Ux8: 553 return rewriteValuePPC64_OpRsh64Ux8_0(v) 554 case OpRsh64x16: 555 return rewriteValuePPC64_OpRsh64x16_0(v) 556 case OpRsh64x32: 557 return rewriteValuePPC64_OpRsh64x32_0(v) 558 case OpRsh64x64: 559 return rewriteValuePPC64_OpRsh64x64_0(v) 560 case OpRsh64x8: 561 return rewriteValuePPC64_OpRsh64x8_0(v) 562 case OpRsh8Ux16: 563 return rewriteValuePPC64_OpRsh8Ux16_0(v) 564 case OpRsh8Ux32: 565 return rewriteValuePPC64_OpRsh8Ux32_0(v) 566 case OpRsh8Ux64: 567 return rewriteValuePPC64_OpRsh8Ux64_0(v) 568 case OpRsh8Ux8: 569 return rewriteValuePPC64_OpRsh8Ux8_0(v) 570 case OpRsh8x16: 571 return rewriteValuePPC64_OpRsh8x16_0(v) 572 case OpRsh8x32: 573 return rewriteValuePPC64_OpRsh8x32_0(v) 574 case OpRsh8x64: 575 return rewriteValuePPC64_OpRsh8x64_0(v) 576 case OpRsh8x8: 577 return rewriteValuePPC64_OpRsh8x8_0(v) 578 case OpSignExt16to32: 579 return rewriteValuePPC64_OpSignExt16to32_0(v) 580 case OpSignExt16to64: 581 return rewriteValuePPC64_OpSignExt16to64_0(v) 582 case OpSignExt32to64: 583 return rewriteValuePPC64_OpSignExt32to64_0(v) 584 case OpSignExt8to16: 585 return rewriteValuePPC64_OpSignExt8to16_0(v) 586 case OpSignExt8to32: 587 return rewriteValuePPC64_OpSignExt8to32_0(v) 588 case OpSignExt8to64: 589 return rewriteValuePPC64_OpSignExt8to64_0(v) 590 case OpSlicemask: 591 return rewriteValuePPC64_OpSlicemask_0(v) 592 case OpSqrt: 593 return rewriteValuePPC64_OpSqrt_0(v) 594 case OpStaticCall: 595 return rewriteValuePPC64_OpStaticCall_0(v) 596 case OpStore: 597 return rewriteValuePPC64_OpStore_0(v) 598 case OpSub16: 599 return rewriteValuePPC64_OpSub16_0(v) 600 case OpSub32: 601 return rewriteValuePPC64_OpSub32_0(v) 602 case OpSub32F: 603 return rewriteValuePPC64_OpSub32F_0(v) 604 case OpSub64: 605 return rewriteValuePPC64_OpSub64_0(v) 606 case OpSub64F: 607 return rewriteValuePPC64_OpSub64F_0(v) 608 case OpSub8: 609 return rewriteValuePPC64_OpSub8_0(v) 610 case OpSubPtr: 611 return rewriteValuePPC64_OpSubPtr_0(v) 612 case OpTrunc: 613 return rewriteValuePPC64_OpTrunc_0(v) 614 case OpTrunc16to8: 615 return rewriteValuePPC64_OpTrunc16to8_0(v) 616 case OpTrunc32to16: 617 return rewriteValuePPC64_OpTrunc32to16_0(v) 618 case OpTrunc32to8: 619 return rewriteValuePPC64_OpTrunc32to8_0(v) 620 case OpTrunc64to16: 621 return rewriteValuePPC64_OpTrunc64to16_0(v) 622 case OpTrunc64to32: 623 return rewriteValuePPC64_OpTrunc64to32_0(v) 624 case OpTrunc64to8: 625 return rewriteValuePPC64_OpTrunc64to8_0(v) 626 case OpXor16: 627 return rewriteValuePPC64_OpXor16_0(v) 628 case OpXor32: 629 return rewriteValuePPC64_OpXor32_0(v) 630 case OpXor64: 631 return rewriteValuePPC64_OpXor64_0(v) 632 case OpXor8: 633 return rewriteValuePPC64_OpXor8_0(v) 634 case OpZero: 635 return rewriteValuePPC64_OpZero_0(v) || rewriteValuePPC64_OpZero_10(v) 636 case OpZeroExt16to32: 637 return rewriteValuePPC64_OpZeroExt16to32_0(v) 638 case OpZeroExt16to64: 639 return rewriteValuePPC64_OpZeroExt16to64_0(v) 640 case OpZeroExt32to64: 641 return rewriteValuePPC64_OpZeroExt32to64_0(v) 642 case OpZeroExt8to16: 643 return rewriteValuePPC64_OpZeroExt8to16_0(v) 644 case OpZeroExt8to32: 645 return rewriteValuePPC64_OpZeroExt8to32_0(v) 646 case OpZeroExt8to64: 647 return rewriteValuePPC64_OpZeroExt8to64_0(v) 648 } 649 return false 650 } 651 func rewriteValuePPC64_OpAbs_0(v *Value) bool { 652 // match: (Abs x) 653 // cond: 654 // result: (FABS x) 655 for { 656 x := v.Args[0] 657 v.reset(OpPPC64FABS) 658 v.AddArg(x) 659 return true 660 } 661 } 662 func rewriteValuePPC64_OpAdd16_0(v *Value) bool { 663 // match: (Add16 x y) 664 // cond: 665 // result: (ADD x y) 666 for { 667 _ = v.Args[1] 668 x := v.Args[0] 669 y := v.Args[1] 670 v.reset(OpPPC64ADD) 671 v.AddArg(x) 672 v.AddArg(y) 673 return true 674 } 675 } 676 func rewriteValuePPC64_OpAdd32_0(v *Value) bool { 677 // match: (Add32 x y) 678 // cond: 679 // result: (ADD x y) 680 for { 681 _ = v.Args[1] 682 x := v.Args[0] 683 y := v.Args[1] 684 v.reset(OpPPC64ADD) 685 v.AddArg(x) 686 v.AddArg(y) 687 return true 688 } 689 } 690 func rewriteValuePPC64_OpAdd32F_0(v *Value) bool { 691 // match: (Add32F x y) 692 // cond: 693 // result: (FADDS x y) 694 for { 695 _ = v.Args[1] 696 x := v.Args[0] 697 y := v.Args[1] 698 v.reset(OpPPC64FADDS) 699 v.AddArg(x) 700 v.AddArg(y) 701 return true 702 } 703 } 704 func rewriteValuePPC64_OpAdd64_0(v *Value) bool { 705 // match: (Add64 x y) 706 // cond: 707 // result: (ADD x y) 708 for { 709 _ = v.Args[1] 710 x := v.Args[0] 711 y := v.Args[1] 712 v.reset(OpPPC64ADD) 713 v.AddArg(x) 714 v.AddArg(y) 715 return true 716 } 717 } 718 func rewriteValuePPC64_OpAdd64F_0(v *Value) bool { 719 // match: (Add64F x y) 720 // cond: 721 // result: (FADD x y) 722 for { 723 _ = v.Args[1] 724 x := v.Args[0] 725 y := v.Args[1] 726 v.reset(OpPPC64FADD) 727 v.AddArg(x) 728 v.AddArg(y) 729 return true 730 } 731 } 732 func rewriteValuePPC64_OpAdd8_0(v *Value) bool { 733 // match: (Add8 x y) 734 // cond: 735 // result: (ADD x y) 736 for { 737 _ = v.Args[1] 738 x := v.Args[0] 739 y := v.Args[1] 740 v.reset(OpPPC64ADD) 741 v.AddArg(x) 742 v.AddArg(y) 743 return true 744 } 745 } 746 func rewriteValuePPC64_OpAddPtr_0(v *Value) bool { 747 // match: (AddPtr x y) 748 // cond: 749 // result: (ADD x y) 750 for { 751 _ = v.Args[1] 752 x := v.Args[0] 753 y := v.Args[1] 754 v.reset(OpPPC64ADD) 755 v.AddArg(x) 756 v.AddArg(y) 757 return true 758 } 759 } 760 func rewriteValuePPC64_OpAddr_0(v *Value) bool { 761 // match: (Addr {sym} base) 762 // cond: 763 // result: (MOVDaddr {sym} base) 764 for { 765 sym := v.Aux 766 base := v.Args[0] 767 v.reset(OpPPC64MOVDaddr) 768 v.Aux = sym 769 v.AddArg(base) 770 return true 771 } 772 } 773 func rewriteValuePPC64_OpAnd16_0(v *Value) bool { 774 // match: (And16 x y) 775 // cond: 776 // result: (AND x y) 777 for { 778 _ = v.Args[1] 779 x := v.Args[0] 780 y := v.Args[1] 781 v.reset(OpPPC64AND) 782 v.AddArg(x) 783 v.AddArg(y) 784 return true 785 } 786 } 787 func rewriteValuePPC64_OpAnd32_0(v *Value) bool { 788 // match: (And32 x y) 789 // cond: 790 // result: (AND x y) 791 for { 792 _ = v.Args[1] 793 x := v.Args[0] 794 y := v.Args[1] 795 v.reset(OpPPC64AND) 796 v.AddArg(x) 797 v.AddArg(y) 798 return true 799 } 800 } 801 func rewriteValuePPC64_OpAnd64_0(v *Value) bool { 802 // match: (And64 x y) 803 // cond: 804 // result: (AND x y) 805 for { 806 _ = v.Args[1] 807 x := v.Args[0] 808 y := v.Args[1] 809 v.reset(OpPPC64AND) 810 v.AddArg(x) 811 v.AddArg(y) 812 return true 813 } 814 } 815 func rewriteValuePPC64_OpAnd8_0(v *Value) bool { 816 // match: (And8 x y) 817 // cond: 818 // result: (AND x y) 819 for { 820 _ = v.Args[1] 821 x := v.Args[0] 822 y := v.Args[1] 823 v.reset(OpPPC64AND) 824 v.AddArg(x) 825 v.AddArg(y) 826 return true 827 } 828 } 829 func rewriteValuePPC64_OpAndB_0(v *Value) bool { 830 // match: (AndB x y) 831 // cond: 832 // result: (AND x y) 833 for { 834 _ = v.Args[1] 835 x := v.Args[0] 836 y := v.Args[1] 837 v.reset(OpPPC64AND) 838 v.AddArg(x) 839 v.AddArg(y) 840 return true 841 } 842 } 843 func rewriteValuePPC64_OpAtomicAdd32_0(v *Value) bool { 844 // match: (AtomicAdd32 ptr val mem) 845 // cond: 846 // result: (LoweredAtomicAdd32 ptr val mem) 847 for { 848 _ = v.Args[2] 849 ptr := v.Args[0] 850 val := v.Args[1] 851 mem := v.Args[2] 852 v.reset(OpPPC64LoweredAtomicAdd32) 853 v.AddArg(ptr) 854 v.AddArg(val) 855 v.AddArg(mem) 856 return true 857 } 858 } 859 func rewriteValuePPC64_OpAtomicAdd64_0(v *Value) bool { 860 // match: (AtomicAdd64 ptr val mem) 861 // cond: 862 // result: (LoweredAtomicAdd64 ptr val mem) 863 for { 864 _ = v.Args[2] 865 ptr := v.Args[0] 866 val := v.Args[1] 867 mem := v.Args[2] 868 v.reset(OpPPC64LoweredAtomicAdd64) 869 v.AddArg(ptr) 870 v.AddArg(val) 871 v.AddArg(mem) 872 return true 873 } 874 } 875 func rewriteValuePPC64_OpAtomicAnd8_0(v *Value) bool { 876 // match: (AtomicAnd8 ptr val mem) 877 // cond: 878 // result: (LoweredAtomicAnd8 ptr val mem) 879 for { 880 _ = v.Args[2] 881 ptr := v.Args[0] 882 val := v.Args[1] 883 mem := v.Args[2] 884 v.reset(OpPPC64LoweredAtomicAnd8) 885 v.AddArg(ptr) 886 v.AddArg(val) 887 v.AddArg(mem) 888 return true 889 } 890 } 891 func rewriteValuePPC64_OpAtomicCompareAndSwap32_0(v *Value) bool { 892 // match: (AtomicCompareAndSwap32 ptr old new_ mem) 893 // cond: 894 // result: (LoweredAtomicCas32 ptr old new_ mem) 895 for { 896 _ = v.Args[3] 897 ptr := v.Args[0] 898 old := v.Args[1] 899 new_ := v.Args[2] 900 mem := v.Args[3] 901 v.reset(OpPPC64LoweredAtomicCas32) 902 v.AddArg(ptr) 903 v.AddArg(old) 904 v.AddArg(new_) 905 v.AddArg(mem) 906 return true 907 } 908 } 909 func rewriteValuePPC64_OpAtomicCompareAndSwap64_0(v *Value) bool { 910 // match: (AtomicCompareAndSwap64 ptr old new_ mem) 911 // cond: 912 // result: (LoweredAtomicCas64 ptr old new_ mem) 913 for { 914 _ = v.Args[3] 915 ptr := v.Args[0] 916 old := v.Args[1] 917 new_ := v.Args[2] 918 mem := v.Args[3] 919 v.reset(OpPPC64LoweredAtomicCas64) 920 v.AddArg(ptr) 921 v.AddArg(old) 922 v.AddArg(new_) 923 v.AddArg(mem) 924 return true 925 } 926 } 927 func rewriteValuePPC64_OpAtomicExchange32_0(v *Value) bool { 928 // match: (AtomicExchange32 ptr val mem) 929 // cond: 930 // result: (LoweredAtomicExchange32 ptr val mem) 931 for { 932 _ = v.Args[2] 933 ptr := v.Args[0] 934 val := v.Args[1] 935 mem := v.Args[2] 936 v.reset(OpPPC64LoweredAtomicExchange32) 937 v.AddArg(ptr) 938 v.AddArg(val) 939 v.AddArg(mem) 940 return true 941 } 942 } 943 func rewriteValuePPC64_OpAtomicExchange64_0(v *Value) bool { 944 // match: (AtomicExchange64 ptr val mem) 945 // cond: 946 // result: (LoweredAtomicExchange64 ptr val mem) 947 for { 948 _ = v.Args[2] 949 ptr := v.Args[0] 950 val := v.Args[1] 951 mem := v.Args[2] 952 v.reset(OpPPC64LoweredAtomicExchange64) 953 v.AddArg(ptr) 954 v.AddArg(val) 955 v.AddArg(mem) 956 return true 957 } 958 } 959 func rewriteValuePPC64_OpAtomicLoad32_0(v *Value) bool { 960 // match: (AtomicLoad32 ptr mem) 961 // cond: 962 // result: (LoweredAtomicLoad32 ptr mem) 963 for { 964 _ = v.Args[1] 965 ptr := v.Args[0] 966 mem := v.Args[1] 967 v.reset(OpPPC64LoweredAtomicLoad32) 968 v.AddArg(ptr) 969 v.AddArg(mem) 970 return true 971 } 972 } 973 func rewriteValuePPC64_OpAtomicLoad64_0(v *Value) bool { 974 // match: (AtomicLoad64 ptr mem) 975 // cond: 976 // result: (LoweredAtomicLoad64 ptr mem) 977 for { 978 _ = v.Args[1] 979 ptr := v.Args[0] 980 mem := v.Args[1] 981 v.reset(OpPPC64LoweredAtomicLoad64) 982 v.AddArg(ptr) 983 v.AddArg(mem) 984 return true 985 } 986 } 987 func rewriteValuePPC64_OpAtomicLoadPtr_0(v *Value) bool { 988 // match: (AtomicLoadPtr ptr mem) 989 // cond: 990 // result: (LoweredAtomicLoadPtr ptr mem) 991 for { 992 _ = v.Args[1] 993 ptr := v.Args[0] 994 mem := v.Args[1] 995 v.reset(OpPPC64LoweredAtomicLoadPtr) 996 v.AddArg(ptr) 997 v.AddArg(mem) 998 return true 999 } 1000 } 1001 func rewriteValuePPC64_OpAtomicOr8_0(v *Value) bool { 1002 // match: (AtomicOr8 ptr val mem) 1003 // cond: 1004 // result: (LoweredAtomicOr8 ptr val mem) 1005 for { 1006 _ = v.Args[2] 1007 ptr := v.Args[0] 1008 val := v.Args[1] 1009 mem := v.Args[2] 1010 v.reset(OpPPC64LoweredAtomicOr8) 1011 v.AddArg(ptr) 1012 v.AddArg(val) 1013 v.AddArg(mem) 1014 return true 1015 } 1016 } 1017 func rewriteValuePPC64_OpAtomicStore32_0(v *Value) bool { 1018 // match: (AtomicStore32 ptr val mem) 1019 // cond: 1020 // result: (LoweredAtomicStore32 ptr val mem) 1021 for { 1022 _ = v.Args[2] 1023 ptr := v.Args[0] 1024 val := v.Args[1] 1025 mem := v.Args[2] 1026 v.reset(OpPPC64LoweredAtomicStore32) 1027 v.AddArg(ptr) 1028 v.AddArg(val) 1029 v.AddArg(mem) 1030 return true 1031 } 1032 } 1033 func rewriteValuePPC64_OpAtomicStore64_0(v *Value) bool { 1034 // match: (AtomicStore64 ptr val mem) 1035 // cond: 1036 // result: (LoweredAtomicStore64 ptr val mem) 1037 for { 1038 _ = v.Args[2] 1039 ptr := v.Args[0] 1040 val := v.Args[1] 1041 mem := v.Args[2] 1042 v.reset(OpPPC64LoweredAtomicStore64) 1043 v.AddArg(ptr) 1044 v.AddArg(val) 1045 v.AddArg(mem) 1046 return true 1047 } 1048 } 1049 func rewriteValuePPC64_OpAvg64u_0(v *Value) bool { 1050 b := v.Block 1051 _ = b 1052 // match: (Avg64u <t> x y) 1053 // cond: 1054 // result: (ADD (SRDconst <t> (SUB <t> x y) [1]) y) 1055 for { 1056 t := v.Type 1057 _ = v.Args[1] 1058 x := v.Args[0] 1059 y := v.Args[1] 1060 v.reset(OpPPC64ADD) 1061 v0 := b.NewValue0(v.Pos, OpPPC64SRDconst, t) 1062 v0.AuxInt = 1 1063 v1 := b.NewValue0(v.Pos, OpPPC64SUB, t) 1064 v1.AddArg(x) 1065 v1.AddArg(y) 1066 v0.AddArg(v1) 1067 v.AddArg(v0) 1068 v.AddArg(y) 1069 return true 1070 } 1071 } 1072 func rewriteValuePPC64_OpBitLen32_0(v *Value) bool { 1073 b := v.Block 1074 _ = b 1075 typ := &b.Func.Config.Types 1076 _ = typ 1077 // match: (BitLen32 x) 1078 // cond: 1079 // result: (SUB (MOVDconst [32]) (CNTLZW <typ.Int> x)) 1080 for { 1081 x := v.Args[0] 1082 v.reset(OpPPC64SUB) 1083 v0 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 1084 v0.AuxInt = 32 1085 v.AddArg(v0) 1086 v1 := b.NewValue0(v.Pos, OpPPC64CNTLZW, typ.Int) 1087 v1.AddArg(x) 1088 v.AddArg(v1) 1089 return true 1090 } 1091 } 1092 func rewriteValuePPC64_OpBitLen64_0(v *Value) bool { 1093 b := v.Block 1094 _ = b 1095 typ := &b.Func.Config.Types 1096 _ = typ 1097 // match: (BitLen64 x) 1098 // cond: 1099 // result: (SUB (MOVDconst [64]) (CNTLZD <typ.Int> x)) 1100 for { 1101 x := v.Args[0] 1102 v.reset(OpPPC64SUB) 1103 v0 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 1104 v0.AuxInt = 64 1105 v.AddArg(v0) 1106 v1 := b.NewValue0(v.Pos, OpPPC64CNTLZD, typ.Int) 1107 v1.AddArg(x) 1108 v.AddArg(v1) 1109 return true 1110 } 1111 } 1112 func rewriteValuePPC64_OpCeil_0(v *Value) bool { 1113 // match: (Ceil x) 1114 // cond: 1115 // result: (FCEIL x) 1116 for { 1117 x := v.Args[0] 1118 v.reset(OpPPC64FCEIL) 1119 v.AddArg(x) 1120 return true 1121 } 1122 } 1123 func rewriteValuePPC64_OpClosureCall_0(v *Value) bool { 1124 // match: (ClosureCall [argwid] entry closure mem) 1125 // cond: 1126 // result: (CALLclosure [argwid] entry closure mem) 1127 for { 1128 argwid := v.AuxInt 1129 _ = v.Args[2] 1130 entry := v.Args[0] 1131 closure := v.Args[1] 1132 mem := v.Args[2] 1133 v.reset(OpPPC64CALLclosure) 1134 v.AuxInt = argwid 1135 v.AddArg(entry) 1136 v.AddArg(closure) 1137 v.AddArg(mem) 1138 return true 1139 } 1140 } 1141 func rewriteValuePPC64_OpCom16_0(v *Value) bool { 1142 // match: (Com16 x) 1143 // cond: 1144 // result: (NOR x x) 1145 for { 1146 x := v.Args[0] 1147 v.reset(OpPPC64NOR) 1148 v.AddArg(x) 1149 v.AddArg(x) 1150 return true 1151 } 1152 } 1153 func rewriteValuePPC64_OpCom32_0(v *Value) bool { 1154 // match: (Com32 x) 1155 // cond: 1156 // result: (NOR x x) 1157 for { 1158 x := v.Args[0] 1159 v.reset(OpPPC64NOR) 1160 v.AddArg(x) 1161 v.AddArg(x) 1162 return true 1163 } 1164 } 1165 func rewriteValuePPC64_OpCom64_0(v *Value) bool { 1166 // match: (Com64 x) 1167 // cond: 1168 // result: (NOR x x) 1169 for { 1170 x := v.Args[0] 1171 v.reset(OpPPC64NOR) 1172 v.AddArg(x) 1173 v.AddArg(x) 1174 return true 1175 } 1176 } 1177 func rewriteValuePPC64_OpCom8_0(v *Value) bool { 1178 // match: (Com8 x) 1179 // cond: 1180 // result: (NOR x x) 1181 for { 1182 x := v.Args[0] 1183 v.reset(OpPPC64NOR) 1184 v.AddArg(x) 1185 v.AddArg(x) 1186 return true 1187 } 1188 } 1189 func rewriteValuePPC64_OpConst16_0(v *Value) bool { 1190 // match: (Const16 [val]) 1191 // cond: 1192 // result: (MOVDconst [val]) 1193 for { 1194 val := v.AuxInt 1195 v.reset(OpPPC64MOVDconst) 1196 v.AuxInt = val 1197 return true 1198 } 1199 } 1200 func rewriteValuePPC64_OpConst32_0(v *Value) bool { 1201 // match: (Const32 [val]) 1202 // cond: 1203 // result: (MOVDconst [val]) 1204 for { 1205 val := v.AuxInt 1206 v.reset(OpPPC64MOVDconst) 1207 v.AuxInt = val 1208 return true 1209 } 1210 } 1211 func rewriteValuePPC64_OpConst32F_0(v *Value) bool { 1212 // match: (Const32F [val]) 1213 // cond: 1214 // result: (FMOVSconst [val]) 1215 for { 1216 val := v.AuxInt 1217 v.reset(OpPPC64FMOVSconst) 1218 v.AuxInt = val 1219 return true 1220 } 1221 } 1222 func rewriteValuePPC64_OpConst64_0(v *Value) bool { 1223 // match: (Const64 [val]) 1224 // cond: 1225 // result: (MOVDconst [val]) 1226 for { 1227 val := v.AuxInt 1228 v.reset(OpPPC64MOVDconst) 1229 v.AuxInt = val 1230 return true 1231 } 1232 } 1233 func rewriteValuePPC64_OpConst64F_0(v *Value) bool { 1234 // match: (Const64F [val]) 1235 // cond: 1236 // result: (FMOVDconst [val]) 1237 for { 1238 val := v.AuxInt 1239 v.reset(OpPPC64FMOVDconst) 1240 v.AuxInt = val 1241 return true 1242 } 1243 } 1244 func rewriteValuePPC64_OpConst8_0(v *Value) bool { 1245 // match: (Const8 [val]) 1246 // cond: 1247 // result: (MOVDconst [val]) 1248 for { 1249 val := v.AuxInt 1250 v.reset(OpPPC64MOVDconst) 1251 v.AuxInt = val 1252 return true 1253 } 1254 } 1255 func rewriteValuePPC64_OpConstBool_0(v *Value) bool { 1256 // match: (ConstBool [b]) 1257 // cond: 1258 // result: (MOVDconst [b]) 1259 for { 1260 b := v.AuxInt 1261 v.reset(OpPPC64MOVDconst) 1262 v.AuxInt = b 1263 return true 1264 } 1265 } 1266 func rewriteValuePPC64_OpConstNil_0(v *Value) bool { 1267 // match: (ConstNil) 1268 // cond: 1269 // result: (MOVDconst [0]) 1270 for { 1271 v.reset(OpPPC64MOVDconst) 1272 v.AuxInt = 0 1273 return true 1274 } 1275 } 1276 func rewriteValuePPC64_OpConvert_0(v *Value) bool { 1277 // match: (Convert <t> x mem) 1278 // cond: 1279 // result: (MOVDconvert <t> x mem) 1280 for { 1281 t := v.Type 1282 _ = v.Args[1] 1283 x := v.Args[0] 1284 mem := v.Args[1] 1285 v.reset(OpPPC64MOVDconvert) 1286 v.Type = t 1287 v.AddArg(x) 1288 v.AddArg(mem) 1289 return true 1290 } 1291 } 1292 func rewriteValuePPC64_OpCopysign_0(v *Value) bool { 1293 // match: (Copysign x y) 1294 // cond: 1295 // result: (FCPSGN y x) 1296 for { 1297 _ = v.Args[1] 1298 x := v.Args[0] 1299 y := v.Args[1] 1300 v.reset(OpPPC64FCPSGN) 1301 v.AddArg(y) 1302 v.AddArg(x) 1303 return true 1304 } 1305 } 1306 func rewriteValuePPC64_OpCtz32_0(v *Value) bool { 1307 b := v.Block 1308 _ = b 1309 typ := &b.Func.Config.Types 1310 _ = typ 1311 // match: (Ctz32 x) 1312 // cond: 1313 // result: (POPCNTW (MOVWZreg (ANDN <typ.Int> (ADDconst <typ.Int> [-1] x) x))) 1314 for { 1315 x := v.Args[0] 1316 v.reset(OpPPC64POPCNTW) 1317 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZreg, typ.Int64) 1318 v1 := b.NewValue0(v.Pos, OpPPC64ANDN, typ.Int) 1319 v2 := b.NewValue0(v.Pos, OpPPC64ADDconst, typ.Int) 1320 v2.AuxInt = -1 1321 v2.AddArg(x) 1322 v1.AddArg(v2) 1323 v1.AddArg(x) 1324 v0.AddArg(v1) 1325 v.AddArg(v0) 1326 return true 1327 } 1328 } 1329 func rewriteValuePPC64_OpCtz64_0(v *Value) bool { 1330 b := v.Block 1331 _ = b 1332 typ := &b.Func.Config.Types 1333 _ = typ 1334 // match: (Ctz64 x) 1335 // cond: 1336 // result: (POPCNTD (ANDN <typ.Int64> (ADDconst <typ.Int64> [-1] x) x)) 1337 for { 1338 x := v.Args[0] 1339 v.reset(OpPPC64POPCNTD) 1340 v0 := b.NewValue0(v.Pos, OpPPC64ANDN, typ.Int64) 1341 v1 := b.NewValue0(v.Pos, OpPPC64ADDconst, typ.Int64) 1342 v1.AuxInt = -1 1343 v1.AddArg(x) 1344 v0.AddArg(v1) 1345 v0.AddArg(x) 1346 v.AddArg(v0) 1347 return true 1348 } 1349 } 1350 func rewriteValuePPC64_OpCvt32Fto32_0(v *Value) bool { 1351 b := v.Block 1352 _ = b 1353 typ := &b.Func.Config.Types 1354 _ = typ 1355 // match: (Cvt32Fto32 x) 1356 // cond: 1357 // result: (MFVSRD (FCTIWZ x)) 1358 for { 1359 x := v.Args[0] 1360 v.reset(OpPPC64MFVSRD) 1361 v0 := b.NewValue0(v.Pos, OpPPC64FCTIWZ, typ.Float64) 1362 v0.AddArg(x) 1363 v.AddArg(v0) 1364 return true 1365 } 1366 } 1367 func rewriteValuePPC64_OpCvt32Fto64_0(v *Value) bool { 1368 b := v.Block 1369 _ = b 1370 typ := &b.Func.Config.Types 1371 _ = typ 1372 // match: (Cvt32Fto64 x) 1373 // cond: 1374 // result: (MFVSRD (FCTIDZ x)) 1375 for { 1376 x := v.Args[0] 1377 v.reset(OpPPC64MFVSRD) 1378 v0 := b.NewValue0(v.Pos, OpPPC64FCTIDZ, typ.Float64) 1379 v0.AddArg(x) 1380 v.AddArg(v0) 1381 return true 1382 } 1383 } 1384 func rewriteValuePPC64_OpCvt32Fto64F_0(v *Value) bool { 1385 // match: (Cvt32Fto64F x) 1386 // cond: 1387 // result: x 1388 for { 1389 x := v.Args[0] 1390 v.reset(OpCopy) 1391 v.Type = x.Type 1392 v.AddArg(x) 1393 return true 1394 } 1395 } 1396 func rewriteValuePPC64_OpCvt32to32F_0(v *Value) bool { 1397 b := v.Block 1398 _ = b 1399 typ := &b.Func.Config.Types 1400 _ = typ 1401 // match: (Cvt32to32F x) 1402 // cond: 1403 // result: (FCFIDS (MTVSRD (SignExt32to64 x))) 1404 for { 1405 x := v.Args[0] 1406 v.reset(OpPPC64FCFIDS) 1407 v0 := b.NewValue0(v.Pos, OpPPC64MTVSRD, typ.Float64) 1408 v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) 1409 v1.AddArg(x) 1410 v0.AddArg(v1) 1411 v.AddArg(v0) 1412 return true 1413 } 1414 } 1415 func rewriteValuePPC64_OpCvt32to64F_0(v *Value) bool { 1416 b := v.Block 1417 _ = b 1418 typ := &b.Func.Config.Types 1419 _ = typ 1420 // match: (Cvt32to64F x) 1421 // cond: 1422 // result: (FCFID (MTVSRD (SignExt32to64 x))) 1423 for { 1424 x := v.Args[0] 1425 v.reset(OpPPC64FCFID) 1426 v0 := b.NewValue0(v.Pos, OpPPC64MTVSRD, typ.Float64) 1427 v1 := b.NewValue0(v.Pos, OpSignExt32to64, typ.Int64) 1428 v1.AddArg(x) 1429 v0.AddArg(v1) 1430 v.AddArg(v0) 1431 return true 1432 } 1433 } 1434 func rewriteValuePPC64_OpCvt64Fto32_0(v *Value) bool { 1435 b := v.Block 1436 _ = b 1437 typ := &b.Func.Config.Types 1438 _ = typ 1439 // match: (Cvt64Fto32 x) 1440 // cond: 1441 // result: (MFVSRD (FCTIWZ x)) 1442 for { 1443 x := v.Args[0] 1444 v.reset(OpPPC64MFVSRD) 1445 v0 := b.NewValue0(v.Pos, OpPPC64FCTIWZ, typ.Float64) 1446 v0.AddArg(x) 1447 v.AddArg(v0) 1448 return true 1449 } 1450 } 1451 func rewriteValuePPC64_OpCvt64Fto32F_0(v *Value) bool { 1452 // match: (Cvt64Fto32F x) 1453 // cond: 1454 // result: (FRSP x) 1455 for { 1456 x := v.Args[0] 1457 v.reset(OpPPC64FRSP) 1458 v.AddArg(x) 1459 return true 1460 } 1461 } 1462 func rewriteValuePPC64_OpCvt64Fto64_0(v *Value) bool { 1463 b := v.Block 1464 _ = b 1465 typ := &b.Func.Config.Types 1466 _ = typ 1467 // match: (Cvt64Fto64 x) 1468 // cond: 1469 // result: (MFVSRD (FCTIDZ x)) 1470 for { 1471 x := v.Args[0] 1472 v.reset(OpPPC64MFVSRD) 1473 v0 := b.NewValue0(v.Pos, OpPPC64FCTIDZ, typ.Float64) 1474 v0.AddArg(x) 1475 v.AddArg(v0) 1476 return true 1477 } 1478 } 1479 func rewriteValuePPC64_OpCvt64to32F_0(v *Value) bool { 1480 b := v.Block 1481 _ = b 1482 typ := &b.Func.Config.Types 1483 _ = typ 1484 // match: (Cvt64to32F x) 1485 // cond: 1486 // result: (FCFIDS (MTVSRD x)) 1487 for { 1488 x := v.Args[0] 1489 v.reset(OpPPC64FCFIDS) 1490 v0 := b.NewValue0(v.Pos, OpPPC64MTVSRD, typ.Float64) 1491 v0.AddArg(x) 1492 v.AddArg(v0) 1493 return true 1494 } 1495 } 1496 func rewriteValuePPC64_OpCvt64to64F_0(v *Value) bool { 1497 b := v.Block 1498 _ = b 1499 typ := &b.Func.Config.Types 1500 _ = typ 1501 // match: (Cvt64to64F x) 1502 // cond: 1503 // result: (FCFID (MTVSRD x)) 1504 for { 1505 x := v.Args[0] 1506 v.reset(OpPPC64FCFID) 1507 v0 := b.NewValue0(v.Pos, OpPPC64MTVSRD, typ.Float64) 1508 v0.AddArg(x) 1509 v.AddArg(v0) 1510 return true 1511 } 1512 } 1513 func rewriteValuePPC64_OpDiv16_0(v *Value) bool { 1514 b := v.Block 1515 _ = b 1516 typ := &b.Func.Config.Types 1517 _ = typ 1518 // match: (Div16 x y) 1519 // cond: 1520 // result: (DIVW (SignExt16to32 x) (SignExt16to32 y)) 1521 for { 1522 _ = v.Args[1] 1523 x := v.Args[0] 1524 y := v.Args[1] 1525 v.reset(OpPPC64DIVW) 1526 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 1527 v0.AddArg(x) 1528 v.AddArg(v0) 1529 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 1530 v1.AddArg(y) 1531 v.AddArg(v1) 1532 return true 1533 } 1534 } 1535 func rewriteValuePPC64_OpDiv16u_0(v *Value) bool { 1536 b := v.Block 1537 _ = b 1538 typ := &b.Func.Config.Types 1539 _ = typ 1540 // match: (Div16u x y) 1541 // cond: 1542 // result: (DIVWU (ZeroExt16to32 x) (ZeroExt16to32 y)) 1543 for { 1544 _ = v.Args[1] 1545 x := v.Args[0] 1546 y := v.Args[1] 1547 v.reset(OpPPC64DIVWU) 1548 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 1549 v0.AddArg(x) 1550 v.AddArg(v0) 1551 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 1552 v1.AddArg(y) 1553 v.AddArg(v1) 1554 return true 1555 } 1556 } 1557 func rewriteValuePPC64_OpDiv32_0(v *Value) bool { 1558 // match: (Div32 x y) 1559 // cond: 1560 // result: (DIVW x y) 1561 for { 1562 _ = v.Args[1] 1563 x := v.Args[0] 1564 y := v.Args[1] 1565 v.reset(OpPPC64DIVW) 1566 v.AddArg(x) 1567 v.AddArg(y) 1568 return true 1569 } 1570 } 1571 func rewriteValuePPC64_OpDiv32F_0(v *Value) bool { 1572 // match: (Div32F x y) 1573 // cond: 1574 // result: (FDIVS x y) 1575 for { 1576 _ = v.Args[1] 1577 x := v.Args[0] 1578 y := v.Args[1] 1579 v.reset(OpPPC64FDIVS) 1580 v.AddArg(x) 1581 v.AddArg(y) 1582 return true 1583 } 1584 } 1585 func rewriteValuePPC64_OpDiv32u_0(v *Value) bool { 1586 // match: (Div32u x y) 1587 // cond: 1588 // result: (DIVWU x y) 1589 for { 1590 _ = v.Args[1] 1591 x := v.Args[0] 1592 y := v.Args[1] 1593 v.reset(OpPPC64DIVWU) 1594 v.AddArg(x) 1595 v.AddArg(y) 1596 return true 1597 } 1598 } 1599 func rewriteValuePPC64_OpDiv64_0(v *Value) bool { 1600 // match: (Div64 x y) 1601 // cond: 1602 // result: (DIVD x y) 1603 for { 1604 _ = v.Args[1] 1605 x := v.Args[0] 1606 y := v.Args[1] 1607 v.reset(OpPPC64DIVD) 1608 v.AddArg(x) 1609 v.AddArg(y) 1610 return true 1611 } 1612 } 1613 func rewriteValuePPC64_OpDiv64F_0(v *Value) bool { 1614 // match: (Div64F x y) 1615 // cond: 1616 // result: (FDIV x y) 1617 for { 1618 _ = v.Args[1] 1619 x := v.Args[0] 1620 y := v.Args[1] 1621 v.reset(OpPPC64FDIV) 1622 v.AddArg(x) 1623 v.AddArg(y) 1624 return true 1625 } 1626 } 1627 func rewriteValuePPC64_OpDiv64u_0(v *Value) bool { 1628 // match: (Div64u x y) 1629 // cond: 1630 // result: (DIVDU x y) 1631 for { 1632 _ = v.Args[1] 1633 x := v.Args[0] 1634 y := v.Args[1] 1635 v.reset(OpPPC64DIVDU) 1636 v.AddArg(x) 1637 v.AddArg(y) 1638 return true 1639 } 1640 } 1641 func rewriteValuePPC64_OpDiv8_0(v *Value) bool { 1642 b := v.Block 1643 _ = b 1644 typ := &b.Func.Config.Types 1645 _ = typ 1646 // match: (Div8 x y) 1647 // cond: 1648 // result: (DIVW (SignExt8to32 x) (SignExt8to32 y)) 1649 for { 1650 _ = v.Args[1] 1651 x := v.Args[0] 1652 y := v.Args[1] 1653 v.reset(OpPPC64DIVW) 1654 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 1655 v0.AddArg(x) 1656 v.AddArg(v0) 1657 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 1658 v1.AddArg(y) 1659 v.AddArg(v1) 1660 return true 1661 } 1662 } 1663 func rewriteValuePPC64_OpDiv8u_0(v *Value) bool { 1664 b := v.Block 1665 _ = b 1666 typ := &b.Func.Config.Types 1667 _ = typ 1668 // match: (Div8u x y) 1669 // cond: 1670 // result: (DIVWU (ZeroExt8to32 x) (ZeroExt8to32 y)) 1671 for { 1672 _ = v.Args[1] 1673 x := v.Args[0] 1674 y := v.Args[1] 1675 v.reset(OpPPC64DIVWU) 1676 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 1677 v0.AddArg(x) 1678 v.AddArg(v0) 1679 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 1680 v1.AddArg(y) 1681 v.AddArg(v1) 1682 return true 1683 } 1684 } 1685 func rewriteValuePPC64_OpEq16_0(v *Value) bool { 1686 b := v.Block 1687 _ = b 1688 typ := &b.Func.Config.Types 1689 _ = typ 1690 // match: (Eq16 x y) 1691 // cond: isSigned(x.Type) && isSigned(y.Type) 1692 // result: (Equal (CMPW (SignExt16to32 x) (SignExt16to32 y))) 1693 for { 1694 _ = v.Args[1] 1695 x := v.Args[0] 1696 y := v.Args[1] 1697 if !(isSigned(x.Type) && isSigned(y.Type)) { 1698 break 1699 } 1700 v.reset(OpPPC64Equal) 1701 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 1702 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 1703 v1.AddArg(x) 1704 v0.AddArg(v1) 1705 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 1706 v2.AddArg(y) 1707 v0.AddArg(v2) 1708 v.AddArg(v0) 1709 return true 1710 } 1711 // match: (Eq16 x y) 1712 // cond: 1713 // result: (Equal (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) 1714 for { 1715 _ = v.Args[1] 1716 x := v.Args[0] 1717 y := v.Args[1] 1718 v.reset(OpPPC64Equal) 1719 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 1720 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 1721 v1.AddArg(x) 1722 v0.AddArg(v1) 1723 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 1724 v2.AddArg(y) 1725 v0.AddArg(v2) 1726 v.AddArg(v0) 1727 return true 1728 } 1729 } 1730 func rewriteValuePPC64_OpEq32_0(v *Value) bool { 1731 b := v.Block 1732 _ = b 1733 // match: (Eq32 x y) 1734 // cond: 1735 // result: (Equal (CMPW x y)) 1736 for { 1737 _ = v.Args[1] 1738 x := v.Args[0] 1739 y := v.Args[1] 1740 v.reset(OpPPC64Equal) 1741 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 1742 v0.AddArg(x) 1743 v0.AddArg(y) 1744 v.AddArg(v0) 1745 return true 1746 } 1747 } 1748 func rewriteValuePPC64_OpEq32F_0(v *Value) bool { 1749 b := v.Block 1750 _ = b 1751 // match: (Eq32F x y) 1752 // cond: 1753 // result: (Equal (FCMPU x y)) 1754 for { 1755 _ = v.Args[1] 1756 x := v.Args[0] 1757 y := v.Args[1] 1758 v.reset(OpPPC64Equal) 1759 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 1760 v0.AddArg(x) 1761 v0.AddArg(y) 1762 v.AddArg(v0) 1763 return true 1764 } 1765 } 1766 func rewriteValuePPC64_OpEq64_0(v *Value) bool { 1767 b := v.Block 1768 _ = b 1769 // match: (Eq64 x y) 1770 // cond: 1771 // result: (Equal (CMP x y)) 1772 for { 1773 _ = v.Args[1] 1774 x := v.Args[0] 1775 y := v.Args[1] 1776 v.reset(OpPPC64Equal) 1777 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 1778 v0.AddArg(x) 1779 v0.AddArg(y) 1780 v.AddArg(v0) 1781 return true 1782 } 1783 } 1784 func rewriteValuePPC64_OpEq64F_0(v *Value) bool { 1785 b := v.Block 1786 _ = b 1787 // match: (Eq64F x y) 1788 // cond: 1789 // result: (Equal (FCMPU x y)) 1790 for { 1791 _ = v.Args[1] 1792 x := v.Args[0] 1793 y := v.Args[1] 1794 v.reset(OpPPC64Equal) 1795 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 1796 v0.AddArg(x) 1797 v0.AddArg(y) 1798 v.AddArg(v0) 1799 return true 1800 } 1801 } 1802 func rewriteValuePPC64_OpEq8_0(v *Value) bool { 1803 b := v.Block 1804 _ = b 1805 typ := &b.Func.Config.Types 1806 _ = typ 1807 // match: (Eq8 x y) 1808 // cond: isSigned(x.Type) && isSigned(y.Type) 1809 // result: (Equal (CMPW (SignExt8to32 x) (SignExt8to32 y))) 1810 for { 1811 _ = v.Args[1] 1812 x := v.Args[0] 1813 y := v.Args[1] 1814 if !(isSigned(x.Type) && isSigned(y.Type)) { 1815 break 1816 } 1817 v.reset(OpPPC64Equal) 1818 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 1819 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 1820 v1.AddArg(x) 1821 v0.AddArg(v1) 1822 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 1823 v2.AddArg(y) 1824 v0.AddArg(v2) 1825 v.AddArg(v0) 1826 return true 1827 } 1828 // match: (Eq8 x y) 1829 // cond: 1830 // result: (Equal (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) 1831 for { 1832 _ = v.Args[1] 1833 x := v.Args[0] 1834 y := v.Args[1] 1835 v.reset(OpPPC64Equal) 1836 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 1837 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 1838 v1.AddArg(x) 1839 v0.AddArg(v1) 1840 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 1841 v2.AddArg(y) 1842 v0.AddArg(v2) 1843 v.AddArg(v0) 1844 return true 1845 } 1846 } 1847 func rewriteValuePPC64_OpEqB_0(v *Value) bool { 1848 b := v.Block 1849 _ = b 1850 typ := &b.Func.Config.Types 1851 _ = typ 1852 // match: (EqB x y) 1853 // cond: 1854 // result: (ANDconst [1] (EQV x y)) 1855 for { 1856 _ = v.Args[1] 1857 x := v.Args[0] 1858 y := v.Args[1] 1859 v.reset(OpPPC64ANDconst) 1860 v.AuxInt = 1 1861 v0 := b.NewValue0(v.Pos, OpPPC64EQV, typ.Int64) 1862 v0.AddArg(x) 1863 v0.AddArg(y) 1864 v.AddArg(v0) 1865 return true 1866 } 1867 } 1868 func rewriteValuePPC64_OpEqPtr_0(v *Value) bool { 1869 b := v.Block 1870 _ = b 1871 // match: (EqPtr x y) 1872 // cond: 1873 // result: (Equal (CMP x y)) 1874 for { 1875 _ = v.Args[1] 1876 x := v.Args[0] 1877 y := v.Args[1] 1878 v.reset(OpPPC64Equal) 1879 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 1880 v0.AddArg(x) 1881 v0.AddArg(y) 1882 v.AddArg(v0) 1883 return true 1884 } 1885 } 1886 func rewriteValuePPC64_OpFloor_0(v *Value) bool { 1887 // match: (Floor x) 1888 // cond: 1889 // result: (FFLOOR x) 1890 for { 1891 x := v.Args[0] 1892 v.reset(OpPPC64FFLOOR) 1893 v.AddArg(x) 1894 return true 1895 } 1896 } 1897 func rewriteValuePPC64_OpGeq16_0(v *Value) bool { 1898 b := v.Block 1899 _ = b 1900 typ := &b.Func.Config.Types 1901 _ = typ 1902 // match: (Geq16 x y) 1903 // cond: 1904 // result: (GreaterEqual (CMPW (SignExt16to32 x) (SignExt16to32 y))) 1905 for { 1906 _ = v.Args[1] 1907 x := v.Args[0] 1908 y := v.Args[1] 1909 v.reset(OpPPC64GreaterEqual) 1910 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 1911 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 1912 v1.AddArg(x) 1913 v0.AddArg(v1) 1914 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 1915 v2.AddArg(y) 1916 v0.AddArg(v2) 1917 v.AddArg(v0) 1918 return true 1919 } 1920 } 1921 func rewriteValuePPC64_OpGeq16U_0(v *Value) bool { 1922 b := v.Block 1923 _ = b 1924 typ := &b.Func.Config.Types 1925 _ = typ 1926 // match: (Geq16U x y) 1927 // cond: 1928 // result: (GreaterEqual (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y))) 1929 for { 1930 _ = v.Args[1] 1931 x := v.Args[0] 1932 y := v.Args[1] 1933 v.reset(OpPPC64GreaterEqual) 1934 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 1935 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 1936 v1.AddArg(x) 1937 v0.AddArg(v1) 1938 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 1939 v2.AddArg(y) 1940 v0.AddArg(v2) 1941 v.AddArg(v0) 1942 return true 1943 } 1944 } 1945 func rewriteValuePPC64_OpGeq32_0(v *Value) bool { 1946 b := v.Block 1947 _ = b 1948 // match: (Geq32 x y) 1949 // cond: 1950 // result: (GreaterEqual (CMPW x y)) 1951 for { 1952 _ = v.Args[1] 1953 x := v.Args[0] 1954 y := v.Args[1] 1955 v.reset(OpPPC64GreaterEqual) 1956 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 1957 v0.AddArg(x) 1958 v0.AddArg(y) 1959 v.AddArg(v0) 1960 return true 1961 } 1962 } 1963 func rewriteValuePPC64_OpGeq32F_0(v *Value) bool { 1964 b := v.Block 1965 _ = b 1966 // match: (Geq32F x y) 1967 // cond: 1968 // result: (FGreaterEqual (FCMPU x y)) 1969 for { 1970 _ = v.Args[1] 1971 x := v.Args[0] 1972 y := v.Args[1] 1973 v.reset(OpPPC64FGreaterEqual) 1974 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 1975 v0.AddArg(x) 1976 v0.AddArg(y) 1977 v.AddArg(v0) 1978 return true 1979 } 1980 } 1981 func rewriteValuePPC64_OpGeq32U_0(v *Value) bool { 1982 b := v.Block 1983 _ = b 1984 // match: (Geq32U x y) 1985 // cond: 1986 // result: (GreaterEqual (CMPWU x y)) 1987 for { 1988 _ = v.Args[1] 1989 x := v.Args[0] 1990 y := v.Args[1] 1991 v.reset(OpPPC64GreaterEqual) 1992 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 1993 v0.AddArg(x) 1994 v0.AddArg(y) 1995 v.AddArg(v0) 1996 return true 1997 } 1998 } 1999 func rewriteValuePPC64_OpGeq64_0(v *Value) bool { 2000 b := v.Block 2001 _ = b 2002 // match: (Geq64 x y) 2003 // cond: 2004 // result: (GreaterEqual (CMP x y)) 2005 for { 2006 _ = v.Args[1] 2007 x := v.Args[0] 2008 y := v.Args[1] 2009 v.reset(OpPPC64GreaterEqual) 2010 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 2011 v0.AddArg(x) 2012 v0.AddArg(y) 2013 v.AddArg(v0) 2014 return true 2015 } 2016 } 2017 func rewriteValuePPC64_OpGeq64F_0(v *Value) bool { 2018 b := v.Block 2019 _ = b 2020 // match: (Geq64F x y) 2021 // cond: 2022 // result: (FGreaterEqual (FCMPU x y)) 2023 for { 2024 _ = v.Args[1] 2025 x := v.Args[0] 2026 y := v.Args[1] 2027 v.reset(OpPPC64FGreaterEqual) 2028 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 2029 v0.AddArg(x) 2030 v0.AddArg(y) 2031 v.AddArg(v0) 2032 return true 2033 } 2034 } 2035 func rewriteValuePPC64_OpGeq64U_0(v *Value) bool { 2036 b := v.Block 2037 _ = b 2038 // match: (Geq64U x y) 2039 // cond: 2040 // result: (GreaterEqual (CMPU x y)) 2041 for { 2042 _ = v.Args[1] 2043 x := v.Args[0] 2044 y := v.Args[1] 2045 v.reset(OpPPC64GreaterEqual) 2046 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) 2047 v0.AddArg(x) 2048 v0.AddArg(y) 2049 v.AddArg(v0) 2050 return true 2051 } 2052 } 2053 func rewriteValuePPC64_OpGeq8_0(v *Value) bool { 2054 b := v.Block 2055 _ = b 2056 typ := &b.Func.Config.Types 2057 _ = typ 2058 // match: (Geq8 x y) 2059 // cond: 2060 // result: (GreaterEqual (CMPW (SignExt8to32 x) (SignExt8to32 y))) 2061 for { 2062 _ = v.Args[1] 2063 x := v.Args[0] 2064 y := v.Args[1] 2065 v.reset(OpPPC64GreaterEqual) 2066 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2067 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2068 v1.AddArg(x) 2069 v0.AddArg(v1) 2070 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2071 v2.AddArg(y) 2072 v0.AddArg(v2) 2073 v.AddArg(v0) 2074 return true 2075 } 2076 } 2077 func rewriteValuePPC64_OpGeq8U_0(v *Value) bool { 2078 b := v.Block 2079 _ = b 2080 typ := &b.Func.Config.Types 2081 _ = typ 2082 // match: (Geq8U x y) 2083 // cond: 2084 // result: (GreaterEqual (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y))) 2085 for { 2086 _ = v.Args[1] 2087 x := v.Args[0] 2088 y := v.Args[1] 2089 v.reset(OpPPC64GreaterEqual) 2090 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2091 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2092 v1.AddArg(x) 2093 v0.AddArg(v1) 2094 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2095 v2.AddArg(y) 2096 v0.AddArg(v2) 2097 v.AddArg(v0) 2098 return true 2099 } 2100 } 2101 func rewriteValuePPC64_OpGetCallerSP_0(v *Value) bool { 2102 // match: (GetCallerSP) 2103 // cond: 2104 // result: (LoweredGetCallerSP) 2105 for { 2106 v.reset(OpPPC64LoweredGetCallerSP) 2107 return true 2108 } 2109 } 2110 func rewriteValuePPC64_OpGetClosurePtr_0(v *Value) bool { 2111 // match: (GetClosurePtr) 2112 // cond: 2113 // result: (LoweredGetClosurePtr) 2114 for { 2115 v.reset(OpPPC64LoweredGetClosurePtr) 2116 return true 2117 } 2118 } 2119 func rewriteValuePPC64_OpGreater16_0(v *Value) bool { 2120 b := v.Block 2121 _ = b 2122 typ := &b.Func.Config.Types 2123 _ = typ 2124 // match: (Greater16 x y) 2125 // cond: 2126 // result: (GreaterThan (CMPW (SignExt16to32 x) (SignExt16to32 y))) 2127 for { 2128 _ = v.Args[1] 2129 x := v.Args[0] 2130 y := v.Args[1] 2131 v.reset(OpPPC64GreaterThan) 2132 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2133 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 2134 v1.AddArg(x) 2135 v0.AddArg(v1) 2136 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 2137 v2.AddArg(y) 2138 v0.AddArg(v2) 2139 v.AddArg(v0) 2140 return true 2141 } 2142 } 2143 func rewriteValuePPC64_OpGreater16U_0(v *Value) bool { 2144 b := v.Block 2145 _ = b 2146 typ := &b.Func.Config.Types 2147 _ = typ 2148 // match: (Greater16U x y) 2149 // cond: 2150 // result: (GreaterThan (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y))) 2151 for { 2152 _ = v.Args[1] 2153 x := v.Args[0] 2154 y := v.Args[1] 2155 v.reset(OpPPC64GreaterThan) 2156 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2157 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 2158 v1.AddArg(x) 2159 v0.AddArg(v1) 2160 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 2161 v2.AddArg(y) 2162 v0.AddArg(v2) 2163 v.AddArg(v0) 2164 return true 2165 } 2166 } 2167 func rewriteValuePPC64_OpGreater32_0(v *Value) bool { 2168 b := v.Block 2169 _ = b 2170 // match: (Greater32 x y) 2171 // cond: 2172 // result: (GreaterThan (CMPW x y)) 2173 for { 2174 _ = v.Args[1] 2175 x := v.Args[0] 2176 y := v.Args[1] 2177 v.reset(OpPPC64GreaterThan) 2178 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2179 v0.AddArg(x) 2180 v0.AddArg(y) 2181 v.AddArg(v0) 2182 return true 2183 } 2184 } 2185 func rewriteValuePPC64_OpGreater32F_0(v *Value) bool { 2186 b := v.Block 2187 _ = b 2188 // match: (Greater32F x y) 2189 // cond: 2190 // result: (FGreaterThan (FCMPU x y)) 2191 for { 2192 _ = v.Args[1] 2193 x := v.Args[0] 2194 y := v.Args[1] 2195 v.reset(OpPPC64FGreaterThan) 2196 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 2197 v0.AddArg(x) 2198 v0.AddArg(y) 2199 v.AddArg(v0) 2200 return true 2201 } 2202 } 2203 func rewriteValuePPC64_OpGreater32U_0(v *Value) bool { 2204 b := v.Block 2205 _ = b 2206 // match: (Greater32U x y) 2207 // cond: 2208 // result: (GreaterThan (CMPWU x y)) 2209 for { 2210 _ = v.Args[1] 2211 x := v.Args[0] 2212 y := v.Args[1] 2213 v.reset(OpPPC64GreaterThan) 2214 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2215 v0.AddArg(x) 2216 v0.AddArg(y) 2217 v.AddArg(v0) 2218 return true 2219 } 2220 } 2221 func rewriteValuePPC64_OpGreater64_0(v *Value) bool { 2222 b := v.Block 2223 _ = b 2224 // match: (Greater64 x y) 2225 // cond: 2226 // result: (GreaterThan (CMP x y)) 2227 for { 2228 _ = v.Args[1] 2229 x := v.Args[0] 2230 y := v.Args[1] 2231 v.reset(OpPPC64GreaterThan) 2232 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 2233 v0.AddArg(x) 2234 v0.AddArg(y) 2235 v.AddArg(v0) 2236 return true 2237 } 2238 } 2239 func rewriteValuePPC64_OpGreater64F_0(v *Value) bool { 2240 b := v.Block 2241 _ = b 2242 // match: (Greater64F x y) 2243 // cond: 2244 // result: (FGreaterThan (FCMPU x y)) 2245 for { 2246 _ = v.Args[1] 2247 x := v.Args[0] 2248 y := v.Args[1] 2249 v.reset(OpPPC64FGreaterThan) 2250 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 2251 v0.AddArg(x) 2252 v0.AddArg(y) 2253 v.AddArg(v0) 2254 return true 2255 } 2256 } 2257 func rewriteValuePPC64_OpGreater64U_0(v *Value) bool { 2258 b := v.Block 2259 _ = b 2260 // match: (Greater64U x y) 2261 // cond: 2262 // result: (GreaterThan (CMPU x y)) 2263 for { 2264 _ = v.Args[1] 2265 x := v.Args[0] 2266 y := v.Args[1] 2267 v.reset(OpPPC64GreaterThan) 2268 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) 2269 v0.AddArg(x) 2270 v0.AddArg(y) 2271 v.AddArg(v0) 2272 return true 2273 } 2274 } 2275 func rewriteValuePPC64_OpGreater8_0(v *Value) bool { 2276 b := v.Block 2277 _ = b 2278 typ := &b.Func.Config.Types 2279 _ = typ 2280 // match: (Greater8 x y) 2281 // cond: 2282 // result: (GreaterThan (CMPW (SignExt8to32 x) (SignExt8to32 y))) 2283 for { 2284 _ = v.Args[1] 2285 x := v.Args[0] 2286 y := v.Args[1] 2287 v.reset(OpPPC64GreaterThan) 2288 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2289 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2290 v1.AddArg(x) 2291 v0.AddArg(v1) 2292 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2293 v2.AddArg(y) 2294 v0.AddArg(v2) 2295 v.AddArg(v0) 2296 return true 2297 } 2298 } 2299 func rewriteValuePPC64_OpGreater8U_0(v *Value) bool { 2300 b := v.Block 2301 _ = b 2302 typ := &b.Func.Config.Types 2303 _ = typ 2304 // match: (Greater8U x y) 2305 // cond: 2306 // result: (GreaterThan (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y))) 2307 for { 2308 _ = v.Args[1] 2309 x := v.Args[0] 2310 y := v.Args[1] 2311 v.reset(OpPPC64GreaterThan) 2312 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2313 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2314 v1.AddArg(x) 2315 v0.AddArg(v1) 2316 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2317 v2.AddArg(y) 2318 v0.AddArg(v2) 2319 v.AddArg(v0) 2320 return true 2321 } 2322 } 2323 func rewriteValuePPC64_OpHmul32_0(v *Value) bool { 2324 // match: (Hmul32 x y) 2325 // cond: 2326 // result: (MULHW x y) 2327 for { 2328 _ = v.Args[1] 2329 x := v.Args[0] 2330 y := v.Args[1] 2331 v.reset(OpPPC64MULHW) 2332 v.AddArg(x) 2333 v.AddArg(y) 2334 return true 2335 } 2336 } 2337 func rewriteValuePPC64_OpHmul32u_0(v *Value) bool { 2338 // match: (Hmul32u x y) 2339 // cond: 2340 // result: (MULHWU x y) 2341 for { 2342 _ = v.Args[1] 2343 x := v.Args[0] 2344 y := v.Args[1] 2345 v.reset(OpPPC64MULHWU) 2346 v.AddArg(x) 2347 v.AddArg(y) 2348 return true 2349 } 2350 } 2351 func rewriteValuePPC64_OpHmul64_0(v *Value) bool { 2352 // match: (Hmul64 x y) 2353 // cond: 2354 // result: (MULHD x y) 2355 for { 2356 _ = v.Args[1] 2357 x := v.Args[0] 2358 y := v.Args[1] 2359 v.reset(OpPPC64MULHD) 2360 v.AddArg(x) 2361 v.AddArg(y) 2362 return true 2363 } 2364 } 2365 func rewriteValuePPC64_OpHmul64u_0(v *Value) bool { 2366 // match: (Hmul64u x y) 2367 // cond: 2368 // result: (MULHDU x y) 2369 for { 2370 _ = v.Args[1] 2371 x := v.Args[0] 2372 y := v.Args[1] 2373 v.reset(OpPPC64MULHDU) 2374 v.AddArg(x) 2375 v.AddArg(y) 2376 return true 2377 } 2378 } 2379 func rewriteValuePPC64_OpInterCall_0(v *Value) bool { 2380 // match: (InterCall [argwid] entry mem) 2381 // cond: 2382 // result: (CALLinter [argwid] entry mem) 2383 for { 2384 argwid := v.AuxInt 2385 _ = v.Args[1] 2386 entry := v.Args[0] 2387 mem := v.Args[1] 2388 v.reset(OpPPC64CALLinter) 2389 v.AuxInt = argwid 2390 v.AddArg(entry) 2391 v.AddArg(mem) 2392 return true 2393 } 2394 } 2395 func rewriteValuePPC64_OpIsInBounds_0(v *Value) bool { 2396 b := v.Block 2397 _ = b 2398 // match: (IsInBounds idx len) 2399 // cond: 2400 // result: (LessThan (CMPU idx len)) 2401 for { 2402 _ = v.Args[1] 2403 idx := v.Args[0] 2404 len := v.Args[1] 2405 v.reset(OpPPC64LessThan) 2406 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) 2407 v0.AddArg(idx) 2408 v0.AddArg(len) 2409 v.AddArg(v0) 2410 return true 2411 } 2412 } 2413 func rewriteValuePPC64_OpIsNonNil_0(v *Value) bool { 2414 b := v.Block 2415 _ = b 2416 // match: (IsNonNil ptr) 2417 // cond: 2418 // result: (NotEqual (CMPconst [0] ptr)) 2419 for { 2420 ptr := v.Args[0] 2421 v.reset(OpPPC64NotEqual) 2422 v0 := b.NewValue0(v.Pos, OpPPC64CMPconst, types.TypeFlags) 2423 v0.AuxInt = 0 2424 v0.AddArg(ptr) 2425 v.AddArg(v0) 2426 return true 2427 } 2428 } 2429 func rewriteValuePPC64_OpIsSliceInBounds_0(v *Value) bool { 2430 b := v.Block 2431 _ = b 2432 // match: (IsSliceInBounds idx len) 2433 // cond: 2434 // result: (LessEqual (CMPU idx len)) 2435 for { 2436 _ = v.Args[1] 2437 idx := v.Args[0] 2438 len := v.Args[1] 2439 v.reset(OpPPC64LessEqual) 2440 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) 2441 v0.AddArg(idx) 2442 v0.AddArg(len) 2443 v.AddArg(v0) 2444 return true 2445 } 2446 } 2447 func rewriteValuePPC64_OpLeq16_0(v *Value) bool { 2448 b := v.Block 2449 _ = b 2450 typ := &b.Func.Config.Types 2451 _ = typ 2452 // match: (Leq16 x y) 2453 // cond: 2454 // result: (LessEqual (CMPW (SignExt16to32 x) (SignExt16to32 y))) 2455 for { 2456 _ = v.Args[1] 2457 x := v.Args[0] 2458 y := v.Args[1] 2459 v.reset(OpPPC64LessEqual) 2460 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2461 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 2462 v1.AddArg(x) 2463 v0.AddArg(v1) 2464 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 2465 v2.AddArg(y) 2466 v0.AddArg(v2) 2467 v.AddArg(v0) 2468 return true 2469 } 2470 } 2471 func rewriteValuePPC64_OpLeq16U_0(v *Value) bool { 2472 b := v.Block 2473 _ = b 2474 typ := &b.Func.Config.Types 2475 _ = typ 2476 // match: (Leq16U x y) 2477 // cond: 2478 // result: (LessEqual (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y))) 2479 for { 2480 _ = v.Args[1] 2481 x := v.Args[0] 2482 y := v.Args[1] 2483 v.reset(OpPPC64LessEqual) 2484 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2485 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 2486 v1.AddArg(x) 2487 v0.AddArg(v1) 2488 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 2489 v2.AddArg(y) 2490 v0.AddArg(v2) 2491 v.AddArg(v0) 2492 return true 2493 } 2494 } 2495 func rewriteValuePPC64_OpLeq32_0(v *Value) bool { 2496 b := v.Block 2497 _ = b 2498 // match: (Leq32 x y) 2499 // cond: 2500 // result: (LessEqual (CMPW x y)) 2501 for { 2502 _ = v.Args[1] 2503 x := v.Args[0] 2504 y := v.Args[1] 2505 v.reset(OpPPC64LessEqual) 2506 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2507 v0.AddArg(x) 2508 v0.AddArg(y) 2509 v.AddArg(v0) 2510 return true 2511 } 2512 } 2513 func rewriteValuePPC64_OpLeq32F_0(v *Value) bool { 2514 b := v.Block 2515 _ = b 2516 // match: (Leq32F x y) 2517 // cond: 2518 // result: (FLessEqual (FCMPU x y)) 2519 for { 2520 _ = v.Args[1] 2521 x := v.Args[0] 2522 y := v.Args[1] 2523 v.reset(OpPPC64FLessEqual) 2524 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 2525 v0.AddArg(x) 2526 v0.AddArg(y) 2527 v.AddArg(v0) 2528 return true 2529 } 2530 } 2531 func rewriteValuePPC64_OpLeq32U_0(v *Value) bool { 2532 b := v.Block 2533 _ = b 2534 // match: (Leq32U x y) 2535 // cond: 2536 // result: (LessEqual (CMPWU x y)) 2537 for { 2538 _ = v.Args[1] 2539 x := v.Args[0] 2540 y := v.Args[1] 2541 v.reset(OpPPC64LessEqual) 2542 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2543 v0.AddArg(x) 2544 v0.AddArg(y) 2545 v.AddArg(v0) 2546 return true 2547 } 2548 } 2549 func rewriteValuePPC64_OpLeq64_0(v *Value) bool { 2550 b := v.Block 2551 _ = b 2552 // match: (Leq64 x y) 2553 // cond: 2554 // result: (LessEqual (CMP x y)) 2555 for { 2556 _ = v.Args[1] 2557 x := v.Args[0] 2558 y := v.Args[1] 2559 v.reset(OpPPC64LessEqual) 2560 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 2561 v0.AddArg(x) 2562 v0.AddArg(y) 2563 v.AddArg(v0) 2564 return true 2565 } 2566 } 2567 func rewriteValuePPC64_OpLeq64F_0(v *Value) bool { 2568 b := v.Block 2569 _ = b 2570 // match: (Leq64F x y) 2571 // cond: 2572 // result: (FLessEqual (FCMPU x y)) 2573 for { 2574 _ = v.Args[1] 2575 x := v.Args[0] 2576 y := v.Args[1] 2577 v.reset(OpPPC64FLessEqual) 2578 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 2579 v0.AddArg(x) 2580 v0.AddArg(y) 2581 v.AddArg(v0) 2582 return true 2583 } 2584 } 2585 func rewriteValuePPC64_OpLeq64U_0(v *Value) bool { 2586 b := v.Block 2587 _ = b 2588 // match: (Leq64U x y) 2589 // cond: 2590 // result: (LessEqual (CMPU x y)) 2591 for { 2592 _ = v.Args[1] 2593 x := v.Args[0] 2594 y := v.Args[1] 2595 v.reset(OpPPC64LessEqual) 2596 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) 2597 v0.AddArg(x) 2598 v0.AddArg(y) 2599 v.AddArg(v0) 2600 return true 2601 } 2602 } 2603 func rewriteValuePPC64_OpLeq8_0(v *Value) bool { 2604 b := v.Block 2605 _ = b 2606 typ := &b.Func.Config.Types 2607 _ = typ 2608 // match: (Leq8 x y) 2609 // cond: 2610 // result: (LessEqual (CMPW (SignExt8to32 x) (SignExt8to32 y))) 2611 for { 2612 _ = v.Args[1] 2613 x := v.Args[0] 2614 y := v.Args[1] 2615 v.reset(OpPPC64LessEqual) 2616 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2617 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2618 v1.AddArg(x) 2619 v0.AddArg(v1) 2620 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2621 v2.AddArg(y) 2622 v0.AddArg(v2) 2623 v.AddArg(v0) 2624 return true 2625 } 2626 } 2627 func rewriteValuePPC64_OpLeq8U_0(v *Value) bool { 2628 b := v.Block 2629 _ = b 2630 typ := &b.Func.Config.Types 2631 _ = typ 2632 // match: (Leq8U x y) 2633 // cond: 2634 // result: (LessEqual (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y))) 2635 for { 2636 _ = v.Args[1] 2637 x := v.Args[0] 2638 y := v.Args[1] 2639 v.reset(OpPPC64LessEqual) 2640 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2641 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2642 v1.AddArg(x) 2643 v0.AddArg(v1) 2644 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2645 v2.AddArg(y) 2646 v0.AddArg(v2) 2647 v.AddArg(v0) 2648 return true 2649 } 2650 } 2651 func rewriteValuePPC64_OpLess16_0(v *Value) bool { 2652 b := v.Block 2653 _ = b 2654 typ := &b.Func.Config.Types 2655 _ = typ 2656 // match: (Less16 x y) 2657 // cond: 2658 // result: (LessThan (CMPW (SignExt16to32 x) (SignExt16to32 y))) 2659 for { 2660 _ = v.Args[1] 2661 x := v.Args[0] 2662 y := v.Args[1] 2663 v.reset(OpPPC64LessThan) 2664 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2665 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 2666 v1.AddArg(x) 2667 v0.AddArg(v1) 2668 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 2669 v2.AddArg(y) 2670 v0.AddArg(v2) 2671 v.AddArg(v0) 2672 return true 2673 } 2674 } 2675 func rewriteValuePPC64_OpLess16U_0(v *Value) bool { 2676 b := v.Block 2677 _ = b 2678 typ := &b.Func.Config.Types 2679 _ = typ 2680 // match: (Less16U x y) 2681 // cond: 2682 // result: (LessThan (CMPWU (ZeroExt16to32 x) (ZeroExt16to32 y))) 2683 for { 2684 _ = v.Args[1] 2685 x := v.Args[0] 2686 y := v.Args[1] 2687 v.reset(OpPPC64LessThan) 2688 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2689 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 2690 v1.AddArg(x) 2691 v0.AddArg(v1) 2692 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 2693 v2.AddArg(y) 2694 v0.AddArg(v2) 2695 v.AddArg(v0) 2696 return true 2697 } 2698 } 2699 func rewriteValuePPC64_OpLess32_0(v *Value) bool { 2700 b := v.Block 2701 _ = b 2702 // match: (Less32 x y) 2703 // cond: 2704 // result: (LessThan (CMPW x y)) 2705 for { 2706 _ = v.Args[1] 2707 x := v.Args[0] 2708 y := v.Args[1] 2709 v.reset(OpPPC64LessThan) 2710 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2711 v0.AddArg(x) 2712 v0.AddArg(y) 2713 v.AddArg(v0) 2714 return true 2715 } 2716 } 2717 func rewriteValuePPC64_OpLess32F_0(v *Value) bool { 2718 b := v.Block 2719 _ = b 2720 // match: (Less32F x y) 2721 // cond: 2722 // result: (FLessThan (FCMPU x y)) 2723 for { 2724 _ = v.Args[1] 2725 x := v.Args[0] 2726 y := v.Args[1] 2727 v.reset(OpPPC64FLessThan) 2728 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 2729 v0.AddArg(x) 2730 v0.AddArg(y) 2731 v.AddArg(v0) 2732 return true 2733 } 2734 } 2735 func rewriteValuePPC64_OpLess32U_0(v *Value) bool { 2736 b := v.Block 2737 _ = b 2738 // match: (Less32U x y) 2739 // cond: 2740 // result: (LessThan (CMPWU x y)) 2741 for { 2742 _ = v.Args[1] 2743 x := v.Args[0] 2744 y := v.Args[1] 2745 v.reset(OpPPC64LessThan) 2746 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2747 v0.AddArg(x) 2748 v0.AddArg(y) 2749 v.AddArg(v0) 2750 return true 2751 } 2752 } 2753 func rewriteValuePPC64_OpLess64_0(v *Value) bool { 2754 b := v.Block 2755 _ = b 2756 // match: (Less64 x y) 2757 // cond: 2758 // result: (LessThan (CMP x y)) 2759 for { 2760 _ = v.Args[1] 2761 x := v.Args[0] 2762 y := v.Args[1] 2763 v.reset(OpPPC64LessThan) 2764 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 2765 v0.AddArg(x) 2766 v0.AddArg(y) 2767 v.AddArg(v0) 2768 return true 2769 } 2770 } 2771 func rewriteValuePPC64_OpLess64F_0(v *Value) bool { 2772 b := v.Block 2773 _ = b 2774 // match: (Less64F x y) 2775 // cond: 2776 // result: (FLessThan (FCMPU x y)) 2777 for { 2778 _ = v.Args[1] 2779 x := v.Args[0] 2780 y := v.Args[1] 2781 v.reset(OpPPC64FLessThan) 2782 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 2783 v0.AddArg(x) 2784 v0.AddArg(y) 2785 v.AddArg(v0) 2786 return true 2787 } 2788 } 2789 func rewriteValuePPC64_OpLess64U_0(v *Value) bool { 2790 b := v.Block 2791 _ = b 2792 // match: (Less64U x y) 2793 // cond: 2794 // result: (LessThan (CMPU x y)) 2795 for { 2796 _ = v.Args[1] 2797 x := v.Args[0] 2798 y := v.Args[1] 2799 v.reset(OpPPC64LessThan) 2800 v0 := b.NewValue0(v.Pos, OpPPC64CMPU, types.TypeFlags) 2801 v0.AddArg(x) 2802 v0.AddArg(y) 2803 v.AddArg(v0) 2804 return true 2805 } 2806 } 2807 func rewriteValuePPC64_OpLess8_0(v *Value) bool { 2808 b := v.Block 2809 _ = b 2810 typ := &b.Func.Config.Types 2811 _ = typ 2812 // match: (Less8 x y) 2813 // cond: 2814 // result: (LessThan (CMPW (SignExt8to32 x) (SignExt8to32 y))) 2815 for { 2816 _ = v.Args[1] 2817 x := v.Args[0] 2818 y := v.Args[1] 2819 v.reset(OpPPC64LessThan) 2820 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 2821 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2822 v1.AddArg(x) 2823 v0.AddArg(v1) 2824 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 2825 v2.AddArg(y) 2826 v0.AddArg(v2) 2827 v.AddArg(v0) 2828 return true 2829 } 2830 } 2831 func rewriteValuePPC64_OpLess8U_0(v *Value) bool { 2832 b := v.Block 2833 _ = b 2834 typ := &b.Func.Config.Types 2835 _ = typ 2836 // match: (Less8U x y) 2837 // cond: 2838 // result: (LessThan (CMPWU (ZeroExt8to32 x) (ZeroExt8to32 y))) 2839 for { 2840 _ = v.Args[1] 2841 x := v.Args[0] 2842 y := v.Args[1] 2843 v.reset(OpPPC64LessThan) 2844 v0 := b.NewValue0(v.Pos, OpPPC64CMPWU, types.TypeFlags) 2845 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2846 v1.AddArg(x) 2847 v0.AddArg(v1) 2848 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 2849 v2.AddArg(y) 2850 v0.AddArg(v2) 2851 v.AddArg(v0) 2852 return true 2853 } 2854 } 2855 func rewriteValuePPC64_OpLoad_0(v *Value) bool { 2856 b := v.Block 2857 _ = b 2858 typ := &b.Func.Config.Types 2859 _ = typ 2860 // match: (Load <t> ptr mem) 2861 // cond: (is64BitInt(t) || isPtr(t)) 2862 // result: (MOVDload ptr mem) 2863 for { 2864 t := v.Type 2865 _ = v.Args[1] 2866 ptr := v.Args[0] 2867 mem := v.Args[1] 2868 if !(is64BitInt(t) || isPtr(t)) { 2869 break 2870 } 2871 v.reset(OpPPC64MOVDload) 2872 v.AddArg(ptr) 2873 v.AddArg(mem) 2874 return true 2875 } 2876 // match: (Load <t> ptr mem) 2877 // cond: is32BitInt(t) && isSigned(t) 2878 // result: (MOVWload ptr mem) 2879 for { 2880 t := v.Type 2881 _ = v.Args[1] 2882 ptr := v.Args[0] 2883 mem := v.Args[1] 2884 if !(is32BitInt(t) && isSigned(t)) { 2885 break 2886 } 2887 v.reset(OpPPC64MOVWload) 2888 v.AddArg(ptr) 2889 v.AddArg(mem) 2890 return true 2891 } 2892 // match: (Load <t> ptr mem) 2893 // cond: is32BitInt(t) && !isSigned(t) 2894 // result: (MOVWZload ptr mem) 2895 for { 2896 t := v.Type 2897 _ = v.Args[1] 2898 ptr := v.Args[0] 2899 mem := v.Args[1] 2900 if !(is32BitInt(t) && !isSigned(t)) { 2901 break 2902 } 2903 v.reset(OpPPC64MOVWZload) 2904 v.AddArg(ptr) 2905 v.AddArg(mem) 2906 return true 2907 } 2908 // match: (Load <t> ptr mem) 2909 // cond: is16BitInt(t) && isSigned(t) 2910 // result: (MOVHload ptr mem) 2911 for { 2912 t := v.Type 2913 _ = v.Args[1] 2914 ptr := v.Args[0] 2915 mem := v.Args[1] 2916 if !(is16BitInt(t) && isSigned(t)) { 2917 break 2918 } 2919 v.reset(OpPPC64MOVHload) 2920 v.AddArg(ptr) 2921 v.AddArg(mem) 2922 return true 2923 } 2924 // match: (Load <t> ptr mem) 2925 // cond: is16BitInt(t) && !isSigned(t) 2926 // result: (MOVHZload ptr mem) 2927 for { 2928 t := v.Type 2929 _ = v.Args[1] 2930 ptr := v.Args[0] 2931 mem := v.Args[1] 2932 if !(is16BitInt(t) && !isSigned(t)) { 2933 break 2934 } 2935 v.reset(OpPPC64MOVHZload) 2936 v.AddArg(ptr) 2937 v.AddArg(mem) 2938 return true 2939 } 2940 // match: (Load <t> ptr mem) 2941 // cond: t.IsBoolean() 2942 // result: (MOVBZload ptr mem) 2943 for { 2944 t := v.Type 2945 _ = v.Args[1] 2946 ptr := v.Args[0] 2947 mem := v.Args[1] 2948 if !(t.IsBoolean()) { 2949 break 2950 } 2951 v.reset(OpPPC64MOVBZload) 2952 v.AddArg(ptr) 2953 v.AddArg(mem) 2954 return true 2955 } 2956 // match: (Load <t> ptr mem) 2957 // cond: is8BitInt(t) && isSigned(t) 2958 // result: (MOVBreg (MOVBZload ptr mem)) 2959 for { 2960 t := v.Type 2961 _ = v.Args[1] 2962 ptr := v.Args[0] 2963 mem := v.Args[1] 2964 if !(is8BitInt(t) && isSigned(t)) { 2965 break 2966 } 2967 v.reset(OpPPC64MOVBreg) 2968 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8) 2969 v0.AddArg(ptr) 2970 v0.AddArg(mem) 2971 v.AddArg(v0) 2972 return true 2973 } 2974 // match: (Load <t> ptr mem) 2975 // cond: is8BitInt(t) && !isSigned(t) 2976 // result: (MOVBZload ptr mem) 2977 for { 2978 t := v.Type 2979 _ = v.Args[1] 2980 ptr := v.Args[0] 2981 mem := v.Args[1] 2982 if !(is8BitInt(t) && !isSigned(t)) { 2983 break 2984 } 2985 v.reset(OpPPC64MOVBZload) 2986 v.AddArg(ptr) 2987 v.AddArg(mem) 2988 return true 2989 } 2990 // match: (Load <t> ptr mem) 2991 // cond: is32BitFloat(t) 2992 // result: (FMOVSload ptr mem) 2993 for { 2994 t := v.Type 2995 _ = v.Args[1] 2996 ptr := v.Args[0] 2997 mem := v.Args[1] 2998 if !(is32BitFloat(t)) { 2999 break 3000 } 3001 v.reset(OpPPC64FMOVSload) 3002 v.AddArg(ptr) 3003 v.AddArg(mem) 3004 return true 3005 } 3006 // match: (Load <t> ptr mem) 3007 // cond: is64BitFloat(t) 3008 // result: (FMOVDload ptr mem) 3009 for { 3010 t := v.Type 3011 _ = v.Args[1] 3012 ptr := v.Args[0] 3013 mem := v.Args[1] 3014 if !(is64BitFloat(t)) { 3015 break 3016 } 3017 v.reset(OpPPC64FMOVDload) 3018 v.AddArg(ptr) 3019 v.AddArg(mem) 3020 return true 3021 } 3022 return false 3023 } 3024 func rewriteValuePPC64_OpLsh16x16_0(v *Value) bool { 3025 b := v.Block 3026 _ = b 3027 typ := &b.Func.Config.Types 3028 _ = typ 3029 // match: (Lsh16x16 x y) 3030 // cond: 3031 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt16to64 y))))) 3032 for { 3033 _ = v.Args[1] 3034 x := v.Args[0] 3035 y := v.Args[1] 3036 v.reset(OpPPC64SLW) 3037 v.AddArg(x) 3038 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3039 v0.AddArg(y) 3040 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3041 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3042 v2.AuxInt = -16 3043 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 3044 v3.AddArg(y) 3045 v2.AddArg(v3) 3046 v1.AddArg(v2) 3047 v0.AddArg(v1) 3048 v.AddArg(v0) 3049 return true 3050 } 3051 } 3052 func rewriteValuePPC64_OpLsh16x32_0(v *Value) bool { 3053 b := v.Block 3054 _ = b 3055 typ := &b.Func.Config.Types 3056 _ = typ 3057 // match: (Lsh16x32 x (Const64 [c])) 3058 // cond: uint32(c) < 16 3059 // result: (SLWconst x [c]) 3060 for { 3061 _ = v.Args[1] 3062 x := v.Args[0] 3063 v_1 := v.Args[1] 3064 if v_1.Op != OpConst64 { 3065 break 3066 } 3067 c := v_1.AuxInt 3068 if !(uint32(c) < 16) { 3069 break 3070 } 3071 v.reset(OpPPC64SLWconst) 3072 v.AuxInt = c 3073 v.AddArg(x) 3074 return true 3075 } 3076 // match: (Lsh16x32 x (MOVDconst [c])) 3077 // cond: uint32(c) < 16 3078 // result: (SLWconst x [c]) 3079 for { 3080 _ = v.Args[1] 3081 x := v.Args[0] 3082 v_1 := v.Args[1] 3083 if v_1.Op != OpPPC64MOVDconst { 3084 break 3085 } 3086 c := v_1.AuxInt 3087 if !(uint32(c) < 16) { 3088 break 3089 } 3090 v.reset(OpPPC64SLWconst) 3091 v.AuxInt = c 3092 v.AddArg(x) 3093 return true 3094 } 3095 // match: (Lsh16x32 x y) 3096 // cond: 3097 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt32to64 y))))) 3098 for { 3099 _ = v.Args[1] 3100 x := v.Args[0] 3101 y := v.Args[1] 3102 v.reset(OpPPC64SLW) 3103 v.AddArg(x) 3104 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3105 v0.AddArg(y) 3106 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3107 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3108 v2.AuxInt = -16 3109 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 3110 v3.AddArg(y) 3111 v2.AddArg(v3) 3112 v1.AddArg(v2) 3113 v0.AddArg(v1) 3114 v.AddArg(v0) 3115 return true 3116 } 3117 } 3118 func rewriteValuePPC64_OpLsh16x64_0(v *Value) bool { 3119 b := v.Block 3120 _ = b 3121 typ := &b.Func.Config.Types 3122 _ = typ 3123 // match: (Lsh16x64 x (Const64 [c])) 3124 // cond: uint64(c) < 16 3125 // result: (SLWconst x [c]) 3126 for { 3127 _ = v.Args[1] 3128 x := v.Args[0] 3129 v_1 := v.Args[1] 3130 if v_1.Op != OpConst64 { 3131 break 3132 } 3133 c := v_1.AuxInt 3134 if !(uint64(c) < 16) { 3135 break 3136 } 3137 v.reset(OpPPC64SLWconst) 3138 v.AuxInt = c 3139 v.AddArg(x) 3140 return true 3141 } 3142 // match: (Lsh16x64 _ (Const64 [c])) 3143 // cond: uint64(c) >= 16 3144 // result: (MOVDconst [0]) 3145 for { 3146 _ = v.Args[1] 3147 v_1 := v.Args[1] 3148 if v_1.Op != OpConst64 { 3149 break 3150 } 3151 c := v_1.AuxInt 3152 if !(uint64(c) >= 16) { 3153 break 3154 } 3155 v.reset(OpPPC64MOVDconst) 3156 v.AuxInt = 0 3157 return true 3158 } 3159 // match: (Lsh16x64 x (MOVDconst [c])) 3160 // cond: uint64(c) < 16 3161 // result: (SLWconst x [c]) 3162 for { 3163 _ = v.Args[1] 3164 x := v.Args[0] 3165 v_1 := v.Args[1] 3166 if v_1.Op != OpPPC64MOVDconst { 3167 break 3168 } 3169 c := v_1.AuxInt 3170 if !(uint64(c) < 16) { 3171 break 3172 } 3173 v.reset(OpPPC64SLWconst) 3174 v.AuxInt = c 3175 v.AddArg(x) 3176 return true 3177 } 3178 // match: (Lsh16x64 x y) 3179 // cond: 3180 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] y)))) 3181 for { 3182 _ = v.Args[1] 3183 x := v.Args[0] 3184 y := v.Args[1] 3185 v.reset(OpPPC64SLW) 3186 v.AddArg(x) 3187 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3188 v0.AddArg(y) 3189 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3190 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3191 v2.AuxInt = -16 3192 v2.AddArg(y) 3193 v1.AddArg(v2) 3194 v0.AddArg(v1) 3195 v.AddArg(v0) 3196 return true 3197 } 3198 } 3199 func rewriteValuePPC64_OpLsh16x8_0(v *Value) bool { 3200 b := v.Block 3201 _ = b 3202 typ := &b.Func.Config.Types 3203 _ = typ 3204 // match: (Lsh16x8 x y) 3205 // cond: 3206 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt8to64 y))))) 3207 for { 3208 _ = v.Args[1] 3209 x := v.Args[0] 3210 y := v.Args[1] 3211 v.reset(OpPPC64SLW) 3212 v.AddArg(x) 3213 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3214 v0.AddArg(y) 3215 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3216 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3217 v2.AuxInt = -16 3218 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 3219 v3.AddArg(y) 3220 v2.AddArg(v3) 3221 v1.AddArg(v2) 3222 v0.AddArg(v1) 3223 v.AddArg(v0) 3224 return true 3225 } 3226 } 3227 func rewriteValuePPC64_OpLsh32x16_0(v *Value) bool { 3228 b := v.Block 3229 _ = b 3230 typ := &b.Func.Config.Types 3231 _ = typ 3232 // match: (Lsh32x16 x y) 3233 // cond: 3234 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt16to64 y))))) 3235 for { 3236 _ = v.Args[1] 3237 x := v.Args[0] 3238 y := v.Args[1] 3239 v.reset(OpPPC64SLW) 3240 v.AddArg(x) 3241 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3242 v0.AddArg(y) 3243 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3244 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3245 v2.AuxInt = -32 3246 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 3247 v3.AddArg(y) 3248 v2.AddArg(v3) 3249 v1.AddArg(v2) 3250 v0.AddArg(v1) 3251 v.AddArg(v0) 3252 return true 3253 } 3254 } 3255 func rewriteValuePPC64_OpLsh32x32_0(v *Value) bool { 3256 b := v.Block 3257 _ = b 3258 typ := &b.Func.Config.Types 3259 _ = typ 3260 // match: (Lsh32x32 x (Const64 [c])) 3261 // cond: uint32(c) < 32 3262 // result: (SLWconst x [c]) 3263 for { 3264 _ = v.Args[1] 3265 x := v.Args[0] 3266 v_1 := v.Args[1] 3267 if v_1.Op != OpConst64 { 3268 break 3269 } 3270 c := v_1.AuxInt 3271 if !(uint32(c) < 32) { 3272 break 3273 } 3274 v.reset(OpPPC64SLWconst) 3275 v.AuxInt = c 3276 v.AddArg(x) 3277 return true 3278 } 3279 // match: (Lsh32x32 x (MOVDconst [c])) 3280 // cond: uint32(c) < 32 3281 // result: (SLWconst x [c]) 3282 for { 3283 _ = v.Args[1] 3284 x := v.Args[0] 3285 v_1 := v.Args[1] 3286 if v_1.Op != OpPPC64MOVDconst { 3287 break 3288 } 3289 c := v_1.AuxInt 3290 if !(uint32(c) < 32) { 3291 break 3292 } 3293 v.reset(OpPPC64SLWconst) 3294 v.AuxInt = c 3295 v.AddArg(x) 3296 return true 3297 } 3298 // match: (Lsh32x32 x y) 3299 // cond: 3300 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt32to64 y))))) 3301 for { 3302 _ = v.Args[1] 3303 x := v.Args[0] 3304 y := v.Args[1] 3305 v.reset(OpPPC64SLW) 3306 v.AddArg(x) 3307 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3308 v0.AddArg(y) 3309 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3310 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3311 v2.AuxInt = -32 3312 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 3313 v3.AddArg(y) 3314 v2.AddArg(v3) 3315 v1.AddArg(v2) 3316 v0.AddArg(v1) 3317 v.AddArg(v0) 3318 return true 3319 } 3320 } 3321 func rewriteValuePPC64_OpLsh32x64_0(v *Value) bool { 3322 b := v.Block 3323 _ = b 3324 typ := &b.Func.Config.Types 3325 _ = typ 3326 // match: (Lsh32x64 x (Const64 [c])) 3327 // cond: uint64(c) < 32 3328 // result: (SLWconst x [c]) 3329 for { 3330 _ = v.Args[1] 3331 x := v.Args[0] 3332 v_1 := v.Args[1] 3333 if v_1.Op != OpConst64 { 3334 break 3335 } 3336 c := v_1.AuxInt 3337 if !(uint64(c) < 32) { 3338 break 3339 } 3340 v.reset(OpPPC64SLWconst) 3341 v.AuxInt = c 3342 v.AddArg(x) 3343 return true 3344 } 3345 // match: (Lsh32x64 _ (Const64 [c])) 3346 // cond: uint64(c) >= 32 3347 // result: (MOVDconst [0]) 3348 for { 3349 _ = v.Args[1] 3350 v_1 := v.Args[1] 3351 if v_1.Op != OpConst64 { 3352 break 3353 } 3354 c := v_1.AuxInt 3355 if !(uint64(c) >= 32) { 3356 break 3357 } 3358 v.reset(OpPPC64MOVDconst) 3359 v.AuxInt = 0 3360 return true 3361 } 3362 // match: (Lsh32x64 x (MOVDconst [c])) 3363 // cond: uint64(c) < 32 3364 // result: (SLWconst x [c]) 3365 for { 3366 _ = v.Args[1] 3367 x := v.Args[0] 3368 v_1 := v.Args[1] 3369 if v_1.Op != OpPPC64MOVDconst { 3370 break 3371 } 3372 c := v_1.AuxInt 3373 if !(uint64(c) < 32) { 3374 break 3375 } 3376 v.reset(OpPPC64SLWconst) 3377 v.AuxInt = c 3378 v.AddArg(x) 3379 return true 3380 } 3381 // match: (Lsh32x64 x (AND y (MOVDconst [31]))) 3382 // cond: 3383 // result: (SLW x (ANDconst <typ.Int32> [31] y)) 3384 for { 3385 _ = v.Args[1] 3386 x := v.Args[0] 3387 v_1 := v.Args[1] 3388 if v_1.Op != OpPPC64AND { 3389 break 3390 } 3391 _ = v_1.Args[1] 3392 y := v_1.Args[0] 3393 v_1_1 := v_1.Args[1] 3394 if v_1_1.Op != OpPPC64MOVDconst { 3395 break 3396 } 3397 if v_1_1.AuxInt != 31 { 3398 break 3399 } 3400 v.reset(OpPPC64SLW) 3401 v.AddArg(x) 3402 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32) 3403 v0.AuxInt = 31 3404 v0.AddArg(y) 3405 v.AddArg(v0) 3406 return true 3407 } 3408 // match: (Lsh32x64 x (AND (MOVDconst [31]) y)) 3409 // cond: 3410 // result: (SLW x (ANDconst <typ.Int32> [31] y)) 3411 for { 3412 _ = v.Args[1] 3413 x := v.Args[0] 3414 v_1 := v.Args[1] 3415 if v_1.Op != OpPPC64AND { 3416 break 3417 } 3418 _ = v_1.Args[1] 3419 v_1_0 := v_1.Args[0] 3420 if v_1_0.Op != OpPPC64MOVDconst { 3421 break 3422 } 3423 if v_1_0.AuxInt != 31 { 3424 break 3425 } 3426 y := v_1.Args[1] 3427 v.reset(OpPPC64SLW) 3428 v.AddArg(x) 3429 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32) 3430 v0.AuxInt = 31 3431 v0.AddArg(y) 3432 v.AddArg(v0) 3433 return true 3434 } 3435 // match: (Lsh32x64 x (ANDconst <typ.Int32> [31] y)) 3436 // cond: 3437 // result: (SLW x (ANDconst <typ.Int32> [31] y)) 3438 for { 3439 _ = v.Args[1] 3440 x := v.Args[0] 3441 v_1 := v.Args[1] 3442 if v_1.Op != OpPPC64ANDconst { 3443 break 3444 } 3445 if v_1.Type != typ.Int32 { 3446 break 3447 } 3448 if v_1.AuxInt != 31 { 3449 break 3450 } 3451 y := v_1.Args[0] 3452 v.reset(OpPPC64SLW) 3453 v.AddArg(x) 3454 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32) 3455 v0.AuxInt = 31 3456 v0.AddArg(y) 3457 v.AddArg(v0) 3458 return true 3459 } 3460 // match: (Lsh32x64 x y) 3461 // cond: 3462 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] y)))) 3463 for { 3464 _ = v.Args[1] 3465 x := v.Args[0] 3466 y := v.Args[1] 3467 v.reset(OpPPC64SLW) 3468 v.AddArg(x) 3469 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3470 v0.AddArg(y) 3471 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3472 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3473 v2.AuxInt = -32 3474 v2.AddArg(y) 3475 v1.AddArg(v2) 3476 v0.AddArg(v1) 3477 v.AddArg(v0) 3478 return true 3479 } 3480 } 3481 func rewriteValuePPC64_OpLsh32x8_0(v *Value) bool { 3482 b := v.Block 3483 _ = b 3484 typ := &b.Func.Config.Types 3485 _ = typ 3486 // match: (Lsh32x8 x y) 3487 // cond: 3488 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt8to64 y))))) 3489 for { 3490 _ = v.Args[1] 3491 x := v.Args[0] 3492 y := v.Args[1] 3493 v.reset(OpPPC64SLW) 3494 v.AddArg(x) 3495 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3496 v0.AddArg(y) 3497 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3498 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3499 v2.AuxInt = -32 3500 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 3501 v3.AddArg(y) 3502 v2.AddArg(v3) 3503 v1.AddArg(v2) 3504 v0.AddArg(v1) 3505 v.AddArg(v0) 3506 return true 3507 } 3508 } 3509 func rewriteValuePPC64_OpLsh64x16_0(v *Value) bool { 3510 b := v.Block 3511 _ = b 3512 typ := &b.Func.Config.Types 3513 _ = typ 3514 // match: (Lsh64x16 x y) 3515 // cond: 3516 // result: (SLD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt16to64 y))))) 3517 for { 3518 _ = v.Args[1] 3519 x := v.Args[0] 3520 y := v.Args[1] 3521 v.reset(OpPPC64SLD) 3522 v.AddArg(x) 3523 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3524 v0.AddArg(y) 3525 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3526 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3527 v2.AuxInt = -64 3528 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 3529 v3.AddArg(y) 3530 v2.AddArg(v3) 3531 v1.AddArg(v2) 3532 v0.AddArg(v1) 3533 v.AddArg(v0) 3534 return true 3535 } 3536 } 3537 func rewriteValuePPC64_OpLsh64x32_0(v *Value) bool { 3538 b := v.Block 3539 _ = b 3540 typ := &b.Func.Config.Types 3541 _ = typ 3542 // match: (Lsh64x32 x (Const64 [c])) 3543 // cond: uint32(c) < 64 3544 // result: (SLDconst x [c]) 3545 for { 3546 _ = v.Args[1] 3547 x := v.Args[0] 3548 v_1 := v.Args[1] 3549 if v_1.Op != OpConst64 { 3550 break 3551 } 3552 c := v_1.AuxInt 3553 if !(uint32(c) < 64) { 3554 break 3555 } 3556 v.reset(OpPPC64SLDconst) 3557 v.AuxInt = c 3558 v.AddArg(x) 3559 return true 3560 } 3561 // match: (Lsh64x32 x (MOVDconst [c])) 3562 // cond: uint32(c) < 64 3563 // result: (SLDconst x [c]) 3564 for { 3565 _ = v.Args[1] 3566 x := v.Args[0] 3567 v_1 := v.Args[1] 3568 if v_1.Op != OpPPC64MOVDconst { 3569 break 3570 } 3571 c := v_1.AuxInt 3572 if !(uint32(c) < 64) { 3573 break 3574 } 3575 v.reset(OpPPC64SLDconst) 3576 v.AuxInt = c 3577 v.AddArg(x) 3578 return true 3579 } 3580 // match: (Lsh64x32 x y) 3581 // cond: 3582 // result: (SLD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt32to64 y))))) 3583 for { 3584 _ = v.Args[1] 3585 x := v.Args[0] 3586 y := v.Args[1] 3587 v.reset(OpPPC64SLD) 3588 v.AddArg(x) 3589 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3590 v0.AddArg(y) 3591 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3592 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3593 v2.AuxInt = -64 3594 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 3595 v3.AddArg(y) 3596 v2.AddArg(v3) 3597 v1.AddArg(v2) 3598 v0.AddArg(v1) 3599 v.AddArg(v0) 3600 return true 3601 } 3602 } 3603 func rewriteValuePPC64_OpLsh64x64_0(v *Value) bool { 3604 b := v.Block 3605 _ = b 3606 typ := &b.Func.Config.Types 3607 _ = typ 3608 // match: (Lsh64x64 x (Const64 [c])) 3609 // cond: uint64(c) < 64 3610 // result: (SLDconst x [c]) 3611 for { 3612 _ = v.Args[1] 3613 x := v.Args[0] 3614 v_1 := v.Args[1] 3615 if v_1.Op != OpConst64 { 3616 break 3617 } 3618 c := v_1.AuxInt 3619 if !(uint64(c) < 64) { 3620 break 3621 } 3622 v.reset(OpPPC64SLDconst) 3623 v.AuxInt = c 3624 v.AddArg(x) 3625 return true 3626 } 3627 // match: (Lsh64x64 _ (Const64 [c])) 3628 // cond: uint64(c) >= 64 3629 // result: (MOVDconst [0]) 3630 for { 3631 _ = v.Args[1] 3632 v_1 := v.Args[1] 3633 if v_1.Op != OpConst64 { 3634 break 3635 } 3636 c := v_1.AuxInt 3637 if !(uint64(c) >= 64) { 3638 break 3639 } 3640 v.reset(OpPPC64MOVDconst) 3641 v.AuxInt = 0 3642 return true 3643 } 3644 // match: (Lsh64x64 x (MOVDconst [c])) 3645 // cond: uint64(c) < 64 3646 // result: (SLDconst x [c]) 3647 for { 3648 _ = v.Args[1] 3649 x := v.Args[0] 3650 v_1 := v.Args[1] 3651 if v_1.Op != OpPPC64MOVDconst { 3652 break 3653 } 3654 c := v_1.AuxInt 3655 if !(uint64(c) < 64) { 3656 break 3657 } 3658 v.reset(OpPPC64SLDconst) 3659 v.AuxInt = c 3660 v.AddArg(x) 3661 return true 3662 } 3663 // match: (Lsh64x64 x (AND y (MOVDconst [63]))) 3664 // cond: 3665 // result: (SLD x (ANDconst <typ.Int64> [63] y)) 3666 for { 3667 _ = v.Args[1] 3668 x := v.Args[0] 3669 v_1 := v.Args[1] 3670 if v_1.Op != OpPPC64AND { 3671 break 3672 } 3673 _ = v_1.Args[1] 3674 y := v_1.Args[0] 3675 v_1_1 := v_1.Args[1] 3676 if v_1_1.Op != OpPPC64MOVDconst { 3677 break 3678 } 3679 if v_1_1.AuxInt != 63 { 3680 break 3681 } 3682 v.reset(OpPPC64SLD) 3683 v.AddArg(x) 3684 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64) 3685 v0.AuxInt = 63 3686 v0.AddArg(y) 3687 v.AddArg(v0) 3688 return true 3689 } 3690 // match: (Lsh64x64 x (AND (MOVDconst [63]) y)) 3691 // cond: 3692 // result: (SLD x (ANDconst <typ.Int64> [63] y)) 3693 for { 3694 _ = v.Args[1] 3695 x := v.Args[0] 3696 v_1 := v.Args[1] 3697 if v_1.Op != OpPPC64AND { 3698 break 3699 } 3700 _ = v_1.Args[1] 3701 v_1_0 := v_1.Args[0] 3702 if v_1_0.Op != OpPPC64MOVDconst { 3703 break 3704 } 3705 if v_1_0.AuxInt != 63 { 3706 break 3707 } 3708 y := v_1.Args[1] 3709 v.reset(OpPPC64SLD) 3710 v.AddArg(x) 3711 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64) 3712 v0.AuxInt = 63 3713 v0.AddArg(y) 3714 v.AddArg(v0) 3715 return true 3716 } 3717 // match: (Lsh64x64 x (ANDconst <typ.Int64> [63] y)) 3718 // cond: 3719 // result: (SLD x (ANDconst <typ.Int64> [63] y)) 3720 for { 3721 _ = v.Args[1] 3722 x := v.Args[0] 3723 v_1 := v.Args[1] 3724 if v_1.Op != OpPPC64ANDconst { 3725 break 3726 } 3727 if v_1.Type != typ.Int64 { 3728 break 3729 } 3730 if v_1.AuxInt != 63 { 3731 break 3732 } 3733 y := v_1.Args[0] 3734 v.reset(OpPPC64SLD) 3735 v.AddArg(x) 3736 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64) 3737 v0.AuxInt = 63 3738 v0.AddArg(y) 3739 v.AddArg(v0) 3740 return true 3741 } 3742 // match: (Lsh64x64 x y) 3743 // cond: 3744 // result: (SLD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] y)))) 3745 for { 3746 _ = v.Args[1] 3747 x := v.Args[0] 3748 y := v.Args[1] 3749 v.reset(OpPPC64SLD) 3750 v.AddArg(x) 3751 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3752 v0.AddArg(y) 3753 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3754 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3755 v2.AuxInt = -64 3756 v2.AddArg(y) 3757 v1.AddArg(v2) 3758 v0.AddArg(v1) 3759 v.AddArg(v0) 3760 return true 3761 } 3762 } 3763 func rewriteValuePPC64_OpLsh64x8_0(v *Value) bool { 3764 b := v.Block 3765 _ = b 3766 typ := &b.Func.Config.Types 3767 _ = typ 3768 // match: (Lsh64x8 x y) 3769 // cond: 3770 // result: (SLD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt8to64 y))))) 3771 for { 3772 _ = v.Args[1] 3773 x := v.Args[0] 3774 y := v.Args[1] 3775 v.reset(OpPPC64SLD) 3776 v.AddArg(x) 3777 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3778 v0.AddArg(y) 3779 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3780 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3781 v2.AuxInt = -64 3782 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 3783 v3.AddArg(y) 3784 v2.AddArg(v3) 3785 v1.AddArg(v2) 3786 v0.AddArg(v1) 3787 v.AddArg(v0) 3788 return true 3789 } 3790 } 3791 func rewriteValuePPC64_OpLsh8x16_0(v *Value) bool { 3792 b := v.Block 3793 _ = b 3794 typ := &b.Func.Config.Types 3795 _ = typ 3796 // match: (Lsh8x16 x y) 3797 // cond: 3798 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt16to64 y))))) 3799 for { 3800 _ = v.Args[1] 3801 x := v.Args[0] 3802 y := v.Args[1] 3803 v.reset(OpPPC64SLW) 3804 v.AddArg(x) 3805 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3806 v0.AddArg(y) 3807 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3808 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3809 v2.AuxInt = -8 3810 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 3811 v3.AddArg(y) 3812 v2.AddArg(v3) 3813 v1.AddArg(v2) 3814 v0.AddArg(v1) 3815 v.AddArg(v0) 3816 return true 3817 } 3818 } 3819 func rewriteValuePPC64_OpLsh8x32_0(v *Value) bool { 3820 b := v.Block 3821 _ = b 3822 typ := &b.Func.Config.Types 3823 _ = typ 3824 // match: (Lsh8x32 x (Const64 [c])) 3825 // cond: uint32(c) < 8 3826 // result: (SLWconst x [c]) 3827 for { 3828 _ = v.Args[1] 3829 x := v.Args[0] 3830 v_1 := v.Args[1] 3831 if v_1.Op != OpConst64 { 3832 break 3833 } 3834 c := v_1.AuxInt 3835 if !(uint32(c) < 8) { 3836 break 3837 } 3838 v.reset(OpPPC64SLWconst) 3839 v.AuxInt = c 3840 v.AddArg(x) 3841 return true 3842 } 3843 // match: (Lsh8x32 x (MOVDconst [c])) 3844 // cond: uint32(c) < 8 3845 // result: (SLWconst x [c]) 3846 for { 3847 _ = v.Args[1] 3848 x := v.Args[0] 3849 v_1 := v.Args[1] 3850 if v_1.Op != OpPPC64MOVDconst { 3851 break 3852 } 3853 c := v_1.AuxInt 3854 if !(uint32(c) < 8) { 3855 break 3856 } 3857 v.reset(OpPPC64SLWconst) 3858 v.AuxInt = c 3859 v.AddArg(x) 3860 return true 3861 } 3862 // match: (Lsh8x32 x y) 3863 // cond: 3864 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt32to64 y))))) 3865 for { 3866 _ = v.Args[1] 3867 x := v.Args[0] 3868 y := v.Args[1] 3869 v.reset(OpPPC64SLW) 3870 v.AddArg(x) 3871 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3872 v0.AddArg(y) 3873 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3874 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3875 v2.AuxInt = -8 3876 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 3877 v3.AddArg(y) 3878 v2.AddArg(v3) 3879 v1.AddArg(v2) 3880 v0.AddArg(v1) 3881 v.AddArg(v0) 3882 return true 3883 } 3884 } 3885 func rewriteValuePPC64_OpLsh8x64_0(v *Value) bool { 3886 b := v.Block 3887 _ = b 3888 typ := &b.Func.Config.Types 3889 _ = typ 3890 // match: (Lsh8x64 x (Const64 [c])) 3891 // cond: uint64(c) < 8 3892 // result: (SLWconst x [c]) 3893 for { 3894 _ = v.Args[1] 3895 x := v.Args[0] 3896 v_1 := v.Args[1] 3897 if v_1.Op != OpConst64 { 3898 break 3899 } 3900 c := v_1.AuxInt 3901 if !(uint64(c) < 8) { 3902 break 3903 } 3904 v.reset(OpPPC64SLWconst) 3905 v.AuxInt = c 3906 v.AddArg(x) 3907 return true 3908 } 3909 // match: (Lsh8x64 _ (Const64 [c])) 3910 // cond: uint64(c) >= 8 3911 // result: (MOVDconst [0]) 3912 for { 3913 _ = v.Args[1] 3914 v_1 := v.Args[1] 3915 if v_1.Op != OpConst64 { 3916 break 3917 } 3918 c := v_1.AuxInt 3919 if !(uint64(c) >= 8) { 3920 break 3921 } 3922 v.reset(OpPPC64MOVDconst) 3923 v.AuxInt = 0 3924 return true 3925 } 3926 // match: (Lsh8x64 x (MOVDconst [c])) 3927 // cond: uint64(c) < 8 3928 // result: (SLWconst x [c]) 3929 for { 3930 _ = v.Args[1] 3931 x := v.Args[0] 3932 v_1 := v.Args[1] 3933 if v_1.Op != OpPPC64MOVDconst { 3934 break 3935 } 3936 c := v_1.AuxInt 3937 if !(uint64(c) < 8) { 3938 break 3939 } 3940 v.reset(OpPPC64SLWconst) 3941 v.AuxInt = c 3942 v.AddArg(x) 3943 return true 3944 } 3945 // match: (Lsh8x64 x y) 3946 // cond: 3947 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] y)))) 3948 for { 3949 _ = v.Args[1] 3950 x := v.Args[0] 3951 y := v.Args[1] 3952 v.reset(OpPPC64SLW) 3953 v.AddArg(x) 3954 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3955 v0.AddArg(y) 3956 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3957 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3958 v2.AuxInt = -8 3959 v2.AddArg(y) 3960 v1.AddArg(v2) 3961 v0.AddArg(v1) 3962 v.AddArg(v0) 3963 return true 3964 } 3965 } 3966 func rewriteValuePPC64_OpLsh8x8_0(v *Value) bool { 3967 b := v.Block 3968 _ = b 3969 typ := &b.Func.Config.Types 3970 _ = typ 3971 // match: (Lsh8x8 x y) 3972 // cond: 3973 // result: (SLW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt8to64 y))))) 3974 for { 3975 _ = v.Args[1] 3976 x := v.Args[0] 3977 y := v.Args[1] 3978 v.reset(OpPPC64SLW) 3979 v.AddArg(x) 3980 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 3981 v0.AddArg(y) 3982 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 3983 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 3984 v2.AuxInt = -8 3985 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 3986 v3.AddArg(y) 3987 v2.AddArg(v3) 3988 v1.AddArg(v2) 3989 v0.AddArg(v1) 3990 v.AddArg(v0) 3991 return true 3992 } 3993 } 3994 func rewriteValuePPC64_OpMod16_0(v *Value) bool { 3995 b := v.Block 3996 _ = b 3997 typ := &b.Func.Config.Types 3998 _ = typ 3999 // match: (Mod16 x y) 4000 // cond: 4001 // result: (Mod32 (SignExt16to32 x) (SignExt16to32 y)) 4002 for { 4003 _ = v.Args[1] 4004 x := v.Args[0] 4005 y := v.Args[1] 4006 v.reset(OpMod32) 4007 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 4008 v0.AddArg(x) 4009 v.AddArg(v0) 4010 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 4011 v1.AddArg(y) 4012 v.AddArg(v1) 4013 return true 4014 } 4015 } 4016 func rewriteValuePPC64_OpMod16u_0(v *Value) bool { 4017 b := v.Block 4018 _ = b 4019 typ := &b.Func.Config.Types 4020 _ = typ 4021 // match: (Mod16u x y) 4022 // cond: 4023 // result: (Mod32u (ZeroExt16to32 x) (ZeroExt16to32 y)) 4024 for { 4025 _ = v.Args[1] 4026 x := v.Args[0] 4027 y := v.Args[1] 4028 v.reset(OpMod32u) 4029 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 4030 v0.AddArg(x) 4031 v.AddArg(v0) 4032 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 4033 v1.AddArg(y) 4034 v.AddArg(v1) 4035 return true 4036 } 4037 } 4038 func rewriteValuePPC64_OpMod32_0(v *Value) bool { 4039 b := v.Block 4040 _ = b 4041 typ := &b.Func.Config.Types 4042 _ = typ 4043 // match: (Mod32 x y) 4044 // cond: 4045 // result: (SUB x (MULLW y (DIVW x y))) 4046 for { 4047 _ = v.Args[1] 4048 x := v.Args[0] 4049 y := v.Args[1] 4050 v.reset(OpPPC64SUB) 4051 v.AddArg(x) 4052 v0 := b.NewValue0(v.Pos, OpPPC64MULLW, typ.Int32) 4053 v0.AddArg(y) 4054 v1 := b.NewValue0(v.Pos, OpPPC64DIVW, typ.Int32) 4055 v1.AddArg(x) 4056 v1.AddArg(y) 4057 v0.AddArg(v1) 4058 v.AddArg(v0) 4059 return true 4060 } 4061 } 4062 func rewriteValuePPC64_OpMod32u_0(v *Value) bool { 4063 b := v.Block 4064 _ = b 4065 typ := &b.Func.Config.Types 4066 _ = typ 4067 // match: (Mod32u x y) 4068 // cond: 4069 // result: (SUB x (MULLW y (DIVWU x y))) 4070 for { 4071 _ = v.Args[1] 4072 x := v.Args[0] 4073 y := v.Args[1] 4074 v.reset(OpPPC64SUB) 4075 v.AddArg(x) 4076 v0 := b.NewValue0(v.Pos, OpPPC64MULLW, typ.Int32) 4077 v0.AddArg(y) 4078 v1 := b.NewValue0(v.Pos, OpPPC64DIVWU, typ.Int32) 4079 v1.AddArg(x) 4080 v1.AddArg(y) 4081 v0.AddArg(v1) 4082 v.AddArg(v0) 4083 return true 4084 } 4085 } 4086 func rewriteValuePPC64_OpMod64_0(v *Value) bool { 4087 b := v.Block 4088 _ = b 4089 typ := &b.Func.Config.Types 4090 _ = typ 4091 // match: (Mod64 x y) 4092 // cond: 4093 // result: (SUB x (MULLD y (DIVD x y))) 4094 for { 4095 _ = v.Args[1] 4096 x := v.Args[0] 4097 y := v.Args[1] 4098 v.reset(OpPPC64SUB) 4099 v.AddArg(x) 4100 v0 := b.NewValue0(v.Pos, OpPPC64MULLD, typ.Int64) 4101 v0.AddArg(y) 4102 v1 := b.NewValue0(v.Pos, OpPPC64DIVD, typ.Int64) 4103 v1.AddArg(x) 4104 v1.AddArg(y) 4105 v0.AddArg(v1) 4106 v.AddArg(v0) 4107 return true 4108 } 4109 } 4110 func rewriteValuePPC64_OpMod64u_0(v *Value) bool { 4111 b := v.Block 4112 _ = b 4113 typ := &b.Func.Config.Types 4114 _ = typ 4115 // match: (Mod64u x y) 4116 // cond: 4117 // result: (SUB x (MULLD y (DIVDU x y))) 4118 for { 4119 _ = v.Args[1] 4120 x := v.Args[0] 4121 y := v.Args[1] 4122 v.reset(OpPPC64SUB) 4123 v.AddArg(x) 4124 v0 := b.NewValue0(v.Pos, OpPPC64MULLD, typ.Int64) 4125 v0.AddArg(y) 4126 v1 := b.NewValue0(v.Pos, OpPPC64DIVDU, typ.Int64) 4127 v1.AddArg(x) 4128 v1.AddArg(y) 4129 v0.AddArg(v1) 4130 v.AddArg(v0) 4131 return true 4132 } 4133 } 4134 func rewriteValuePPC64_OpMod8_0(v *Value) bool { 4135 b := v.Block 4136 _ = b 4137 typ := &b.Func.Config.Types 4138 _ = typ 4139 // match: (Mod8 x y) 4140 // cond: 4141 // result: (Mod32 (SignExt8to32 x) (SignExt8to32 y)) 4142 for { 4143 _ = v.Args[1] 4144 x := v.Args[0] 4145 y := v.Args[1] 4146 v.reset(OpMod32) 4147 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 4148 v0.AddArg(x) 4149 v.AddArg(v0) 4150 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 4151 v1.AddArg(y) 4152 v.AddArg(v1) 4153 return true 4154 } 4155 } 4156 func rewriteValuePPC64_OpMod8u_0(v *Value) bool { 4157 b := v.Block 4158 _ = b 4159 typ := &b.Func.Config.Types 4160 _ = typ 4161 // match: (Mod8u x y) 4162 // cond: 4163 // result: (Mod32u (ZeroExt8to32 x) (ZeroExt8to32 y)) 4164 for { 4165 _ = v.Args[1] 4166 x := v.Args[0] 4167 y := v.Args[1] 4168 v.reset(OpMod32u) 4169 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 4170 v0.AddArg(x) 4171 v.AddArg(v0) 4172 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 4173 v1.AddArg(y) 4174 v.AddArg(v1) 4175 return true 4176 } 4177 } 4178 func rewriteValuePPC64_OpMove_0(v *Value) bool { 4179 b := v.Block 4180 _ = b 4181 typ := &b.Func.Config.Types 4182 _ = typ 4183 // match: (Move [0] _ _ mem) 4184 // cond: 4185 // result: mem 4186 for { 4187 if v.AuxInt != 0 { 4188 break 4189 } 4190 _ = v.Args[2] 4191 mem := v.Args[2] 4192 v.reset(OpCopy) 4193 v.Type = mem.Type 4194 v.AddArg(mem) 4195 return true 4196 } 4197 // match: (Move [1] dst src mem) 4198 // cond: 4199 // result: (MOVBstore dst (MOVBZload src mem) mem) 4200 for { 4201 if v.AuxInt != 1 { 4202 break 4203 } 4204 _ = v.Args[2] 4205 dst := v.Args[0] 4206 src := v.Args[1] 4207 mem := v.Args[2] 4208 v.reset(OpPPC64MOVBstore) 4209 v.AddArg(dst) 4210 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8) 4211 v0.AddArg(src) 4212 v0.AddArg(mem) 4213 v.AddArg(v0) 4214 v.AddArg(mem) 4215 return true 4216 } 4217 // match: (Move [2] dst src mem) 4218 // cond: 4219 // result: (MOVHstore dst (MOVHZload src mem) mem) 4220 for { 4221 if v.AuxInt != 2 { 4222 break 4223 } 4224 _ = v.Args[2] 4225 dst := v.Args[0] 4226 src := v.Args[1] 4227 mem := v.Args[2] 4228 v.reset(OpPPC64MOVHstore) 4229 v.AddArg(dst) 4230 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZload, typ.UInt16) 4231 v0.AddArg(src) 4232 v0.AddArg(mem) 4233 v.AddArg(v0) 4234 v.AddArg(mem) 4235 return true 4236 } 4237 // match: (Move [4] dst src mem) 4238 // cond: 4239 // result: (MOVWstore dst (MOVWZload src mem) mem) 4240 for { 4241 if v.AuxInt != 4 { 4242 break 4243 } 4244 _ = v.Args[2] 4245 dst := v.Args[0] 4246 src := v.Args[1] 4247 mem := v.Args[2] 4248 v.reset(OpPPC64MOVWstore) 4249 v.AddArg(dst) 4250 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32) 4251 v0.AddArg(src) 4252 v0.AddArg(mem) 4253 v.AddArg(v0) 4254 v.AddArg(mem) 4255 return true 4256 } 4257 // match: (Move [8] {t} dst src mem) 4258 // cond: t.(*types.Type).Alignment()%4 == 0 4259 // result: (MOVDstore dst (MOVDload src mem) mem) 4260 for { 4261 if v.AuxInt != 8 { 4262 break 4263 } 4264 t := v.Aux 4265 _ = v.Args[2] 4266 dst := v.Args[0] 4267 src := v.Args[1] 4268 mem := v.Args[2] 4269 if !(t.(*types.Type).Alignment()%4 == 0) { 4270 break 4271 } 4272 v.reset(OpPPC64MOVDstore) 4273 v.AddArg(dst) 4274 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, typ.Int64) 4275 v0.AddArg(src) 4276 v0.AddArg(mem) 4277 v.AddArg(v0) 4278 v.AddArg(mem) 4279 return true 4280 } 4281 // match: (Move [8] dst src mem) 4282 // cond: 4283 // result: (MOVWstore [4] dst (MOVWZload [4] src mem) (MOVWstore dst (MOVWZload src mem) mem)) 4284 for { 4285 if v.AuxInt != 8 { 4286 break 4287 } 4288 _ = v.Args[2] 4289 dst := v.Args[0] 4290 src := v.Args[1] 4291 mem := v.Args[2] 4292 v.reset(OpPPC64MOVWstore) 4293 v.AuxInt = 4 4294 v.AddArg(dst) 4295 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32) 4296 v0.AuxInt = 4 4297 v0.AddArg(src) 4298 v0.AddArg(mem) 4299 v.AddArg(v0) 4300 v1 := b.NewValue0(v.Pos, OpPPC64MOVWstore, types.TypeMem) 4301 v1.AddArg(dst) 4302 v2 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32) 4303 v2.AddArg(src) 4304 v2.AddArg(mem) 4305 v1.AddArg(v2) 4306 v1.AddArg(mem) 4307 v.AddArg(v1) 4308 return true 4309 } 4310 // match: (Move [3] dst src mem) 4311 // cond: 4312 // result: (MOVBstore [2] dst (MOVBZload [2] src mem) (MOVHstore dst (MOVHload src mem) mem)) 4313 for { 4314 if v.AuxInt != 3 { 4315 break 4316 } 4317 _ = v.Args[2] 4318 dst := v.Args[0] 4319 src := v.Args[1] 4320 mem := v.Args[2] 4321 v.reset(OpPPC64MOVBstore) 4322 v.AuxInt = 2 4323 v.AddArg(dst) 4324 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8) 4325 v0.AuxInt = 2 4326 v0.AddArg(src) 4327 v0.AddArg(mem) 4328 v.AddArg(v0) 4329 v1 := b.NewValue0(v.Pos, OpPPC64MOVHstore, types.TypeMem) 4330 v1.AddArg(dst) 4331 v2 := b.NewValue0(v.Pos, OpPPC64MOVHload, typ.Int16) 4332 v2.AddArg(src) 4333 v2.AddArg(mem) 4334 v1.AddArg(v2) 4335 v1.AddArg(mem) 4336 v.AddArg(v1) 4337 return true 4338 } 4339 // match: (Move [5] dst src mem) 4340 // cond: 4341 // result: (MOVBstore [4] dst (MOVBZload [4] src mem) (MOVWstore dst (MOVWZload src mem) mem)) 4342 for { 4343 if v.AuxInt != 5 { 4344 break 4345 } 4346 _ = v.Args[2] 4347 dst := v.Args[0] 4348 src := v.Args[1] 4349 mem := v.Args[2] 4350 v.reset(OpPPC64MOVBstore) 4351 v.AuxInt = 4 4352 v.AddArg(dst) 4353 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8) 4354 v0.AuxInt = 4 4355 v0.AddArg(src) 4356 v0.AddArg(mem) 4357 v.AddArg(v0) 4358 v1 := b.NewValue0(v.Pos, OpPPC64MOVWstore, types.TypeMem) 4359 v1.AddArg(dst) 4360 v2 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32) 4361 v2.AddArg(src) 4362 v2.AddArg(mem) 4363 v1.AddArg(v2) 4364 v1.AddArg(mem) 4365 v.AddArg(v1) 4366 return true 4367 } 4368 // match: (Move [6] dst src mem) 4369 // cond: 4370 // result: (MOVHstore [4] dst (MOVHZload [4] src mem) (MOVWstore dst (MOVWZload src mem) mem)) 4371 for { 4372 if v.AuxInt != 6 { 4373 break 4374 } 4375 _ = v.Args[2] 4376 dst := v.Args[0] 4377 src := v.Args[1] 4378 mem := v.Args[2] 4379 v.reset(OpPPC64MOVHstore) 4380 v.AuxInt = 4 4381 v.AddArg(dst) 4382 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZload, typ.UInt16) 4383 v0.AuxInt = 4 4384 v0.AddArg(src) 4385 v0.AddArg(mem) 4386 v.AddArg(v0) 4387 v1 := b.NewValue0(v.Pos, OpPPC64MOVWstore, types.TypeMem) 4388 v1.AddArg(dst) 4389 v2 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32) 4390 v2.AddArg(src) 4391 v2.AddArg(mem) 4392 v1.AddArg(v2) 4393 v1.AddArg(mem) 4394 v.AddArg(v1) 4395 return true 4396 } 4397 // match: (Move [7] dst src mem) 4398 // cond: 4399 // result: (MOVBstore [6] dst (MOVBZload [6] src mem) (MOVHstore [4] dst (MOVHZload [4] src mem) (MOVWstore dst (MOVWZload src mem) mem))) 4400 for { 4401 if v.AuxInt != 7 { 4402 break 4403 } 4404 _ = v.Args[2] 4405 dst := v.Args[0] 4406 src := v.Args[1] 4407 mem := v.Args[2] 4408 v.reset(OpPPC64MOVBstore) 4409 v.AuxInt = 6 4410 v.AddArg(dst) 4411 v0 := b.NewValue0(v.Pos, OpPPC64MOVBZload, typ.UInt8) 4412 v0.AuxInt = 6 4413 v0.AddArg(src) 4414 v0.AddArg(mem) 4415 v.AddArg(v0) 4416 v1 := b.NewValue0(v.Pos, OpPPC64MOVHstore, types.TypeMem) 4417 v1.AuxInt = 4 4418 v1.AddArg(dst) 4419 v2 := b.NewValue0(v.Pos, OpPPC64MOVHZload, typ.UInt16) 4420 v2.AuxInt = 4 4421 v2.AddArg(src) 4422 v2.AddArg(mem) 4423 v1.AddArg(v2) 4424 v3 := b.NewValue0(v.Pos, OpPPC64MOVWstore, types.TypeMem) 4425 v3.AddArg(dst) 4426 v4 := b.NewValue0(v.Pos, OpPPC64MOVWZload, typ.UInt32) 4427 v4.AddArg(src) 4428 v4.AddArg(mem) 4429 v3.AddArg(v4) 4430 v3.AddArg(mem) 4431 v1.AddArg(v3) 4432 v.AddArg(v1) 4433 return true 4434 } 4435 return false 4436 } 4437 func rewriteValuePPC64_OpMove_10(v *Value) bool { 4438 // match: (Move [s] dst src mem) 4439 // cond: s > 8 4440 // result: (LoweredMove [s] dst src mem) 4441 for { 4442 s := v.AuxInt 4443 _ = v.Args[2] 4444 dst := v.Args[0] 4445 src := v.Args[1] 4446 mem := v.Args[2] 4447 if !(s > 8) { 4448 break 4449 } 4450 v.reset(OpPPC64LoweredMove) 4451 v.AuxInt = s 4452 v.AddArg(dst) 4453 v.AddArg(src) 4454 v.AddArg(mem) 4455 return true 4456 } 4457 return false 4458 } 4459 func rewriteValuePPC64_OpMul16_0(v *Value) bool { 4460 // match: (Mul16 x y) 4461 // cond: 4462 // result: (MULLW x y) 4463 for { 4464 _ = v.Args[1] 4465 x := v.Args[0] 4466 y := v.Args[1] 4467 v.reset(OpPPC64MULLW) 4468 v.AddArg(x) 4469 v.AddArg(y) 4470 return true 4471 } 4472 } 4473 func rewriteValuePPC64_OpMul32_0(v *Value) bool { 4474 // match: (Mul32 x y) 4475 // cond: 4476 // result: (MULLW x y) 4477 for { 4478 _ = v.Args[1] 4479 x := v.Args[0] 4480 y := v.Args[1] 4481 v.reset(OpPPC64MULLW) 4482 v.AddArg(x) 4483 v.AddArg(y) 4484 return true 4485 } 4486 } 4487 func rewriteValuePPC64_OpMul32F_0(v *Value) bool { 4488 // match: (Mul32F x y) 4489 // cond: 4490 // result: (FMULS x y) 4491 for { 4492 _ = v.Args[1] 4493 x := v.Args[0] 4494 y := v.Args[1] 4495 v.reset(OpPPC64FMULS) 4496 v.AddArg(x) 4497 v.AddArg(y) 4498 return true 4499 } 4500 } 4501 func rewriteValuePPC64_OpMul64_0(v *Value) bool { 4502 // match: (Mul64 x y) 4503 // cond: 4504 // result: (MULLD x y) 4505 for { 4506 _ = v.Args[1] 4507 x := v.Args[0] 4508 y := v.Args[1] 4509 v.reset(OpPPC64MULLD) 4510 v.AddArg(x) 4511 v.AddArg(y) 4512 return true 4513 } 4514 } 4515 func rewriteValuePPC64_OpMul64F_0(v *Value) bool { 4516 // match: (Mul64F x y) 4517 // cond: 4518 // result: (FMUL x y) 4519 for { 4520 _ = v.Args[1] 4521 x := v.Args[0] 4522 y := v.Args[1] 4523 v.reset(OpPPC64FMUL) 4524 v.AddArg(x) 4525 v.AddArg(y) 4526 return true 4527 } 4528 } 4529 func rewriteValuePPC64_OpMul8_0(v *Value) bool { 4530 // match: (Mul8 x y) 4531 // cond: 4532 // result: (MULLW x y) 4533 for { 4534 _ = v.Args[1] 4535 x := v.Args[0] 4536 y := v.Args[1] 4537 v.reset(OpPPC64MULLW) 4538 v.AddArg(x) 4539 v.AddArg(y) 4540 return true 4541 } 4542 } 4543 func rewriteValuePPC64_OpNeg16_0(v *Value) bool { 4544 // match: (Neg16 x) 4545 // cond: 4546 // result: (NEG x) 4547 for { 4548 x := v.Args[0] 4549 v.reset(OpPPC64NEG) 4550 v.AddArg(x) 4551 return true 4552 } 4553 } 4554 func rewriteValuePPC64_OpNeg32_0(v *Value) bool { 4555 // match: (Neg32 x) 4556 // cond: 4557 // result: (NEG x) 4558 for { 4559 x := v.Args[0] 4560 v.reset(OpPPC64NEG) 4561 v.AddArg(x) 4562 return true 4563 } 4564 } 4565 func rewriteValuePPC64_OpNeg32F_0(v *Value) bool { 4566 // match: (Neg32F x) 4567 // cond: 4568 // result: (FNEG x) 4569 for { 4570 x := v.Args[0] 4571 v.reset(OpPPC64FNEG) 4572 v.AddArg(x) 4573 return true 4574 } 4575 } 4576 func rewriteValuePPC64_OpNeg64_0(v *Value) bool { 4577 // match: (Neg64 x) 4578 // cond: 4579 // result: (NEG x) 4580 for { 4581 x := v.Args[0] 4582 v.reset(OpPPC64NEG) 4583 v.AddArg(x) 4584 return true 4585 } 4586 } 4587 func rewriteValuePPC64_OpNeg64F_0(v *Value) bool { 4588 // match: (Neg64F x) 4589 // cond: 4590 // result: (FNEG x) 4591 for { 4592 x := v.Args[0] 4593 v.reset(OpPPC64FNEG) 4594 v.AddArg(x) 4595 return true 4596 } 4597 } 4598 func rewriteValuePPC64_OpNeg8_0(v *Value) bool { 4599 // match: (Neg8 x) 4600 // cond: 4601 // result: (NEG x) 4602 for { 4603 x := v.Args[0] 4604 v.reset(OpPPC64NEG) 4605 v.AddArg(x) 4606 return true 4607 } 4608 } 4609 func rewriteValuePPC64_OpNeq16_0(v *Value) bool { 4610 b := v.Block 4611 _ = b 4612 typ := &b.Func.Config.Types 4613 _ = typ 4614 // match: (Neq16 x y) 4615 // cond: isSigned(x.Type) && isSigned(y.Type) 4616 // result: (NotEqual (CMPW (SignExt16to32 x) (SignExt16to32 y))) 4617 for { 4618 _ = v.Args[1] 4619 x := v.Args[0] 4620 y := v.Args[1] 4621 if !(isSigned(x.Type) && isSigned(y.Type)) { 4622 break 4623 } 4624 v.reset(OpPPC64NotEqual) 4625 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 4626 v1 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 4627 v1.AddArg(x) 4628 v0.AddArg(v1) 4629 v2 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 4630 v2.AddArg(y) 4631 v0.AddArg(v2) 4632 v.AddArg(v0) 4633 return true 4634 } 4635 // match: (Neq16 x y) 4636 // cond: 4637 // result: (NotEqual (CMPW (ZeroExt16to32 x) (ZeroExt16to32 y))) 4638 for { 4639 _ = v.Args[1] 4640 x := v.Args[0] 4641 y := v.Args[1] 4642 v.reset(OpPPC64NotEqual) 4643 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 4644 v1 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 4645 v1.AddArg(x) 4646 v0.AddArg(v1) 4647 v2 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 4648 v2.AddArg(y) 4649 v0.AddArg(v2) 4650 v.AddArg(v0) 4651 return true 4652 } 4653 } 4654 func rewriteValuePPC64_OpNeq32_0(v *Value) bool { 4655 b := v.Block 4656 _ = b 4657 // match: (Neq32 x y) 4658 // cond: 4659 // result: (NotEqual (CMPW x y)) 4660 for { 4661 _ = v.Args[1] 4662 x := v.Args[0] 4663 y := v.Args[1] 4664 v.reset(OpPPC64NotEqual) 4665 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 4666 v0.AddArg(x) 4667 v0.AddArg(y) 4668 v.AddArg(v0) 4669 return true 4670 } 4671 } 4672 func rewriteValuePPC64_OpNeq32F_0(v *Value) bool { 4673 b := v.Block 4674 _ = b 4675 // match: (Neq32F x y) 4676 // cond: 4677 // result: (NotEqual (FCMPU x y)) 4678 for { 4679 _ = v.Args[1] 4680 x := v.Args[0] 4681 y := v.Args[1] 4682 v.reset(OpPPC64NotEqual) 4683 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 4684 v0.AddArg(x) 4685 v0.AddArg(y) 4686 v.AddArg(v0) 4687 return true 4688 } 4689 } 4690 func rewriteValuePPC64_OpNeq64_0(v *Value) bool { 4691 b := v.Block 4692 _ = b 4693 // match: (Neq64 x y) 4694 // cond: 4695 // result: (NotEqual (CMP x y)) 4696 for { 4697 _ = v.Args[1] 4698 x := v.Args[0] 4699 y := v.Args[1] 4700 v.reset(OpPPC64NotEqual) 4701 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 4702 v0.AddArg(x) 4703 v0.AddArg(y) 4704 v.AddArg(v0) 4705 return true 4706 } 4707 } 4708 func rewriteValuePPC64_OpNeq64F_0(v *Value) bool { 4709 b := v.Block 4710 _ = b 4711 // match: (Neq64F x y) 4712 // cond: 4713 // result: (NotEqual (FCMPU x y)) 4714 for { 4715 _ = v.Args[1] 4716 x := v.Args[0] 4717 y := v.Args[1] 4718 v.reset(OpPPC64NotEqual) 4719 v0 := b.NewValue0(v.Pos, OpPPC64FCMPU, types.TypeFlags) 4720 v0.AddArg(x) 4721 v0.AddArg(y) 4722 v.AddArg(v0) 4723 return true 4724 } 4725 } 4726 func rewriteValuePPC64_OpNeq8_0(v *Value) bool { 4727 b := v.Block 4728 _ = b 4729 typ := &b.Func.Config.Types 4730 _ = typ 4731 // match: (Neq8 x y) 4732 // cond: isSigned(x.Type) && isSigned(y.Type) 4733 // result: (NotEqual (CMPW (SignExt8to32 x) (SignExt8to32 y))) 4734 for { 4735 _ = v.Args[1] 4736 x := v.Args[0] 4737 y := v.Args[1] 4738 if !(isSigned(x.Type) && isSigned(y.Type)) { 4739 break 4740 } 4741 v.reset(OpPPC64NotEqual) 4742 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 4743 v1 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 4744 v1.AddArg(x) 4745 v0.AddArg(v1) 4746 v2 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 4747 v2.AddArg(y) 4748 v0.AddArg(v2) 4749 v.AddArg(v0) 4750 return true 4751 } 4752 // match: (Neq8 x y) 4753 // cond: 4754 // result: (NotEqual (CMPW (ZeroExt8to32 x) (ZeroExt8to32 y))) 4755 for { 4756 _ = v.Args[1] 4757 x := v.Args[0] 4758 y := v.Args[1] 4759 v.reset(OpPPC64NotEqual) 4760 v0 := b.NewValue0(v.Pos, OpPPC64CMPW, types.TypeFlags) 4761 v1 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 4762 v1.AddArg(x) 4763 v0.AddArg(v1) 4764 v2 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 4765 v2.AddArg(y) 4766 v0.AddArg(v2) 4767 v.AddArg(v0) 4768 return true 4769 } 4770 } 4771 func rewriteValuePPC64_OpNeqB_0(v *Value) bool { 4772 // match: (NeqB x y) 4773 // cond: 4774 // result: (XOR x y) 4775 for { 4776 _ = v.Args[1] 4777 x := v.Args[0] 4778 y := v.Args[1] 4779 v.reset(OpPPC64XOR) 4780 v.AddArg(x) 4781 v.AddArg(y) 4782 return true 4783 } 4784 } 4785 func rewriteValuePPC64_OpNeqPtr_0(v *Value) bool { 4786 b := v.Block 4787 _ = b 4788 // match: (NeqPtr x y) 4789 // cond: 4790 // result: (NotEqual (CMP x y)) 4791 for { 4792 _ = v.Args[1] 4793 x := v.Args[0] 4794 y := v.Args[1] 4795 v.reset(OpPPC64NotEqual) 4796 v0 := b.NewValue0(v.Pos, OpPPC64CMP, types.TypeFlags) 4797 v0.AddArg(x) 4798 v0.AddArg(y) 4799 v.AddArg(v0) 4800 return true 4801 } 4802 } 4803 func rewriteValuePPC64_OpNilCheck_0(v *Value) bool { 4804 // match: (NilCheck ptr mem) 4805 // cond: 4806 // result: (LoweredNilCheck ptr mem) 4807 for { 4808 _ = v.Args[1] 4809 ptr := v.Args[0] 4810 mem := v.Args[1] 4811 v.reset(OpPPC64LoweredNilCheck) 4812 v.AddArg(ptr) 4813 v.AddArg(mem) 4814 return true 4815 } 4816 } 4817 func rewriteValuePPC64_OpNot_0(v *Value) bool { 4818 // match: (Not x) 4819 // cond: 4820 // result: (XORconst [1] x) 4821 for { 4822 x := v.Args[0] 4823 v.reset(OpPPC64XORconst) 4824 v.AuxInt = 1 4825 v.AddArg(x) 4826 return true 4827 } 4828 } 4829 func rewriteValuePPC64_OpOffPtr_0(v *Value) bool { 4830 b := v.Block 4831 _ = b 4832 typ := &b.Func.Config.Types 4833 _ = typ 4834 // match: (OffPtr [off] ptr) 4835 // cond: 4836 // result: (ADD (MOVDconst <typ.Int64> [off]) ptr) 4837 for { 4838 off := v.AuxInt 4839 ptr := v.Args[0] 4840 v.reset(OpPPC64ADD) 4841 v0 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 4842 v0.AuxInt = off 4843 v.AddArg(v0) 4844 v.AddArg(ptr) 4845 return true 4846 } 4847 } 4848 func rewriteValuePPC64_OpOr16_0(v *Value) bool { 4849 // match: (Or16 x y) 4850 // cond: 4851 // result: (OR x y) 4852 for { 4853 _ = v.Args[1] 4854 x := v.Args[0] 4855 y := v.Args[1] 4856 v.reset(OpPPC64OR) 4857 v.AddArg(x) 4858 v.AddArg(y) 4859 return true 4860 } 4861 } 4862 func rewriteValuePPC64_OpOr32_0(v *Value) bool { 4863 // match: (Or32 x y) 4864 // cond: 4865 // result: (OR x y) 4866 for { 4867 _ = v.Args[1] 4868 x := v.Args[0] 4869 y := v.Args[1] 4870 v.reset(OpPPC64OR) 4871 v.AddArg(x) 4872 v.AddArg(y) 4873 return true 4874 } 4875 } 4876 func rewriteValuePPC64_OpOr64_0(v *Value) bool { 4877 // match: (Or64 x y) 4878 // cond: 4879 // result: (OR x y) 4880 for { 4881 _ = v.Args[1] 4882 x := v.Args[0] 4883 y := v.Args[1] 4884 v.reset(OpPPC64OR) 4885 v.AddArg(x) 4886 v.AddArg(y) 4887 return true 4888 } 4889 } 4890 func rewriteValuePPC64_OpOr8_0(v *Value) bool { 4891 // match: (Or8 x y) 4892 // cond: 4893 // result: (OR x y) 4894 for { 4895 _ = v.Args[1] 4896 x := v.Args[0] 4897 y := v.Args[1] 4898 v.reset(OpPPC64OR) 4899 v.AddArg(x) 4900 v.AddArg(y) 4901 return true 4902 } 4903 } 4904 func rewriteValuePPC64_OpOrB_0(v *Value) bool { 4905 // match: (OrB x y) 4906 // cond: 4907 // result: (OR x y) 4908 for { 4909 _ = v.Args[1] 4910 x := v.Args[0] 4911 y := v.Args[1] 4912 v.reset(OpPPC64OR) 4913 v.AddArg(x) 4914 v.AddArg(y) 4915 return true 4916 } 4917 } 4918 func rewriteValuePPC64_OpPPC64ADD_0(v *Value) bool { 4919 b := v.Block 4920 _ = b 4921 typ := &b.Func.Config.Types 4922 _ = typ 4923 // match: (ADD (SLDconst x [c]) (SRDconst x [d])) 4924 // cond: d == 64-c 4925 // result: (ROTLconst [c] x) 4926 for { 4927 _ = v.Args[1] 4928 v_0 := v.Args[0] 4929 if v_0.Op != OpPPC64SLDconst { 4930 break 4931 } 4932 c := v_0.AuxInt 4933 x := v_0.Args[0] 4934 v_1 := v.Args[1] 4935 if v_1.Op != OpPPC64SRDconst { 4936 break 4937 } 4938 d := v_1.AuxInt 4939 if x != v_1.Args[0] { 4940 break 4941 } 4942 if !(d == 64-c) { 4943 break 4944 } 4945 v.reset(OpPPC64ROTLconst) 4946 v.AuxInt = c 4947 v.AddArg(x) 4948 return true 4949 } 4950 // match: (ADD (SRDconst x [d]) (SLDconst x [c])) 4951 // cond: d == 64-c 4952 // result: (ROTLconst [c] x) 4953 for { 4954 _ = v.Args[1] 4955 v_0 := v.Args[0] 4956 if v_0.Op != OpPPC64SRDconst { 4957 break 4958 } 4959 d := v_0.AuxInt 4960 x := v_0.Args[0] 4961 v_1 := v.Args[1] 4962 if v_1.Op != OpPPC64SLDconst { 4963 break 4964 } 4965 c := v_1.AuxInt 4966 if x != v_1.Args[0] { 4967 break 4968 } 4969 if !(d == 64-c) { 4970 break 4971 } 4972 v.reset(OpPPC64ROTLconst) 4973 v.AuxInt = c 4974 v.AddArg(x) 4975 return true 4976 } 4977 // match: (ADD (SLWconst x [c]) (SRWconst x [d])) 4978 // cond: d == 32-c 4979 // result: (ROTLWconst [c] x) 4980 for { 4981 _ = v.Args[1] 4982 v_0 := v.Args[0] 4983 if v_0.Op != OpPPC64SLWconst { 4984 break 4985 } 4986 c := v_0.AuxInt 4987 x := v_0.Args[0] 4988 v_1 := v.Args[1] 4989 if v_1.Op != OpPPC64SRWconst { 4990 break 4991 } 4992 d := v_1.AuxInt 4993 if x != v_1.Args[0] { 4994 break 4995 } 4996 if !(d == 32-c) { 4997 break 4998 } 4999 v.reset(OpPPC64ROTLWconst) 5000 v.AuxInt = c 5001 v.AddArg(x) 5002 return true 5003 } 5004 // match: (ADD (SRWconst x [d]) (SLWconst x [c])) 5005 // cond: d == 32-c 5006 // result: (ROTLWconst [c] x) 5007 for { 5008 _ = v.Args[1] 5009 v_0 := v.Args[0] 5010 if v_0.Op != OpPPC64SRWconst { 5011 break 5012 } 5013 d := v_0.AuxInt 5014 x := v_0.Args[0] 5015 v_1 := v.Args[1] 5016 if v_1.Op != OpPPC64SLWconst { 5017 break 5018 } 5019 c := v_1.AuxInt 5020 if x != v_1.Args[0] { 5021 break 5022 } 5023 if !(d == 32-c) { 5024 break 5025 } 5026 v.reset(OpPPC64ROTLWconst) 5027 v.AuxInt = c 5028 v.AddArg(x) 5029 return true 5030 } 5031 // match: (ADD (SLD x (ANDconst <typ.Int64> [63] y)) (SRD x (SUB <typ.UInt> (MOVDconst [64]) (ANDconst <typ.UInt> [63] y)))) 5032 // cond: 5033 // result: (ROTL x y) 5034 for { 5035 _ = v.Args[1] 5036 v_0 := v.Args[0] 5037 if v_0.Op != OpPPC64SLD { 5038 break 5039 } 5040 _ = v_0.Args[1] 5041 x := v_0.Args[0] 5042 v_0_1 := v_0.Args[1] 5043 if v_0_1.Op != OpPPC64ANDconst { 5044 break 5045 } 5046 if v_0_1.Type != typ.Int64 { 5047 break 5048 } 5049 if v_0_1.AuxInt != 63 { 5050 break 5051 } 5052 y := v_0_1.Args[0] 5053 v_1 := v.Args[1] 5054 if v_1.Op != OpPPC64SRD { 5055 break 5056 } 5057 _ = v_1.Args[1] 5058 if x != v_1.Args[0] { 5059 break 5060 } 5061 v_1_1 := v_1.Args[1] 5062 if v_1_1.Op != OpPPC64SUB { 5063 break 5064 } 5065 if v_1_1.Type != typ.UInt { 5066 break 5067 } 5068 _ = v_1_1.Args[1] 5069 v_1_1_0 := v_1_1.Args[0] 5070 if v_1_1_0.Op != OpPPC64MOVDconst { 5071 break 5072 } 5073 if v_1_1_0.AuxInt != 64 { 5074 break 5075 } 5076 v_1_1_1 := v_1_1.Args[1] 5077 if v_1_1_1.Op != OpPPC64ANDconst { 5078 break 5079 } 5080 if v_1_1_1.Type != typ.UInt { 5081 break 5082 } 5083 if v_1_1_1.AuxInt != 63 { 5084 break 5085 } 5086 if y != v_1_1_1.Args[0] { 5087 break 5088 } 5089 v.reset(OpPPC64ROTL) 5090 v.AddArg(x) 5091 v.AddArg(y) 5092 return true 5093 } 5094 // match: (ADD (SRD x (SUB <typ.UInt> (MOVDconst [64]) (ANDconst <typ.UInt> [63] y))) (SLD x (ANDconst <typ.Int64> [63] y))) 5095 // cond: 5096 // result: (ROTL x y) 5097 for { 5098 _ = v.Args[1] 5099 v_0 := v.Args[0] 5100 if v_0.Op != OpPPC64SRD { 5101 break 5102 } 5103 _ = v_0.Args[1] 5104 x := v_0.Args[0] 5105 v_0_1 := v_0.Args[1] 5106 if v_0_1.Op != OpPPC64SUB { 5107 break 5108 } 5109 if v_0_1.Type != typ.UInt { 5110 break 5111 } 5112 _ = v_0_1.Args[1] 5113 v_0_1_0 := v_0_1.Args[0] 5114 if v_0_1_0.Op != OpPPC64MOVDconst { 5115 break 5116 } 5117 if v_0_1_0.AuxInt != 64 { 5118 break 5119 } 5120 v_0_1_1 := v_0_1.Args[1] 5121 if v_0_1_1.Op != OpPPC64ANDconst { 5122 break 5123 } 5124 if v_0_1_1.Type != typ.UInt { 5125 break 5126 } 5127 if v_0_1_1.AuxInt != 63 { 5128 break 5129 } 5130 y := v_0_1_1.Args[0] 5131 v_1 := v.Args[1] 5132 if v_1.Op != OpPPC64SLD { 5133 break 5134 } 5135 _ = v_1.Args[1] 5136 if x != v_1.Args[0] { 5137 break 5138 } 5139 v_1_1 := v_1.Args[1] 5140 if v_1_1.Op != OpPPC64ANDconst { 5141 break 5142 } 5143 if v_1_1.Type != typ.Int64 { 5144 break 5145 } 5146 if v_1_1.AuxInt != 63 { 5147 break 5148 } 5149 if y != v_1_1.Args[0] { 5150 break 5151 } 5152 v.reset(OpPPC64ROTL) 5153 v.AddArg(x) 5154 v.AddArg(y) 5155 return true 5156 } 5157 // match: (ADD (SLW x (ANDconst <typ.Int32> [31] y)) (SRW x (SUB <typ.UInt> (MOVDconst [32]) (ANDconst <typ.UInt> [31] y)))) 5158 // cond: 5159 // result: (ROTLW x y) 5160 for { 5161 _ = v.Args[1] 5162 v_0 := v.Args[0] 5163 if v_0.Op != OpPPC64SLW { 5164 break 5165 } 5166 _ = v_0.Args[1] 5167 x := v_0.Args[0] 5168 v_0_1 := v_0.Args[1] 5169 if v_0_1.Op != OpPPC64ANDconst { 5170 break 5171 } 5172 if v_0_1.Type != typ.Int32 { 5173 break 5174 } 5175 if v_0_1.AuxInt != 31 { 5176 break 5177 } 5178 y := v_0_1.Args[0] 5179 v_1 := v.Args[1] 5180 if v_1.Op != OpPPC64SRW { 5181 break 5182 } 5183 _ = v_1.Args[1] 5184 if x != v_1.Args[0] { 5185 break 5186 } 5187 v_1_1 := v_1.Args[1] 5188 if v_1_1.Op != OpPPC64SUB { 5189 break 5190 } 5191 if v_1_1.Type != typ.UInt { 5192 break 5193 } 5194 _ = v_1_1.Args[1] 5195 v_1_1_0 := v_1_1.Args[0] 5196 if v_1_1_0.Op != OpPPC64MOVDconst { 5197 break 5198 } 5199 if v_1_1_0.AuxInt != 32 { 5200 break 5201 } 5202 v_1_1_1 := v_1_1.Args[1] 5203 if v_1_1_1.Op != OpPPC64ANDconst { 5204 break 5205 } 5206 if v_1_1_1.Type != typ.UInt { 5207 break 5208 } 5209 if v_1_1_1.AuxInt != 31 { 5210 break 5211 } 5212 if y != v_1_1_1.Args[0] { 5213 break 5214 } 5215 v.reset(OpPPC64ROTLW) 5216 v.AddArg(x) 5217 v.AddArg(y) 5218 return true 5219 } 5220 // match: (ADD (SRW x (SUB <typ.UInt> (MOVDconst [32]) (ANDconst <typ.UInt> [31] y))) (SLW x (ANDconst <typ.Int32> [31] y))) 5221 // cond: 5222 // result: (ROTLW x y) 5223 for { 5224 _ = v.Args[1] 5225 v_0 := v.Args[0] 5226 if v_0.Op != OpPPC64SRW { 5227 break 5228 } 5229 _ = v_0.Args[1] 5230 x := v_0.Args[0] 5231 v_0_1 := v_0.Args[1] 5232 if v_0_1.Op != OpPPC64SUB { 5233 break 5234 } 5235 if v_0_1.Type != typ.UInt { 5236 break 5237 } 5238 _ = v_0_1.Args[1] 5239 v_0_1_0 := v_0_1.Args[0] 5240 if v_0_1_0.Op != OpPPC64MOVDconst { 5241 break 5242 } 5243 if v_0_1_0.AuxInt != 32 { 5244 break 5245 } 5246 v_0_1_1 := v_0_1.Args[1] 5247 if v_0_1_1.Op != OpPPC64ANDconst { 5248 break 5249 } 5250 if v_0_1_1.Type != typ.UInt { 5251 break 5252 } 5253 if v_0_1_1.AuxInt != 31 { 5254 break 5255 } 5256 y := v_0_1_1.Args[0] 5257 v_1 := v.Args[1] 5258 if v_1.Op != OpPPC64SLW { 5259 break 5260 } 5261 _ = v_1.Args[1] 5262 if x != v_1.Args[0] { 5263 break 5264 } 5265 v_1_1 := v_1.Args[1] 5266 if v_1_1.Op != OpPPC64ANDconst { 5267 break 5268 } 5269 if v_1_1.Type != typ.Int32 { 5270 break 5271 } 5272 if v_1_1.AuxInt != 31 { 5273 break 5274 } 5275 if y != v_1_1.Args[0] { 5276 break 5277 } 5278 v.reset(OpPPC64ROTLW) 5279 v.AddArg(x) 5280 v.AddArg(y) 5281 return true 5282 } 5283 // match: (ADD x (MOVDconst [c])) 5284 // cond: is32Bit(c) 5285 // result: (ADDconst [c] x) 5286 for { 5287 _ = v.Args[1] 5288 x := v.Args[0] 5289 v_1 := v.Args[1] 5290 if v_1.Op != OpPPC64MOVDconst { 5291 break 5292 } 5293 c := v_1.AuxInt 5294 if !(is32Bit(c)) { 5295 break 5296 } 5297 v.reset(OpPPC64ADDconst) 5298 v.AuxInt = c 5299 v.AddArg(x) 5300 return true 5301 } 5302 // match: (ADD (MOVDconst [c]) x) 5303 // cond: is32Bit(c) 5304 // result: (ADDconst [c] x) 5305 for { 5306 _ = v.Args[1] 5307 v_0 := v.Args[0] 5308 if v_0.Op != OpPPC64MOVDconst { 5309 break 5310 } 5311 c := v_0.AuxInt 5312 x := v.Args[1] 5313 if !(is32Bit(c)) { 5314 break 5315 } 5316 v.reset(OpPPC64ADDconst) 5317 v.AuxInt = c 5318 v.AddArg(x) 5319 return true 5320 } 5321 return false 5322 } 5323 func rewriteValuePPC64_OpPPC64ADDconst_0(v *Value) bool { 5324 // match: (ADDconst [c] (ADDconst [d] x)) 5325 // cond: is32Bit(c+d) 5326 // result: (ADDconst [c+d] x) 5327 for { 5328 c := v.AuxInt 5329 v_0 := v.Args[0] 5330 if v_0.Op != OpPPC64ADDconst { 5331 break 5332 } 5333 d := v_0.AuxInt 5334 x := v_0.Args[0] 5335 if !(is32Bit(c + d)) { 5336 break 5337 } 5338 v.reset(OpPPC64ADDconst) 5339 v.AuxInt = c + d 5340 v.AddArg(x) 5341 return true 5342 } 5343 // match: (ADDconst [0] x) 5344 // cond: 5345 // result: x 5346 for { 5347 if v.AuxInt != 0 { 5348 break 5349 } 5350 x := v.Args[0] 5351 v.reset(OpCopy) 5352 v.Type = x.Type 5353 v.AddArg(x) 5354 return true 5355 } 5356 // match: (ADDconst [c] (MOVDaddr [d] {sym} x)) 5357 // cond: 5358 // result: (MOVDaddr [c+d] {sym} x) 5359 for { 5360 c := v.AuxInt 5361 v_0 := v.Args[0] 5362 if v_0.Op != OpPPC64MOVDaddr { 5363 break 5364 } 5365 d := v_0.AuxInt 5366 sym := v_0.Aux 5367 x := v_0.Args[0] 5368 v.reset(OpPPC64MOVDaddr) 5369 v.AuxInt = c + d 5370 v.Aux = sym 5371 v.AddArg(x) 5372 return true 5373 } 5374 return false 5375 } 5376 func rewriteValuePPC64_OpPPC64AND_0(v *Value) bool { 5377 // match: (AND x (NOR y y)) 5378 // cond: 5379 // result: (ANDN x y) 5380 for { 5381 _ = v.Args[1] 5382 x := v.Args[0] 5383 v_1 := v.Args[1] 5384 if v_1.Op != OpPPC64NOR { 5385 break 5386 } 5387 _ = v_1.Args[1] 5388 y := v_1.Args[0] 5389 if y != v_1.Args[1] { 5390 break 5391 } 5392 v.reset(OpPPC64ANDN) 5393 v.AddArg(x) 5394 v.AddArg(y) 5395 return true 5396 } 5397 // match: (AND (NOR y y) x) 5398 // cond: 5399 // result: (ANDN x y) 5400 for { 5401 _ = v.Args[1] 5402 v_0 := v.Args[0] 5403 if v_0.Op != OpPPC64NOR { 5404 break 5405 } 5406 _ = v_0.Args[1] 5407 y := v_0.Args[0] 5408 if y != v_0.Args[1] { 5409 break 5410 } 5411 x := v.Args[1] 5412 v.reset(OpPPC64ANDN) 5413 v.AddArg(x) 5414 v.AddArg(y) 5415 return true 5416 } 5417 // match: (AND (MOVDconst [c]) (MOVDconst [d])) 5418 // cond: 5419 // result: (MOVDconst [c&d]) 5420 for { 5421 _ = v.Args[1] 5422 v_0 := v.Args[0] 5423 if v_0.Op != OpPPC64MOVDconst { 5424 break 5425 } 5426 c := v_0.AuxInt 5427 v_1 := v.Args[1] 5428 if v_1.Op != OpPPC64MOVDconst { 5429 break 5430 } 5431 d := v_1.AuxInt 5432 v.reset(OpPPC64MOVDconst) 5433 v.AuxInt = c & d 5434 return true 5435 } 5436 // match: (AND (MOVDconst [d]) (MOVDconst [c])) 5437 // cond: 5438 // result: (MOVDconst [c&d]) 5439 for { 5440 _ = v.Args[1] 5441 v_0 := v.Args[0] 5442 if v_0.Op != OpPPC64MOVDconst { 5443 break 5444 } 5445 d := v_0.AuxInt 5446 v_1 := v.Args[1] 5447 if v_1.Op != OpPPC64MOVDconst { 5448 break 5449 } 5450 c := v_1.AuxInt 5451 v.reset(OpPPC64MOVDconst) 5452 v.AuxInt = c & d 5453 return true 5454 } 5455 // match: (AND x (MOVDconst [c])) 5456 // cond: isU16Bit(c) 5457 // result: (ANDconst [c] x) 5458 for { 5459 _ = v.Args[1] 5460 x := v.Args[0] 5461 v_1 := v.Args[1] 5462 if v_1.Op != OpPPC64MOVDconst { 5463 break 5464 } 5465 c := v_1.AuxInt 5466 if !(isU16Bit(c)) { 5467 break 5468 } 5469 v.reset(OpPPC64ANDconst) 5470 v.AuxInt = c 5471 v.AddArg(x) 5472 return true 5473 } 5474 // match: (AND (MOVDconst [c]) x) 5475 // cond: isU16Bit(c) 5476 // result: (ANDconst [c] x) 5477 for { 5478 _ = v.Args[1] 5479 v_0 := v.Args[0] 5480 if v_0.Op != OpPPC64MOVDconst { 5481 break 5482 } 5483 c := v_0.AuxInt 5484 x := v.Args[1] 5485 if !(isU16Bit(c)) { 5486 break 5487 } 5488 v.reset(OpPPC64ANDconst) 5489 v.AuxInt = c 5490 v.AddArg(x) 5491 return true 5492 } 5493 // match: (AND (MOVDconst [c]) x:(MOVBZload _ _)) 5494 // cond: 5495 // result: (ANDconst [c&0xFF] x) 5496 for { 5497 _ = v.Args[1] 5498 v_0 := v.Args[0] 5499 if v_0.Op != OpPPC64MOVDconst { 5500 break 5501 } 5502 c := v_0.AuxInt 5503 x := v.Args[1] 5504 if x.Op != OpPPC64MOVBZload { 5505 break 5506 } 5507 _ = x.Args[1] 5508 v.reset(OpPPC64ANDconst) 5509 v.AuxInt = c & 0xFF 5510 v.AddArg(x) 5511 return true 5512 } 5513 // match: (AND x:(MOVBZload _ _) (MOVDconst [c])) 5514 // cond: 5515 // result: (ANDconst [c&0xFF] x) 5516 for { 5517 _ = v.Args[1] 5518 x := v.Args[0] 5519 if x.Op != OpPPC64MOVBZload { 5520 break 5521 } 5522 _ = x.Args[1] 5523 v_1 := v.Args[1] 5524 if v_1.Op != OpPPC64MOVDconst { 5525 break 5526 } 5527 c := v_1.AuxInt 5528 v.reset(OpPPC64ANDconst) 5529 v.AuxInt = c & 0xFF 5530 v.AddArg(x) 5531 return true 5532 } 5533 // match: (AND x:(MOVBZload _ _) (MOVDconst [c])) 5534 // cond: 5535 // result: (ANDconst [c&0xFF] x) 5536 for { 5537 _ = v.Args[1] 5538 x := v.Args[0] 5539 if x.Op != OpPPC64MOVBZload { 5540 break 5541 } 5542 _ = x.Args[1] 5543 v_1 := v.Args[1] 5544 if v_1.Op != OpPPC64MOVDconst { 5545 break 5546 } 5547 c := v_1.AuxInt 5548 v.reset(OpPPC64ANDconst) 5549 v.AuxInt = c & 0xFF 5550 v.AddArg(x) 5551 return true 5552 } 5553 // match: (AND (MOVDconst [c]) x:(MOVBZload _ _)) 5554 // cond: 5555 // result: (ANDconst [c&0xFF] x) 5556 for { 5557 _ = v.Args[1] 5558 v_0 := v.Args[0] 5559 if v_0.Op != OpPPC64MOVDconst { 5560 break 5561 } 5562 c := v_0.AuxInt 5563 x := v.Args[1] 5564 if x.Op != OpPPC64MOVBZload { 5565 break 5566 } 5567 _ = x.Args[1] 5568 v.reset(OpPPC64ANDconst) 5569 v.AuxInt = c & 0xFF 5570 v.AddArg(x) 5571 return true 5572 } 5573 return false 5574 } 5575 func rewriteValuePPC64_OpPPC64ANDconst_0(v *Value) bool { 5576 // match: (ANDconst [c] (ANDconst [d] x)) 5577 // cond: 5578 // result: (ANDconst [c&d] x) 5579 for { 5580 c := v.AuxInt 5581 v_0 := v.Args[0] 5582 if v_0.Op != OpPPC64ANDconst { 5583 break 5584 } 5585 d := v_0.AuxInt 5586 x := v_0.Args[0] 5587 v.reset(OpPPC64ANDconst) 5588 v.AuxInt = c & d 5589 v.AddArg(x) 5590 return true 5591 } 5592 // match: (ANDconst [-1] x) 5593 // cond: 5594 // result: x 5595 for { 5596 if v.AuxInt != -1 { 5597 break 5598 } 5599 x := v.Args[0] 5600 v.reset(OpCopy) 5601 v.Type = x.Type 5602 v.AddArg(x) 5603 return true 5604 } 5605 // match: (ANDconst [0] _) 5606 // cond: 5607 // result: (MOVDconst [0]) 5608 for { 5609 if v.AuxInt != 0 { 5610 break 5611 } 5612 v.reset(OpPPC64MOVDconst) 5613 v.AuxInt = 0 5614 return true 5615 } 5616 // match: (ANDconst [c] y:(MOVBZreg _)) 5617 // cond: c&0xFF == 0xFF 5618 // result: y 5619 for { 5620 c := v.AuxInt 5621 y := v.Args[0] 5622 if y.Op != OpPPC64MOVBZreg { 5623 break 5624 } 5625 if !(c&0xFF == 0xFF) { 5626 break 5627 } 5628 v.reset(OpCopy) 5629 v.Type = y.Type 5630 v.AddArg(y) 5631 return true 5632 } 5633 // match: (ANDconst [c] y:(MOVHZreg _)) 5634 // cond: c&0xFFFF == 0xFFFF 5635 // result: y 5636 for { 5637 c := v.AuxInt 5638 y := v.Args[0] 5639 if y.Op != OpPPC64MOVHZreg { 5640 break 5641 } 5642 if !(c&0xFFFF == 0xFFFF) { 5643 break 5644 } 5645 v.reset(OpCopy) 5646 v.Type = y.Type 5647 v.AddArg(y) 5648 return true 5649 } 5650 // match: (ANDconst [c] y:(MOVWZreg _)) 5651 // cond: c&0xFFFFFFFF == 0xFFFFFFFF 5652 // result: y 5653 for { 5654 c := v.AuxInt 5655 y := v.Args[0] 5656 if y.Op != OpPPC64MOVWZreg { 5657 break 5658 } 5659 if !(c&0xFFFFFFFF == 0xFFFFFFFF) { 5660 break 5661 } 5662 v.reset(OpCopy) 5663 v.Type = y.Type 5664 v.AddArg(y) 5665 return true 5666 } 5667 // match: (ANDconst [c] (MOVBZreg x)) 5668 // cond: 5669 // result: (ANDconst [c&0xFF] x) 5670 for { 5671 c := v.AuxInt 5672 v_0 := v.Args[0] 5673 if v_0.Op != OpPPC64MOVBZreg { 5674 break 5675 } 5676 x := v_0.Args[0] 5677 v.reset(OpPPC64ANDconst) 5678 v.AuxInt = c & 0xFF 5679 v.AddArg(x) 5680 return true 5681 } 5682 // match: (ANDconst [c] (MOVHZreg x)) 5683 // cond: 5684 // result: (ANDconst [c&0xFFFF] x) 5685 for { 5686 c := v.AuxInt 5687 v_0 := v.Args[0] 5688 if v_0.Op != OpPPC64MOVHZreg { 5689 break 5690 } 5691 x := v_0.Args[0] 5692 v.reset(OpPPC64ANDconst) 5693 v.AuxInt = c & 0xFFFF 5694 v.AddArg(x) 5695 return true 5696 } 5697 // match: (ANDconst [c] (MOVWZreg x)) 5698 // cond: 5699 // result: (ANDconst [c&0xFFFFFFFF] x) 5700 for { 5701 c := v.AuxInt 5702 v_0 := v.Args[0] 5703 if v_0.Op != OpPPC64MOVWZreg { 5704 break 5705 } 5706 x := v_0.Args[0] 5707 v.reset(OpPPC64ANDconst) 5708 v.AuxInt = c & 0xFFFFFFFF 5709 v.AddArg(x) 5710 return true 5711 } 5712 return false 5713 } 5714 func rewriteValuePPC64_OpPPC64CMP_0(v *Value) bool { 5715 b := v.Block 5716 _ = b 5717 // match: (CMP x (MOVDconst [c])) 5718 // cond: is16Bit(c) 5719 // result: (CMPconst x [c]) 5720 for { 5721 _ = v.Args[1] 5722 x := v.Args[0] 5723 v_1 := v.Args[1] 5724 if v_1.Op != OpPPC64MOVDconst { 5725 break 5726 } 5727 c := v_1.AuxInt 5728 if !(is16Bit(c)) { 5729 break 5730 } 5731 v.reset(OpPPC64CMPconst) 5732 v.AuxInt = c 5733 v.AddArg(x) 5734 return true 5735 } 5736 // match: (CMP (MOVDconst [c]) y) 5737 // cond: is16Bit(c) 5738 // result: (InvertFlags (CMPconst y [c])) 5739 for { 5740 _ = v.Args[1] 5741 v_0 := v.Args[0] 5742 if v_0.Op != OpPPC64MOVDconst { 5743 break 5744 } 5745 c := v_0.AuxInt 5746 y := v.Args[1] 5747 if !(is16Bit(c)) { 5748 break 5749 } 5750 v.reset(OpPPC64InvertFlags) 5751 v0 := b.NewValue0(v.Pos, OpPPC64CMPconst, types.TypeFlags) 5752 v0.AuxInt = c 5753 v0.AddArg(y) 5754 v.AddArg(v0) 5755 return true 5756 } 5757 return false 5758 } 5759 func rewriteValuePPC64_OpPPC64CMPU_0(v *Value) bool { 5760 b := v.Block 5761 _ = b 5762 // match: (CMPU x (MOVDconst [c])) 5763 // cond: isU16Bit(c) 5764 // result: (CMPUconst x [c]) 5765 for { 5766 _ = v.Args[1] 5767 x := v.Args[0] 5768 v_1 := v.Args[1] 5769 if v_1.Op != OpPPC64MOVDconst { 5770 break 5771 } 5772 c := v_1.AuxInt 5773 if !(isU16Bit(c)) { 5774 break 5775 } 5776 v.reset(OpPPC64CMPUconst) 5777 v.AuxInt = c 5778 v.AddArg(x) 5779 return true 5780 } 5781 // match: (CMPU (MOVDconst [c]) y) 5782 // cond: isU16Bit(c) 5783 // result: (InvertFlags (CMPUconst y [c])) 5784 for { 5785 _ = v.Args[1] 5786 v_0 := v.Args[0] 5787 if v_0.Op != OpPPC64MOVDconst { 5788 break 5789 } 5790 c := v_0.AuxInt 5791 y := v.Args[1] 5792 if !(isU16Bit(c)) { 5793 break 5794 } 5795 v.reset(OpPPC64InvertFlags) 5796 v0 := b.NewValue0(v.Pos, OpPPC64CMPUconst, types.TypeFlags) 5797 v0.AuxInt = c 5798 v0.AddArg(y) 5799 v.AddArg(v0) 5800 return true 5801 } 5802 return false 5803 } 5804 func rewriteValuePPC64_OpPPC64CMPUconst_0(v *Value) bool { 5805 // match: (CMPUconst (MOVDconst [x]) [y]) 5806 // cond: int64(x)==int64(y) 5807 // result: (FlagEQ) 5808 for { 5809 y := v.AuxInt 5810 v_0 := v.Args[0] 5811 if v_0.Op != OpPPC64MOVDconst { 5812 break 5813 } 5814 x := v_0.AuxInt 5815 if !(int64(x) == int64(y)) { 5816 break 5817 } 5818 v.reset(OpPPC64FlagEQ) 5819 return true 5820 } 5821 // match: (CMPUconst (MOVDconst [x]) [y]) 5822 // cond: uint64(x)<uint64(y) 5823 // result: (FlagLT) 5824 for { 5825 y := v.AuxInt 5826 v_0 := v.Args[0] 5827 if v_0.Op != OpPPC64MOVDconst { 5828 break 5829 } 5830 x := v_0.AuxInt 5831 if !(uint64(x) < uint64(y)) { 5832 break 5833 } 5834 v.reset(OpPPC64FlagLT) 5835 return true 5836 } 5837 // match: (CMPUconst (MOVDconst [x]) [y]) 5838 // cond: uint64(x)>uint64(y) 5839 // result: (FlagGT) 5840 for { 5841 y := v.AuxInt 5842 v_0 := v.Args[0] 5843 if v_0.Op != OpPPC64MOVDconst { 5844 break 5845 } 5846 x := v_0.AuxInt 5847 if !(uint64(x) > uint64(y)) { 5848 break 5849 } 5850 v.reset(OpPPC64FlagGT) 5851 return true 5852 } 5853 return false 5854 } 5855 func rewriteValuePPC64_OpPPC64CMPW_0(v *Value) bool { 5856 b := v.Block 5857 _ = b 5858 // match: (CMPW x (MOVWreg y)) 5859 // cond: 5860 // result: (CMPW x y) 5861 for { 5862 _ = v.Args[1] 5863 x := v.Args[0] 5864 v_1 := v.Args[1] 5865 if v_1.Op != OpPPC64MOVWreg { 5866 break 5867 } 5868 y := v_1.Args[0] 5869 v.reset(OpPPC64CMPW) 5870 v.AddArg(x) 5871 v.AddArg(y) 5872 return true 5873 } 5874 // match: (CMPW (MOVWreg x) y) 5875 // cond: 5876 // result: (CMPW x y) 5877 for { 5878 _ = v.Args[1] 5879 v_0 := v.Args[0] 5880 if v_0.Op != OpPPC64MOVWreg { 5881 break 5882 } 5883 x := v_0.Args[0] 5884 y := v.Args[1] 5885 v.reset(OpPPC64CMPW) 5886 v.AddArg(x) 5887 v.AddArg(y) 5888 return true 5889 } 5890 // match: (CMPW x (MOVDconst [c])) 5891 // cond: is16Bit(c) 5892 // result: (CMPWconst x [c]) 5893 for { 5894 _ = v.Args[1] 5895 x := v.Args[0] 5896 v_1 := v.Args[1] 5897 if v_1.Op != OpPPC64MOVDconst { 5898 break 5899 } 5900 c := v_1.AuxInt 5901 if !(is16Bit(c)) { 5902 break 5903 } 5904 v.reset(OpPPC64CMPWconst) 5905 v.AuxInt = c 5906 v.AddArg(x) 5907 return true 5908 } 5909 // match: (CMPW (MOVDconst [c]) y) 5910 // cond: is16Bit(c) 5911 // result: (InvertFlags (CMPWconst y [c])) 5912 for { 5913 _ = v.Args[1] 5914 v_0 := v.Args[0] 5915 if v_0.Op != OpPPC64MOVDconst { 5916 break 5917 } 5918 c := v_0.AuxInt 5919 y := v.Args[1] 5920 if !(is16Bit(c)) { 5921 break 5922 } 5923 v.reset(OpPPC64InvertFlags) 5924 v0 := b.NewValue0(v.Pos, OpPPC64CMPWconst, types.TypeFlags) 5925 v0.AuxInt = c 5926 v0.AddArg(y) 5927 v.AddArg(v0) 5928 return true 5929 } 5930 return false 5931 } 5932 func rewriteValuePPC64_OpPPC64CMPWU_0(v *Value) bool { 5933 b := v.Block 5934 _ = b 5935 // match: (CMPWU x (MOVWZreg y)) 5936 // cond: 5937 // result: (CMPWU x y) 5938 for { 5939 _ = v.Args[1] 5940 x := v.Args[0] 5941 v_1 := v.Args[1] 5942 if v_1.Op != OpPPC64MOVWZreg { 5943 break 5944 } 5945 y := v_1.Args[0] 5946 v.reset(OpPPC64CMPWU) 5947 v.AddArg(x) 5948 v.AddArg(y) 5949 return true 5950 } 5951 // match: (CMPWU (MOVWZreg x) y) 5952 // cond: 5953 // result: (CMPWU x y) 5954 for { 5955 _ = v.Args[1] 5956 v_0 := v.Args[0] 5957 if v_0.Op != OpPPC64MOVWZreg { 5958 break 5959 } 5960 x := v_0.Args[0] 5961 y := v.Args[1] 5962 v.reset(OpPPC64CMPWU) 5963 v.AddArg(x) 5964 v.AddArg(y) 5965 return true 5966 } 5967 // match: (CMPWU x (MOVDconst [c])) 5968 // cond: isU16Bit(c) 5969 // result: (CMPWUconst x [c]) 5970 for { 5971 _ = v.Args[1] 5972 x := v.Args[0] 5973 v_1 := v.Args[1] 5974 if v_1.Op != OpPPC64MOVDconst { 5975 break 5976 } 5977 c := v_1.AuxInt 5978 if !(isU16Bit(c)) { 5979 break 5980 } 5981 v.reset(OpPPC64CMPWUconst) 5982 v.AuxInt = c 5983 v.AddArg(x) 5984 return true 5985 } 5986 // match: (CMPWU (MOVDconst [c]) y) 5987 // cond: isU16Bit(c) 5988 // result: (InvertFlags (CMPWUconst y [c])) 5989 for { 5990 _ = v.Args[1] 5991 v_0 := v.Args[0] 5992 if v_0.Op != OpPPC64MOVDconst { 5993 break 5994 } 5995 c := v_0.AuxInt 5996 y := v.Args[1] 5997 if !(isU16Bit(c)) { 5998 break 5999 } 6000 v.reset(OpPPC64InvertFlags) 6001 v0 := b.NewValue0(v.Pos, OpPPC64CMPWUconst, types.TypeFlags) 6002 v0.AuxInt = c 6003 v0.AddArg(y) 6004 v.AddArg(v0) 6005 return true 6006 } 6007 return false 6008 } 6009 func rewriteValuePPC64_OpPPC64CMPWUconst_0(v *Value) bool { 6010 // match: (CMPWUconst (MOVDconst [x]) [y]) 6011 // cond: int32(x)==int32(y) 6012 // result: (FlagEQ) 6013 for { 6014 y := v.AuxInt 6015 v_0 := v.Args[0] 6016 if v_0.Op != OpPPC64MOVDconst { 6017 break 6018 } 6019 x := v_0.AuxInt 6020 if !(int32(x) == int32(y)) { 6021 break 6022 } 6023 v.reset(OpPPC64FlagEQ) 6024 return true 6025 } 6026 // match: (CMPWUconst (MOVDconst [x]) [y]) 6027 // cond: uint32(x)<uint32(y) 6028 // result: (FlagLT) 6029 for { 6030 y := v.AuxInt 6031 v_0 := v.Args[0] 6032 if v_0.Op != OpPPC64MOVDconst { 6033 break 6034 } 6035 x := v_0.AuxInt 6036 if !(uint32(x) < uint32(y)) { 6037 break 6038 } 6039 v.reset(OpPPC64FlagLT) 6040 return true 6041 } 6042 // match: (CMPWUconst (MOVDconst [x]) [y]) 6043 // cond: uint32(x)>uint32(y) 6044 // result: (FlagGT) 6045 for { 6046 y := v.AuxInt 6047 v_0 := v.Args[0] 6048 if v_0.Op != OpPPC64MOVDconst { 6049 break 6050 } 6051 x := v_0.AuxInt 6052 if !(uint32(x) > uint32(y)) { 6053 break 6054 } 6055 v.reset(OpPPC64FlagGT) 6056 return true 6057 } 6058 return false 6059 } 6060 func rewriteValuePPC64_OpPPC64CMPWconst_0(v *Value) bool { 6061 // match: (CMPWconst (MOVDconst [x]) [y]) 6062 // cond: int32(x)==int32(y) 6063 // result: (FlagEQ) 6064 for { 6065 y := v.AuxInt 6066 v_0 := v.Args[0] 6067 if v_0.Op != OpPPC64MOVDconst { 6068 break 6069 } 6070 x := v_0.AuxInt 6071 if !(int32(x) == int32(y)) { 6072 break 6073 } 6074 v.reset(OpPPC64FlagEQ) 6075 return true 6076 } 6077 // match: (CMPWconst (MOVDconst [x]) [y]) 6078 // cond: int32(x)<int32(y) 6079 // result: (FlagLT) 6080 for { 6081 y := v.AuxInt 6082 v_0 := v.Args[0] 6083 if v_0.Op != OpPPC64MOVDconst { 6084 break 6085 } 6086 x := v_0.AuxInt 6087 if !(int32(x) < int32(y)) { 6088 break 6089 } 6090 v.reset(OpPPC64FlagLT) 6091 return true 6092 } 6093 // match: (CMPWconst (MOVDconst [x]) [y]) 6094 // cond: int32(x)>int32(y) 6095 // result: (FlagGT) 6096 for { 6097 y := v.AuxInt 6098 v_0 := v.Args[0] 6099 if v_0.Op != OpPPC64MOVDconst { 6100 break 6101 } 6102 x := v_0.AuxInt 6103 if !(int32(x) > int32(y)) { 6104 break 6105 } 6106 v.reset(OpPPC64FlagGT) 6107 return true 6108 } 6109 return false 6110 } 6111 func rewriteValuePPC64_OpPPC64CMPconst_0(v *Value) bool { 6112 // match: (CMPconst (MOVDconst [x]) [y]) 6113 // cond: int64(x)==int64(y) 6114 // result: (FlagEQ) 6115 for { 6116 y := v.AuxInt 6117 v_0 := v.Args[0] 6118 if v_0.Op != OpPPC64MOVDconst { 6119 break 6120 } 6121 x := v_0.AuxInt 6122 if !(int64(x) == int64(y)) { 6123 break 6124 } 6125 v.reset(OpPPC64FlagEQ) 6126 return true 6127 } 6128 // match: (CMPconst (MOVDconst [x]) [y]) 6129 // cond: int64(x)<int64(y) 6130 // result: (FlagLT) 6131 for { 6132 y := v.AuxInt 6133 v_0 := v.Args[0] 6134 if v_0.Op != OpPPC64MOVDconst { 6135 break 6136 } 6137 x := v_0.AuxInt 6138 if !(int64(x) < int64(y)) { 6139 break 6140 } 6141 v.reset(OpPPC64FlagLT) 6142 return true 6143 } 6144 // match: (CMPconst (MOVDconst [x]) [y]) 6145 // cond: int64(x)>int64(y) 6146 // result: (FlagGT) 6147 for { 6148 y := v.AuxInt 6149 v_0 := v.Args[0] 6150 if v_0.Op != OpPPC64MOVDconst { 6151 break 6152 } 6153 x := v_0.AuxInt 6154 if !(int64(x) > int64(y)) { 6155 break 6156 } 6157 v.reset(OpPPC64FlagGT) 6158 return true 6159 } 6160 return false 6161 } 6162 func rewriteValuePPC64_OpPPC64Equal_0(v *Value) bool { 6163 // match: (Equal (FlagEQ)) 6164 // cond: 6165 // result: (MOVDconst [1]) 6166 for { 6167 v_0 := v.Args[0] 6168 if v_0.Op != OpPPC64FlagEQ { 6169 break 6170 } 6171 v.reset(OpPPC64MOVDconst) 6172 v.AuxInt = 1 6173 return true 6174 } 6175 // match: (Equal (FlagLT)) 6176 // cond: 6177 // result: (MOVDconst [0]) 6178 for { 6179 v_0 := v.Args[0] 6180 if v_0.Op != OpPPC64FlagLT { 6181 break 6182 } 6183 v.reset(OpPPC64MOVDconst) 6184 v.AuxInt = 0 6185 return true 6186 } 6187 // match: (Equal (FlagGT)) 6188 // cond: 6189 // result: (MOVDconst [0]) 6190 for { 6191 v_0 := v.Args[0] 6192 if v_0.Op != OpPPC64FlagGT { 6193 break 6194 } 6195 v.reset(OpPPC64MOVDconst) 6196 v.AuxInt = 0 6197 return true 6198 } 6199 // match: (Equal (InvertFlags x)) 6200 // cond: 6201 // result: (Equal x) 6202 for { 6203 v_0 := v.Args[0] 6204 if v_0.Op != OpPPC64InvertFlags { 6205 break 6206 } 6207 x := v_0.Args[0] 6208 v.reset(OpPPC64Equal) 6209 v.AddArg(x) 6210 return true 6211 } 6212 return false 6213 } 6214 func rewriteValuePPC64_OpPPC64FABS_0(v *Value) bool { 6215 // match: (FABS (FMOVDconst [x])) 6216 // cond: 6217 // result: (FMOVDconst [f2i(math.Abs(i2f(x)))]) 6218 for { 6219 v_0 := v.Args[0] 6220 if v_0.Op != OpPPC64FMOVDconst { 6221 break 6222 } 6223 x := v_0.AuxInt 6224 v.reset(OpPPC64FMOVDconst) 6225 v.AuxInt = f2i(math.Abs(i2f(x))) 6226 return true 6227 } 6228 return false 6229 } 6230 func rewriteValuePPC64_OpPPC64FADD_0(v *Value) bool { 6231 // match: (FADD (FMUL x y) z) 6232 // cond: 6233 // result: (FMADD x y z) 6234 for { 6235 _ = v.Args[1] 6236 v_0 := v.Args[0] 6237 if v_0.Op != OpPPC64FMUL { 6238 break 6239 } 6240 _ = v_0.Args[1] 6241 x := v_0.Args[0] 6242 y := v_0.Args[1] 6243 z := v.Args[1] 6244 v.reset(OpPPC64FMADD) 6245 v.AddArg(x) 6246 v.AddArg(y) 6247 v.AddArg(z) 6248 return true 6249 } 6250 // match: (FADD z (FMUL x y)) 6251 // cond: 6252 // result: (FMADD x y z) 6253 for { 6254 _ = v.Args[1] 6255 z := v.Args[0] 6256 v_1 := v.Args[1] 6257 if v_1.Op != OpPPC64FMUL { 6258 break 6259 } 6260 _ = v_1.Args[1] 6261 x := v_1.Args[0] 6262 y := v_1.Args[1] 6263 v.reset(OpPPC64FMADD) 6264 v.AddArg(x) 6265 v.AddArg(y) 6266 v.AddArg(z) 6267 return true 6268 } 6269 return false 6270 } 6271 func rewriteValuePPC64_OpPPC64FADDS_0(v *Value) bool { 6272 // match: (FADDS (FMULS x y) z) 6273 // cond: 6274 // result: (FMADDS x y z) 6275 for { 6276 _ = v.Args[1] 6277 v_0 := v.Args[0] 6278 if v_0.Op != OpPPC64FMULS { 6279 break 6280 } 6281 _ = v_0.Args[1] 6282 x := v_0.Args[0] 6283 y := v_0.Args[1] 6284 z := v.Args[1] 6285 v.reset(OpPPC64FMADDS) 6286 v.AddArg(x) 6287 v.AddArg(y) 6288 v.AddArg(z) 6289 return true 6290 } 6291 // match: (FADDS z (FMULS x y)) 6292 // cond: 6293 // result: (FMADDS x y z) 6294 for { 6295 _ = v.Args[1] 6296 z := v.Args[0] 6297 v_1 := v.Args[1] 6298 if v_1.Op != OpPPC64FMULS { 6299 break 6300 } 6301 _ = v_1.Args[1] 6302 x := v_1.Args[0] 6303 y := v_1.Args[1] 6304 v.reset(OpPPC64FMADDS) 6305 v.AddArg(x) 6306 v.AddArg(y) 6307 v.AddArg(z) 6308 return true 6309 } 6310 return false 6311 } 6312 func rewriteValuePPC64_OpPPC64FCEIL_0(v *Value) bool { 6313 // match: (FCEIL (FMOVDconst [x])) 6314 // cond: 6315 // result: (FMOVDconst [f2i(math.Ceil(i2f(x)))]) 6316 for { 6317 v_0 := v.Args[0] 6318 if v_0.Op != OpPPC64FMOVDconst { 6319 break 6320 } 6321 x := v_0.AuxInt 6322 v.reset(OpPPC64FMOVDconst) 6323 v.AuxInt = f2i(math.Ceil(i2f(x))) 6324 return true 6325 } 6326 return false 6327 } 6328 func rewriteValuePPC64_OpPPC64FFLOOR_0(v *Value) bool { 6329 // match: (FFLOOR (FMOVDconst [x])) 6330 // cond: 6331 // result: (FMOVDconst [f2i(math.Floor(i2f(x)))]) 6332 for { 6333 v_0 := v.Args[0] 6334 if v_0.Op != OpPPC64FMOVDconst { 6335 break 6336 } 6337 x := v_0.AuxInt 6338 v.reset(OpPPC64FMOVDconst) 6339 v.AuxInt = f2i(math.Floor(i2f(x))) 6340 return true 6341 } 6342 return false 6343 } 6344 func rewriteValuePPC64_OpPPC64FMOVDload_0(v *Value) bool { 6345 // match: (FMOVDload [off] {sym} ptr (MOVDstore [off] {sym} ptr x _)) 6346 // cond: 6347 // result: (MTVSRD x) 6348 for { 6349 off := v.AuxInt 6350 sym := v.Aux 6351 _ = v.Args[1] 6352 ptr := v.Args[0] 6353 v_1 := v.Args[1] 6354 if v_1.Op != OpPPC64MOVDstore { 6355 break 6356 } 6357 if v_1.AuxInt != off { 6358 break 6359 } 6360 if v_1.Aux != sym { 6361 break 6362 } 6363 _ = v_1.Args[2] 6364 if ptr != v_1.Args[0] { 6365 break 6366 } 6367 x := v_1.Args[1] 6368 v.reset(OpPPC64MTVSRD) 6369 v.AddArg(x) 6370 return true 6371 } 6372 // match: (FMOVDload [off1] {sym1} p:(MOVDaddr [off2] {sym2} ptr) mem) 6373 // cond: canMergeSym(sym1,sym2) && (ptr.Op != OpSB || p.Uses == 1) 6374 // result: (FMOVDload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 6375 for { 6376 off1 := v.AuxInt 6377 sym1 := v.Aux 6378 _ = v.Args[1] 6379 p := v.Args[0] 6380 if p.Op != OpPPC64MOVDaddr { 6381 break 6382 } 6383 off2 := p.AuxInt 6384 sym2 := p.Aux 6385 ptr := p.Args[0] 6386 mem := v.Args[1] 6387 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { 6388 break 6389 } 6390 v.reset(OpPPC64FMOVDload) 6391 v.AuxInt = off1 + off2 6392 v.Aux = mergeSym(sym1, sym2) 6393 v.AddArg(ptr) 6394 v.AddArg(mem) 6395 return true 6396 } 6397 // match: (FMOVDload [off1] {sym} (ADDconst [off2] ptr) mem) 6398 // cond: is16Bit(off1+off2) 6399 // result: (FMOVDload [off1+off2] {sym} ptr mem) 6400 for { 6401 off1 := v.AuxInt 6402 sym := v.Aux 6403 _ = v.Args[1] 6404 v_0 := v.Args[0] 6405 if v_0.Op != OpPPC64ADDconst { 6406 break 6407 } 6408 off2 := v_0.AuxInt 6409 ptr := v_0.Args[0] 6410 mem := v.Args[1] 6411 if !(is16Bit(off1 + off2)) { 6412 break 6413 } 6414 v.reset(OpPPC64FMOVDload) 6415 v.AuxInt = off1 + off2 6416 v.Aux = sym 6417 v.AddArg(ptr) 6418 v.AddArg(mem) 6419 return true 6420 } 6421 return false 6422 } 6423 func rewriteValuePPC64_OpPPC64FMOVDstore_0(v *Value) bool { 6424 // match: (FMOVDstore [off] {sym} ptr (MTVSRD x) mem) 6425 // cond: 6426 // result: (MOVDstore [off] {sym} ptr x mem) 6427 for { 6428 off := v.AuxInt 6429 sym := v.Aux 6430 _ = v.Args[2] 6431 ptr := v.Args[0] 6432 v_1 := v.Args[1] 6433 if v_1.Op != OpPPC64MTVSRD { 6434 break 6435 } 6436 x := v_1.Args[0] 6437 mem := v.Args[2] 6438 v.reset(OpPPC64MOVDstore) 6439 v.AuxInt = off 6440 v.Aux = sym 6441 v.AddArg(ptr) 6442 v.AddArg(x) 6443 v.AddArg(mem) 6444 return true 6445 } 6446 // match: (FMOVDstore [off1] {sym} (ADDconst [off2] ptr) val mem) 6447 // cond: is16Bit(off1+off2) 6448 // result: (FMOVDstore [off1+off2] {sym} ptr val mem) 6449 for { 6450 off1 := v.AuxInt 6451 sym := v.Aux 6452 _ = v.Args[2] 6453 v_0 := v.Args[0] 6454 if v_0.Op != OpPPC64ADDconst { 6455 break 6456 } 6457 off2 := v_0.AuxInt 6458 ptr := v_0.Args[0] 6459 val := v.Args[1] 6460 mem := v.Args[2] 6461 if !(is16Bit(off1 + off2)) { 6462 break 6463 } 6464 v.reset(OpPPC64FMOVDstore) 6465 v.AuxInt = off1 + off2 6466 v.Aux = sym 6467 v.AddArg(ptr) 6468 v.AddArg(val) 6469 v.AddArg(mem) 6470 return true 6471 } 6472 // match: (FMOVDstore [off1] {sym1} p:(MOVDaddr [off2] {sym2} ptr) val mem) 6473 // cond: canMergeSym(sym1,sym2) && (ptr.Op != OpSB || p.Uses == 1) 6474 // result: (FMOVDstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) 6475 for { 6476 off1 := v.AuxInt 6477 sym1 := v.Aux 6478 _ = v.Args[2] 6479 p := v.Args[0] 6480 if p.Op != OpPPC64MOVDaddr { 6481 break 6482 } 6483 off2 := p.AuxInt 6484 sym2 := p.Aux 6485 ptr := p.Args[0] 6486 val := v.Args[1] 6487 mem := v.Args[2] 6488 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { 6489 break 6490 } 6491 v.reset(OpPPC64FMOVDstore) 6492 v.AuxInt = off1 + off2 6493 v.Aux = mergeSym(sym1, sym2) 6494 v.AddArg(ptr) 6495 v.AddArg(val) 6496 v.AddArg(mem) 6497 return true 6498 } 6499 return false 6500 } 6501 func rewriteValuePPC64_OpPPC64FMOVSload_0(v *Value) bool { 6502 // match: (FMOVSload [off1] {sym1} p:(MOVDaddr [off2] {sym2} ptr) mem) 6503 // cond: canMergeSym(sym1,sym2) && (ptr.Op != OpSB || p.Uses == 1) 6504 // result: (FMOVSload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 6505 for { 6506 off1 := v.AuxInt 6507 sym1 := v.Aux 6508 _ = v.Args[1] 6509 p := v.Args[0] 6510 if p.Op != OpPPC64MOVDaddr { 6511 break 6512 } 6513 off2 := p.AuxInt 6514 sym2 := p.Aux 6515 ptr := p.Args[0] 6516 mem := v.Args[1] 6517 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { 6518 break 6519 } 6520 v.reset(OpPPC64FMOVSload) 6521 v.AuxInt = off1 + off2 6522 v.Aux = mergeSym(sym1, sym2) 6523 v.AddArg(ptr) 6524 v.AddArg(mem) 6525 return true 6526 } 6527 // match: (FMOVSload [off1] {sym} (ADDconst [off2] ptr) mem) 6528 // cond: is16Bit(off1+off2) 6529 // result: (FMOVSload [off1+off2] {sym} ptr mem) 6530 for { 6531 off1 := v.AuxInt 6532 sym := v.Aux 6533 _ = v.Args[1] 6534 v_0 := v.Args[0] 6535 if v_0.Op != OpPPC64ADDconst { 6536 break 6537 } 6538 off2 := v_0.AuxInt 6539 ptr := v_0.Args[0] 6540 mem := v.Args[1] 6541 if !(is16Bit(off1 + off2)) { 6542 break 6543 } 6544 v.reset(OpPPC64FMOVSload) 6545 v.AuxInt = off1 + off2 6546 v.Aux = sym 6547 v.AddArg(ptr) 6548 v.AddArg(mem) 6549 return true 6550 } 6551 return false 6552 } 6553 func rewriteValuePPC64_OpPPC64FMOVSstore_0(v *Value) bool { 6554 // match: (FMOVSstore [off1] {sym} (ADDconst [off2] ptr) val mem) 6555 // cond: is16Bit(off1+off2) 6556 // result: (FMOVSstore [off1+off2] {sym} ptr val mem) 6557 for { 6558 off1 := v.AuxInt 6559 sym := v.Aux 6560 _ = v.Args[2] 6561 v_0 := v.Args[0] 6562 if v_0.Op != OpPPC64ADDconst { 6563 break 6564 } 6565 off2 := v_0.AuxInt 6566 ptr := v_0.Args[0] 6567 val := v.Args[1] 6568 mem := v.Args[2] 6569 if !(is16Bit(off1 + off2)) { 6570 break 6571 } 6572 v.reset(OpPPC64FMOVSstore) 6573 v.AuxInt = off1 + off2 6574 v.Aux = sym 6575 v.AddArg(ptr) 6576 v.AddArg(val) 6577 v.AddArg(mem) 6578 return true 6579 } 6580 // match: (FMOVSstore [off1] {sym1} p:(MOVDaddr [off2] {sym2} ptr) val mem) 6581 // cond: canMergeSym(sym1,sym2) && (ptr.Op != OpSB || p.Uses == 1) 6582 // result: (FMOVSstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) 6583 for { 6584 off1 := v.AuxInt 6585 sym1 := v.Aux 6586 _ = v.Args[2] 6587 p := v.Args[0] 6588 if p.Op != OpPPC64MOVDaddr { 6589 break 6590 } 6591 off2 := p.AuxInt 6592 sym2 := p.Aux 6593 ptr := p.Args[0] 6594 val := v.Args[1] 6595 mem := v.Args[2] 6596 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { 6597 break 6598 } 6599 v.reset(OpPPC64FMOVSstore) 6600 v.AuxInt = off1 + off2 6601 v.Aux = mergeSym(sym1, sym2) 6602 v.AddArg(ptr) 6603 v.AddArg(val) 6604 v.AddArg(mem) 6605 return true 6606 } 6607 return false 6608 } 6609 func rewriteValuePPC64_OpPPC64FNEG_0(v *Value) bool { 6610 // match: (FNEG (FABS x)) 6611 // cond: 6612 // result: (FNABS x) 6613 for { 6614 v_0 := v.Args[0] 6615 if v_0.Op != OpPPC64FABS { 6616 break 6617 } 6618 x := v_0.Args[0] 6619 v.reset(OpPPC64FNABS) 6620 v.AddArg(x) 6621 return true 6622 } 6623 // match: (FNEG (FNABS x)) 6624 // cond: 6625 // result: (FABS x) 6626 for { 6627 v_0 := v.Args[0] 6628 if v_0.Op != OpPPC64FNABS { 6629 break 6630 } 6631 x := v_0.Args[0] 6632 v.reset(OpPPC64FABS) 6633 v.AddArg(x) 6634 return true 6635 } 6636 return false 6637 } 6638 func rewriteValuePPC64_OpPPC64FSQRT_0(v *Value) bool { 6639 // match: (FSQRT (FMOVDconst [x])) 6640 // cond: 6641 // result: (FMOVDconst [f2i(math.Sqrt(i2f(x)))]) 6642 for { 6643 v_0 := v.Args[0] 6644 if v_0.Op != OpPPC64FMOVDconst { 6645 break 6646 } 6647 x := v_0.AuxInt 6648 v.reset(OpPPC64FMOVDconst) 6649 v.AuxInt = f2i(math.Sqrt(i2f(x))) 6650 return true 6651 } 6652 return false 6653 } 6654 func rewriteValuePPC64_OpPPC64FSUB_0(v *Value) bool { 6655 // match: (FSUB (FMUL x y) z) 6656 // cond: 6657 // result: (FMSUB x y z) 6658 for { 6659 _ = v.Args[1] 6660 v_0 := v.Args[0] 6661 if v_0.Op != OpPPC64FMUL { 6662 break 6663 } 6664 _ = v_0.Args[1] 6665 x := v_0.Args[0] 6666 y := v_0.Args[1] 6667 z := v.Args[1] 6668 v.reset(OpPPC64FMSUB) 6669 v.AddArg(x) 6670 v.AddArg(y) 6671 v.AddArg(z) 6672 return true 6673 } 6674 return false 6675 } 6676 func rewriteValuePPC64_OpPPC64FSUBS_0(v *Value) bool { 6677 // match: (FSUBS (FMULS x y) z) 6678 // cond: 6679 // result: (FMSUBS x y z) 6680 for { 6681 _ = v.Args[1] 6682 v_0 := v.Args[0] 6683 if v_0.Op != OpPPC64FMULS { 6684 break 6685 } 6686 _ = v_0.Args[1] 6687 x := v_0.Args[0] 6688 y := v_0.Args[1] 6689 z := v.Args[1] 6690 v.reset(OpPPC64FMSUBS) 6691 v.AddArg(x) 6692 v.AddArg(y) 6693 v.AddArg(z) 6694 return true 6695 } 6696 return false 6697 } 6698 func rewriteValuePPC64_OpPPC64FTRUNC_0(v *Value) bool { 6699 // match: (FTRUNC (FMOVDconst [x])) 6700 // cond: 6701 // result: (FMOVDconst [f2i(math.Trunc(i2f(x)))]) 6702 for { 6703 v_0 := v.Args[0] 6704 if v_0.Op != OpPPC64FMOVDconst { 6705 break 6706 } 6707 x := v_0.AuxInt 6708 v.reset(OpPPC64FMOVDconst) 6709 v.AuxInt = f2i(math.Trunc(i2f(x))) 6710 return true 6711 } 6712 return false 6713 } 6714 func rewriteValuePPC64_OpPPC64GreaterEqual_0(v *Value) bool { 6715 // match: (GreaterEqual (FlagEQ)) 6716 // cond: 6717 // result: (MOVDconst [1]) 6718 for { 6719 v_0 := v.Args[0] 6720 if v_0.Op != OpPPC64FlagEQ { 6721 break 6722 } 6723 v.reset(OpPPC64MOVDconst) 6724 v.AuxInt = 1 6725 return true 6726 } 6727 // match: (GreaterEqual (FlagLT)) 6728 // cond: 6729 // result: (MOVDconst [0]) 6730 for { 6731 v_0 := v.Args[0] 6732 if v_0.Op != OpPPC64FlagLT { 6733 break 6734 } 6735 v.reset(OpPPC64MOVDconst) 6736 v.AuxInt = 0 6737 return true 6738 } 6739 // match: (GreaterEqual (FlagGT)) 6740 // cond: 6741 // result: (MOVDconst [1]) 6742 for { 6743 v_0 := v.Args[0] 6744 if v_0.Op != OpPPC64FlagGT { 6745 break 6746 } 6747 v.reset(OpPPC64MOVDconst) 6748 v.AuxInt = 1 6749 return true 6750 } 6751 // match: (GreaterEqual (InvertFlags x)) 6752 // cond: 6753 // result: (LessEqual x) 6754 for { 6755 v_0 := v.Args[0] 6756 if v_0.Op != OpPPC64InvertFlags { 6757 break 6758 } 6759 x := v_0.Args[0] 6760 v.reset(OpPPC64LessEqual) 6761 v.AddArg(x) 6762 return true 6763 } 6764 return false 6765 } 6766 func rewriteValuePPC64_OpPPC64GreaterThan_0(v *Value) bool { 6767 // match: (GreaterThan (FlagEQ)) 6768 // cond: 6769 // result: (MOVDconst [0]) 6770 for { 6771 v_0 := v.Args[0] 6772 if v_0.Op != OpPPC64FlagEQ { 6773 break 6774 } 6775 v.reset(OpPPC64MOVDconst) 6776 v.AuxInt = 0 6777 return true 6778 } 6779 // match: (GreaterThan (FlagLT)) 6780 // cond: 6781 // result: (MOVDconst [0]) 6782 for { 6783 v_0 := v.Args[0] 6784 if v_0.Op != OpPPC64FlagLT { 6785 break 6786 } 6787 v.reset(OpPPC64MOVDconst) 6788 v.AuxInt = 0 6789 return true 6790 } 6791 // match: (GreaterThan (FlagGT)) 6792 // cond: 6793 // result: (MOVDconst [1]) 6794 for { 6795 v_0 := v.Args[0] 6796 if v_0.Op != OpPPC64FlagGT { 6797 break 6798 } 6799 v.reset(OpPPC64MOVDconst) 6800 v.AuxInt = 1 6801 return true 6802 } 6803 // match: (GreaterThan (InvertFlags x)) 6804 // cond: 6805 // result: (LessThan x) 6806 for { 6807 v_0 := v.Args[0] 6808 if v_0.Op != OpPPC64InvertFlags { 6809 break 6810 } 6811 x := v_0.Args[0] 6812 v.reset(OpPPC64LessThan) 6813 v.AddArg(x) 6814 return true 6815 } 6816 return false 6817 } 6818 func rewriteValuePPC64_OpPPC64LessEqual_0(v *Value) bool { 6819 // match: (LessEqual (FlagEQ)) 6820 // cond: 6821 // result: (MOVDconst [1]) 6822 for { 6823 v_0 := v.Args[0] 6824 if v_0.Op != OpPPC64FlagEQ { 6825 break 6826 } 6827 v.reset(OpPPC64MOVDconst) 6828 v.AuxInt = 1 6829 return true 6830 } 6831 // match: (LessEqual (FlagLT)) 6832 // cond: 6833 // result: (MOVDconst [1]) 6834 for { 6835 v_0 := v.Args[0] 6836 if v_0.Op != OpPPC64FlagLT { 6837 break 6838 } 6839 v.reset(OpPPC64MOVDconst) 6840 v.AuxInt = 1 6841 return true 6842 } 6843 // match: (LessEqual (FlagGT)) 6844 // cond: 6845 // result: (MOVDconst [0]) 6846 for { 6847 v_0 := v.Args[0] 6848 if v_0.Op != OpPPC64FlagGT { 6849 break 6850 } 6851 v.reset(OpPPC64MOVDconst) 6852 v.AuxInt = 0 6853 return true 6854 } 6855 // match: (LessEqual (InvertFlags x)) 6856 // cond: 6857 // result: (GreaterEqual x) 6858 for { 6859 v_0 := v.Args[0] 6860 if v_0.Op != OpPPC64InvertFlags { 6861 break 6862 } 6863 x := v_0.Args[0] 6864 v.reset(OpPPC64GreaterEqual) 6865 v.AddArg(x) 6866 return true 6867 } 6868 return false 6869 } 6870 func rewriteValuePPC64_OpPPC64LessThan_0(v *Value) bool { 6871 // match: (LessThan (FlagEQ)) 6872 // cond: 6873 // result: (MOVDconst [0]) 6874 for { 6875 v_0 := v.Args[0] 6876 if v_0.Op != OpPPC64FlagEQ { 6877 break 6878 } 6879 v.reset(OpPPC64MOVDconst) 6880 v.AuxInt = 0 6881 return true 6882 } 6883 // match: (LessThan (FlagLT)) 6884 // cond: 6885 // result: (MOVDconst [1]) 6886 for { 6887 v_0 := v.Args[0] 6888 if v_0.Op != OpPPC64FlagLT { 6889 break 6890 } 6891 v.reset(OpPPC64MOVDconst) 6892 v.AuxInt = 1 6893 return true 6894 } 6895 // match: (LessThan (FlagGT)) 6896 // cond: 6897 // result: (MOVDconst [0]) 6898 for { 6899 v_0 := v.Args[0] 6900 if v_0.Op != OpPPC64FlagGT { 6901 break 6902 } 6903 v.reset(OpPPC64MOVDconst) 6904 v.AuxInt = 0 6905 return true 6906 } 6907 // match: (LessThan (InvertFlags x)) 6908 // cond: 6909 // result: (GreaterThan x) 6910 for { 6911 v_0 := v.Args[0] 6912 if v_0.Op != OpPPC64InvertFlags { 6913 break 6914 } 6915 x := v_0.Args[0] 6916 v.reset(OpPPC64GreaterThan) 6917 v.AddArg(x) 6918 return true 6919 } 6920 return false 6921 } 6922 func rewriteValuePPC64_OpPPC64MFVSRD_0(v *Value) bool { 6923 b := v.Block 6924 _ = b 6925 typ := &b.Func.Config.Types 6926 _ = typ 6927 // match: (MFVSRD (FMOVDconst [c])) 6928 // cond: 6929 // result: (MOVDconst [c]) 6930 for { 6931 v_0 := v.Args[0] 6932 if v_0.Op != OpPPC64FMOVDconst { 6933 break 6934 } 6935 c := v_0.AuxInt 6936 v.reset(OpPPC64MOVDconst) 6937 v.AuxInt = c 6938 return true 6939 } 6940 // match: (MFVSRD x:(FMOVDload [off] {sym} ptr mem)) 6941 // cond: x.Uses == 1 && clobber(x) 6942 // result: @x.Block (MOVDload [off] {sym} ptr mem) 6943 for { 6944 x := v.Args[0] 6945 if x.Op != OpPPC64FMOVDload { 6946 break 6947 } 6948 off := x.AuxInt 6949 sym := x.Aux 6950 _ = x.Args[1] 6951 ptr := x.Args[0] 6952 mem := x.Args[1] 6953 if !(x.Uses == 1 && clobber(x)) { 6954 break 6955 } 6956 b = x.Block 6957 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, typ.Int64) 6958 v.reset(OpCopy) 6959 v.AddArg(v0) 6960 v0.AuxInt = off 6961 v0.Aux = sym 6962 v0.AddArg(ptr) 6963 v0.AddArg(mem) 6964 return true 6965 } 6966 return false 6967 } 6968 func rewriteValuePPC64_OpPPC64MOVBZload_0(v *Value) bool { 6969 // match: (MOVBZload [off1] {sym1} p:(MOVDaddr [off2] {sym2} ptr) mem) 6970 // cond: canMergeSym(sym1,sym2) && (ptr.Op != OpSB || p.Uses == 1) 6971 // result: (MOVBZload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 6972 for { 6973 off1 := v.AuxInt 6974 sym1 := v.Aux 6975 _ = v.Args[1] 6976 p := v.Args[0] 6977 if p.Op != OpPPC64MOVDaddr { 6978 break 6979 } 6980 off2 := p.AuxInt 6981 sym2 := p.Aux 6982 ptr := p.Args[0] 6983 mem := v.Args[1] 6984 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { 6985 break 6986 } 6987 v.reset(OpPPC64MOVBZload) 6988 v.AuxInt = off1 + off2 6989 v.Aux = mergeSym(sym1, sym2) 6990 v.AddArg(ptr) 6991 v.AddArg(mem) 6992 return true 6993 } 6994 // match: (MOVBZload [off1] {sym} (ADDconst [off2] x) mem) 6995 // cond: is16Bit(off1+off2) 6996 // result: (MOVBZload [off1+off2] {sym} x mem) 6997 for { 6998 off1 := v.AuxInt 6999 sym := v.Aux 7000 _ = v.Args[1] 7001 v_0 := v.Args[0] 7002 if v_0.Op != OpPPC64ADDconst { 7003 break 7004 } 7005 off2 := v_0.AuxInt 7006 x := v_0.Args[0] 7007 mem := v.Args[1] 7008 if !(is16Bit(off1 + off2)) { 7009 break 7010 } 7011 v.reset(OpPPC64MOVBZload) 7012 v.AuxInt = off1 + off2 7013 v.Aux = sym 7014 v.AddArg(x) 7015 v.AddArg(mem) 7016 return true 7017 } 7018 return false 7019 } 7020 func rewriteValuePPC64_OpPPC64MOVBZreg_0(v *Value) bool { 7021 // match: (MOVBZreg y:(ANDconst [c] _)) 7022 // cond: uint64(c) <= 0xFF 7023 // result: y 7024 for { 7025 y := v.Args[0] 7026 if y.Op != OpPPC64ANDconst { 7027 break 7028 } 7029 c := y.AuxInt 7030 if !(uint64(c) <= 0xFF) { 7031 break 7032 } 7033 v.reset(OpCopy) 7034 v.Type = y.Type 7035 v.AddArg(y) 7036 return true 7037 } 7038 // match: (MOVBZreg y:(MOVBZreg _)) 7039 // cond: 7040 // result: y 7041 for { 7042 y := v.Args[0] 7043 if y.Op != OpPPC64MOVBZreg { 7044 break 7045 } 7046 v.reset(OpCopy) 7047 v.Type = y.Type 7048 v.AddArg(y) 7049 return true 7050 } 7051 // match: (MOVBZreg (MOVBreg x)) 7052 // cond: 7053 // result: (MOVBZreg x) 7054 for { 7055 v_0 := v.Args[0] 7056 if v_0.Op != OpPPC64MOVBreg { 7057 break 7058 } 7059 x := v_0.Args[0] 7060 v.reset(OpPPC64MOVBZreg) 7061 v.AddArg(x) 7062 return true 7063 } 7064 // match: (MOVBZreg x:(MOVBZload _ _)) 7065 // cond: 7066 // result: x 7067 for { 7068 x := v.Args[0] 7069 if x.Op != OpPPC64MOVBZload { 7070 break 7071 } 7072 _ = x.Args[1] 7073 v.reset(OpCopy) 7074 v.Type = x.Type 7075 v.AddArg(x) 7076 return true 7077 } 7078 // match: (MOVBZreg (MOVDconst [c])) 7079 // cond: 7080 // result: (MOVDconst [int64(uint8(c))]) 7081 for { 7082 v_0 := v.Args[0] 7083 if v_0.Op != OpPPC64MOVDconst { 7084 break 7085 } 7086 c := v_0.AuxInt 7087 v.reset(OpPPC64MOVDconst) 7088 v.AuxInt = int64(uint8(c)) 7089 return true 7090 } 7091 return false 7092 } 7093 func rewriteValuePPC64_OpPPC64MOVBreg_0(v *Value) bool { 7094 // match: (MOVBreg y:(ANDconst [c] _)) 7095 // cond: uint64(c) <= 0x7F 7096 // result: y 7097 for { 7098 y := v.Args[0] 7099 if y.Op != OpPPC64ANDconst { 7100 break 7101 } 7102 c := y.AuxInt 7103 if !(uint64(c) <= 0x7F) { 7104 break 7105 } 7106 v.reset(OpCopy) 7107 v.Type = y.Type 7108 v.AddArg(y) 7109 return true 7110 } 7111 // match: (MOVBreg y:(MOVBreg _)) 7112 // cond: 7113 // result: y 7114 for { 7115 y := v.Args[0] 7116 if y.Op != OpPPC64MOVBreg { 7117 break 7118 } 7119 v.reset(OpCopy) 7120 v.Type = y.Type 7121 v.AddArg(y) 7122 return true 7123 } 7124 // match: (MOVBreg (MOVBZreg x)) 7125 // cond: 7126 // result: (MOVBreg x) 7127 for { 7128 v_0 := v.Args[0] 7129 if v_0.Op != OpPPC64MOVBZreg { 7130 break 7131 } 7132 x := v_0.Args[0] 7133 v.reset(OpPPC64MOVBreg) 7134 v.AddArg(x) 7135 return true 7136 } 7137 // match: (MOVBreg (MOVDconst [c])) 7138 // cond: 7139 // result: (MOVDconst [int64(int8(c))]) 7140 for { 7141 v_0 := v.Args[0] 7142 if v_0.Op != OpPPC64MOVDconst { 7143 break 7144 } 7145 c := v_0.AuxInt 7146 v.reset(OpPPC64MOVDconst) 7147 v.AuxInt = int64(int8(c)) 7148 return true 7149 } 7150 return false 7151 } 7152 func rewriteValuePPC64_OpPPC64MOVBstore_0(v *Value) bool { 7153 b := v.Block 7154 _ = b 7155 config := b.Func.Config 7156 _ = config 7157 // match: (MOVBstore [off1] {sym} (ADDconst [off2] x) val mem) 7158 // cond: is16Bit(off1+off2) 7159 // result: (MOVBstore [off1+off2] {sym} x val mem) 7160 for { 7161 off1 := v.AuxInt 7162 sym := v.Aux 7163 _ = v.Args[2] 7164 v_0 := v.Args[0] 7165 if v_0.Op != OpPPC64ADDconst { 7166 break 7167 } 7168 off2 := v_0.AuxInt 7169 x := v_0.Args[0] 7170 val := v.Args[1] 7171 mem := v.Args[2] 7172 if !(is16Bit(off1 + off2)) { 7173 break 7174 } 7175 v.reset(OpPPC64MOVBstore) 7176 v.AuxInt = off1 + off2 7177 v.Aux = sym 7178 v.AddArg(x) 7179 v.AddArg(val) 7180 v.AddArg(mem) 7181 return true 7182 } 7183 // match: (MOVBstore [off1] {sym1} p:(MOVDaddr [off2] {sym2} ptr) val mem) 7184 // cond: canMergeSym(sym1,sym2) && (ptr.Op != OpSB || p.Uses == 1) 7185 // result: (MOVBstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) 7186 for { 7187 off1 := v.AuxInt 7188 sym1 := v.Aux 7189 _ = v.Args[2] 7190 p := v.Args[0] 7191 if p.Op != OpPPC64MOVDaddr { 7192 break 7193 } 7194 off2 := p.AuxInt 7195 sym2 := p.Aux 7196 ptr := p.Args[0] 7197 val := v.Args[1] 7198 mem := v.Args[2] 7199 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { 7200 break 7201 } 7202 v.reset(OpPPC64MOVBstore) 7203 v.AuxInt = off1 + off2 7204 v.Aux = mergeSym(sym1, sym2) 7205 v.AddArg(ptr) 7206 v.AddArg(val) 7207 v.AddArg(mem) 7208 return true 7209 } 7210 // match: (MOVBstore [off] {sym} ptr (MOVDconst [c]) mem) 7211 // cond: c == 0 7212 // result: (MOVBstorezero [off] {sym} ptr mem) 7213 for { 7214 off := v.AuxInt 7215 sym := v.Aux 7216 _ = v.Args[2] 7217 ptr := v.Args[0] 7218 v_1 := v.Args[1] 7219 if v_1.Op != OpPPC64MOVDconst { 7220 break 7221 } 7222 c := v_1.AuxInt 7223 mem := v.Args[2] 7224 if !(c == 0) { 7225 break 7226 } 7227 v.reset(OpPPC64MOVBstorezero) 7228 v.AuxInt = off 7229 v.Aux = sym 7230 v.AddArg(ptr) 7231 v.AddArg(mem) 7232 return true 7233 } 7234 // match: (MOVBstore [off] {sym} ptr (MOVBreg x) mem) 7235 // cond: 7236 // result: (MOVBstore [off] {sym} ptr x mem) 7237 for { 7238 off := v.AuxInt 7239 sym := v.Aux 7240 _ = v.Args[2] 7241 ptr := v.Args[0] 7242 v_1 := v.Args[1] 7243 if v_1.Op != OpPPC64MOVBreg { 7244 break 7245 } 7246 x := v_1.Args[0] 7247 mem := v.Args[2] 7248 v.reset(OpPPC64MOVBstore) 7249 v.AuxInt = off 7250 v.Aux = sym 7251 v.AddArg(ptr) 7252 v.AddArg(x) 7253 v.AddArg(mem) 7254 return true 7255 } 7256 // match: (MOVBstore [off] {sym} ptr (MOVBZreg x) mem) 7257 // cond: 7258 // result: (MOVBstore [off] {sym} ptr x mem) 7259 for { 7260 off := v.AuxInt 7261 sym := v.Aux 7262 _ = v.Args[2] 7263 ptr := v.Args[0] 7264 v_1 := v.Args[1] 7265 if v_1.Op != OpPPC64MOVBZreg { 7266 break 7267 } 7268 x := v_1.Args[0] 7269 mem := v.Args[2] 7270 v.reset(OpPPC64MOVBstore) 7271 v.AuxInt = off 7272 v.Aux = sym 7273 v.AddArg(ptr) 7274 v.AddArg(x) 7275 v.AddArg(mem) 7276 return true 7277 } 7278 // match: (MOVBstore [i1] {s} p (SRWconst (MOVHZreg w) [8]) x0:(MOVBstore [i0] {s} p w mem)) 7279 // cond: !config.BigEndian && x0.Uses == 1 && i1 == i0+1 && clobber(x0) 7280 // result: (MOVHstore [i0] {s} p w mem) 7281 for { 7282 i1 := v.AuxInt 7283 s := v.Aux 7284 _ = v.Args[2] 7285 p := v.Args[0] 7286 v_1 := v.Args[1] 7287 if v_1.Op != OpPPC64SRWconst { 7288 break 7289 } 7290 if v_1.AuxInt != 8 { 7291 break 7292 } 7293 v_1_0 := v_1.Args[0] 7294 if v_1_0.Op != OpPPC64MOVHZreg { 7295 break 7296 } 7297 w := v_1_0.Args[0] 7298 x0 := v.Args[2] 7299 if x0.Op != OpPPC64MOVBstore { 7300 break 7301 } 7302 i0 := x0.AuxInt 7303 if x0.Aux != s { 7304 break 7305 } 7306 _ = x0.Args[2] 7307 if p != x0.Args[0] { 7308 break 7309 } 7310 if w != x0.Args[1] { 7311 break 7312 } 7313 mem := x0.Args[2] 7314 if !(!config.BigEndian && x0.Uses == 1 && i1 == i0+1 && clobber(x0)) { 7315 break 7316 } 7317 v.reset(OpPPC64MOVHstore) 7318 v.AuxInt = i0 7319 v.Aux = s 7320 v.AddArg(p) 7321 v.AddArg(w) 7322 v.AddArg(mem) 7323 return true 7324 } 7325 // 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)))) 7326 // 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) 7327 // result: (MOVWstore [i0] {s} p w mem) 7328 for { 7329 i3 := v.AuxInt 7330 s := v.Aux 7331 _ = v.Args[2] 7332 p := v.Args[0] 7333 v_1 := v.Args[1] 7334 if v_1.Op != OpPPC64SRWconst { 7335 break 7336 } 7337 if v_1.AuxInt != 24 { 7338 break 7339 } 7340 w := v_1.Args[0] 7341 x0 := v.Args[2] 7342 if x0.Op != OpPPC64MOVBstore { 7343 break 7344 } 7345 i2 := x0.AuxInt 7346 if x0.Aux != s { 7347 break 7348 } 7349 _ = x0.Args[2] 7350 if p != x0.Args[0] { 7351 break 7352 } 7353 x0_1 := x0.Args[1] 7354 if x0_1.Op != OpPPC64SRWconst { 7355 break 7356 } 7357 if x0_1.AuxInt != 16 { 7358 break 7359 } 7360 if w != x0_1.Args[0] { 7361 break 7362 } 7363 x1 := x0.Args[2] 7364 if x1.Op != OpPPC64MOVBstore { 7365 break 7366 } 7367 i1 := x1.AuxInt 7368 if x1.Aux != s { 7369 break 7370 } 7371 _ = x1.Args[2] 7372 if p != x1.Args[0] { 7373 break 7374 } 7375 x1_1 := x1.Args[1] 7376 if x1_1.Op != OpPPC64SRWconst { 7377 break 7378 } 7379 if x1_1.AuxInt != 8 { 7380 break 7381 } 7382 if w != x1_1.Args[0] { 7383 break 7384 } 7385 x2 := x1.Args[2] 7386 if x2.Op != OpPPC64MOVBstore { 7387 break 7388 } 7389 i0 := x2.AuxInt 7390 if x2.Aux != s { 7391 break 7392 } 7393 _ = x2.Args[2] 7394 if p != x2.Args[0] { 7395 break 7396 } 7397 if w != x2.Args[1] { 7398 break 7399 } 7400 mem := x2.Args[2] 7401 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)) { 7402 break 7403 } 7404 v.reset(OpPPC64MOVWstore) 7405 v.AuxInt = i0 7406 v.Aux = s 7407 v.AddArg(p) 7408 v.AddArg(w) 7409 v.AddArg(mem) 7410 return true 7411 } 7412 // 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)))))))) 7413 // 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) 7414 // result: (MOVDstore [i0] {s} p w mem) 7415 for { 7416 i7 := v.AuxInt 7417 s := v.Aux 7418 _ = v.Args[2] 7419 p := v.Args[0] 7420 v_1 := v.Args[1] 7421 if v_1.Op != OpPPC64SRDconst { 7422 break 7423 } 7424 if v_1.AuxInt != 56 { 7425 break 7426 } 7427 w := v_1.Args[0] 7428 x0 := v.Args[2] 7429 if x0.Op != OpPPC64MOVBstore { 7430 break 7431 } 7432 i6 := x0.AuxInt 7433 if x0.Aux != s { 7434 break 7435 } 7436 _ = x0.Args[2] 7437 if p != x0.Args[0] { 7438 break 7439 } 7440 x0_1 := x0.Args[1] 7441 if x0_1.Op != OpPPC64SRDconst { 7442 break 7443 } 7444 if x0_1.AuxInt != 48 { 7445 break 7446 } 7447 if w != x0_1.Args[0] { 7448 break 7449 } 7450 x1 := x0.Args[2] 7451 if x1.Op != OpPPC64MOVBstore { 7452 break 7453 } 7454 i5 := x1.AuxInt 7455 if x1.Aux != s { 7456 break 7457 } 7458 _ = x1.Args[2] 7459 if p != x1.Args[0] { 7460 break 7461 } 7462 x1_1 := x1.Args[1] 7463 if x1_1.Op != OpPPC64SRDconst { 7464 break 7465 } 7466 if x1_1.AuxInt != 40 { 7467 break 7468 } 7469 if w != x1_1.Args[0] { 7470 break 7471 } 7472 x2 := x1.Args[2] 7473 if x2.Op != OpPPC64MOVBstore { 7474 break 7475 } 7476 i4 := x2.AuxInt 7477 if x2.Aux != s { 7478 break 7479 } 7480 _ = x2.Args[2] 7481 if p != x2.Args[0] { 7482 break 7483 } 7484 x2_1 := x2.Args[1] 7485 if x2_1.Op != OpPPC64SRDconst { 7486 break 7487 } 7488 if x2_1.AuxInt != 32 { 7489 break 7490 } 7491 if w != x2_1.Args[0] { 7492 break 7493 } 7494 x3 := x2.Args[2] 7495 if x3.Op != OpPPC64MOVBstore { 7496 break 7497 } 7498 i3 := x3.AuxInt 7499 if x3.Aux != s { 7500 break 7501 } 7502 _ = x3.Args[2] 7503 if p != x3.Args[0] { 7504 break 7505 } 7506 x3_1 := x3.Args[1] 7507 if x3_1.Op != OpPPC64SRDconst { 7508 break 7509 } 7510 if x3_1.AuxInt != 24 { 7511 break 7512 } 7513 if w != x3_1.Args[0] { 7514 break 7515 } 7516 x4 := x3.Args[2] 7517 if x4.Op != OpPPC64MOVBstore { 7518 break 7519 } 7520 i2 := x4.AuxInt 7521 if x4.Aux != s { 7522 break 7523 } 7524 _ = x4.Args[2] 7525 if p != x4.Args[0] { 7526 break 7527 } 7528 x4_1 := x4.Args[1] 7529 if x4_1.Op != OpPPC64SRDconst { 7530 break 7531 } 7532 if x4_1.AuxInt != 16 { 7533 break 7534 } 7535 if w != x4_1.Args[0] { 7536 break 7537 } 7538 x5 := x4.Args[2] 7539 if x5.Op != OpPPC64MOVBstore { 7540 break 7541 } 7542 i1 := x5.AuxInt 7543 if x5.Aux != s { 7544 break 7545 } 7546 _ = x5.Args[2] 7547 if p != x5.Args[0] { 7548 break 7549 } 7550 x5_1 := x5.Args[1] 7551 if x5_1.Op != OpPPC64SRDconst { 7552 break 7553 } 7554 if x5_1.AuxInt != 8 { 7555 break 7556 } 7557 if w != x5_1.Args[0] { 7558 break 7559 } 7560 x6 := x5.Args[2] 7561 if x6.Op != OpPPC64MOVBstore { 7562 break 7563 } 7564 i0 := x6.AuxInt 7565 if x6.Aux != s { 7566 break 7567 } 7568 _ = x6.Args[2] 7569 if p != x6.Args[0] { 7570 break 7571 } 7572 if w != x6.Args[1] { 7573 break 7574 } 7575 mem := x6.Args[2] 7576 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)) { 7577 break 7578 } 7579 v.reset(OpPPC64MOVDstore) 7580 v.AuxInt = i0 7581 v.Aux = s 7582 v.AddArg(p) 7583 v.AddArg(w) 7584 v.AddArg(mem) 7585 return true 7586 } 7587 return false 7588 } 7589 func rewriteValuePPC64_OpPPC64MOVBstorezero_0(v *Value) bool { 7590 // match: (MOVBstorezero [off1] {sym} (ADDconst [off2] x) mem) 7591 // cond: is16Bit(off1+off2) 7592 // result: (MOVBstorezero [off1+off2] {sym} x mem) 7593 for { 7594 off1 := v.AuxInt 7595 sym := v.Aux 7596 _ = v.Args[1] 7597 v_0 := v.Args[0] 7598 if v_0.Op != OpPPC64ADDconst { 7599 break 7600 } 7601 off2 := v_0.AuxInt 7602 x := v_0.Args[0] 7603 mem := v.Args[1] 7604 if !(is16Bit(off1 + off2)) { 7605 break 7606 } 7607 v.reset(OpPPC64MOVBstorezero) 7608 v.AuxInt = off1 + off2 7609 v.Aux = sym 7610 v.AddArg(x) 7611 v.AddArg(mem) 7612 return true 7613 } 7614 // match: (MOVBstorezero [off1] {sym1} p:(MOVDaddr [off2] {sym2} x) mem) 7615 // cond: canMergeSym(sym1,sym2) && (x.Op != OpSB || p.Uses == 1) 7616 // result: (MOVBstorezero [off1+off2] {mergeSym(sym1,sym2)} x mem) 7617 for { 7618 off1 := v.AuxInt 7619 sym1 := v.Aux 7620 _ = v.Args[1] 7621 p := v.Args[0] 7622 if p.Op != OpPPC64MOVDaddr { 7623 break 7624 } 7625 off2 := p.AuxInt 7626 sym2 := p.Aux 7627 x := p.Args[0] 7628 mem := v.Args[1] 7629 if !(canMergeSym(sym1, sym2) && (x.Op != OpSB || p.Uses == 1)) { 7630 break 7631 } 7632 v.reset(OpPPC64MOVBstorezero) 7633 v.AuxInt = off1 + off2 7634 v.Aux = mergeSym(sym1, sym2) 7635 v.AddArg(x) 7636 v.AddArg(mem) 7637 return true 7638 } 7639 return false 7640 } 7641 func rewriteValuePPC64_OpPPC64MOVDload_0(v *Value) bool { 7642 // match: (MOVDload [off] {sym} ptr (FMOVDstore [off] {sym} ptr x _)) 7643 // cond: 7644 // result: (MFVSRD x) 7645 for { 7646 off := v.AuxInt 7647 sym := v.Aux 7648 _ = v.Args[1] 7649 ptr := v.Args[0] 7650 v_1 := v.Args[1] 7651 if v_1.Op != OpPPC64FMOVDstore { 7652 break 7653 } 7654 if v_1.AuxInt != off { 7655 break 7656 } 7657 if v_1.Aux != sym { 7658 break 7659 } 7660 _ = v_1.Args[2] 7661 if ptr != v_1.Args[0] { 7662 break 7663 } 7664 x := v_1.Args[1] 7665 v.reset(OpPPC64MFVSRD) 7666 v.AddArg(x) 7667 return true 7668 } 7669 // match: (MOVDload [off1] {sym1} p:(MOVDaddr [off2] {sym2} ptr) mem) 7670 // cond: canMergeSym(sym1,sym2) && (ptr.Op != OpSB || p.Uses == 1) 7671 // result: (MOVDload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 7672 for { 7673 off1 := v.AuxInt 7674 sym1 := v.Aux 7675 _ = v.Args[1] 7676 p := v.Args[0] 7677 if p.Op != OpPPC64MOVDaddr { 7678 break 7679 } 7680 off2 := p.AuxInt 7681 sym2 := p.Aux 7682 ptr := p.Args[0] 7683 mem := v.Args[1] 7684 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { 7685 break 7686 } 7687 v.reset(OpPPC64MOVDload) 7688 v.AuxInt = off1 + off2 7689 v.Aux = mergeSym(sym1, sym2) 7690 v.AddArg(ptr) 7691 v.AddArg(mem) 7692 return true 7693 } 7694 // match: (MOVDload [off1] {sym} (ADDconst [off2] x) mem) 7695 // cond: is16Bit(off1+off2) 7696 // result: (MOVDload [off1+off2] {sym} x mem) 7697 for { 7698 off1 := v.AuxInt 7699 sym := v.Aux 7700 _ = v.Args[1] 7701 v_0 := v.Args[0] 7702 if v_0.Op != OpPPC64ADDconst { 7703 break 7704 } 7705 off2 := v_0.AuxInt 7706 x := v_0.Args[0] 7707 mem := v.Args[1] 7708 if !(is16Bit(off1 + off2)) { 7709 break 7710 } 7711 v.reset(OpPPC64MOVDload) 7712 v.AuxInt = off1 + off2 7713 v.Aux = sym 7714 v.AddArg(x) 7715 v.AddArg(mem) 7716 return true 7717 } 7718 return false 7719 } 7720 func rewriteValuePPC64_OpPPC64MOVDstore_0(v *Value) bool { 7721 // match: (MOVDstore [off] {sym} ptr (MFVSRD x) mem) 7722 // cond: 7723 // result: (FMOVDstore [off] {sym} ptr x mem) 7724 for { 7725 off := v.AuxInt 7726 sym := v.Aux 7727 _ = v.Args[2] 7728 ptr := v.Args[0] 7729 v_1 := v.Args[1] 7730 if v_1.Op != OpPPC64MFVSRD { 7731 break 7732 } 7733 x := v_1.Args[0] 7734 mem := v.Args[2] 7735 v.reset(OpPPC64FMOVDstore) 7736 v.AuxInt = off 7737 v.Aux = sym 7738 v.AddArg(ptr) 7739 v.AddArg(x) 7740 v.AddArg(mem) 7741 return true 7742 } 7743 // match: (MOVDstore [off1] {sym} (ADDconst [off2] x) val mem) 7744 // cond: is16Bit(off1+off2) 7745 // result: (MOVDstore [off1+off2] {sym} x val mem) 7746 for { 7747 off1 := v.AuxInt 7748 sym := v.Aux 7749 _ = v.Args[2] 7750 v_0 := v.Args[0] 7751 if v_0.Op != OpPPC64ADDconst { 7752 break 7753 } 7754 off2 := v_0.AuxInt 7755 x := v_0.Args[0] 7756 val := v.Args[1] 7757 mem := v.Args[2] 7758 if !(is16Bit(off1 + off2)) { 7759 break 7760 } 7761 v.reset(OpPPC64MOVDstore) 7762 v.AuxInt = off1 + off2 7763 v.Aux = sym 7764 v.AddArg(x) 7765 v.AddArg(val) 7766 v.AddArg(mem) 7767 return true 7768 } 7769 // match: (MOVDstore [off1] {sym1} p:(MOVDaddr [off2] {sym2} ptr) val mem) 7770 // cond: canMergeSym(sym1,sym2) && (ptr.Op != OpSB || p.Uses == 1) 7771 // result: (MOVDstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) 7772 for { 7773 off1 := v.AuxInt 7774 sym1 := v.Aux 7775 _ = v.Args[2] 7776 p := v.Args[0] 7777 if p.Op != OpPPC64MOVDaddr { 7778 break 7779 } 7780 off2 := p.AuxInt 7781 sym2 := p.Aux 7782 ptr := p.Args[0] 7783 val := v.Args[1] 7784 mem := v.Args[2] 7785 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { 7786 break 7787 } 7788 v.reset(OpPPC64MOVDstore) 7789 v.AuxInt = off1 + off2 7790 v.Aux = mergeSym(sym1, sym2) 7791 v.AddArg(ptr) 7792 v.AddArg(val) 7793 v.AddArg(mem) 7794 return true 7795 } 7796 // match: (MOVDstore [off] {sym} ptr (MOVDconst [c]) mem) 7797 // cond: c == 0 7798 // result: (MOVDstorezero [off] {sym} ptr mem) 7799 for { 7800 off := v.AuxInt 7801 sym := v.Aux 7802 _ = v.Args[2] 7803 ptr := v.Args[0] 7804 v_1 := v.Args[1] 7805 if v_1.Op != OpPPC64MOVDconst { 7806 break 7807 } 7808 c := v_1.AuxInt 7809 mem := v.Args[2] 7810 if !(c == 0) { 7811 break 7812 } 7813 v.reset(OpPPC64MOVDstorezero) 7814 v.AuxInt = off 7815 v.Aux = sym 7816 v.AddArg(ptr) 7817 v.AddArg(mem) 7818 return true 7819 } 7820 return false 7821 } 7822 func rewriteValuePPC64_OpPPC64MOVDstorezero_0(v *Value) bool { 7823 // match: (MOVDstorezero [off1] {sym} (ADDconst [off2] x) mem) 7824 // cond: is16Bit(off1+off2) 7825 // result: (MOVDstorezero [off1+off2] {sym} x mem) 7826 for { 7827 off1 := v.AuxInt 7828 sym := v.Aux 7829 _ = v.Args[1] 7830 v_0 := v.Args[0] 7831 if v_0.Op != OpPPC64ADDconst { 7832 break 7833 } 7834 off2 := v_0.AuxInt 7835 x := v_0.Args[0] 7836 mem := v.Args[1] 7837 if !(is16Bit(off1 + off2)) { 7838 break 7839 } 7840 v.reset(OpPPC64MOVDstorezero) 7841 v.AuxInt = off1 + off2 7842 v.Aux = sym 7843 v.AddArg(x) 7844 v.AddArg(mem) 7845 return true 7846 } 7847 // match: (MOVDstorezero [off1] {sym1} p:(MOVDaddr [off2] {sym2} x) mem) 7848 // cond: canMergeSym(sym1,sym2) && (x.Op != OpSB || p.Uses == 1) 7849 // result: (MOVDstorezero [off1+off2] {mergeSym(sym1,sym2)} x mem) 7850 for { 7851 off1 := v.AuxInt 7852 sym1 := v.Aux 7853 _ = v.Args[1] 7854 p := v.Args[0] 7855 if p.Op != OpPPC64MOVDaddr { 7856 break 7857 } 7858 off2 := p.AuxInt 7859 sym2 := p.Aux 7860 x := p.Args[0] 7861 mem := v.Args[1] 7862 if !(canMergeSym(sym1, sym2) && (x.Op != OpSB || p.Uses == 1)) { 7863 break 7864 } 7865 v.reset(OpPPC64MOVDstorezero) 7866 v.AuxInt = off1 + off2 7867 v.Aux = mergeSym(sym1, sym2) 7868 v.AddArg(x) 7869 v.AddArg(mem) 7870 return true 7871 } 7872 return false 7873 } 7874 func rewriteValuePPC64_OpPPC64MOVHZload_0(v *Value) bool { 7875 // match: (MOVHZload [off1] {sym1} p:(MOVDaddr [off2] {sym2} ptr) mem) 7876 // cond: canMergeSym(sym1,sym2) && (ptr.Op != OpSB || p.Uses == 1) 7877 // result: (MOVHZload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 7878 for { 7879 off1 := v.AuxInt 7880 sym1 := v.Aux 7881 _ = v.Args[1] 7882 p := v.Args[0] 7883 if p.Op != OpPPC64MOVDaddr { 7884 break 7885 } 7886 off2 := p.AuxInt 7887 sym2 := p.Aux 7888 ptr := p.Args[0] 7889 mem := v.Args[1] 7890 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { 7891 break 7892 } 7893 v.reset(OpPPC64MOVHZload) 7894 v.AuxInt = off1 + off2 7895 v.Aux = mergeSym(sym1, sym2) 7896 v.AddArg(ptr) 7897 v.AddArg(mem) 7898 return true 7899 } 7900 // match: (MOVHZload [off1] {sym} (ADDconst [off2] x) mem) 7901 // cond: is16Bit(off1+off2) 7902 // result: (MOVHZload [off1+off2] {sym} x mem) 7903 for { 7904 off1 := v.AuxInt 7905 sym := v.Aux 7906 _ = v.Args[1] 7907 v_0 := v.Args[0] 7908 if v_0.Op != OpPPC64ADDconst { 7909 break 7910 } 7911 off2 := v_0.AuxInt 7912 x := v_0.Args[0] 7913 mem := v.Args[1] 7914 if !(is16Bit(off1 + off2)) { 7915 break 7916 } 7917 v.reset(OpPPC64MOVHZload) 7918 v.AuxInt = off1 + off2 7919 v.Aux = sym 7920 v.AddArg(x) 7921 v.AddArg(mem) 7922 return true 7923 } 7924 return false 7925 } 7926 func rewriteValuePPC64_OpPPC64MOVHZreg_0(v *Value) bool { 7927 // match: (MOVHZreg y:(ANDconst [c] _)) 7928 // cond: uint64(c) <= 0xFFFF 7929 // result: y 7930 for { 7931 y := v.Args[0] 7932 if y.Op != OpPPC64ANDconst { 7933 break 7934 } 7935 c := y.AuxInt 7936 if !(uint64(c) <= 0xFFFF) { 7937 break 7938 } 7939 v.reset(OpCopy) 7940 v.Type = y.Type 7941 v.AddArg(y) 7942 return true 7943 } 7944 // match: (MOVHZreg y:(MOVHZreg _)) 7945 // cond: 7946 // result: y 7947 for { 7948 y := v.Args[0] 7949 if y.Op != OpPPC64MOVHZreg { 7950 break 7951 } 7952 v.reset(OpCopy) 7953 v.Type = y.Type 7954 v.AddArg(y) 7955 return true 7956 } 7957 // match: (MOVHZreg y:(MOVBZreg _)) 7958 // cond: 7959 // result: y 7960 for { 7961 y := v.Args[0] 7962 if y.Op != OpPPC64MOVBZreg { 7963 break 7964 } 7965 v.reset(OpCopy) 7966 v.Type = y.Type 7967 v.AddArg(y) 7968 return true 7969 } 7970 // match: (MOVHZreg y:(MOVHreg x)) 7971 // cond: 7972 // result: (MOVHZreg x) 7973 for { 7974 y := v.Args[0] 7975 if y.Op != OpPPC64MOVHreg { 7976 break 7977 } 7978 x := y.Args[0] 7979 v.reset(OpPPC64MOVHZreg) 7980 v.AddArg(x) 7981 return true 7982 } 7983 // match: (MOVHZreg x:(MOVHZload _ _)) 7984 // cond: 7985 // result: x 7986 for { 7987 x := v.Args[0] 7988 if x.Op != OpPPC64MOVHZload { 7989 break 7990 } 7991 _ = x.Args[1] 7992 v.reset(OpCopy) 7993 v.Type = x.Type 7994 v.AddArg(x) 7995 return true 7996 } 7997 // match: (MOVHZreg (MOVDconst [c])) 7998 // cond: 7999 // result: (MOVDconst [int64(uint16(c))]) 8000 for { 8001 v_0 := v.Args[0] 8002 if v_0.Op != OpPPC64MOVDconst { 8003 break 8004 } 8005 c := v_0.AuxInt 8006 v.reset(OpPPC64MOVDconst) 8007 v.AuxInt = int64(uint16(c)) 8008 return true 8009 } 8010 return false 8011 } 8012 func rewriteValuePPC64_OpPPC64MOVHload_0(v *Value) bool { 8013 // match: (MOVHload [off1] {sym1} p:(MOVDaddr [off2] {sym2} ptr) mem) 8014 // cond: canMergeSym(sym1,sym2) && (ptr.Op != OpSB || p.Uses == 1) 8015 // result: (MOVHload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 8016 for { 8017 off1 := v.AuxInt 8018 sym1 := v.Aux 8019 _ = v.Args[1] 8020 p := v.Args[0] 8021 if p.Op != OpPPC64MOVDaddr { 8022 break 8023 } 8024 off2 := p.AuxInt 8025 sym2 := p.Aux 8026 ptr := p.Args[0] 8027 mem := v.Args[1] 8028 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { 8029 break 8030 } 8031 v.reset(OpPPC64MOVHload) 8032 v.AuxInt = off1 + off2 8033 v.Aux = mergeSym(sym1, sym2) 8034 v.AddArg(ptr) 8035 v.AddArg(mem) 8036 return true 8037 } 8038 // match: (MOVHload [off1] {sym} (ADDconst [off2] x) mem) 8039 // cond: is16Bit(off1+off2) 8040 // result: (MOVHload [off1+off2] {sym} x mem) 8041 for { 8042 off1 := v.AuxInt 8043 sym := v.Aux 8044 _ = v.Args[1] 8045 v_0 := v.Args[0] 8046 if v_0.Op != OpPPC64ADDconst { 8047 break 8048 } 8049 off2 := v_0.AuxInt 8050 x := v_0.Args[0] 8051 mem := v.Args[1] 8052 if !(is16Bit(off1 + off2)) { 8053 break 8054 } 8055 v.reset(OpPPC64MOVHload) 8056 v.AuxInt = off1 + off2 8057 v.Aux = sym 8058 v.AddArg(x) 8059 v.AddArg(mem) 8060 return true 8061 } 8062 return false 8063 } 8064 func rewriteValuePPC64_OpPPC64MOVHreg_0(v *Value) bool { 8065 // match: (MOVHreg y:(ANDconst [c] _)) 8066 // cond: uint64(c) <= 0x7FFF 8067 // result: y 8068 for { 8069 y := v.Args[0] 8070 if y.Op != OpPPC64ANDconst { 8071 break 8072 } 8073 c := y.AuxInt 8074 if !(uint64(c) <= 0x7FFF) { 8075 break 8076 } 8077 v.reset(OpCopy) 8078 v.Type = y.Type 8079 v.AddArg(y) 8080 return true 8081 } 8082 // match: (MOVHreg y:(MOVHreg _)) 8083 // cond: 8084 // result: y 8085 for { 8086 y := v.Args[0] 8087 if y.Op != OpPPC64MOVHreg { 8088 break 8089 } 8090 v.reset(OpCopy) 8091 v.Type = y.Type 8092 v.AddArg(y) 8093 return true 8094 } 8095 // match: (MOVHreg y:(MOVBreg _)) 8096 // cond: 8097 // result: y 8098 for { 8099 y := v.Args[0] 8100 if y.Op != OpPPC64MOVBreg { 8101 break 8102 } 8103 v.reset(OpCopy) 8104 v.Type = y.Type 8105 v.AddArg(y) 8106 return true 8107 } 8108 // match: (MOVHreg y:(MOVHZreg x)) 8109 // cond: 8110 // result: (MOVHreg x) 8111 for { 8112 y := v.Args[0] 8113 if y.Op != OpPPC64MOVHZreg { 8114 break 8115 } 8116 x := y.Args[0] 8117 v.reset(OpPPC64MOVHreg) 8118 v.AddArg(x) 8119 return true 8120 } 8121 // match: (MOVHreg x:(MOVHload _ _)) 8122 // cond: 8123 // result: x 8124 for { 8125 x := v.Args[0] 8126 if x.Op != OpPPC64MOVHload { 8127 break 8128 } 8129 _ = x.Args[1] 8130 v.reset(OpCopy) 8131 v.Type = x.Type 8132 v.AddArg(x) 8133 return true 8134 } 8135 // match: (MOVHreg (MOVDconst [c])) 8136 // cond: 8137 // result: (MOVDconst [int64(int16(c))]) 8138 for { 8139 v_0 := v.Args[0] 8140 if v_0.Op != OpPPC64MOVDconst { 8141 break 8142 } 8143 c := v_0.AuxInt 8144 v.reset(OpPPC64MOVDconst) 8145 v.AuxInt = int64(int16(c)) 8146 return true 8147 } 8148 return false 8149 } 8150 func rewriteValuePPC64_OpPPC64MOVHstore_0(v *Value) bool { 8151 // match: (MOVHstore [off1] {sym} (ADDconst [off2] x) val mem) 8152 // cond: is16Bit(off1+off2) 8153 // result: (MOVHstore [off1+off2] {sym} x val mem) 8154 for { 8155 off1 := v.AuxInt 8156 sym := v.Aux 8157 _ = v.Args[2] 8158 v_0 := v.Args[0] 8159 if v_0.Op != OpPPC64ADDconst { 8160 break 8161 } 8162 off2 := v_0.AuxInt 8163 x := v_0.Args[0] 8164 val := v.Args[1] 8165 mem := v.Args[2] 8166 if !(is16Bit(off1 + off2)) { 8167 break 8168 } 8169 v.reset(OpPPC64MOVHstore) 8170 v.AuxInt = off1 + off2 8171 v.Aux = sym 8172 v.AddArg(x) 8173 v.AddArg(val) 8174 v.AddArg(mem) 8175 return true 8176 } 8177 // match: (MOVHstore [off1] {sym1} p:(MOVDaddr [off2] {sym2} ptr) val mem) 8178 // cond: canMergeSym(sym1,sym2) && (ptr.Op != OpSB || p.Uses == 1) 8179 // result: (MOVHstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) 8180 for { 8181 off1 := v.AuxInt 8182 sym1 := v.Aux 8183 _ = v.Args[2] 8184 p := v.Args[0] 8185 if p.Op != OpPPC64MOVDaddr { 8186 break 8187 } 8188 off2 := p.AuxInt 8189 sym2 := p.Aux 8190 ptr := p.Args[0] 8191 val := v.Args[1] 8192 mem := v.Args[2] 8193 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { 8194 break 8195 } 8196 v.reset(OpPPC64MOVHstore) 8197 v.AuxInt = off1 + off2 8198 v.Aux = mergeSym(sym1, sym2) 8199 v.AddArg(ptr) 8200 v.AddArg(val) 8201 v.AddArg(mem) 8202 return true 8203 } 8204 // match: (MOVHstore [off] {sym} ptr (MOVDconst [c]) mem) 8205 // cond: c == 0 8206 // result: (MOVHstorezero [off] {sym} ptr mem) 8207 for { 8208 off := v.AuxInt 8209 sym := v.Aux 8210 _ = v.Args[2] 8211 ptr := v.Args[0] 8212 v_1 := v.Args[1] 8213 if v_1.Op != OpPPC64MOVDconst { 8214 break 8215 } 8216 c := v_1.AuxInt 8217 mem := v.Args[2] 8218 if !(c == 0) { 8219 break 8220 } 8221 v.reset(OpPPC64MOVHstorezero) 8222 v.AuxInt = off 8223 v.Aux = sym 8224 v.AddArg(ptr) 8225 v.AddArg(mem) 8226 return true 8227 } 8228 // match: (MOVHstore [off] {sym} ptr (MOVHreg x) mem) 8229 // cond: 8230 // result: (MOVHstore [off] {sym} ptr x mem) 8231 for { 8232 off := v.AuxInt 8233 sym := v.Aux 8234 _ = v.Args[2] 8235 ptr := v.Args[0] 8236 v_1 := v.Args[1] 8237 if v_1.Op != OpPPC64MOVHreg { 8238 break 8239 } 8240 x := v_1.Args[0] 8241 mem := v.Args[2] 8242 v.reset(OpPPC64MOVHstore) 8243 v.AuxInt = off 8244 v.Aux = sym 8245 v.AddArg(ptr) 8246 v.AddArg(x) 8247 v.AddArg(mem) 8248 return true 8249 } 8250 // match: (MOVHstore [off] {sym} ptr (MOVHZreg x) mem) 8251 // cond: 8252 // result: (MOVHstore [off] {sym} ptr x mem) 8253 for { 8254 off := v.AuxInt 8255 sym := v.Aux 8256 _ = v.Args[2] 8257 ptr := v.Args[0] 8258 v_1 := v.Args[1] 8259 if v_1.Op != OpPPC64MOVHZreg { 8260 break 8261 } 8262 x := v_1.Args[0] 8263 mem := v.Args[2] 8264 v.reset(OpPPC64MOVHstore) 8265 v.AuxInt = off 8266 v.Aux = sym 8267 v.AddArg(ptr) 8268 v.AddArg(x) 8269 v.AddArg(mem) 8270 return true 8271 } 8272 return false 8273 } 8274 func rewriteValuePPC64_OpPPC64MOVHstorezero_0(v *Value) bool { 8275 // match: (MOVHstorezero [off1] {sym} (ADDconst [off2] x) mem) 8276 // cond: is16Bit(off1+off2) 8277 // result: (MOVHstorezero [off1+off2] {sym} x mem) 8278 for { 8279 off1 := v.AuxInt 8280 sym := v.Aux 8281 _ = v.Args[1] 8282 v_0 := v.Args[0] 8283 if v_0.Op != OpPPC64ADDconst { 8284 break 8285 } 8286 off2 := v_0.AuxInt 8287 x := v_0.Args[0] 8288 mem := v.Args[1] 8289 if !(is16Bit(off1 + off2)) { 8290 break 8291 } 8292 v.reset(OpPPC64MOVHstorezero) 8293 v.AuxInt = off1 + off2 8294 v.Aux = sym 8295 v.AddArg(x) 8296 v.AddArg(mem) 8297 return true 8298 } 8299 // match: (MOVHstorezero [off1] {sym1} p:(MOVDaddr [off2] {sym2} x) mem) 8300 // cond: canMergeSym(sym1,sym2) && (x.Op != OpSB || p.Uses == 1) 8301 // result: (MOVHstorezero [off1+off2] {mergeSym(sym1,sym2)} x mem) 8302 for { 8303 off1 := v.AuxInt 8304 sym1 := v.Aux 8305 _ = v.Args[1] 8306 p := v.Args[0] 8307 if p.Op != OpPPC64MOVDaddr { 8308 break 8309 } 8310 off2 := p.AuxInt 8311 sym2 := p.Aux 8312 x := p.Args[0] 8313 mem := v.Args[1] 8314 if !(canMergeSym(sym1, sym2) && (x.Op != OpSB || p.Uses == 1)) { 8315 break 8316 } 8317 v.reset(OpPPC64MOVHstorezero) 8318 v.AuxInt = off1 + off2 8319 v.Aux = mergeSym(sym1, sym2) 8320 v.AddArg(x) 8321 v.AddArg(mem) 8322 return true 8323 } 8324 return false 8325 } 8326 func rewriteValuePPC64_OpPPC64MOVWZload_0(v *Value) bool { 8327 // match: (MOVWZload [off1] {sym1} p:(MOVDaddr [off2] {sym2} ptr) mem) 8328 // cond: canMergeSym(sym1,sym2) && (ptr.Op != OpSB || p.Uses == 1) 8329 // result: (MOVWZload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 8330 for { 8331 off1 := v.AuxInt 8332 sym1 := v.Aux 8333 _ = v.Args[1] 8334 p := v.Args[0] 8335 if p.Op != OpPPC64MOVDaddr { 8336 break 8337 } 8338 off2 := p.AuxInt 8339 sym2 := p.Aux 8340 ptr := p.Args[0] 8341 mem := v.Args[1] 8342 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { 8343 break 8344 } 8345 v.reset(OpPPC64MOVWZload) 8346 v.AuxInt = off1 + off2 8347 v.Aux = mergeSym(sym1, sym2) 8348 v.AddArg(ptr) 8349 v.AddArg(mem) 8350 return true 8351 } 8352 // match: (MOVWZload [off1] {sym} (ADDconst [off2] x) mem) 8353 // cond: is16Bit(off1+off2) 8354 // result: (MOVWZload [off1+off2] {sym} x mem) 8355 for { 8356 off1 := v.AuxInt 8357 sym := v.Aux 8358 _ = v.Args[1] 8359 v_0 := v.Args[0] 8360 if v_0.Op != OpPPC64ADDconst { 8361 break 8362 } 8363 off2 := v_0.AuxInt 8364 x := v_0.Args[0] 8365 mem := v.Args[1] 8366 if !(is16Bit(off1 + off2)) { 8367 break 8368 } 8369 v.reset(OpPPC64MOVWZload) 8370 v.AuxInt = off1 + off2 8371 v.Aux = sym 8372 v.AddArg(x) 8373 v.AddArg(mem) 8374 return true 8375 } 8376 return false 8377 } 8378 func rewriteValuePPC64_OpPPC64MOVWZreg_0(v *Value) bool { 8379 // match: (MOVWZreg y:(ANDconst [c] _)) 8380 // cond: uint64(c) <= 0xFFFFFFFF 8381 // result: y 8382 for { 8383 y := v.Args[0] 8384 if y.Op != OpPPC64ANDconst { 8385 break 8386 } 8387 c := y.AuxInt 8388 if !(uint64(c) <= 0xFFFFFFFF) { 8389 break 8390 } 8391 v.reset(OpCopy) 8392 v.Type = y.Type 8393 v.AddArg(y) 8394 return true 8395 } 8396 // match: (MOVWZreg y:(AND (MOVDconst [c]) _)) 8397 // cond: uint64(c) <= 0xFFFFFFFF 8398 // result: y 8399 for { 8400 y := v.Args[0] 8401 if y.Op != OpPPC64AND { 8402 break 8403 } 8404 _ = y.Args[1] 8405 y_0 := y.Args[0] 8406 if y_0.Op != OpPPC64MOVDconst { 8407 break 8408 } 8409 c := y_0.AuxInt 8410 if !(uint64(c) <= 0xFFFFFFFF) { 8411 break 8412 } 8413 v.reset(OpCopy) 8414 v.Type = y.Type 8415 v.AddArg(y) 8416 return true 8417 } 8418 // match: (MOVWZreg y:(AND _ (MOVDconst [c]))) 8419 // cond: uint64(c) <= 0xFFFFFFFF 8420 // result: y 8421 for { 8422 y := v.Args[0] 8423 if y.Op != OpPPC64AND { 8424 break 8425 } 8426 _ = y.Args[1] 8427 y_1 := y.Args[1] 8428 if y_1.Op != OpPPC64MOVDconst { 8429 break 8430 } 8431 c := y_1.AuxInt 8432 if !(uint64(c) <= 0xFFFFFFFF) { 8433 break 8434 } 8435 v.reset(OpCopy) 8436 v.Type = y.Type 8437 v.AddArg(y) 8438 return true 8439 } 8440 // match: (MOVWZreg y:(MOVWZreg _)) 8441 // cond: 8442 // result: y 8443 for { 8444 y := v.Args[0] 8445 if y.Op != OpPPC64MOVWZreg { 8446 break 8447 } 8448 v.reset(OpCopy) 8449 v.Type = y.Type 8450 v.AddArg(y) 8451 return true 8452 } 8453 // match: (MOVWZreg y:(MOVHZreg _)) 8454 // cond: 8455 // result: y 8456 for { 8457 y := v.Args[0] 8458 if y.Op != OpPPC64MOVHZreg { 8459 break 8460 } 8461 v.reset(OpCopy) 8462 v.Type = y.Type 8463 v.AddArg(y) 8464 return true 8465 } 8466 // match: (MOVWZreg y:(MOVBZreg _)) 8467 // cond: 8468 // result: y 8469 for { 8470 y := v.Args[0] 8471 if y.Op != OpPPC64MOVBZreg { 8472 break 8473 } 8474 v.reset(OpCopy) 8475 v.Type = y.Type 8476 v.AddArg(y) 8477 return true 8478 } 8479 // match: (MOVWZreg y:(MOVWreg x)) 8480 // cond: 8481 // result: (MOVWZreg x) 8482 for { 8483 y := v.Args[0] 8484 if y.Op != OpPPC64MOVWreg { 8485 break 8486 } 8487 x := y.Args[0] 8488 v.reset(OpPPC64MOVWZreg) 8489 v.AddArg(x) 8490 return true 8491 } 8492 return false 8493 } 8494 func rewriteValuePPC64_OpPPC64MOVWload_0(v *Value) bool { 8495 // match: (MOVWload [off1] {sym1} p:(MOVDaddr [off2] {sym2} ptr) mem) 8496 // cond: canMergeSym(sym1,sym2) && (ptr.Op != OpSB || p.Uses == 1) 8497 // result: (MOVWload [off1+off2] {mergeSym(sym1,sym2)} ptr mem) 8498 for { 8499 off1 := v.AuxInt 8500 sym1 := v.Aux 8501 _ = v.Args[1] 8502 p := v.Args[0] 8503 if p.Op != OpPPC64MOVDaddr { 8504 break 8505 } 8506 off2 := p.AuxInt 8507 sym2 := p.Aux 8508 ptr := p.Args[0] 8509 mem := v.Args[1] 8510 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { 8511 break 8512 } 8513 v.reset(OpPPC64MOVWload) 8514 v.AuxInt = off1 + off2 8515 v.Aux = mergeSym(sym1, sym2) 8516 v.AddArg(ptr) 8517 v.AddArg(mem) 8518 return true 8519 } 8520 // match: (MOVWload [off1] {sym} (ADDconst [off2] x) mem) 8521 // cond: is16Bit(off1+off2) 8522 // result: (MOVWload [off1+off2] {sym} x mem) 8523 for { 8524 off1 := v.AuxInt 8525 sym := v.Aux 8526 _ = v.Args[1] 8527 v_0 := v.Args[0] 8528 if v_0.Op != OpPPC64ADDconst { 8529 break 8530 } 8531 off2 := v_0.AuxInt 8532 x := v_0.Args[0] 8533 mem := v.Args[1] 8534 if !(is16Bit(off1 + off2)) { 8535 break 8536 } 8537 v.reset(OpPPC64MOVWload) 8538 v.AuxInt = off1 + off2 8539 v.Aux = sym 8540 v.AddArg(x) 8541 v.AddArg(mem) 8542 return true 8543 } 8544 return false 8545 } 8546 func rewriteValuePPC64_OpPPC64MOVWreg_0(v *Value) bool { 8547 // match: (MOVWreg y:(ANDconst [c] _)) 8548 // cond: uint64(c) <= 0xFFFF 8549 // result: y 8550 for { 8551 y := v.Args[0] 8552 if y.Op != OpPPC64ANDconst { 8553 break 8554 } 8555 c := y.AuxInt 8556 if !(uint64(c) <= 0xFFFF) { 8557 break 8558 } 8559 v.reset(OpCopy) 8560 v.Type = y.Type 8561 v.AddArg(y) 8562 return true 8563 } 8564 // match: (MOVWreg y:(AND (MOVDconst [c]) _)) 8565 // cond: uint64(c) <= 0x7FFFFFFF 8566 // result: y 8567 for { 8568 y := v.Args[0] 8569 if y.Op != OpPPC64AND { 8570 break 8571 } 8572 _ = y.Args[1] 8573 y_0 := y.Args[0] 8574 if y_0.Op != OpPPC64MOVDconst { 8575 break 8576 } 8577 c := y_0.AuxInt 8578 if !(uint64(c) <= 0x7FFFFFFF) { 8579 break 8580 } 8581 v.reset(OpCopy) 8582 v.Type = y.Type 8583 v.AddArg(y) 8584 return true 8585 } 8586 // match: (MOVWreg y:(AND _ (MOVDconst [c]))) 8587 // cond: uint64(c) <= 0x7FFFFFFF 8588 // result: y 8589 for { 8590 y := v.Args[0] 8591 if y.Op != OpPPC64AND { 8592 break 8593 } 8594 _ = y.Args[1] 8595 y_1 := y.Args[1] 8596 if y_1.Op != OpPPC64MOVDconst { 8597 break 8598 } 8599 c := y_1.AuxInt 8600 if !(uint64(c) <= 0x7FFFFFFF) { 8601 break 8602 } 8603 v.reset(OpCopy) 8604 v.Type = y.Type 8605 v.AddArg(y) 8606 return true 8607 } 8608 // match: (MOVWreg y:(MOVWreg _)) 8609 // cond: 8610 // result: y 8611 for { 8612 y := v.Args[0] 8613 if y.Op != OpPPC64MOVWreg { 8614 break 8615 } 8616 v.reset(OpCopy) 8617 v.Type = y.Type 8618 v.AddArg(y) 8619 return true 8620 } 8621 // match: (MOVWreg y:(MOVHreg _)) 8622 // cond: 8623 // result: y 8624 for { 8625 y := v.Args[0] 8626 if y.Op != OpPPC64MOVHreg { 8627 break 8628 } 8629 v.reset(OpCopy) 8630 v.Type = y.Type 8631 v.AddArg(y) 8632 return true 8633 } 8634 // match: (MOVWreg y:(MOVBreg _)) 8635 // cond: 8636 // result: y 8637 for { 8638 y := v.Args[0] 8639 if y.Op != OpPPC64MOVBreg { 8640 break 8641 } 8642 v.reset(OpCopy) 8643 v.Type = y.Type 8644 v.AddArg(y) 8645 return true 8646 } 8647 // match: (MOVWreg y:(MOVWZreg x)) 8648 // cond: 8649 // result: (MOVWreg x) 8650 for { 8651 y := v.Args[0] 8652 if y.Op != OpPPC64MOVWZreg { 8653 break 8654 } 8655 x := y.Args[0] 8656 v.reset(OpPPC64MOVWreg) 8657 v.AddArg(x) 8658 return true 8659 } 8660 return false 8661 } 8662 func rewriteValuePPC64_OpPPC64MOVWstore_0(v *Value) bool { 8663 // match: (MOVWstore [off1] {sym} (ADDconst [off2] x) val mem) 8664 // cond: is16Bit(off1+off2) 8665 // result: (MOVWstore [off1+off2] {sym} x val mem) 8666 for { 8667 off1 := v.AuxInt 8668 sym := v.Aux 8669 _ = v.Args[2] 8670 v_0 := v.Args[0] 8671 if v_0.Op != OpPPC64ADDconst { 8672 break 8673 } 8674 off2 := v_0.AuxInt 8675 x := v_0.Args[0] 8676 val := v.Args[1] 8677 mem := v.Args[2] 8678 if !(is16Bit(off1 + off2)) { 8679 break 8680 } 8681 v.reset(OpPPC64MOVWstore) 8682 v.AuxInt = off1 + off2 8683 v.Aux = sym 8684 v.AddArg(x) 8685 v.AddArg(val) 8686 v.AddArg(mem) 8687 return true 8688 } 8689 // match: (MOVWstore [off1] {sym1} p:(MOVDaddr [off2] {sym2} ptr) val mem) 8690 // cond: canMergeSym(sym1,sym2) && (ptr.Op != OpSB || p.Uses == 1) 8691 // result: (MOVWstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem) 8692 for { 8693 off1 := v.AuxInt 8694 sym1 := v.Aux 8695 _ = v.Args[2] 8696 p := v.Args[0] 8697 if p.Op != OpPPC64MOVDaddr { 8698 break 8699 } 8700 off2 := p.AuxInt 8701 sym2 := p.Aux 8702 ptr := p.Args[0] 8703 val := v.Args[1] 8704 mem := v.Args[2] 8705 if !(canMergeSym(sym1, sym2) && (ptr.Op != OpSB || p.Uses == 1)) { 8706 break 8707 } 8708 v.reset(OpPPC64MOVWstore) 8709 v.AuxInt = off1 + off2 8710 v.Aux = mergeSym(sym1, sym2) 8711 v.AddArg(ptr) 8712 v.AddArg(val) 8713 v.AddArg(mem) 8714 return true 8715 } 8716 // match: (MOVWstore [off] {sym} ptr (MOVDconst [c]) mem) 8717 // cond: c == 0 8718 // result: (MOVWstorezero [off] {sym} ptr mem) 8719 for { 8720 off := v.AuxInt 8721 sym := v.Aux 8722 _ = v.Args[2] 8723 ptr := v.Args[0] 8724 v_1 := v.Args[1] 8725 if v_1.Op != OpPPC64MOVDconst { 8726 break 8727 } 8728 c := v_1.AuxInt 8729 mem := v.Args[2] 8730 if !(c == 0) { 8731 break 8732 } 8733 v.reset(OpPPC64MOVWstorezero) 8734 v.AuxInt = off 8735 v.Aux = sym 8736 v.AddArg(ptr) 8737 v.AddArg(mem) 8738 return true 8739 } 8740 // match: (MOVWstore [off] {sym} ptr (MOVWreg x) mem) 8741 // cond: 8742 // result: (MOVWstore [off] {sym} ptr x mem) 8743 for { 8744 off := v.AuxInt 8745 sym := v.Aux 8746 _ = v.Args[2] 8747 ptr := v.Args[0] 8748 v_1 := v.Args[1] 8749 if v_1.Op != OpPPC64MOVWreg { 8750 break 8751 } 8752 x := v_1.Args[0] 8753 mem := v.Args[2] 8754 v.reset(OpPPC64MOVWstore) 8755 v.AuxInt = off 8756 v.Aux = sym 8757 v.AddArg(ptr) 8758 v.AddArg(x) 8759 v.AddArg(mem) 8760 return true 8761 } 8762 // match: (MOVWstore [off] {sym} ptr (MOVWZreg x) mem) 8763 // cond: 8764 // result: (MOVWstore [off] {sym} ptr x mem) 8765 for { 8766 off := v.AuxInt 8767 sym := v.Aux 8768 _ = v.Args[2] 8769 ptr := v.Args[0] 8770 v_1 := v.Args[1] 8771 if v_1.Op != OpPPC64MOVWZreg { 8772 break 8773 } 8774 x := v_1.Args[0] 8775 mem := v.Args[2] 8776 v.reset(OpPPC64MOVWstore) 8777 v.AuxInt = off 8778 v.Aux = sym 8779 v.AddArg(ptr) 8780 v.AddArg(x) 8781 v.AddArg(mem) 8782 return true 8783 } 8784 return false 8785 } 8786 func rewriteValuePPC64_OpPPC64MOVWstorezero_0(v *Value) bool { 8787 // match: (MOVWstorezero [off1] {sym} (ADDconst [off2] x) mem) 8788 // cond: is16Bit(off1+off2) 8789 // result: (MOVWstorezero [off1+off2] {sym} x mem) 8790 for { 8791 off1 := v.AuxInt 8792 sym := v.Aux 8793 _ = v.Args[1] 8794 v_0 := v.Args[0] 8795 if v_0.Op != OpPPC64ADDconst { 8796 break 8797 } 8798 off2 := v_0.AuxInt 8799 x := v_0.Args[0] 8800 mem := v.Args[1] 8801 if !(is16Bit(off1 + off2)) { 8802 break 8803 } 8804 v.reset(OpPPC64MOVWstorezero) 8805 v.AuxInt = off1 + off2 8806 v.Aux = sym 8807 v.AddArg(x) 8808 v.AddArg(mem) 8809 return true 8810 } 8811 // match: (MOVWstorezero [off1] {sym1} p:(MOVDaddr [off2] {sym2} x) mem) 8812 // cond: canMergeSym(sym1,sym2) && (x.Op != OpSB || p.Uses == 1) 8813 // result: (MOVWstorezero [off1+off2] {mergeSym(sym1,sym2)} x mem) 8814 for { 8815 off1 := v.AuxInt 8816 sym1 := v.Aux 8817 _ = v.Args[1] 8818 p := v.Args[0] 8819 if p.Op != OpPPC64MOVDaddr { 8820 break 8821 } 8822 off2 := p.AuxInt 8823 sym2 := p.Aux 8824 x := p.Args[0] 8825 mem := v.Args[1] 8826 if !(canMergeSym(sym1, sym2) && (x.Op != OpSB || p.Uses == 1)) { 8827 break 8828 } 8829 v.reset(OpPPC64MOVWstorezero) 8830 v.AuxInt = off1 + off2 8831 v.Aux = mergeSym(sym1, sym2) 8832 v.AddArg(x) 8833 v.AddArg(mem) 8834 return true 8835 } 8836 return false 8837 } 8838 func rewriteValuePPC64_OpPPC64MTVSRD_0(v *Value) bool { 8839 b := v.Block 8840 _ = b 8841 typ := &b.Func.Config.Types 8842 _ = typ 8843 // match: (MTVSRD (MOVDconst [c])) 8844 // cond: 8845 // result: (FMOVDconst [c]) 8846 for { 8847 v_0 := v.Args[0] 8848 if v_0.Op != OpPPC64MOVDconst { 8849 break 8850 } 8851 c := v_0.AuxInt 8852 v.reset(OpPPC64FMOVDconst) 8853 v.AuxInt = c 8854 return true 8855 } 8856 // match: (MTVSRD x:(MOVDload [off] {sym} ptr mem)) 8857 // cond: x.Uses == 1 && clobber(x) 8858 // result: @x.Block (FMOVDload [off] {sym} ptr mem) 8859 for { 8860 x := v.Args[0] 8861 if x.Op != OpPPC64MOVDload { 8862 break 8863 } 8864 off := x.AuxInt 8865 sym := x.Aux 8866 _ = x.Args[1] 8867 ptr := x.Args[0] 8868 mem := x.Args[1] 8869 if !(x.Uses == 1 && clobber(x)) { 8870 break 8871 } 8872 b = x.Block 8873 v0 := b.NewValue0(v.Pos, OpPPC64FMOVDload, typ.Float64) 8874 v.reset(OpCopy) 8875 v.AddArg(v0) 8876 v0.AuxInt = off 8877 v0.Aux = sym 8878 v0.AddArg(ptr) 8879 v0.AddArg(mem) 8880 return true 8881 } 8882 return false 8883 } 8884 func rewriteValuePPC64_OpPPC64MaskIfNotCarry_0(v *Value) bool { 8885 // match: (MaskIfNotCarry (ADDconstForCarry [c] (ANDconst [d] _))) 8886 // cond: c < 0 && d > 0 && c + d < 0 8887 // result: (MOVDconst [-1]) 8888 for { 8889 v_0 := v.Args[0] 8890 if v_0.Op != OpPPC64ADDconstForCarry { 8891 break 8892 } 8893 c := v_0.AuxInt 8894 v_0_0 := v_0.Args[0] 8895 if v_0_0.Op != OpPPC64ANDconst { 8896 break 8897 } 8898 d := v_0_0.AuxInt 8899 if !(c < 0 && d > 0 && c+d < 0) { 8900 break 8901 } 8902 v.reset(OpPPC64MOVDconst) 8903 v.AuxInt = -1 8904 return true 8905 } 8906 return false 8907 } 8908 func rewriteValuePPC64_OpPPC64NotEqual_0(v *Value) bool { 8909 // match: (NotEqual (FlagEQ)) 8910 // cond: 8911 // result: (MOVDconst [0]) 8912 for { 8913 v_0 := v.Args[0] 8914 if v_0.Op != OpPPC64FlagEQ { 8915 break 8916 } 8917 v.reset(OpPPC64MOVDconst) 8918 v.AuxInt = 0 8919 return true 8920 } 8921 // match: (NotEqual (FlagLT)) 8922 // cond: 8923 // result: (MOVDconst [1]) 8924 for { 8925 v_0 := v.Args[0] 8926 if v_0.Op != OpPPC64FlagLT { 8927 break 8928 } 8929 v.reset(OpPPC64MOVDconst) 8930 v.AuxInt = 1 8931 return true 8932 } 8933 // match: (NotEqual (FlagGT)) 8934 // cond: 8935 // result: (MOVDconst [1]) 8936 for { 8937 v_0 := v.Args[0] 8938 if v_0.Op != OpPPC64FlagGT { 8939 break 8940 } 8941 v.reset(OpPPC64MOVDconst) 8942 v.AuxInt = 1 8943 return true 8944 } 8945 // match: (NotEqual (InvertFlags x)) 8946 // cond: 8947 // result: (NotEqual x) 8948 for { 8949 v_0 := v.Args[0] 8950 if v_0.Op != OpPPC64InvertFlags { 8951 break 8952 } 8953 x := v_0.Args[0] 8954 v.reset(OpPPC64NotEqual) 8955 v.AddArg(x) 8956 return true 8957 } 8958 return false 8959 } 8960 func rewriteValuePPC64_OpPPC64OR_0(v *Value) bool { 8961 b := v.Block 8962 _ = b 8963 typ := &b.Func.Config.Types 8964 _ = typ 8965 // match: (OR (SLDconst x [c]) (SRDconst x [d])) 8966 // cond: d == 64-c 8967 // result: (ROTLconst [c] x) 8968 for { 8969 _ = v.Args[1] 8970 v_0 := v.Args[0] 8971 if v_0.Op != OpPPC64SLDconst { 8972 break 8973 } 8974 c := v_0.AuxInt 8975 x := v_0.Args[0] 8976 v_1 := v.Args[1] 8977 if v_1.Op != OpPPC64SRDconst { 8978 break 8979 } 8980 d := v_1.AuxInt 8981 if x != v_1.Args[0] { 8982 break 8983 } 8984 if !(d == 64-c) { 8985 break 8986 } 8987 v.reset(OpPPC64ROTLconst) 8988 v.AuxInt = c 8989 v.AddArg(x) 8990 return true 8991 } 8992 // match: (OR (SRDconst x [d]) (SLDconst x [c])) 8993 // cond: d == 64-c 8994 // result: (ROTLconst [c] x) 8995 for { 8996 _ = v.Args[1] 8997 v_0 := v.Args[0] 8998 if v_0.Op != OpPPC64SRDconst { 8999 break 9000 } 9001 d := v_0.AuxInt 9002 x := v_0.Args[0] 9003 v_1 := v.Args[1] 9004 if v_1.Op != OpPPC64SLDconst { 9005 break 9006 } 9007 c := v_1.AuxInt 9008 if x != v_1.Args[0] { 9009 break 9010 } 9011 if !(d == 64-c) { 9012 break 9013 } 9014 v.reset(OpPPC64ROTLconst) 9015 v.AuxInt = c 9016 v.AddArg(x) 9017 return true 9018 } 9019 // match: (OR (SLWconst x [c]) (SRWconst x [d])) 9020 // cond: d == 32-c 9021 // result: (ROTLWconst [c] x) 9022 for { 9023 _ = v.Args[1] 9024 v_0 := v.Args[0] 9025 if v_0.Op != OpPPC64SLWconst { 9026 break 9027 } 9028 c := v_0.AuxInt 9029 x := v_0.Args[0] 9030 v_1 := v.Args[1] 9031 if v_1.Op != OpPPC64SRWconst { 9032 break 9033 } 9034 d := v_1.AuxInt 9035 if x != v_1.Args[0] { 9036 break 9037 } 9038 if !(d == 32-c) { 9039 break 9040 } 9041 v.reset(OpPPC64ROTLWconst) 9042 v.AuxInt = c 9043 v.AddArg(x) 9044 return true 9045 } 9046 // match: (OR (SRWconst x [d]) (SLWconst x [c])) 9047 // cond: d == 32-c 9048 // result: (ROTLWconst [c] x) 9049 for { 9050 _ = v.Args[1] 9051 v_0 := v.Args[0] 9052 if v_0.Op != OpPPC64SRWconst { 9053 break 9054 } 9055 d := v_0.AuxInt 9056 x := v_0.Args[0] 9057 v_1 := v.Args[1] 9058 if v_1.Op != OpPPC64SLWconst { 9059 break 9060 } 9061 c := v_1.AuxInt 9062 if x != v_1.Args[0] { 9063 break 9064 } 9065 if !(d == 32-c) { 9066 break 9067 } 9068 v.reset(OpPPC64ROTLWconst) 9069 v.AuxInt = c 9070 v.AddArg(x) 9071 return true 9072 } 9073 // match: (OR (SLD x (ANDconst <typ.Int64> [63] y)) (SRD x (SUB <typ.UInt> (MOVDconst [64]) (ANDconst <typ.UInt> [63] y)))) 9074 // cond: 9075 // result: (ROTL x y) 9076 for { 9077 _ = v.Args[1] 9078 v_0 := v.Args[0] 9079 if v_0.Op != OpPPC64SLD { 9080 break 9081 } 9082 _ = v_0.Args[1] 9083 x := v_0.Args[0] 9084 v_0_1 := v_0.Args[1] 9085 if v_0_1.Op != OpPPC64ANDconst { 9086 break 9087 } 9088 if v_0_1.Type != typ.Int64 { 9089 break 9090 } 9091 if v_0_1.AuxInt != 63 { 9092 break 9093 } 9094 y := v_0_1.Args[0] 9095 v_1 := v.Args[1] 9096 if v_1.Op != OpPPC64SRD { 9097 break 9098 } 9099 _ = v_1.Args[1] 9100 if x != v_1.Args[0] { 9101 break 9102 } 9103 v_1_1 := v_1.Args[1] 9104 if v_1_1.Op != OpPPC64SUB { 9105 break 9106 } 9107 if v_1_1.Type != typ.UInt { 9108 break 9109 } 9110 _ = v_1_1.Args[1] 9111 v_1_1_0 := v_1_1.Args[0] 9112 if v_1_1_0.Op != OpPPC64MOVDconst { 9113 break 9114 } 9115 if v_1_1_0.AuxInt != 64 { 9116 break 9117 } 9118 v_1_1_1 := v_1_1.Args[1] 9119 if v_1_1_1.Op != OpPPC64ANDconst { 9120 break 9121 } 9122 if v_1_1_1.Type != typ.UInt { 9123 break 9124 } 9125 if v_1_1_1.AuxInt != 63 { 9126 break 9127 } 9128 if y != v_1_1_1.Args[0] { 9129 break 9130 } 9131 v.reset(OpPPC64ROTL) 9132 v.AddArg(x) 9133 v.AddArg(y) 9134 return true 9135 } 9136 // match: (OR (SRD x (SUB <typ.UInt> (MOVDconst [64]) (ANDconst <typ.UInt> [63] y))) (SLD x (ANDconst <typ.Int64> [63] y))) 9137 // cond: 9138 // result: (ROTL x y) 9139 for { 9140 _ = v.Args[1] 9141 v_0 := v.Args[0] 9142 if v_0.Op != OpPPC64SRD { 9143 break 9144 } 9145 _ = v_0.Args[1] 9146 x := v_0.Args[0] 9147 v_0_1 := v_0.Args[1] 9148 if v_0_1.Op != OpPPC64SUB { 9149 break 9150 } 9151 if v_0_1.Type != typ.UInt { 9152 break 9153 } 9154 _ = v_0_1.Args[1] 9155 v_0_1_0 := v_0_1.Args[0] 9156 if v_0_1_0.Op != OpPPC64MOVDconst { 9157 break 9158 } 9159 if v_0_1_0.AuxInt != 64 { 9160 break 9161 } 9162 v_0_1_1 := v_0_1.Args[1] 9163 if v_0_1_1.Op != OpPPC64ANDconst { 9164 break 9165 } 9166 if v_0_1_1.Type != typ.UInt { 9167 break 9168 } 9169 if v_0_1_1.AuxInt != 63 { 9170 break 9171 } 9172 y := v_0_1_1.Args[0] 9173 v_1 := v.Args[1] 9174 if v_1.Op != OpPPC64SLD { 9175 break 9176 } 9177 _ = v_1.Args[1] 9178 if x != v_1.Args[0] { 9179 break 9180 } 9181 v_1_1 := v_1.Args[1] 9182 if v_1_1.Op != OpPPC64ANDconst { 9183 break 9184 } 9185 if v_1_1.Type != typ.Int64 { 9186 break 9187 } 9188 if v_1_1.AuxInt != 63 { 9189 break 9190 } 9191 if y != v_1_1.Args[0] { 9192 break 9193 } 9194 v.reset(OpPPC64ROTL) 9195 v.AddArg(x) 9196 v.AddArg(y) 9197 return true 9198 } 9199 // match: (OR (SLW x (ANDconst <typ.Int32> [31] y)) (SRW x (SUB <typ.UInt> (MOVDconst [32]) (ANDconst <typ.UInt> [31] y)))) 9200 // cond: 9201 // result: (ROTLW x y) 9202 for { 9203 _ = v.Args[1] 9204 v_0 := v.Args[0] 9205 if v_0.Op != OpPPC64SLW { 9206 break 9207 } 9208 _ = v_0.Args[1] 9209 x := v_0.Args[0] 9210 v_0_1 := v_0.Args[1] 9211 if v_0_1.Op != OpPPC64ANDconst { 9212 break 9213 } 9214 if v_0_1.Type != typ.Int32 { 9215 break 9216 } 9217 if v_0_1.AuxInt != 31 { 9218 break 9219 } 9220 y := v_0_1.Args[0] 9221 v_1 := v.Args[1] 9222 if v_1.Op != OpPPC64SRW { 9223 break 9224 } 9225 _ = v_1.Args[1] 9226 if x != v_1.Args[0] { 9227 break 9228 } 9229 v_1_1 := v_1.Args[1] 9230 if v_1_1.Op != OpPPC64SUB { 9231 break 9232 } 9233 if v_1_1.Type != typ.UInt { 9234 break 9235 } 9236 _ = v_1_1.Args[1] 9237 v_1_1_0 := v_1_1.Args[0] 9238 if v_1_1_0.Op != OpPPC64MOVDconst { 9239 break 9240 } 9241 if v_1_1_0.AuxInt != 32 { 9242 break 9243 } 9244 v_1_1_1 := v_1_1.Args[1] 9245 if v_1_1_1.Op != OpPPC64ANDconst { 9246 break 9247 } 9248 if v_1_1_1.Type != typ.UInt { 9249 break 9250 } 9251 if v_1_1_1.AuxInt != 31 { 9252 break 9253 } 9254 if y != v_1_1_1.Args[0] { 9255 break 9256 } 9257 v.reset(OpPPC64ROTLW) 9258 v.AddArg(x) 9259 v.AddArg(y) 9260 return true 9261 } 9262 // match: (OR (SRW x (SUB <typ.UInt> (MOVDconst [32]) (ANDconst <typ.UInt> [31] y))) (SLW x (ANDconst <typ.Int32> [31] y))) 9263 // cond: 9264 // result: (ROTLW x y) 9265 for { 9266 _ = v.Args[1] 9267 v_0 := v.Args[0] 9268 if v_0.Op != OpPPC64SRW { 9269 break 9270 } 9271 _ = v_0.Args[1] 9272 x := v_0.Args[0] 9273 v_0_1 := v_0.Args[1] 9274 if v_0_1.Op != OpPPC64SUB { 9275 break 9276 } 9277 if v_0_1.Type != typ.UInt { 9278 break 9279 } 9280 _ = v_0_1.Args[1] 9281 v_0_1_0 := v_0_1.Args[0] 9282 if v_0_1_0.Op != OpPPC64MOVDconst { 9283 break 9284 } 9285 if v_0_1_0.AuxInt != 32 { 9286 break 9287 } 9288 v_0_1_1 := v_0_1.Args[1] 9289 if v_0_1_1.Op != OpPPC64ANDconst { 9290 break 9291 } 9292 if v_0_1_1.Type != typ.UInt { 9293 break 9294 } 9295 if v_0_1_1.AuxInt != 31 { 9296 break 9297 } 9298 y := v_0_1_1.Args[0] 9299 v_1 := v.Args[1] 9300 if v_1.Op != OpPPC64SLW { 9301 break 9302 } 9303 _ = v_1.Args[1] 9304 if x != v_1.Args[0] { 9305 break 9306 } 9307 v_1_1 := v_1.Args[1] 9308 if v_1_1.Op != OpPPC64ANDconst { 9309 break 9310 } 9311 if v_1_1.Type != typ.Int32 { 9312 break 9313 } 9314 if v_1_1.AuxInt != 31 { 9315 break 9316 } 9317 if y != v_1_1.Args[0] { 9318 break 9319 } 9320 v.reset(OpPPC64ROTLW) 9321 v.AddArg(x) 9322 v.AddArg(y) 9323 return true 9324 } 9325 // match: (OR (MOVDconst [c]) (MOVDconst [d])) 9326 // cond: 9327 // result: (MOVDconst [c|d]) 9328 for { 9329 _ = v.Args[1] 9330 v_0 := v.Args[0] 9331 if v_0.Op != OpPPC64MOVDconst { 9332 break 9333 } 9334 c := v_0.AuxInt 9335 v_1 := v.Args[1] 9336 if v_1.Op != OpPPC64MOVDconst { 9337 break 9338 } 9339 d := v_1.AuxInt 9340 v.reset(OpPPC64MOVDconst) 9341 v.AuxInt = c | d 9342 return true 9343 } 9344 // match: (OR (MOVDconst [d]) (MOVDconst [c])) 9345 // cond: 9346 // result: (MOVDconst [c|d]) 9347 for { 9348 _ = v.Args[1] 9349 v_0 := v.Args[0] 9350 if v_0.Op != OpPPC64MOVDconst { 9351 break 9352 } 9353 d := v_0.AuxInt 9354 v_1 := v.Args[1] 9355 if v_1.Op != OpPPC64MOVDconst { 9356 break 9357 } 9358 c := v_1.AuxInt 9359 v.reset(OpPPC64MOVDconst) 9360 v.AuxInt = c | d 9361 return true 9362 } 9363 return false 9364 } 9365 func rewriteValuePPC64_OpPPC64OR_10(v *Value) bool { 9366 b := v.Block 9367 _ = b 9368 config := b.Func.Config 9369 _ = config 9370 // match: (OR x (MOVDconst [c])) 9371 // cond: isU32Bit(c) 9372 // result: (ORconst [c] x) 9373 for { 9374 _ = v.Args[1] 9375 x := v.Args[0] 9376 v_1 := v.Args[1] 9377 if v_1.Op != OpPPC64MOVDconst { 9378 break 9379 } 9380 c := v_1.AuxInt 9381 if !(isU32Bit(c)) { 9382 break 9383 } 9384 v.reset(OpPPC64ORconst) 9385 v.AuxInt = c 9386 v.AddArg(x) 9387 return true 9388 } 9389 // match: (OR (MOVDconst [c]) x) 9390 // cond: isU32Bit(c) 9391 // result: (ORconst [c] x) 9392 for { 9393 _ = v.Args[1] 9394 v_0 := v.Args[0] 9395 if v_0.Op != OpPPC64MOVDconst { 9396 break 9397 } 9398 c := v_0.AuxInt 9399 x := v.Args[1] 9400 if !(isU32Bit(c)) { 9401 break 9402 } 9403 v.reset(OpPPC64ORconst) 9404 v.AuxInt = c 9405 v.AddArg(x) 9406 return true 9407 } 9408 // match: (OR <t> x0:(MOVBZload [i0] {s} p mem) o1:(SLWconst x1:(MOVBZload [i1] {s} p mem) [8])) 9409 // 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) 9410 // result: @mergePoint(b,x0,x1) (MOVHZload <t> {s} [i0] p mem) 9411 for { 9412 t := v.Type 9413 _ = v.Args[1] 9414 x0 := v.Args[0] 9415 if x0.Op != OpPPC64MOVBZload { 9416 break 9417 } 9418 i0 := x0.AuxInt 9419 s := x0.Aux 9420 _ = x0.Args[1] 9421 p := x0.Args[0] 9422 mem := x0.Args[1] 9423 o1 := v.Args[1] 9424 if o1.Op != OpPPC64SLWconst { 9425 break 9426 } 9427 if o1.AuxInt != 8 { 9428 break 9429 } 9430 x1 := o1.Args[0] 9431 if x1.Op != OpPPC64MOVBZload { 9432 break 9433 } 9434 i1 := x1.AuxInt 9435 if x1.Aux != s { 9436 break 9437 } 9438 _ = x1.Args[1] 9439 if p != x1.Args[0] { 9440 break 9441 } 9442 if mem != x1.Args[1] { 9443 break 9444 } 9445 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)) { 9446 break 9447 } 9448 b = mergePoint(b, x0, x1) 9449 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZload, t) 9450 v.reset(OpCopy) 9451 v.AddArg(v0) 9452 v0.AuxInt = i0 9453 v0.Aux = s 9454 v0.AddArg(p) 9455 v0.AddArg(mem) 9456 return true 9457 } 9458 // match: (OR <t> o1:(SLWconst x1:(MOVBZload [i1] {s} p mem) [8]) x0:(MOVBZload [i0] {s} p mem)) 9459 // 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) 9460 // result: @mergePoint(b,x0,x1) (MOVHZload <t> {s} [i0] p mem) 9461 for { 9462 t := v.Type 9463 _ = v.Args[1] 9464 o1 := v.Args[0] 9465 if o1.Op != OpPPC64SLWconst { 9466 break 9467 } 9468 if o1.AuxInt != 8 { 9469 break 9470 } 9471 x1 := o1.Args[0] 9472 if x1.Op != OpPPC64MOVBZload { 9473 break 9474 } 9475 i1 := x1.AuxInt 9476 s := x1.Aux 9477 _ = x1.Args[1] 9478 p := x1.Args[0] 9479 mem := x1.Args[1] 9480 x0 := v.Args[1] 9481 if x0.Op != OpPPC64MOVBZload { 9482 break 9483 } 9484 i0 := x0.AuxInt 9485 if x0.Aux != s { 9486 break 9487 } 9488 _ = x0.Args[1] 9489 if p != x0.Args[0] { 9490 break 9491 } 9492 if mem != x0.Args[1] { 9493 break 9494 } 9495 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)) { 9496 break 9497 } 9498 b = mergePoint(b, x0, x1) 9499 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZload, t) 9500 v.reset(OpCopy) 9501 v.AddArg(v0) 9502 v0.AuxInt = i0 9503 v0.Aux = s 9504 v0.AddArg(p) 9505 v0.AddArg(mem) 9506 return true 9507 } 9508 // 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))) 9509 // 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) 9510 // result: @mergePoint(b,x0,x1,x2) (MOVWZload <t> {s} [i0] p mem) 9511 for { 9512 t := v.Type 9513 _ = v.Args[1] 9514 s1 := v.Args[0] 9515 if s1.Op != OpPPC64SLWconst { 9516 break 9517 } 9518 if s1.AuxInt != 24 { 9519 break 9520 } 9521 x2 := s1.Args[0] 9522 if x2.Op != OpPPC64MOVBZload { 9523 break 9524 } 9525 i3 := x2.AuxInt 9526 s := x2.Aux 9527 _ = x2.Args[1] 9528 p := x2.Args[0] 9529 mem := x2.Args[1] 9530 o0 := v.Args[1] 9531 if o0.Op != OpPPC64OR { 9532 break 9533 } 9534 if o0.Type != t { 9535 break 9536 } 9537 _ = o0.Args[1] 9538 s0 := o0.Args[0] 9539 if s0.Op != OpPPC64SLWconst { 9540 break 9541 } 9542 if s0.AuxInt != 16 { 9543 break 9544 } 9545 x1 := s0.Args[0] 9546 if x1.Op != OpPPC64MOVBZload { 9547 break 9548 } 9549 i2 := x1.AuxInt 9550 if x1.Aux != s { 9551 break 9552 } 9553 _ = x1.Args[1] 9554 if p != x1.Args[0] { 9555 break 9556 } 9557 if mem != x1.Args[1] { 9558 break 9559 } 9560 x0 := o0.Args[1] 9561 if x0.Op != OpPPC64MOVHZload { 9562 break 9563 } 9564 i0 := x0.AuxInt 9565 if x0.Aux != s { 9566 break 9567 } 9568 _ = x0.Args[1] 9569 if p != x0.Args[0] { 9570 break 9571 } 9572 if mem != x0.Args[1] { 9573 break 9574 } 9575 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)) { 9576 break 9577 } 9578 b = mergePoint(b, x0, x1, x2) 9579 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZload, t) 9580 v.reset(OpCopy) 9581 v.AddArg(v0) 9582 v0.AuxInt = i0 9583 v0.Aux = s 9584 v0.AddArg(p) 9585 v0.AddArg(mem) 9586 return true 9587 } 9588 // 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]))) 9589 // 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) 9590 // result: @mergePoint(b,x0,x1,x2) (MOVWZload <t> {s} [i0] p mem) 9591 for { 9592 t := v.Type 9593 _ = v.Args[1] 9594 s1 := v.Args[0] 9595 if s1.Op != OpPPC64SLWconst { 9596 break 9597 } 9598 if s1.AuxInt != 24 { 9599 break 9600 } 9601 x2 := s1.Args[0] 9602 if x2.Op != OpPPC64MOVBZload { 9603 break 9604 } 9605 i3 := x2.AuxInt 9606 s := x2.Aux 9607 _ = x2.Args[1] 9608 p := x2.Args[0] 9609 mem := x2.Args[1] 9610 o0 := v.Args[1] 9611 if o0.Op != OpPPC64OR { 9612 break 9613 } 9614 if o0.Type != t { 9615 break 9616 } 9617 _ = o0.Args[1] 9618 x0 := o0.Args[0] 9619 if x0.Op != OpPPC64MOVHZload { 9620 break 9621 } 9622 i0 := x0.AuxInt 9623 if x0.Aux != s { 9624 break 9625 } 9626 _ = x0.Args[1] 9627 if p != x0.Args[0] { 9628 break 9629 } 9630 if mem != x0.Args[1] { 9631 break 9632 } 9633 s0 := o0.Args[1] 9634 if s0.Op != OpPPC64SLWconst { 9635 break 9636 } 9637 if s0.AuxInt != 16 { 9638 break 9639 } 9640 x1 := s0.Args[0] 9641 if x1.Op != OpPPC64MOVBZload { 9642 break 9643 } 9644 i2 := x1.AuxInt 9645 if x1.Aux != s { 9646 break 9647 } 9648 _ = x1.Args[1] 9649 if p != x1.Args[0] { 9650 break 9651 } 9652 if mem != x1.Args[1] { 9653 break 9654 } 9655 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)) { 9656 break 9657 } 9658 b = mergePoint(b, x0, x1, x2) 9659 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZload, t) 9660 v.reset(OpCopy) 9661 v.AddArg(v0) 9662 v0.AuxInt = i0 9663 v0.Aux = s 9664 v0.AddArg(p) 9665 v0.AddArg(mem) 9666 return true 9667 } 9668 // 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])) 9669 // 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) 9670 // result: @mergePoint(b,x0,x1,x2) (MOVWZload <t> {s} [i0] p mem) 9671 for { 9672 t := v.Type 9673 _ = v.Args[1] 9674 o0 := v.Args[0] 9675 if o0.Op != OpPPC64OR { 9676 break 9677 } 9678 if o0.Type != t { 9679 break 9680 } 9681 _ = o0.Args[1] 9682 s0 := o0.Args[0] 9683 if s0.Op != OpPPC64SLWconst { 9684 break 9685 } 9686 if s0.AuxInt != 16 { 9687 break 9688 } 9689 x1 := s0.Args[0] 9690 if x1.Op != OpPPC64MOVBZload { 9691 break 9692 } 9693 i2 := x1.AuxInt 9694 s := x1.Aux 9695 _ = x1.Args[1] 9696 p := x1.Args[0] 9697 mem := x1.Args[1] 9698 x0 := o0.Args[1] 9699 if x0.Op != OpPPC64MOVHZload { 9700 break 9701 } 9702 i0 := x0.AuxInt 9703 if x0.Aux != s { 9704 break 9705 } 9706 _ = x0.Args[1] 9707 if p != x0.Args[0] { 9708 break 9709 } 9710 if mem != x0.Args[1] { 9711 break 9712 } 9713 s1 := v.Args[1] 9714 if s1.Op != OpPPC64SLWconst { 9715 break 9716 } 9717 if s1.AuxInt != 24 { 9718 break 9719 } 9720 x2 := s1.Args[0] 9721 if x2.Op != OpPPC64MOVBZload { 9722 break 9723 } 9724 i3 := x2.AuxInt 9725 if x2.Aux != s { 9726 break 9727 } 9728 _ = x2.Args[1] 9729 if p != x2.Args[0] { 9730 break 9731 } 9732 if mem != x2.Args[1] { 9733 break 9734 } 9735 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)) { 9736 break 9737 } 9738 b = mergePoint(b, x0, x1, x2) 9739 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZload, t) 9740 v.reset(OpCopy) 9741 v.AddArg(v0) 9742 v0.AuxInt = i0 9743 v0.Aux = s 9744 v0.AddArg(p) 9745 v0.AddArg(mem) 9746 return true 9747 } 9748 // 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])) 9749 // 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) 9750 // result: @mergePoint(b,x0,x1,x2) (MOVWZload <t> {s} [i0] p mem) 9751 for { 9752 t := v.Type 9753 _ = v.Args[1] 9754 o0 := v.Args[0] 9755 if o0.Op != OpPPC64OR { 9756 break 9757 } 9758 if o0.Type != t { 9759 break 9760 } 9761 _ = o0.Args[1] 9762 x0 := o0.Args[0] 9763 if x0.Op != OpPPC64MOVHZload { 9764 break 9765 } 9766 i0 := x0.AuxInt 9767 s := x0.Aux 9768 _ = x0.Args[1] 9769 p := x0.Args[0] 9770 mem := x0.Args[1] 9771 s0 := o0.Args[1] 9772 if s0.Op != OpPPC64SLWconst { 9773 break 9774 } 9775 if s0.AuxInt != 16 { 9776 break 9777 } 9778 x1 := s0.Args[0] 9779 if x1.Op != OpPPC64MOVBZload { 9780 break 9781 } 9782 i2 := x1.AuxInt 9783 if x1.Aux != s { 9784 break 9785 } 9786 _ = x1.Args[1] 9787 if p != x1.Args[0] { 9788 break 9789 } 9790 if mem != x1.Args[1] { 9791 break 9792 } 9793 s1 := v.Args[1] 9794 if s1.Op != OpPPC64SLWconst { 9795 break 9796 } 9797 if s1.AuxInt != 24 { 9798 break 9799 } 9800 x2 := s1.Args[0] 9801 if x2.Op != OpPPC64MOVBZload { 9802 break 9803 } 9804 i3 := x2.AuxInt 9805 if x2.Aux != s { 9806 break 9807 } 9808 _ = x2.Args[1] 9809 if p != x2.Args[0] { 9810 break 9811 } 9812 if mem != x2.Args[1] { 9813 break 9814 } 9815 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)) { 9816 break 9817 } 9818 b = mergePoint(b, x0, x1, x2) 9819 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZload, t) 9820 v.reset(OpCopy) 9821 v.AddArg(v0) 9822 v0.AuxInt = i0 9823 v0.Aux = s 9824 v0.AddArg(p) 9825 v0.AddArg(mem) 9826 return true 9827 } 9828 // 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)))))))) 9829 // 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) 9830 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 9831 for { 9832 t := v.Type 9833 _ = v.Args[1] 9834 s6 := v.Args[0] 9835 if s6.Op != OpPPC64SLDconst { 9836 break 9837 } 9838 if s6.AuxInt != 56 { 9839 break 9840 } 9841 x7 := s6.Args[0] 9842 if x7.Op != OpPPC64MOVBZload { 9843 break 9844 } 9845 i7 := x7.AuxInt 9846 s := x7.Aux 9847 _ = x7.Args[1] 9848 p := x7.Args[0] 9849 mem := x7.Args[1] 9850 o5 := v.Args[1] 9851 if o5.Op != OpPPC64OR { 9852 break 9853 } 9854 if o5.Type != t { 9855 break 9856 } 9857 _ = o5.Args[1] 9858 s5 := o5.Args[0] 9859 if s5.Op != OpPPC64SLDconst { 9860 break 9861 } 9862 if s5.AuxInt != 48 { 9863 break 9864 } 9865 x6 := s5.Args[0] 9866 if x6.Op != OpPPC64MOVBZload { 9867 break 9868 } 9869 i6 := x6.AuxInt 9870 if x6.Aux != s { 9871 break 9872 } 9873 _ = x6.Args[1] 9874 if p != x6.Args[0] { 9875 break 9876 } 9877 if mem != x6.Args[1] { 9878 break 9879 } 9880 o4 := o5.Args[1] 9881 if o4.Op != OpPPC64OR { 9882 break 9883 } 9884 if o4.Type != t { 9885 break 9886 } 9887 _ = o4.Args[1] 9888 s4 := o4.Args[0] 9889 if s4.Op != OpPPC64SLDconst { 9890 break 9891 } 9892 if s4.AuxInt != 40 { 9893 break 9894 } 9895 x5 := s4.Args[0] 9896 if x5.Op != OpPPC64MOVBZload { 9897 break 9898 } 9899 i5 := x5.AuxInt 9900 if x5.Aux != s { 9901 break 9902 } 9903 _ = x5.Args[1] 9904 if p != x5.Args[0] { 9905 break 9906 } 9907 if mem != x5.Args[1] { 9908 break 9909 } 9910 o3 := o4.Args[1] 9911 if o3.Op != OpPPC64OR { 9912 break 9913 } 9914 if o3.Type != t { 9915 break 9916 } 9917 _ = o3.Args[1] 9918 s3 := o3.Args[0] 9919 if s3.Op != OpPPC64SLDconst { 9920 break 9921 } 9922 if s3.AuxInt != 32 { 9923 break 9924 } 9925 x4 := s3.Args[0] 9926 if x4.Op != OpPPC64MOVBZload { 9927 break 9928 } 9929 i4 := x4.AuxInt 9930 if x4.Aux != s { 9931 break 9932 } 9933 _ = x4.Args[1] 9934 if p != x4.Args[0] { 9935 break 9936 } 9937 if mem != x4.Args[1] { 9938 break 9939 } 9940 o2 := o3.Args[1] 9941 if o2.Op != OpPPC64OR { 9942 break 9943 } 9944 if o2.Type != t { 9945 break 9946 } 9947 _ = o2.Args[1] 9948 s2 := o2.Args[0] 9949 if s2.Op != OpPPC64SLDconst { 9950 break 9951 } 9952 if s2.AuxInt != 24 { 9953 break 9954 } 9955 x3 := s2.Args[0] 9956 if x3.Op != OpPPC64MOVBZload { 9957 break 9958 } 9959 i3 := x3.AuxInt 9960 if x3.Aux != s { 9961 break 9962 } 9963 _ = x3.Args[1] 9964 if p != x3.Args[0] { 9965 break 9966 } 9967 if mem != x3.Args[1] { 9968 break 9969 } 9970 o1 := o2.Args[1] 9971 if o1.Op != OpPPC64OR { 9972 break 9973 } 9974 if o1.Type != t { 9975 break 9976 } 9977 _ = o1.Args[1] 9978 s1 := o1.Args[0] 9979 if s1.Op != OpPPC64SLDconst { 9980 break 9981 } 9982 if s1.AuxInt != 16 { 9983 break 9984 } 9985 x2 := s1.Args[0] 9986 if x2.Op != OpPPC64MOVBZload { 9987 break 9988 } 9989 i2 := x2.AuxInt 9990 if x2.Aux != s { 9991 break 9992 } 9993 _ = x2.Args[1] 9994 if p != x2.Args[0] { 9995 break 9996 } 9997 if mem != x2.Args[1] { 9998 break 9999 } 10000 o0 := o1.Args[1] 10001 if o0.Op != OpPPC64OR { 10002 break 10003 } 10004 if o0.Type != t { 10005 break 10006 } 10007 _ = o0.Args[1] 10008 s0 := o0.Args[0] 10009 if s0.Op != OpPPC64SLDconst { 10010 break 10011 } 10012 if s0.AuxInt != 8 { 10013 break 10014 } 10015 x1 := s0.Args[0] 10016 if x1.Op != OpPPC64MOVBZload { 10017 break 10018 } 10019 i1 := x1.AuxInt 10020 if x1.Aux != s { 10021 break 10022 } 10023 _ = x1.Args[1] 10024 if p != x1.Args[0] { 10025 break 10026 } 10027 if mem != x1.Args[1] { 10028 break 10029 } 10030 x0 := o0.Args[1] 10031 if x0.Op != OpPPC64MOVBZload { 10032 break 10033 } 10034 i0 := x0.AuxInt 10035 if x0.Aux != s { 10036 break 10037 } 10038 _ = x0.Args[1] 10039 if p != x0.Args[0] { 10040 break 10041 } 10042 if mem != x0.Args[1] { 10043 break 10044 } 10045 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)) { 10046 break 10047 } 10048 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 10049 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 10050 v.reset(OpCopy) 10051 v.AddArg(v0) 10052 v0.AuxInt = i0 10053 v0.Aux = s 10054 v0.AddArg(p) 10055 v0.AddArg(mem) 10056 return true 10057 } 10058 // 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])))))))) 10059 // 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) 10060 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 10061 for { 10062 t := v.Type 10063 _ = v.Args[1] 10064 s6 := v.Args[0] 10065 if s6.Op != OpPPC64SLDconst { 10066 break 10067 } 10068 if s6.AuxInt != 56 { 10069 break 10070 } 10071 x7 := s6.Args[0] 10072 if x7.Op != OpPPC64MOVBZload { 10073 break 10074 } 10075 i7 := x7.AuxInt 10076 s := x7.Aux 10077 _ = x7.Args[1] 10078 p := x7.Args[0] 10079 mem := x7.Args[1] 10080 o5 := v.Args[1] 10081 if o5.Op != OpPPC64OR { 10082 break 10083 } 10084 if o5.Type != t { 10085 break 10086 } 10087 _ = o5.Args[1] 10088 s5 := o5.Args[0] 10089 if s5.Op != OpPPC64SLDconst { 10090 break 10091 } 10092 if s5.AuxInt != 48 { 10093 break 10094 } 10095 x6 := s5.Args[0] 10096 if x6.Op != OpPPC64MOVBZload { 10097 break 10098 } 10099 i6 := x6.AuxInt 10100 if x6.Aux != s { 10101 break 10102 } 10103 _ = x6.Args[1] 10104 if p != x6.Args[0] { 10105 break 10106 } 10107 if mem != x6.Args[1] { 10108 break 10109 } 10110 o4 := o5.Args[1] 10111 if o4.Op != OpPPC64OR { 10112 break 10113 } 10114 if o4.Type != t { 10115 break 10116 } 10117 _ = o4.Args[1] 10118 s4 := o4.Args[0] 10119 if s4.Op != OpPPC64SLDconst { 10120 break 10121 } 10122 if s4.AuxInt != 40 { 10123 break 10124 } 10125 x5 := s4.Args[0] 10126 if x5.Op != OpPPC64MOVBZload { 10127 break 10128 } 10129 i5 := x5.AuxInt 10130 if x5.Aux != s { 10131 break 10132 } 10133 _ = x5.Args[1] 10134 if p != x5.Args[0] { 10135 break 10136 } 10137 if mem != x5.Args[1] { 10138 break 10139 } 10140 o3 := o4.Args[1] 10141 if o3.Op != OpPPC64OR { 10142 break 10143 } 10144 if o3.Type != t { 10145 break 10146 } 10147 _ = o3.Args[1] 10148 s3 := o3.Args[0] 10149 if s3.Op != OpPPC64SLDconst { 10150 break 10151 } 10152 if s3.AuxInt != 32 { 10153 break 10154 } 10155 x4 := s3.Args[0] 10156 if x4.Op != OpPPC64MOVBZload { 10157 break 10158 } 10159 i4 := x4.AuxInt 10160 if x4.Aux != s { 10161 break 10162 } 10163 _ = x4.Args[1] 10164 if p != x4.Args[0] { 10165 break 10166 } 10167 if mem != x4.Args[1] { 10168 break 10169 } 10170 o2 := o3.Args[1] 10171 if o2.Op != OpPPC64OR { 10172 break 10173 } 10174 if o2.Type != t { 10175 break 10176 } 10177 _ = o2.Args[1] 10178 s2 := o2.Args[0] 10179 if s2.Op != OpPPC64SLDconst { 10180 break 10181 } 10182 if s2.AuxInt != 24 { 10183 break 10184 } 10185 x3 := s2.Args[0] 10186 if x3.Op != OpPPC64MOVBZload { 10187 break 10188 } 10189 i3 := x3.AuxInt 10190 if x3.Aux != s { 10191 break 10192 } 10193 _ = x3.Args[1] 10194 if p != x3.Args[0] { 10195 break 10196 } 10197 if mem != x3.Args[1] { 10198 break 10199 } 10200 o1 := o2.Args[1] 10201 if o1.Op != OpPPC64OR { 10202 break 10203 } 10204 if o1.Type != t { 10205 break 10206 } 10207 _ = o1.Args[1] 10208 s1 := o1.Args[0] 10209 if s1.Op != OpPPC64SLDconst { 10210 break 10211 } 10212 if s1.AuxInt != 16 { 10213 break 10214 } 10215 x2 := s1.Args[0] 10216 if x2.Op != OpPPC64MOVBZload { 10217 break 10218 } 10219 i2 := x2.AuxInt 10220 if x2.Aux != s { 10221 break 10222 } 10223 _ = x2.Args[1] 10224 if p != x2.Args[0] { 10225 break 10226 } 10227 if mem != x2.Args[1] { 10228 break 10229 } 10230 o0 := o1.Args[1] 10231 if o0.Op != OpPPC64OR { 10232 break 10233 } 10234 if o0.Type != t { 10235 break 10236 } 10237 _ = o0.Args[1] 10238 x0 := o0.Args[0] 10239 if x0.Op != OpPPC64MOVBZload { 10240 break 10241 } 10242 i0 := x0.AuxInt 10243 if x0.Aux != s { 10244 break 10245 } 10246 _ = x0.Args[1] 10247 if p != x0.Args[0] { 10248 break 10249 } 10250 if mem != x0.Args[1] { 10251 break 10252 } 10253 s0 := o0.Args[1] 10254 if s0.Op != OpPPC64SLDconst { 10255 break 10256 } 10257 if s0.AuxInt != 8 { 10258 break 10259 } 10260 x1 := s0.Args[0] 10261 if x1.Op != OpPPC64MOVBZload { 10262 break 10263 } 10264 i1 := x1.AuxInt 10265 if x1.Aux != s { 10266 break 10267 } 10268 _ = x1.Args[1] 10269 if p != x1.Args[0] { 10270 break 10271 } 10272 if mem != x1.Args[1] { 10273 break 10274 } 10275 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)) { 10276 break 10277 } 10278 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 10279 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 10280 v.reset(OpCopy) 10281 v.AddArg(v0) 10282 v0.AuxInt = i0 10283 v0.Aux = s 10284 v0.AddArg(p) 10285 v0.AddArg(mem) 10286 return true 10287 } 10288 return false 10289 } 10290 func rewriteValuePPC64_OpPPC64OR_20(v *Value) bool { 10291 b := v.Block 10292 _ = b 10293 config := b.Func.Config 10294 _ = config 10295 // 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]))))))) 10296 // 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) 10297 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 10298 for { 10299 t := v.Type 10300 _ = v.Args[1] 10301 s6 := v.Args[0] 10302 if s6.Op != OpPPC64SLDconst { 10303 break 10304 } 10305 if s6.AuxInt != 56 { 10306 break 10307 } 10308 x7 := s6.Args[0] 10309 if x7.Op != OpPPC64MOVBZload { 10310 break 10311 } 10312 i7 := x7.AuxInt 10313 s := x7.Aux 10314 _ = x7.Args[1] 10315 p := x7.Args[0] 10316 mem := x7.Args[1] 10317 o5 := v.Args[1] 10318 if o5.Op != OpPPC64OR { 10319 break 10320 } 10321 if o5.Type != t { 10322 break 10323 } 10324 _ = o5.Args[1] 10325 s5 := o5.Args[0] 10326 if s5.Op != OpPPC64SLDconst { 10327 break 10328 } 10329 if s5.AuxInt != 48 { 10330 break 10331 } 10332 x6 := s5.Args[0] 10333 if x6.Op != OpPPC64MOVBZload { 10334 break 10335 } 10336 i6 := x6.AuxInt 10337 if x6.Aux != s { 10338 break 10339 } 10340 _ = x6.Args[1] 10341 if p != x6.Args[0] { 10342 break 10343 } 10344 if mem != x6.Args[1] { 10345 break 10346 } 10347 o4 := o5.Args[1] 10348 if o4.Op != OpPPC64OR { 10349 break 10350 } 10351 if o4.Type != t { 10352 break 10353 } 10354 _ = o4.Args[1] 10355 s4 := o4.Args[0] 10356 if s4.Op != OpPPC64SLDconst { 10357 break 10358 } 10359 if s4.AuxInt != 40 { 10360 break 10361 } 10362 x5 := s4.Args[0] 10363 if x5.Op != OpPPC64MOVBZload { 10364 break 10365 } 10366 i5 := x5.AuxInt 10367 if x5.Aux != s { 10368 break 10369 } 10370 _ = x5.Args[1] 10371 if p != x5.Args[0] { 10372 break 10373 } 10374 if mem != x5.Args[1] { 10375 break 10376 } 10377 o3 := o4.Args[1] 10378 if o3.Op != OpPPC64OR { 10379 break 10380 } 10381 if o3.Type != t { 10382 break 10383 } 10384 _ = o3.Args[1] 10385 s3 := o3.Args[0] 10386 if s3.Op != OpPPC64SLDconst { 10387 break 10388 } 10389 if s3.AuxInt != 32 { 10390 break 10391 } 10392 x4 := s3.Args[0] 10393 if x4.Op != OpPPC64MOVBZload { 10394 break 10395 } 10396 i4 := x4.AuxInt 10397 if x4.Aux != s { 10398 break 10399 } 10400 _ = x4.Args[1] 10401 if p != x4.Args[0] { 10402 break 10403 } 10404 if mem != x4.Args[1] { 10405 break 10406 } 10407 o2 := o3.Args[1] 10408 if o2.Op != OpPPC64OR { 10409 break 10410 } 10411 if o2.Type != t { 10412 break 10413 } 10414 _ = o2.Args[1] 10415 s2 := o2.Args[0] 10416 if s2.Op != OpPPC64SLDconst { 10417 break 10418 } 10419 if s2.AuxInt != 24 { 10420 break 10421 } 10422 x3 := s2.Args[0] 10423 if x3.Op != OpPPC64MOVBZload { 10424 break 10425 } 10426 i3 := x3.AuxInt 10427 if x3.Aux != s { 10428 break 10429 } 10430 _ = x3.Args[1] 10431 if p != x3.Args[0] { 10432 break 10433 } 10434 if mem != x3.Args[1] { 10435 break 10436 } 10437 o1 := o2.Args[1] 10438 if o1.Op != OpPPC64OR { 10439 break 10440 } 10441 if o1.Type != t { 10442 break 10443 } 10444 _ = o1.Args[1] 10445 o0 := o1.Args[0] 10446 if o0.Op != OpPPC64OR { 10447 break 10448 } 10449 if o0.Type != t { 10450 break 10451 } 10452 _ = o0.Args[1] 10453 s0 := o0.Args[0] 10454 if s0.Op != OpPPC64SLDconst { 10455 break 10456 } 10457 if s0.AuxInt != 8 { 10458 break 10459 } 10460 x1 := s0.Args[0] 10461 if x1.Op != OpPPC64MOVBZload { 10462 break 10463 } 10464 i1 := x1.AuxInt 10465 if x1.Aux != s { 10466 break 10467 } 10468 _ = x1.Args[1] 10469 if p != x1.Args[0] { 10470 break 10471 } 10472 if mem != x1.Args[1] { 10473 break 10474 } 10475 x0 := o0.Args[1] 10476 if x0.Op != OpPPC64MOVBZload { 10477 break 10478 } 10479 i0 := x0.AuxInt 10480 if x0.Aux != s { 10481 break 10482 } 10483 _ = x0.Args[1] 10484 if p != x0.Args[0] { 10485 break 10486 } 10487 if mem != x0.Args[1] { 10488 break 10489 } 10490 s1 := o1.Args[1] 10491 if s1.Op != OpPPC64SLDconst { 10492 break 10493 } 10494 if s1.AuxInt != 16 { 10495 break 10496 } 10497 x2 := s1.Args[0] 10498 if x2.Op != OpPPC64MOVBZload { 10499 break 10500 } 10501 i2 := x2.AuxInt 10502 if x2.Aux != s { 10503 break 10504 } 10505 _ = x2.Args[1] 10506 if p != x2.Args[0] { 10507 break 10508 } 10509 if mem != x2.Args[1] { 10510 break 10511 } 10512 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)) { 10513 break 10514 } 10515 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 10516 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 10517 v.reset(OpCopy) 10518 v.AddArg(v0) 10519 v0.AuxInt = i0 10520 v0.Aux = s 10521 v0.AddArg(p) 10522 v0.AddArg(mem) 10523 return true 10524 } 10525 // 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]))))))) 10526 // 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) 10527 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 10528 for { 10529 t := v.Type 10530 _ = v.Args[1] 10531 s6 := v.Args[0] 10532 if s6.Op != OpPPC64SLDconst { 10533 break 10534 } 10535 if s6.AuxInt != 56 { 10536 break 10537 } 10538 x7 := s6.Args[0] 10539 if x7.Op != OpPPC64MOVBZload { 10540 break 10541 } 10542 i7 := x7.AuxInt 10543 s := x7.Aux 10544 _ = x7.Args[1] 10545 p := x7.Args[0] 10546 mem := x7.Args[1] 10547 o5 := v.Args[1] 10548 if o5.Op != OpPPC64OR { 10549 break 10550 } 10551 if o5.Type != t { 10552 break 10553 } 10554 _ = o5.Args[1] 10555 s5 := o5.Args[0] 10556 if s5.Op != OpPPC64SLDconst { 10557 break 10558 } 10559 if s5.AuxInt != 48 { 10560 break 10561 } 10562 x6 := s5.Args[0] 10563 if x6.Op != OpPPC64MOVBZload { 10564 break 10565 } 10566 i6 := x6.AuxInt 10567 if x6.Aux != s { 10568 break 10569 } 10570 _ = x6.Args[1] 10571 if p != x6.Args[0] { 10572 break 10573 } 10574 if mem != x6.Args[1] { 10575 break 10576 } 10577 o4 := o5.Args[1] 10578 if o4.Op != OpPPC64OR { 10579 break 10580 } 10581 if o4.Type != t { 10582 break 10583 } 10584 _ = o4.Args[1] 10585 s4 := o4.Args[0] 10586 if s4.Op != OpPPC64SLDconst { 10587 break 10588 } 10589 if s4.AuxInt != 40 { 10590 break 10591 } 10592 x5 := s4.Args[0] 10593 if x5.Op != OpPPC64MOVBZload { 10594 break 10595 } 10596 i5 := x5.AuxInt 10597 if x5.Aux != s { 10598 break 10599 } 10600 _ = x5.Args[1] 10601 if p != x5.Args[0] { 10602 break 10603 } 10604 if mem != x5.Args[1] { 10605 break 10606 } 10607 o3 := o4.Args[1] 10608 if o3.Op != OpPPC64OR { 10609 break 10610 } 10611 if o3.Type != t { 10612 break 10613 } 10614 _ = o3.Args[1] 10615 s3 := o3.Args[0] 10616 if s3.Op != OpPPC64SLDconst { 10617 break 10618 } 10619 if s3.AuxInt != 32 { 10620 break 10621 } 10622 x4 := s3.Args[0] 10623 if x4.Op != OpPPC64MOVBZload { 10624 break 10625 } 10626 i4 := x4.AuxInt 10627 if x4.Aux != s { 10628 break 10629 } 10630 _ = x4.Args[1] 10631 if p != x4.Args[0] { 10632 break 10633 } 10634 if mem != x4.Args[1] { 10635 break 10636 } 10637 o2 := o3.Args[1] 10638 if o2.Op != OpPPC64OR { 10639 break 10640 } 10641 if o2.Type != t { 10642 break 10643 } 10644 _ = o2.Args[1] 10645 s2 := o2.Args[0] 10646 if s2.Op != OpPPC64SLDconst { 10647 break 10648 } 10649 if s2.AuxInt != 24 { 10650 break 10651 } 10652 x3 := s2.Args[0] 10653 if x3.Op != OpPPC64MOVBZload { 10654 break 10655 } 10656 i3 := x3.AuxInt 10657 if x3.Aux != s { 10658 break 10659 } 10660 _ = x3.Args[1] 10661 if p != x3.Args[0] { 10662 break 10663 } 10664 if mem != x3.Args[1] { 10665 break 10666 } 10667 o1 := o2.Args[1] 10668 if o1.Op != OpPPC64OR { 10669 break 10670 } 10671 if o1.Type != t { 10672 break 10673 } 10674 _ = o1.Args[1] 10675 o0 := o1.Args[0] 10676 if o0.Op != OpPPC64OR { 10677 break 10678 } 10679 if o0.Type != t { 10680 break 10681 } 10682 _ = o0.Args[1] 10683 x0 := o0.Args[0] 10684 if x0.Op != OpPPC64MOVBZload { 10685 break 10686 } 10687 i0 := x0.AuxInt 10688 if x0.Aux != s { 10689 break 10690 } 10691 _ = x0.Args[1] 10692 if p != x0.Args[0] { 10693 break 10694 } 10695 if mem != x0.Args[1] { 10696 break 10697 } 10698 s0 := o0.Args[1] 10699 if s0.Op != OpPPC64SLDconst { 10700 break 10701 } 10702 if s0.AuxInt != 8 { 10703 break 10704 } 10705 x1 := s0.Args[0] 10706 if x1.Op != OpPPC64MOVBZload { 10707 break 10708 } 10709 i1 := x1.AuxInt 10710 if x1.Aux != s { 10711 break 10712 } 10713 _ = x1.Args[1] 10714 if p != x1.Args[0] { 10715 break 10716 } 10717 if mem != x1.Args[1] { 10718 break 10719 } 10720 s1 := o1.Args[1] 10721 if s1.Op != OpPPC64SLDconst { 10722 break 10723 } 10724 if s1.AuxInt != 16 { 10725 break 10726 } 10727 x2 := s1.Args[0] 10728 if x2.Op != OpPPC64MOVBZload { 10729 break 10730 } 10731 i2 := x2.AuxInt 10732 if x2.Aux != s { 10733 break 10734 } 10735 _ = x2.Args[1] 10736 if p != x2.Args[0] { 10737 break 10738 } 10739 if mem != x2.Args[1] { 10740 break 10741 } 10742 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)) { 10743 break 10744 } 10745 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 10746 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 10747 v.reset(OpCopy) 10748 v.AddArg(v0) 10749 v0.AuxInt = i0 10750 v0.Aux = s 10751 v0.AddArg(p) 10752 v0.AddArg(mem) 10753 return true 10754 } 10755 // 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])))))) 10756 // 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) 10757 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 10758 for { 10759 t := v.Type 10760 _ = v.Args[1] 10761 s6 := v.Args[0] 10762 if s6.Op != OpPPC64SLDconst { 10763 break 10764 } 10765 if s6.AuxInt != 56 { 10766 break 10767 } 10768 x7 := s6.Args[0] 10769 if x7.Op != OpPPC64MOVBZload { 10770 break 10771 } 10772 i7 := x7.AuxInt 10773 s := x7.Aux 10774 _ = x7.Args[1] 10775 p := x7.Args[0] 10776 mem := x7.Args[1] 10777 o5 := v.Args[1] 10778 if o5.Op != OpPPC64OR { 10779 break 10780 } 10781 if o5.Type != t { 10782 break 10783 } 10784 _ = o5.Args[1] 10785 s5 := o5.Args[0] 10786 if s5.Op != OpPPC64SLDconst { 10787 break 10788 } 10789 if s5.AuxInt != 48 { 10790 break 10791 } 10792 x6 := s5.Args[0] 10793 if x6.Op != OpPPC64MOVBZload { 10794 break 10795 } 10796 i6 := x6.AuxInt 10797 if x6.Aux != s { 10798 break 10799 } 10800 _ = x6.Args[1] 10801 if p != x6.Args[0] { 10802 break 10803 } 10804 if mem != x6.Args[1] { 10805 break 10806 } 10807 o4 := o5.Args[1] 10808 if o4.Op != OpPPC64OR { 10809 break 10810 } 10811 if o4.Type != t { 10812 break 10813 } 10814 _ = o4.Args[1] 10815 s4 := o4.Args[0] 10816 if s4.Op != OpPPC64SLDconst { 10817 break 10818 } 10819 if s4.AuxInt != 40 { 10820 break 10821 } 10822 x5 := s4.Args[0] 10823 if x5.Op != OpPPC64MOVBZload { 10824 break 10825 } 10826 i5 := x5.AuxInt 10827 if x5.Aux != s { 10828 break 10829 } 10830 _ = x5.Args[1] 10831 if p != x5.Args[0] { 10832 break 10833 } 10834 if mem != x5.Args[1] { 10835 break 10836 } 10837 o3 := o4.Args[1] 10838 if o3.Op != OpPPC64OR { 10839 break 10840 } 10841 if o3.Type != t { 10842 break 10843 } 10844 _ = o3.Args[1] 10845 s3 := o3.Args[0] 10846 if s3.Op != OpPPC64SLDconst { 10847 break 10848 } 10849 if s3.AuxInt != 32 { 10850 break 10851 } 10852 x4 := s3.Args[0] 10853 if x4.Op != OpPPC64MOVBZload { 10854 break 10855 } 10856 i4 := x4.AuxInt 10857 if x4.Aux != s { 10858 break 10859 } 10860 _ = x4.Args[1] 10861 if p != x4.Args[0] { 10862 break 10863 } 10864 if mem != x4.Args[1] { 10865 break 10866 } 10867 o2 := o3.Args[1] 10868 if o2.Op != OpPPC64OR { 10869 break 10870 } 10871 if o2.Type != t { 10872 break 10873 } 10874 _ = o2.Args[1] 10875 o1 := o2.Args[0] 10876 if o1.Op != OpPPC64OR { 10877 break 10878 } 10879 if o1.Type != t { 10880 break 10881 } 10882 _ = o1.Args[1] 10883 s1 := o1.Args[0] 10884 if s1.Op != OpPPC64SLDconst { 10885 break 10886 } 10887 if s1.AuxInt != 16 { 10888 break 10889 } 10890 x2 := s1.Args[0] 10891 if x2.Op != OpPPC64MOVBZload { 10892 break 10893 } 10894 i2 := x2.AuxInt 10895 if x2.Aux != s { 10896 break 10897 } 10898 _ = x2.Args[1] 10899 if p != x2.Args[0] { 10900 break 10901 } 10902 if mem != x2.Args[1] { 10903 break 10904 } 10905 o0 := o1.Args[1] 10906 if o0.Op != OpPPC64OR { 10907 break 10908 } 10909 if o0.Type != t { 10910 break 10911 } 10912 _ = o0.Args[1] 10913 s0 := o0.Args[0] 10914 if s0.Op != OpPPC64SLDconst { 10915 break 10916 } 10917 if s0.AuxInt != 8 { 10918 break 10919 } 10920 x1 := s0.Args[0] 10921 if x1.Op != OpPPC64MOVBZload { 10922 break 10923 } 10924 i1 := x1.AuxInt 10925 if x1.Aux != s { 10926 break 10927 } 10928 _ = x1.Args[1] 10929 if p != x1.Args[0] { 10930 break 10931 } 10932 if mem != x1.Args[1] { 10933 break 10934 } 10935 x0 := o0.Args[1] 10936 if x0.Op != OpPPC64MOVBZload { 10937 break 10938 } 10939 i0 := x0.AuxInt 10940 if x0.Aux != s { 10941 break 10942 } 10943 _ = x0.Args[1] 10944 if p != x0.Args[0] { 10945 break 10946 } 10947 if mem != x0.Args[1] { 10948 break 10949 } 10950 s2 := o2.Args[1] 10951 if s2.Op != OpPPC64SLDconst { 10952 break 10953 } 10954 if s2.AuxInt != 24 { 10955 break 10956 } 10957 x3 := s2.Args[0] 10958 if x3.Op != OpPPC64MOVBZload { 10959 break 10960 } 10961 i3 := x3.AuxInt 10962 if x3.Aux != s { 10963 break 10964 } 10965 _ = x3.Args[1] 10966 if p != x3.Args[0] { 10967 break 10968 } 10969 if mem != x3.Args[1] { 10970 break 10971 } 10972 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)) { 10973 break 10974 } 10975 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 10976 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 10977 v.reset(OpCopy) 10978 v.AddArg(v0) 10979 v0.AuxInt = i0 10980 v0.Aux = s 10981 v0.AddArg(p) 10982 v0.AddArg(mem) 10983 return true 10984 } 10985 // 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])))))) 10986 // 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) 10987 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 10988 for { 10989 t := v.Type 10990 _ = v.Args[1] 10991 s6 := v.Args[0] 10992 if s6.Op != OpPPC64SLDconst { 10993 break 10994 } 10995 if s6.AuxInt != 56 { 10996 break 10997 } 10998 x7 := s6.Args[0] 10999 if x7.Op != OpPPC64MOVBZload { 11000 break 11001 } 11002 i7 := x7.AuxInt 11003 s := x7.Aux 11004 _ = x7.Args[1] 11005 p := x7.Args[0] 11006 mem := x7.Args[1] 11007 o5 := v.Args[1] 11008 if o5.Op != OpPPC64OR { 11009 break 11010 } 11011 if o5.Type != t { 11012 break 11013 } 11014 _ = o5.Args[1] 11015 s5 := o5.Args[0] 11016 if s5.Op != OpPPC64SLDconst { 11017 break 11018 } 11019 if s5.AuxInt != 48 { 11020 break 11021 } 11022 x6 := s5.Args[0] 11023 if x6.Op != OpPPC64MOVBZload { 11024 break 11025 } 11026 i6 := x6.AuxInt 11027 if x6.Aux != s { 11028 break 11029 } 11030 _ = x6.Args[1] 11031 if p != x6.Args[0] { 11032 break 11033 } 11034 if mem != x6.Args[1] { 11035 break 11036 } 11037 o4 := o5.Args[1] 11038 if o4.Op != OpPPC64OR { 11039 break 11040 } 11041 if o4.Type != t { 11042 break 11043 } 11044 _ = o4.Args[1] 11045 s4 := o4.Args[0] 11046 if s4.Op != OpPPC64SLDconst { 11047 break 11048 } 11049 if s4.AuxInt != 40 { 11050 break 11051 } 11052 x5 := s4.Args[0] 11053 if x5.Op != OpPPC64MOVBZload { 11054 break 11055 } 11056 i5 := x5.AuxInt 11057 if x5.Aux != s { 11058 break 11059 } 11060 _ = x5.Args[1] 11061 if p != x5.Args[0] { 11062 break 11063 } 11064 if mem != x5.Args[1] { 11065 break 11066 } 11067 o3 := o4.Args[1] 11068 if o3.Op != OpPPC64OR { 11069 break 11070 } 11071 if o3.Type != t { 11072 break 11073 } 11074 _ = o3.Args[1] 11075 s3 := o3.Args[0] 11076 if s3.Op != OpPPC64SLDconst { 11077 break 11078 } 11079 if s3.AuxInt != 32 { 11080 break 11081 } 11082 x4 := s3.Args[0] 11083 if x4.Op != OpPPC64MOVBZload { 11084 break 11085 } 11086 i4 := x4.AuxInt 11087 if x4.Aux != s { 11088 break 11089 } 11090 _ = x4.Args[1] 11091 if p != x4.Args[0] { 11092 break 11093 } 11094 if mem != x4.Args[1] { 11095 break 11096 } 11097 o2 := o3.Args[1] 11098 if o2.Op != OpPPC64OR { 11099 break 11100 } 11101 if o2.Type != t { 11102 break 11103 } 11104 _ = o2.Args[1] 11105 o1 := o2.Args[0] 11106 if o1.Op != OpPPC64OR { 11107 break 11108 } 11109 if o1.Type != t { 11110 break 11111 } 11112 _ = o1.Args[1] 11113 s1 := o1.Args[0] 11114 if s1.Op != OpPPC64SLDconst { 11115 break 11116 } 11117 if s1.AuxInt != 16 { 11118 break 11119 } 11120 x2 := s1.Args[0] 11121 if x2.Op != OpPPC64MOVBZload { 11122 break 11123 } 11124 i2 := x2.AuxInt 11125 if x2.Aux != s { 11126 break 11127 } 11128 _ = x2.Args[1] 11129 if p != x2.Args[0] { 11130 break 11131 } 11132 if mem != x2.Args[1] { 11133 break 11134 } 11135 o0 := o1.Args[1] 11136 if o0.Op != OpPPC64OR { 11137 break 11138 } 11139 if o0.Type != t { 11140 break 11141 } 11142 _ = o0.Args[1] 11143 x0 := o0.Args[0] 11144 if x0.Op != OpPPC64MOVBZload { 11145 break 11146 } 11147 i0 := x0.AuxInt 11148 if x0.Aux != s { 11149 break 11150 } 11151 _ = x0.Args[1] 11152 if p != x0.Args[0] { 11153 break 11154 } 11155 if mem != x0.Args[1] { 11156 break 11157 } 11158 s0 := o0.Args[1] 11159 if s0.Op != OpPPC64SLDconst { 11160 break 11161 } 11162 if s0.AuxInt != 8 { 11163 break 11164 } 11165 x1 := s0.Args[0] 11166 if x1.Op != OpPPC64MOVBZload { 11167 break 11168 } 11169 i1 := x1.AuxInt 11170 if x1.Aux != s { 11171 break 11172 } 11173 _ = x1.Args[1] 11174 if p != x1.Args[0] { 11175 break 11176 } 11177 if mem != x1.Args[1] { 11178 break 11179 } 11180 s2 := o2.Args[1] 11181 if s2.Op != OpPPC64SLDconst { 11182 break 11183 } 11184 if s2.AuxInt != 24 { 11185 break 11186 } 11187 x3 := s2.Args[0] 11188 if x3.Op != OpPPC64MOVBZload { 11189 break 11190 } 11191 i3 := x3.AuxInt 11192 if x3.Aux != s { 11193 break 11194 } 11195 _ = x3.Args[1] 11196 if p != x3.Args[0] { 11197 break 11198 } 11199 if mem != x3.Args[1] { 11200 break 11201 } 11202 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)) { 11203 break 11204 } 11205 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 11206 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 11207 v.reset(OpCopy) 11208 v.AddArg(v0) 11209 v0.AuxInt = i0 11210 v0.Aux = s 11211 v0.AddArg(p) 11212 v0.AddArg(mem) 11213 return true 11214 } 11215 // 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])))))) 11216 // 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) 11217 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 11218 for { 11219 t := v.Type 11220 _ = v.Args[1] 11221 s6 := v.Args[0] 11222 if s6.Op != OpPPC64SLDconst { 11223 break 11224 } 11225 if s6.AuxInt != 56 { 11226 break 11227 } 11228 x7 := s6.Args[0] 11229 if x7.Op != OpPPC64MOVBZload { 11230 break 11231 } 11232 i7 := x7.AuxInt 11233 s := x7.Aux 11234 _ = x7.Args[1] 11235 p := x7.Args[0] 11236 mem := x7.Args[1] 11237 o5 := v.Args[1] 11238 if o5.Op != OpPPC64OR { 11239 break 11240 } 11241 if o5.Type != t { 11242 break 11243 } 11244 _ = o5.Args[1] 11245 s5 := o5.Args[0] 11246 if s5.Op != OpPPC64SLDconst { 11247 break 11248 } 11249 if s5.AuxInt != 48 { 11250 break 11251 } 11252 x6 := s5.Args[0] 11253 if x6.Op != OpPPC64MOVBZload { 11254 break 11255 } 11256 i6 := x6.AuxInt 11257 if x6.Aux != s { 11258 break 11259 } 11260 _ = x6.Args[1] 11261 if p != x6.Args[0] { 11262 break 11263 } 11264 if mem != x6.Args[1] { 11265 break 11266 } 11267 o4 := o5.Args[1] 11268 if o4.Op != OpPPC64OR { 11269 break 11270 } 11271 if o4.Type != t { 11272 break 11273 } 11274 _ = o4.Args[1] 11275 s4 := o4.Args[0] 11276 if s4.Op != OpPPC64SLDconst { 11277 break 11278 } 11279 if s4.AuxInt != 40 { 11280 break 11281 } 11282 x5 := s4.Args[0] 11283 if x5.Op != OpPPC64MOVBZload { 11284 break 11285 } 11286 i5 := x5.AuxInt 11287 if x5.Aux != s { 11288 break 11289 } 11290 _ = x5.Args[1] 11291 if p != x5.Args[0] { 11292 break 11293 } 11294 if mem != x5.Args[1] { 11295 break 11296 } 11297 o3 := o4.Args[1] 11298 if o3.Op != OpPPC64OR { 11299 break 11300 } 11301 if o3.Type != t { 11302 break 11303 } 11304 _ = o3.Args[1] 11305 s3 := o3.Args[0] 11306 if s3.Op != OpPPC64SLDconst { 11307 break 11308 } 11309 if s3.AuxInt != 32 { 11310 break 11311 } 11312 x4 := s3.Args[0] 11313 if x4.Op != OpPPC64MOVBZload { 11314 break 11315 } 11316 i4 := x4.AuxInt 11317 if x4.Aux != s { 11318 break 11319 } 11320 _ = x4.Args[1] 11321 if p != x4.Args[0] { 11322 break 11323 } 11324 if mem != x4.Args[1] { 11325 break 11326 } 11327 o2 := o3.Args[1] 11328 if o2.Op != OpPPC64OR { 11329 break 11330 } 11331 if o2.Type != t { 11332 break 11333 } 11334 _ = o2.Args[1] 11335 o1 := o2.Args[0] 11336 if o1.Op != OpPPC64OR { 11337 break 11338 } 11339 if o1.Type != t { 11340 break 11341 } 11342 _ = o1.Args[1] 11343 o0 := o1.Args[0] 11344 if o0.Op != OpPPC64OR { 11345 break 11346 } 11347 if o0.Type != t { 11348 break 11349 } 11350 _ = o0.Args[1] 11351 s0 := o0.Args[0] 11352 if s0.Op != OpPPC64SLDconst { 11353 break 11354 } 11355 if s0.AuxInt != 8 { 11356 break 11357 } 11358 x1 := s0.Args[0] 11359 if x1.Op != OpPPC64MOVBZload { 11360 break 11361 } 11362 i1 := x1.AuxInt 11363 if x1.Aux != s { 11364 break 11365 } 11366 _ = x1.Args[1] 11367 if p != x1.Args[0] { 11368 break 11369 } 11370 if mem != x1.Args[1] { 11371 break 11372 } 11373 x0 := o0.Args[1] 11374 if x0.Op != OpPPC64MOVBZload { 11375 break 11376 } 11377 i0 := x0.AuxInt 11378 if x0.Aux != s { 11379 break 11380 } 11381 _ = x0.Args[1] 11382 if p != x0.Args[0] { 11383 break 11384 } 11385 if mem != x0.Args[1] { 11386 break 11387 } 11388 s1 := o1.Args[1] 11389 if s1.Op != OpPPC64SLDconst { 11390 break 11391 } 11392 if s1.AuxInt != 16 { 11393 break 11394 } 11395 x2 := s1.Args[0] 11396 if x2.Op != OpPPC64MOVBZload { 11397 break 11398 } 11399 i2 := x2.AuxInt 11400 if x2.Aux != s { 11401 break 11402 } 11403 _ = x2.Args[1] 11404 if p != x2.Args[0] { 11405 break 11406 } 11407 if mem != x2.Args[1] { 11408 break 11409 } 11410 s2 := o2.Args[1] 11411 if s2.Op != OpPPC64SLDconst { 11412 break 11413 } 11414 if s2.AuxInt != 24 { 11415 break 11416 } 11417 x3 := s2.Args[0] 11418 if x3.Op != OpPPC64MOVBZload { 11419 break 11420 } 11421 i3 := x3.AuxInt 11422 if x3.Aux != s { 11423 break 11424 } 11425 _ = x3.Args[1] 11426 if p != x3.Args[0] { 11427 break 11428 } 11429 if mem != x3.Args[1] { 11430 break 11431 } 11432 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)) { 11433 break 11434 } 11435 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 11436 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 11437 v.reset(OpCopy) 11438 v.AddArg(v0) 11439 v0.AuxInt = i0 11440 v0.Aux = s 11441 v0.AddArg(p) 11442 v0.AddArg(mem) 11443 return true 11444 } 11445 // 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])))))) 11446 // 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) 11447 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 11448 for { 11449 t := v.Type 11450 _ = v.Args[1] 11451 s6 := v.Args[0] 11452 if s6.Op != OpPPC64SLDconst { 11453 break 11454 } 11455 if s6.AuxInt != 56 { 11456 break 11457 } 11458 x7 := s6.Args[0] 11459 if x7.Op != OpPPC64MOVBZload { 11460 break 11461 } 11462 i7 := x7.AuxInt 11463 s := x7.Aux 11464 _ = x7.Args[1] 11465 p := x7.Args[0] 11466 mem := x7.Args[1] 11467 o5 := v.Args[1] 11468 if o5.Op != OpPPC64OR { 11469 break 11470 } 11471 if o5.Type != t { 11472 break 11473 } 11474 _ = o5.Args[1] 11475 s5 := o5.Args[0] 11476 if s5.Op != OpPPC64SLDconst { 11477 break 11478 } 11479 if s5.AuxInt != 48 { 11480 break 11481 } 11482 x6 := s5.Args[0] 11483 if x6.Op != OpPPC64MOVBZload { 11484 break 11485 } 11486 i6 := x6.AuxInt 11487 if x6.Aux != s { 11488 break 11489 } 11490 _ = x6.Args[1] 11491 if p != x6.Args[0] { 11492 break 11493 } 11494 if mem != x6.Args[1] { 11495 break 11496 } 11497 o4 := o5.Args[1] 11498 if o4.Op != OpPPC64OR { 11499 break 11500 } 11501 if o4.Type != t { 11502 break 11503 } 11504 _ = o4.Args[1] 11505 s4 := o4.Args[0] 11506 if s4.Op != OpPPC64SLDconst { 11507 break 11508 } 11509 if s4.AuxInt != 40 { 11510 break 11511 } 11512 x5 := s4.Args[0] 11513 if x5.Op != OpPPC64MOVBZload { 11514 break 11515 } 11516 i5 := x5.AuxInt 11517 if x5.Aux != s { 11518 break 11519 } 11520 _ = x5.Args[1] 11521 if p != x5.Args[0] { 11522 break 11523 } 11524 if mem != x5.Args[1] { 11525 break 11526 } 11527 o3 := o4.Args[1] 11528 if o3.Op != OpPPC64OR { 11529 break 11530 } 11531 if o3.Type != t { 11532 break 11533 } 11534 _ = o3.Args[1] 11535 s3 := o3.Args[0] 11536 if s3.Op != OpPPC64SLDconst { 11537 break 11538 } 11539 if s3.AuxInt != 32 { 11540 break 11541 } 11542 x4 := s3.Args[0] 11543 if x4.Op != OpPPC64MOVBZload { 11544 break 11545 } 11546 i4 := x4.AuxInt 11547 if x4.Aux != s { 11548 break 11549 } 11550 _ = x4.Args[1] 11551 if p != x4.Args[0] { 11552 break 11553 } 11554 if mem != x4.Args[1] { 11555 break 11556 } 11557 o2 := o3.Args[1] 11558 if o2.Op != OpPPC64OR { 11559 break 11560 } 11561 if o2.Type != t { 11562 break 11563 } 11564 _ = o2.Args[1] 11565 o1 := o2.Args[0] 11566 if o1.Op != OpPPC64OR { 11567 break 11568 } 11569 if o1.Type != t { 11570 break 11571 } 11572 _ = o1.Args[1] 11573 o0 := o1.Args[0] 11574 if o0.Op != OpPPC64OR { 11575 break 11576 } 11577 if o0.Type != t { 11578 break 11579 } 11580 _ = o0.Args[1] 11581 x0 := o0.Args[0] 11582 if x0.Op != OpPPC64MOVBZload { 11583 break 11584 } 11585 i0 := x0.AuxInt 11586 if x0.Aux != s { 11587 break 11588 } 11589 _ = x0.Args[1] 11590 if p != x0.Args[0] { 11591 break 11592 } 11593 if mem != x0.Args[1] { 11594 break 11595 } 11596 s0 := o0.Args[1] 11597 if s0.Op != OpPPC64SLDconst { 11598 break 11599 } 11600 if s0.AuxInt != 8 { 11601 break 11602 } 11603 x1 := s0.Args[0] 11604 if x1.Op != OpPPC64MOVBZload { 11605 break 11606 } 11607 i1 := x1.AuxInt 11608 if x1.Aux != s { 11609 break 11610 } 11611 _ = x1.Args[1] 11612 if p != x1.Args[0] { 11613 break 11614 } 11615 if mem != x1.Args[1] { 11616 break 11617 } 11618 s1 := o1.Args[1] 11619 if s1.Op != OpPPC64SLDconst { 11620 break 11621 } 11622 if s1.AuxInt != 16 { 11623 break 11624 } 11625 x2 := s1.Args[0] 11626 if x2.Op != OpPPC64MOVBZload { 11627 break 11628 } 11629 i2 := x2.AuxInt 11630 if x2.Aux != s { 11631 break 11632 } 11633 _ = x2.Args[1] 11634 if p != x2.Args[0] { 11635 break 11636 } 11637 if mem != x2.Args[1] { 11638 break 11639 } 11640 s2 := o2.Args[1] 11641 if s2.Op != OpPPC64SLDconst { 11642 break 11643 } 11644 if s2.AuxInt != 24 { 11645 break 11646 } 11647 x3 := s2.Args[0] 11648 if x3.Op != OpPPC64MOVBZload { 11649 break 11650 } 11651 i3 := x3.AuxInt 11652 if x3.Aux != s { 11653 break 11654 } 11655 _ = x3.Args[1] 11656 if p != x3.Args[0] { 11657 break 11658 } 11659 if mem != x3.Args[1] { 11660 break 11661 } 11662 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)) { 11663 break 11664 } 11665 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 11666 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 11667 v.reset(OpCopy) 11668 v.AddArg(v0) 11669 v0.AuxInt = i0 11670 v0.Aux = s 11671 v0.AddArg(p) 11672 v0.AddArg(mem) 11673 return true 11674 } 11675 // 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]))))) 11676 // 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) 11677 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 11678 for { 11679 t := v.Type 11680 _ = v.Args[1] 11681 s6 := v.Args[0] 11682 if s6.Op != OpPPC64SLDconst { 11683 break 11684 } 11685 if s6.AuxInt != 56 { 11686 break 11687 } 11688 x7 := s6.Args[0] 11689 if x7.Op != OpPPC64MOVBZload { 11690 break 11691 } 11692 i7 := x7.AuxInt 11693 s := x7.Aux 11694 _ = x7.Args[1] 11695 p := x7.Args[0] 11696 mem := x7.Args[1] 11697 o5 := v.Args[1] 11698 if o5.Op != OpPPC64OR { 11699 break 11700 } 11701 if o5.Type != t { 11702 break 11703 } 11704 _ = o5.Args[1] 11705 s5 := o5.Args[0] 11706 if s5.Op != OpPPC64SLDconst { 11707 break 11708 } 11709 if s5.AuxInt != 48 { 11710 break 11711 } 11712 x6 := s5.Args[0] 11713 if x6.Op != OpPPC64MOVBZload { 11714 break 11715 } 11716 i6 := x6.AuxInt 11717 if x6.Aux != s { 11718 break 11719 } 11720 _ = x6.Args[1] 11721 if p != x6.Args[0] { 11722 break 11723 } 11724 if mem != x6.Args[1] { 11725 break 11726 } 11727 o4 := o5.Args[1] 11728 if o4.Op != OpPPC64OR { 11729 break 11730 } 11731 if o4.Type != t { 11732 break 11733 } 11734 _ = o4.Args[1] 11735 s4 := o4.Args[0] 11736 if s4.Op != OpPPC64SLDconst { 11737 break 11738 } 11739 if s4.AuxInt != 40 { 11740 break 11741 } 11742 x5 := s4.Args[0] 11743 if x5.Op != OpPPC64MOVBZload { 11744 break 11745 } 11746 i5 := x5.AuxInt 11747 if x5.Aux != s { 11748 break 11749 } 11750 _ = x5.Args[1] 11751 if p != x5.Args[0] { 11752 break 11753 } 11754 if mem != x5.Args[1] { 11755 break 11756 } 11757 o3 := o4.Args[1] 11758 if o3.Op != OpPPC64OR { 11759 break 11760 } 11761 if o3.Type != t { 11762 break 11763 } 11764 _ = o3.Args[1] 11765 o2 := o3.Args[0] 11766 if o2.Op != OpPPC64OR { 11767 break 11768 } 11769 if o2.Type != t { 11770 break 11771 } 11772 _ = o2.Args[1] 11773 s2 := o2.Args[0] 11774 if s2.Op != OpPPC64SLDconst { 11775 break 11776 } 11777 if s2.AuxInt != 24 { 11778 break 11779 } 11780 x3 := s2.Args[0] 11781 if x3.Op != OpPPC64MOVBZload { 11782 break 11783 } 11784 i3 := x3.AuxInt 11785 if x3.Aux != s { 11786 break 11787 } 11788 _ = x3.Args[1] 11789 if p != x3.Args[0] { 11790 break 11791 } 11792 if mem != x3.Args[1] { 11793 break 11794 } 11795 o1 := o2.Args[1] 11796 if o1.Op != OpPPC64OR { 11797 break 11798 } 11799 if o1.Type != t { 11800 break 11801 } 11802 _ = o1.Args[1] 11803 s1 := o1.Args[0] 11804 if s1.Op != OpPPC64SLDconst { 11805 break 11806 } 11807 if s1.AuxInt != 16 { 11808 break 11809 } 11810 x2 := s1.Args[0] 11811 if x2.Op != OpPPC64MOVBZload { 11812 break 11813 } 11814 i2 := x2.AuxInt 11815 if x2.Aux != s { 11816 break 11817 } 11818 _ = x2.Args[1] 11819 if p != x2.Args[0] { 11820 break 11821 } 11822 if mem != x2.Args[1] { 11823 break 11824 } 11825 o0 := o1.Args[1] 11826 if o0.Op != OpPPC64OR { 11827 break 11828 } 11829 if o0.Type != t { 11830 break 11831 } 11832 _ = o0.Args[1] 11833 s0 := o0.Args[0] 11834 if s0.Op != OpPPC64SLDconst { 11835 break 11836 } 11837 if s0.AuxInt != 8 { 11838 break 11839 } 11840 x1 := s0.Args[0] 11841 if x1.Op != OpPPC64MOVBZload { 11842 break 11843 } 11844 i1 := x1.AuxInt 11845 if x1.Aux != s { 11846 break 11847 } 11848 _ = x1.Args[1] 11849 if p != x1.Args[0] { 11850 break 11851 } 11852 if mem != x1.Args[1] { 11853 break 11854 } 11855 x0 := o0.Args[1] 11856 if x0.Op != OpPPC64MOVBZload { 11857 break 11858 } 11859 i0 := x0.AuxInt 11860 if x0.Aux != s { 11861 break 11862 } 11863 _ = x0.Args[1] 11864 if p != x0.Args[0] { 11865 break 11866 } 11867 if mem != x0.Args[1] { 11868 break 11869 } 11870 s3 := o3.Args[1] 11871 if s3.Op != OpPPC64SLDconst { 11872 break 11873 } 11874 if s3.AuxInt != 32 { 11875 break 11876 } 11877 x4 := s3.Args[0] 11878 if x4.Op != OpPPC64MOVBZload { 11879 break 11880 } 11881 i4 := x4.AuxInt 11882 if x4.Aux != s { 11883 break 11884 } 11885 _ = x4.Args[1] 11886 if p != x4.Args[0] { 11887 break 11888 } 11889 if mem != x4.Args[1] { 11890 break 11891 } 11892 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)) { 11893 break 11894 } 11895 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 11896 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 11897 v.reset(OpCopy) 11898 v.AddArg(v0) 11899 v0.AuxInt = i0 11900 v0.Aux = s 11901 v0.AddArg(p) 11902 v0.AddArg(mem) 11903 return true 11904 } 11905 // 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]))))) 11906 // 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) 11907 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 11908 for { 11909 t := v.Type 11910 _ = v.Args[1] 11911 s6 := v.Args[0] 11912 if s6.Op != OpPPC64SLDconst { 11913 break 11914 } 11915 if s6.AuxInt != 56 { 11916 break 11917 } 11918 x7 := s6.Args[0] 11919 if x7.Op != OpPPC64MOVBZload { 11920 break 11921 } 11922 i7 := x7.AuxInt 11923 s := x7.Aux 11924 _ = x7.Args[1] 11925 p := x7.Args[0] 11926 mem := x7.Args[1] 11927 o5 := v.Args[1] 11928 if o5.Op != OpPPC64OR { 11929 break 11930 } 11931 if o5.Type != t { 11932 break 11933 } 11934 _ = o5.Args[1] 11935 s5 := o5.Args[0] 11936 if s5.Op != OpPPC64SLDconst { 11937 break 11938 } 11939 if s5.AuxInt != 48 { 11940 break 11941 } 11942 x6 := s5.Args[0] 11943 if x6.Op != OpPPC64MOVBZload { 11944 break 11945 } 11946 i6 := x6.AuxInt 11947 if x6.Aux != s { 11948 break 11949 } 11950 _ = x6.Args[1] 11951 if p != x6.Args[0] { 11952 break 11953 } 11954 if mem != x6.Args[1] { 11955 break 11956 } 11957 o4 := o5.Args[1] 11958 if o4.Op != OpPPC64OR { 11959 break 11960 } 11961 if o4.Type != t { 11962 break 11963 } 11964 _ = o4.Args[1] 11965 s4 := o4.Args[0] 11966 if s4.Op != OpPPC64SLDconst { 11967 break 11968 } 11969 if s4.AuxInt != 40 { 11970 break 11971 } 11972 x5 := s4.Args[0] 11973 if x5.Op != OpPPC64MOVBZload { 11974 break 11975 } 11976 i5 := x5.AuxInt 11977 if x5.Aux != s { 11978 break 11979 } 11980 _ = x5.Args[1] 11981 if p != x5.Args[0] { 11982 break 11983 } 11984 if mem != x5.Args[1] { 11985 break 11986 } 11987 o3 := o4.Args[1] 11988 if o3.Op != OpPPC64OR { 11989 break 11990 } 11991 if o3.Type != t { 11992 break 11993 } 11994 _ = o3.Args[1] 11995 o2 := o3.Args[0] 11996 if o2.Op != OpPPC64OR { 11997 break 11998 } 11999 if o2.Type != t { 12000 break 12001 } 12002 _ = o2.Args[1] 12003 s2 := o2.Args[0] 12004 if s2.Op != OpPPC64SLDconst { 12005 break 12006 } 12007 if s2.AuxInt != 24 { 12008 break 12009 } 12010 x3 := s2.Args[0] 12011 if x3.Op != OpPPC64MOVBZload { 12012 break 12013 } 12014 i3 := x3.AuxInt 12015 if x3.Aux != s { 12016 break 12017 } 12018 _ = x3.Args[1] 12019 if p != x3.Args[0] { 12020 break 12021 } 12022 if mem != x3.Args[1] { 12023 break 12024 } 12025 o1 := o2.Args[1] 12026 if o1.Op != OpPPC64OR { 12027 break 12028 } 12029 if o1.Type != t { 12030 break 12031 } 12032 _ = o1.Args[1] 12033 s1 := o1.Args[0] 12034 if s1.Op != OpPPC64SLDconst { 12035 break 12036 } 12037 if s1.AuxInt != 16 { 12038 break 12039 } 12040 x2 := s1.Args[0] 12041 if x2.Op != OpPPC64MOVBZload { 12042 break 12043 } 12044 i2 := x2.AuxInt 12045 if x2.Aux != s { 12046 break 12047 } 12048 _ = x2.Args[1] 12049 if p != x2.Args[0] { 12050 break 12051 } 12052 if mem != x2.Args[1] { 12053 break 12054 } 12055 o0 := o1.Args[1] 12056 if o0.Op != OpPPC64OR { 12057 break 12058 } 12059 if o0.Type != t { 12060 break 12061 } 12062 _ = o0.Args[1] 12063 x0 := o0.Args[0] 12064 if x0.Op != OpPPC64MOVBZload { 12065 break 12066 } 12067 i0 := x0.AuxInt 12068 if x0.Aux != s { 12069 break 12070 } 12071 _ = x0.Args[1] 12072 if p != x0.Args[0] { 12073 break 12074 } 12075 if mem != x0.Args[1] { 12076 break 12077 } 12078 s0 := o0.Args[1] 12079 if s0.Op != OpPPC64SLDconst { 12080 break 12081 } 12082 if s0.AuxInt != 8 { 12083 break 12084 } 12085 x1 := s0.Args[0] 12086 if x1.Op != OpPPC64MOVBZload { 12087 break 12088 } 12089 i1 := x1.AuxInt 12090 if x1.Aux != s { 12091 break 12092 } 12093 _ = x1.Args[1] 12094 if p != x1.Args[0] { 12095 break 12096 } 12097 if mem != x1.Args[1] { 12098 break 12099 } 12100 s3 := o3.Args[1] 12101 if s3.Op != OpPPC64SLDconst { 12102 break 12103 } 12104 if s3.AuxInt != 32 { 12105 break 12106 } 12107 x4 := s3.Args[0] 12108 if x4.Op != OpPPC64MOVBZload { 12109 break 12110 } 12111 i4 := x4.AuxInt 12112 if x4.Aux != s { 12113 break 12114 } 12115 _ = x4.Args[1] 12116 if p != x4.Args[0] { 12117 break 12118 } 12119 if mem != x4.Args[1] { 12120 break 12121 } 12122 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)) { 12123 break 12124 } 12125 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 12126 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 12127 v.reset(OpCopy) 12128 v.AddArg(v0) 12129 v0.AuxInt = i0 12130 v0.Aux = s 12131 v0.AddArg(p) 12132 v0.AddArg(mem) 12133 return true 12134 } 12135 // 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]))))) 12136 // 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) 12137 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 12138 for { 12139 t := v.Type 12140 _ = v.Args[1] 12141 s6 := v.Args[0] 12142 if s6.Op != OpPPC64SLDconst { 12143 break 12144 } 12145 if s6.AuxInt != 56 { 12146 break 12147 } 12148 x7 := s6.Args[0] 12149 if x7.Op != OpPPC64MOVBZload { 12150 break 12151 } 12152 i7 := x7.AuxInt 12153 s := x7.Aux 12154 _ = x7.Args[1] 12155 p := x7.Args[0] 12156 mem := x7.Args[1] 12157 o5 := v.Args[1] 12158 if o5.Op != OpPPC64OR { 12159 break 12160 } 12161 if o5.Type != t { 12162 break 12163 } 12164 _ = o5.Args[1] 12165 s5 := o5.Args[0] 12166 if s5.Op != OpPPC64SLDconst { 12167 break 12168 } 12169 if s5.AuxInt != 48 { 12170 break 12171 } 12172 x6 := s5.Args[0] 12173 if x6.Op != OpPPC64MOVBZload { 12174 break 12175 } 12176 i6 := x6.AuxInt 12177 if x6.Aux != s { 12178 break 12179 } 12180 _ = x6.Args[1] 12181 if p != x6.Args[0] { 12182 break 12183 } 12184 if mem != x6.Args[1] { 12185 break 12186 } 12187 o4 := o5.Args[1] 12188 if o4.Op != OpPPC64OR { 12189 break 12190 } 12191 if o4.Type != t { 12192 break 12193 } 12194 _ = o4.Args[1] 12195 s4 := o4.Args[0] 12196 if s4.Op != OpPPC64SLDconst { 12197 break 12198 } 12199 if s4.AuxInt != 40 { 12200 break 12201 } 12202 x5 := s4.Args[0] 12203 if x5.Op != OpPPC64MOVBZload { 12204 break 12205 } 12206 i5 := x5.AuxInt 12207 if x5.Aux != s { 12208 break 12209 } 12210 _ = x5.Args[1] 12211 if p != x5.Args[0] { 12212 break 12213 } 12214 if mem != x5.Args[1] { 12215 break 12216 } 12217 o3 := o4.Args[1] 12218 if o3.Op != OpPPC64OR { 12219 break 12220 } 12221 if o3.Type != t { 12222 break 12223 } 12224 _ = o3.Args[1] 12225 o2 := o3.Args[0] 12226 if o2.Op != OpPPC64OR { 12227 break 12228 } 12229 if o2.Type != t { 12230 break 12231 } 12232 _ = o2.Args[1] 12233 s2 := o2.Args[0] 12234 if s2.Op != OpPPC64SLDconst { 12235 break 12236 } 12237 if s2.AuxInt != 24 { 12238 break 12239 } 12240 x3 := s2.Args[0] 12241 if x3.Op != OpPPC64MOVBZload { 12242 break 12243 } 12244 i3 := x3.AuxInt 12245 if x3.Aux != s { 12246 break 12247 } 12248 _ = x3.Args[1] 12249 if p != x3.Args[0] { 12250 break 12251 } 12252 if mem != x3.Args[1] { 12253 break 12254 } 12255 o1 := o2.Args[1] 12256 if o1.Op != OpPPC64OR { 12257 break 12258 } 12259 if o1.Type != t { 12260 break 12261 } 12262 _ = o1.Args[1] 12263 o0 := o1.Args[0] 12264 if o0.Op != OpPPC64OR { 12265 break 12266 } 12267 if o0.Type != t { 12268 break 12269 } 12270 _ = o0.Args[1] 12271 s0 := o0.Args[0] 12272 if s0.Op != OpPPC64SLDconst { 12273 break 12274 } 12275 if s0.AuxInt != 8 { 12276 break 12277 } 12278 x1 := s0.Args[0] 12279 if x1.Op != OpPPC64MOVBZload { 12280 break 12281 } 12282 i1 := x1.AuxInt 12283 if x1.Aux != s { 12284 break 12285 } 12286 _ = x1.Args[1] 12287 if p != x1.Args[0] { 12288 break 12289 } 12290 if mem != x1.Args[1] { 12291 break 12292 } 12293 x0 := o0.Args[1] 12294 if x0.Op != OpPPC64MOVBZload { 12295 break 12296 } 12297 i0 := x0.AuxInt 12298 if x0.Aux != s { 12299 break 12300 } 12301 _ = x0.Args[1] 12302 if p != x0.Args[0] { 12303 break 12304 } 12305 if mem != x0.Args[1] { 12306 break 12307 } 12308 s1 := o1.Args[1] 12309 if s1.Op != OpPPC64SLDconst { 12310 break 12311 } 12312 if s1.AuxInt != 16 { 12313 break 12314 } 12315 x2 := s1.Args[0] 12316 if x2.Op != OpPPC64MOVBZload { 12317 break 12318 } 12319 i2 := x2.AuxInt 12320 if x2.Aux != s { 12321 break 12322 } 12323 _ = x2.Args[1] 12324 if p != x2.Args[0] { 12325 break 12326 } 12327 if mem != x2.Args[1] { 12328 break 12329 } 12330 s3 := o3.Args[1] 12331 if s3.Op != OpPPC64SLDconst { 12332 break 12333 } 12334 if s3.AuxInt != 32 { 12335 break 12336 } 12337 x4 := s3.Args[0] 12338 if x4.Op != OpPPC64MOVBZload { 12339 break 12340 } 12341 i4 := x4.AuxInt 12342 if x4.Aux != s { 12343 break 12344 } 12345 _ = x4.Args[1] 12346 if p != x4.Args[0] { 12347 break 12348 } 12349 if mem != x4.Args[1] { 12350 break 12351 } 12352 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)) { 12353 break 12354 } 12355 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 12356 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 12357 v.reset(OpCopy) 12358 v.AddArg(v0) 12359 v0.AuxInt = i0 12360 v0.Aux = s 12361 v0.AddArg(p) 12362 v0.AddArg(mem) 12363 return true 12364 } 12365 // 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]))))) 12366 // 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) 12367 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 12368 for { 12369 t := v.Type 12370 _ = v.Args[1] 12371 s6 := v.Args[0] 12372 if s6.Op != OpPPC64SLDconst { 12373 break 12374 } 12375 if s6.AuxInt != 56 { 12376 break 12377 } 12378 x7 := s6.Args[0] 12379 if x7.Op != OpPPC64MOVBZload { 12380 break 12381 } 12382 i7 := x7.AuxInt 12383 s := x7.Aux 12384 _ = x7.Args[1] 12385 p := x7.Args[0] 12386 mem := x7.Args[1] 12387 o5 := v.Args[1] 12388 if o5.Op != OpPPC64OR { 12389 break 12390 } 12391 if o5.Type != t { 12392 break 12393 } 12394 _ = o5.Args[1] 12395 s5 := o5.Args[0] 12396 if s5.Op != OpPPC64SLDconst { 12397 break 12398 } 12399 if s5.AuxInt != 48 { 12400 break 12401 } 12402 x6 := s5.Args[0] 12403 if x6.Op != OpPPC64MOVBZload { 12404 break 12405 } 12406 i6 := x6.AuxInt 12407 if x6.Aux != s { 12408 break 12409 } 12410 _ = x6.Args[1] 12411 if p != x6.Args[0] { 12412 break 12413 } 12414 if mem != x6.Args[1] { 12415 break 12416 } 12417 o4 := o5.Args[1] 12418 if o4.Op != OpPPC64OR { 12419 break 12420 } 12421 if o4.Type != t { 12422 break 12423 } 12424 _ = o4.Args[1] 12425 s4 := o4.Args[0] 12426 if s4.Op != OpPPC64SLDconst { 12427 break 12428 } 12429 if s4.AuxInt != 40 { 12430 break 12431 } 12432 x5 := s4.Args[0] 12433 if x5.Op != OpPPC64MOVBZload { 12434 break 12435 } 12436 i5 := x5.AuxInt 12437 if x5.Aux != s { 12438 break 12439 } 12440 _ = x5.Args[1] 12441 if p != x5.Args[0] { 12442 break 12443 } 12444 if mem != x5.Args[1] { 12445 break 12446 } 12447 o3 := o4.Args[1] 12448 if o3.Op != OpPPC64OR { 12449 break 12450 } 12451 if o3.Type != t { 12452 break 12453 } 12454 _ = o3.Args[1] 12455 o2 := o3.Args[0] 12456 if o2.Op != OpPPC64OR { 12457 break 12458 } 12459 if o2.Type != t { 12460 break 12461 } 12462 _ = o2.Args[1] 12463 s2 := o2.Args[0] 12464 if s2.Op != OpPPC64SLDconst { 12465 break 12466 } 12467 if s2.AuxInt != 24 { 12468 break 12469 } 12470 x3 := s2.Args[0] 12471 if x3.Op != OpPPC64MOVBZload { 12472 break 12473 } 12474 i3 := x3.AuxInt 12475 if x3.Aux != s { 12476 break 12477 } 12478 _ = x3.Args[1] 12479 if p != x3.Args[0] { 12480 break 12481 } 12482 if mem != x3.Args[1] { 12483 break 12484 } 12485 o1 := o2.Args[1] 12486 if o1.Op != OpPPC64OR { 12487 break 12488 } 12489 if o1.Type != t { 12490 break 12491 } 12492 _ = o1.Args[1] 12493 o0 := o1.Args[0] 12494 if o0.Op != OpPPC64OR { 12495 break 12496 } 12497 if o0.Type != t { 12498 break 12499 } 12500 _ = o0.Args[1] 12501 x0 := o0.Args[0] 12502 if x0.Op != OpPPC64MOVBZload { 12503 break 12504 } 12505 i0 := x0.AuxInt 12506 if x0.Aux != s { 12507 break 12508 } 12509 _ = x0.Args[1] 12510 if p != x0.Args[0] { 12511 break 12512 } 12513 if mem != x0.Args[1] { 12514 break 12515 } 12516 s0 := o0.Args[1] 12517 if s0.Op != OpPPC64SLDconst { 12518 break 12519 } 12520 if s0.AuxInt != 8 { 12521 break 12522 } 12523 x1 := s0.Args[0] 12524 if x1.Op != OpPPC64MOVBZload { 12525 break 12526 } 12527 i1 := x1.AuxInt 12528 if x1.Aux != s { 12529 break 12530 } 12531 _ = x1.Args[1] 12532 if p != x1.Args[0] { 12533 break 12534 } 12535 if mem != x1.Args[1] { 12536 break 12537 } 12538 s1 := o1.Args[1] 12539 if s1.Op != OpPPC64SLDconst { 12540 break 12541 } 12542 if s1.AuxInt != 16 { 12543 break 12544 } 12545 x2 := s1.Args[0] 12546 if x2.Op != OpPPC64MOVBZload { 12547 break 12548 } 12549 i2 := x2.AuxInt 12550 if x2.Aux != s { 12551 break 12552 } 12553 _ = x2.Args[1] 12554 if p != x2.Args[0] { 12555 break 12556 } 12557 if mem != x2.Args[1] { 12558 break 12559 } 12560 s3 := o3.Args[1] 12561 if s3.Op != OpPPC64SLDconst { 12562 break 12563 } 12564 if s3.AuxInt != 32 { 12565 break 12566 } 12567 x4 := s3.Args[0] 12568 if x4.Op != OpPPC64MOVBZload { 12569 break 12570 } 12571 i4 := x4.AuxInt 12572 if x4.Aux != s { 12573 break 12574 } 12575 _ = x4.Args[1] 12576 if p != x4.Args[0] { 12577 break 12578 } 12579 if mem != x4.Args[1] { 12580 break 12581 } 12582 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)) { 12583 break 12584 } 12585 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 12586 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 12587 v.reset(OpCopy) 12588 v.AddArg(v0) 12589 v0.AuxInt = i0 12590 v0.Aux = s 12591 v0.AddArg(p) 12592 v0.AddArg(mem) 12593 return true 12594 } 12595 return false 12596 } 12597 func rewriteValuePPC64_OpPPC64OR_30(v *Value) bool { 12598 b := v.Block 12599 _ = b 12600 config := b.Func.Config 12601 _ = config 12602 // 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]))))) 12603 // 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) 12604 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 12605 for { 12606 t := v.Type 12607 _ = v.Args[1] 12608 s6 := v.Args[0] 12609 if s6.Op != OpPPC64SLDconst { 12610 break 12611 } 12612 if s6.AuxInt != 56 { 12613 break 12614 } 12615 x7 := s6.Args[0] 12616 if x7.Op != OpPPC64MOVBZload { 12617 break 12618 } 12619 i7 := x7.AuxInt 12620 s := x7.Aux 12621 _ = x7.Args[1] 12622 p := x7.Args[0] 12623 mem := x7.Args[1] 12624 o5 := v.Args[1] 12625 if o5.Op != OpPPC64OR { 12626 break 12627 } 12628 if o5.Type != t { 12629 break 12630 } 12631 _ = o5.Args[1] 12632 s5 := o5.Args[0] 12633 if s5.Op != OpPPC64SLDconst { 12634 break 12635 } 12636 if s5.AuxInt != 48 { 12637 break 12638 } 12639 x6 := s5.Args[0] 12640 if x6.Op != OpPPC64MOVBZload { 12641 break 12642 } 12643 i6 := x6.AuxInt 12644 if x6.Aux != s { 12645 break 12646 } 12647 _ = x6.Args[1] 12648 if p != x6.Args[0] { 12649 break 12650 } 12651 if mem != x6.Args[1] { 12652 break 12653 } 12654 o4 := o5.Args[1] 12655 if o4.Op != OpPPC64OR { 12656 break 12657 } 12658 if o4.Type != t { 12659 break 12660 } 12661 _ = o4.Args[1] 12662 s4 := o4.Args[0] 12663 if s4.Op != OpPPC64SLDconst { 12664 break 12665 } 12666 if s4.AuxInt != 40 { 12667 break 12668 } 12669 x5 := s4.Args[0] 12670 if x5.Op != OpPPC64MOVBZload { 12671 break 12672 } 12673 i5 := x5.AuxInt 12674 if x5.Aux != s { 12675 break 12676 } 12677 _ = x5.Args[1] 12678 if p != x5.Args[0] { 12679 break 12680 } 12681 if mem != x5.Args[1] { 12682 break 12683 } 12684 o3 := o4.Args[1] 12685 if o3.Op != OpPPC64OR { 12686 break 12687 } 12688 if o3.Type != t { 12689 break 12690 } 12691 _ = o3.Args[1] 12692 o2 := o3.Args[0] 12693 if o2.Op != OpPPC64OR { 12694 break 12695 } 12696 if o2.Type != t { 12697 break 12698 } 12699 _ = o2.Args[1] 12700 o1 := o2.Args[0] 12701 if o1.Op != OpPPC64OR { 12702 break 12703 } 12704 if o1.Type != t { 12705 break 12706 } 12707 _ = o1.Args[1] 12708 s1 := o1.Args[0] 12709 if s1.Op != OpPPC64SLDconst { 12710 break 12711 } 12712 if s1.AuxInt != 16 { 12713 break 12714 } 12715 x2 := s1.Args[0] 12716 if x2.Op != OpPPC64MOVBZload { 12717 break 12718 } 12719 i2 := x2.AuxInt 12720 if x2.Aux != s { 12721 break 12722 } 12723 _ = x2.Args[1] 12724 if p != x2.Args[0] { 12725 break 12726 } 12727 if mem != x2.Args[1] { 12728 break 12729 } 12730 o0 := o1.Args[1] 12731 if o0.Op != OpPPC64OR { 12732 break 12733 } 12734 if o0.Type != t { 12735 break 12736 } 12737 _ = o0.Args[1] 12738 s0 := o0.Args[0] 12739 if s0.Op != OpPPC64SLDconst { 12740 break 12741 } 12742 if s0.AuxInt != 8 { 12743 break 12744 } 12745 x1 := s0.Args[0] 12746 if x1.Op != OpPPC64MOVBZload { 12747 break 12748 } 12749 i1 := x1.AuxInt 12750 if x1.Aux != s { 12751 break 12752 } 12753 _ = x1.Args[1] 12754 if p != x1.Args[0] { 12755 break 12756 } 12757 if mem != x1.Args[1] { 12758 break 12759 } 12760 x0 := o0.Args[1] 12761 if x0.Op != OpPPC64MOVBZload { 12762 break 12763 } 12764 i0 := x0.AuxInt 12765 if x0.Aux != s { 12766 break 12767 } 12768 _ = x0.Args[1] 12769 if p != x0.Args[0] { 12770 break 12771 } 12772 if mem != x0.Args[1] { 12773 break 12774 } 12775 s2 := o2.Args[1] 12776 if s2.Op != OpPPC64SLDconst { 12777 break 12778 } 12779 if s2.AuxInt != 24 { 12780 break 12781 } 12782 x3 := s2.Args[0] 12783 if x3.Op != OpPPC64MOVBZload { 12784 break 12785 } 12786 i3 := x3.AuxInt 12787 if x3.Aux != s { 12788 break 12789 } 12790 _ = x3.Args[1] 12791 if p != x3.Args[0] { 12792 break 12793 } 12794 if mem != x3.Args[1] { 12795 break 12796 } 12797 s3 := o3.Args[1] 12798 if s3.Op != OpPPC64SLDconst { 12799 break 12800 } 12801 if s3.AuxInt != 32 { 12802 break 12803 } 12804 x4 := s3.Args[0] 12805 if x4.Op != OpPPC64MOVBZload { 12806 break 12807 } 12808 i4 := x4.AuxInt 12809 if x4.Aux != s { 12810 break 12811 } 12812 _ = x4.Args[1] 12813 if p != x4.Args[0] { 12814 break 12815 } 12816 if mem != x4.Args[1] { 12817 break 12818 } 12819 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)) { 12820 break 12821 } 12822 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 12823 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 12824 v.reset(OpCopy) 12825 v.AddArg(v0) 12826 v0.AuxInt = i0 12827 v0.Aux = s 12828 v0.AddArg(p) 12829 v0.AddArg(mem) 12830 return true 12831 } 12832 // 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]))))) 12833 // 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) 12834 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 12835 for { 12836 t := v.Type 12837 _ = v.Args[1] 12838 s6 := v.Args[0] 12839 if s6.Op != OpPPC64SLDconst { 12840 break 12841 } 12842 if s6.AuxInt != 56 { 12843 break 12844 } 12845 x7 := s6.Args[0] 12846 if x7.Op != OpPPC64MOVBZload { 12847 break 12848 } 12849 i7 := x7.AuxInt 12850 s := x7.Aux 12851 _ = x7.Args[1] 12852 p := x7.Args[0] 12853 mem := x7.Args[1] 12854 o5 := v.Args[1] 12855 if o5.Op != OpPPC64OR { 12856 break 12857 } 12858 if o5.Type != t { 12859 break 12860 } 12861 _ = o5.Args[1] 12862 s5 := o5.Args[0] 12863 if s5.Op != OpPPC64SLDconst { 12864 break 12865 } 12866 if s5.AuxInt != 48 { 12867 break 12868 } 12869 x6 := s5.Args[0] 12870 if x6.Op != OpPPC64MOVBZload { 12871 break 12872 } 12873 i6 := x6.AuxInt 12874 if x6.Aux != s { 12875 break 12876 } 12877 _ = x6.Args[1] 12878 if p != x6.Args[0] { 12879 break 12880 } 12881 if mem != x6.Args[1] { 12882 break 12883 } 12884 o4 := o5.Args[1] 12885 if o4.Op != OpPPC64OR { 12886 break 12887 } 12888 if o4.Type != t { 12889 break 12890 } 12891 _ = o4.Args[1] 12892 s4 := o4.Args[0] 12893 if s4.Op != OpPPC64SLDconst { 12894 break 12895 } 12896 if s4.AuxInt != 40 { 12897 break 12898 } 12899 x5 := s4.Args[0] 12900 if x5.Op != OpPPC64MOVBZload { 12901 break 12902 } 12903 i5 := x5.AuxInt 12904 if x5.Aux != s { 12905 break 12906 } 12907 _ = x5.Args[1] 12908 if p != x5.Args[0] { 12909 break 12910 } 12911 if mem != x5.Args[1] { 12912 break 12913 } 12914 o3 := o4.Args[1] 12915 if o3.Op != OpPPC64OR { 12916 break 12917 } 12918 if o3.Type != t { 12919 break 12920 } 12921 _ = o3.Args[1] 12922 o2 := o3.Args[0] 12923 if o2.Op != OpPPC64OR { 12924 break 12925 } 12926 if o2.Type != t { 12927 break 12928 } 12929 _ = o2.Args[1] 12930 o1 := o2.Args[0] 12931 if o1.Op != OpPPC64OR { 12932 break 12933 } 12934 if o1.Type != t { 12935 break 12936 } 12937 _ = o1.Args[1] 12938 s1 := o1.Args[0] 12939 if s1.Op != OpPPC64SLDconst { 12940 break 12941 } 12942 if s1.AuxInt != 16 { 12943 break 12944 } 12945 x2 := s1.Args[0] 12946 if x2.Op != OpPPC64MOVBZload { 12947 break 12948 } 12949 i2 := x2.AuxInt 12950 if x2.Aux != s { 12951 break 12952 } 12953 _ = x2.Args[1] 12954 if p != x2.Args[0] { 12955 break 12956 } 12957 if mem != x2.Args[1] { 12958 break 12959 } 12960 o0 := o1.Args[1] 12961 if o0.Op != OpPPC64OR { 12962 break 12963 } 12964 if o0.Type != t { 12965 break 12966 } 12967 _ = o0.Args[1] 12968 x0 := o0.Args[0] 12969 if x0.Op != OpPPC64MOVBZload { 12970 break 12971 } 12972 i0 := x0.AuxInt 12973 if x0.Aux != s { 12974 break 12975 } 12976 _ = x0.Args[1] 12977 if p != x0.Args[0] { 12978 break 12979 } 12980 if mem != x0.Args[1] { 12981 break 12982 } 12983 s0 := o0.Args[1] 12984 if s0.Op != OpPPC64SLDconst { 12985 break 12986 } 12987 if s0.AuxInt != 8 { 12988 break 12989 } 12990 x1 := s0.Args[0] 12991 if x1.Op != OpPPC64MOVBZload { 12992 break 12993 } 12994 i1 := x1.AuxInt 12995 if x1.Aux != s { 12996 break 12997 } 12998 _ = x1.Args[1] 12999 if p != x1.Args[0] { 13000 break 13001 } 13002 if mem != x1.Args[1] { 13003 break 13004 } 13005 s2 := o2.Args[1] 13006 if s2.Op != OpPPC64SLDconst { 13007 break 13008 } 13009 if s2.AuxInt != 24 { 13010 break 13011 } 13012 x3 := s2.Args[0] 13013 if x3.Op != OpPPC64MOVBZload { 13014 break 13015 } 13016 i3 := x3.AuxInt 13017 if x3.Aux != s { 13018 break 13019 } 13020 _ = x3.Args[1] 13021 if p != x3.Args[0] { 13022 break 13023 } 13024 if mem != x3.Args[1] { 13025 break 13026 } 13027 s3 := o3.Args[1] 13028 if s3.Op != OpPPC64SLDconst { 13029 break 13030 } 13031 if s3.AuxInt != 32 { 13032 break 13033 } 13034 x4 := s3.Args[0] 13035 if x4.Op != OpPPC64MOVBZload { 13036 break 13037 } 13038 i4 := x4.AuxInt 13039 if x4.Aux != s { 13040 break 13041 } 13042 _ = x4.Args[1] 13043 if p != x4.Args[0] { 13044 break 13045 } 13046 if mem != x4.Args[1] { 13047 break 13048 } 13049 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)) { 13050 break 13051 } 13052 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 13053 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 13054 v.reset(OpCopy) 13055 v.AddArg(v0) 13056 v0.AuxInt = i0 13057 v0.Aux = s 13058 v0.AddArg(p) 13059 v0.AddArg(mem) 13060 return true 13061 } 13062 // 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]))))) 13063 // 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) 13064 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 13065 for { 13066 t := v.Type 13067 _ = v.Args[1] 13068 s6 := v.Args[0] 13069 if s6.Op != OpPPC64SLDconst { 13070 break 13071 } 13072 if s6.AuxInt != 56 { 13073 break 13074 } 13075 x7 := s6.Args[0] 13076 if x7.Op != OpPPC64MOVBZload { 13077 break 13078 } 13079 i7 := x7.AuxInt 13080 s := x7.Aux 13081 _ = x7.Args[1] 13082 p := x7.Args[0] 13083 mem := x7.Args[1] 13084 o5 := v.Args[1] 13085 if o5.Op != OpPPC64OR { 13086 break 13087 } 13088 if o5.Type != t { 13089 break 13090 } 13091 _ = o5.Args[1] 13092 s5 := o5.Args[0] 13093 if s5.Op != OpPPC64SLDconst { 13094 break 13095 } 13096 if s5.AuxInt != 48 { 13097 break 13098 } 13099 x6 := s5.Args[0] 13100 if x6.Op != OpPPC64MOVBZload { 13101 break 13102 } 13103 i6 := x6.AuxInt 13104 if x6.Aux != s { 13105 break 13106 } 13107 _ = x6.Args[1] 13108 if p != x6.Args[0] { 13109 break 13110 } 13111 if mem != x6.Args[1] { 13112 break 13113 } 13114 o4 := o5.Args[1] 13115 if o4.Op != OpPPC64OR { 13116 break 13117 } 13118 if o4.Type != t { 13119 break 13120 } 13121 _ = o4.Args[1] 13122 s4 := o4.Args[0] 13123 if s4.Op != OpPPC64SLDconst { 13124 break 13125 } 13126 if s4.AuxInt != 40 { 13127 break 13128 } 13129 x5 := s4.Args[0] 13130 if x5.Op != OpPPC64MOVBZload { 13131 break 13132 } 13133 i5 := x5.AuxInt 13134 if x5.Aux != s { 13135 break 13136 } 13137 _ = x5.Args[1] 13138 if p != x5.Args[0] { 13139 break 13140 } 13141 if mem != x5.Args[1] { 13142 break 13143 } 13144 o3 := o4.Args[1] 13145 if o3.Op != OpPPC64OR { 13146 break 13147 } 13148 if o3.Type != t { 13149 break 13150 } 13151 _ = o3.Args[1] 13152 o2 := o3.Args[0] 13153 if o2.Op != OpPPC64OR { 13154 break 13155 } 13156 if o2.Type != t { 13157 break 13158 } 13159 _ = o2.Args[1] 13160 o1 := o2.Args[0] 13161 if o1.Op != OpPPC64OR { 13162 break 13163 } 13164 if o1.Type != t { 13165 break 13166 } 13167 _ = o1.Args[1] 13168 o0 := o1.Args[0] 13169 if o0.Op != OpPPC64OR { 13170 break 13171 } 13172 if o0.Type != t { 13173 break 13174 } 13175 _ = o0.Args[1] 13176 s0 := o0.Args[0] 13177 if s0.Op != OpPPC64SLDconst { 13178 break 13179 } 13180 if s0.AuxInt != 8 { 13181 break 13182 } 13183 x1 := s0.Args[0] 13184 if x1.Op != OpPPC64MOVBZload { 13185 break 13186 } 13187 i1 := x1.AuxInt 13188 if x1.Aux != s { 13189 break 13190 } 13191 _ = x1.Args[1] 13192 if p != x1.Args[0] { 13193 break 13194 } 13195 if mem != x1.Args[1] { 13196 break 13197 } 13198 x0 := o0.Args[1] 13199 if x0.Op != OpPPC64MOVBZload { 13200 break 13201 } 13202 i0 := x0.AuxInt 13203 if x0.Aux != s { 13204 break 13205 } 13206 _ = x0.Args[1] 13207 if p != x0.Args[0] { 13208 break 13209 } 13210 if mem != x0.Args[1] { 13211 break 13212 } 13213 s1 := o1.Args[1] 13214 if s1.Op != OpPPC64SLDconst { 13215 break 13216 } 13217 if s1.AuxInt != 16 { 13218 break 13219 } 13220 x2 := s1.Args[0] 13221 if x2.Op != OpPPC64MOVBZload { 13222 break 13223 } 13224 i2 := x2.AuxInt 13225 if x2.Aux != s { 13226 break 13227 } 13228 _ = x2.Args[1] 13229 if p != x2.Args[0] { 13230 break 13231 } 13232 if mem != x2.Args[1] { 13233 break 13234 } 13235 s2 := o2.Args[1] 13236 if s2.Op != OpPPC64SLDconst { 13237 break 13238 } 13239 if s2.AuxInt != 24 { 13240 break 13241 } 13242 x3 := s2.Args[0] 13243 if x3.Op != OpPPC64MOVBZload { 13244 break 13245 } 13246 i3 := x3.AuxInt 13247 if x3.Aux != s { 13248 break 13249 } 13250 _ = x3.Args[1] 13251 if p != x3.Args[0] { 13252 break 13253 } 13254 if mem != x3.Args[1] { 13255 break 13256 } 13257 s3 := o3.Args[1] 13258 if s3.Op != OpPPC64SLDconst { 13259 break 13260 } 13261 if s3.AuxInt != 32 { 13262 break 13263 } 13264 x4 := s3.Args[0] 13265 if x4.Op != OpPPC64MOVBZload { 13266 break 13267 } 13268 i4 := x4.AuxInt 13269 if x4.Aux != s { 13270 break 13271 } 13272 _ = x4.Args[1] 13273 if p != x4.Args[0] { 13274 break 13275 } 13276 if mem != x4.Args[1] { 13277 break 13278 } 13279 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)) { 13280 break 13281 } 13282 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 13283 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 13284 v.reset(OpCopy) 13285 v.AddArg(v0) 13286 v0.AuxInt = i0 13287 v0.Aux = s 13288 v0.AddArg(p) 13289 v0.AddArg(mem) 13290 return true 13291 } 13292 // 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]))))) 13293 // 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) 13294 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 13295 for { 13296 t := v.Type 13297 _ = v.Args[1] 13298 s6 := v.Args[0] 13299 if s6.Op != OpPPC64SLDconst { 13300 break 13301 } 13302 if s6.AuxInt != 56 { 13303 break 13304 } 13305 x7 := s6.Args[0] 13306 if x7.Op != OpPPC64MOVBZload { 13307 break 13308 } 13309 i7 := x7.AuxInt 13310 s := x7.Aux 13311 _ = x7.Args[1] 13312 p := x7.Args[0] 13313 mem := x7.Args[1] 13314 o5 := v.Args[1] 13315 if o5.Op != OpPPC64OR { 13316 break 13317 } 13318 if o5.Type != t { 13319 break 13320 } 13321 _ = o5.Args[1] 13322 s5 := o5.Args[0] 13323 if s5.Op != OpPPC64SLDconst { 13324 break 13325 } 13326 if s5.AuxInt != 48 { 13327 break 13328 } 13329 x6 := s5.Args[0] 13330 if x6.Op != OpPPC64MOVBZload { 13331 break 13332 } 13333 i6 := x6.AuxInt 13334 if x6.Aux != s { 13335 break 13336 } 13337 _ = x6.Args[1] 13338 if p != x6.Args[0] { 13339 break 13340 } 13341 if mem != x6.Args[1] { 13342 break 13343 } 13344 o4 := o5.Args[1] 13345 if o4.Op != OpPPC64OR { 13346 break 13347 } 13348 if o4.Type != t { 13349 break 13350 } 13351 _ = o4.Args[1] 13352 s4 := o4.Args[0] 13353 if s4.Op != OpPPC64SLDconst { 13354 break 13355 } 13356 if s4.AuxInt != 40 { 13357 break 13358 } 13359 x5 := s4.Args[0] 13360 if x5.Op != OpPPC64MOVBZload { 13361 break 13362 } 13363 i5 := x5.AuxInt 13364 if x5.Aux != s { 13365 break 13366 } 13367 _ = x5.Args[1] 13368 if p != x5.Args[0] { 13369 break 13370 } 13371 if mem != x5.Args[1] { 13372 break 13373 } 13374 o3 := o4.Args[1] 13375 if o3.Op != OpPPC64OR { 13376 break 13377 } 13378 if o3.Type != t { 13379 break 13380 } 13381 _ = o3.Args[1] 13382 o2 := o3.Args[0] 13383 if o2.Op != OpPPC64OR { 13384 break 13385 } 13386 if o2.Type != t { 13387 break 13388 } 13389 _ = o2.Args[1] 13390 o1 := o2.Args[0] 13391 if o1.Op != OpPPC64OR { 13392 break 13393 } 13394 if o1.Type != t { 13395 break 13396 } 13397 _ = o1.Args[1] 13398 o0 := o1.Args[0] 13399 if o0.Op != OpPPC64OR { 13400 break 13401 } 13402 if o0.Type != t { 13403 break 13404 } 13405 _ = o0.Args[1] 13406 x0 := o0.Args[0] 13407 if x0.Op != OpPPC64MOVBZload { 13408 break 13409 } 13410 i0 := x0.AuxInt 13411 if x0.Aux != s { 13412 break 13413 } 13414 _ = x0.Args[1] 13415 if p != x0.Args[0] { 13416 break 13417 } 13418 if mem != x0.Args[1] { 13419 break 13420 } 13421 s0 := o0.Args[1] 13422 if s0.Op != OpPPC64SLDconst { 13423 break 13424 } 13425 if s0.AuxInt != 8 { 13426 break 13427 } 13428 x1 := s0.Args[0] 13429 if x1.Op != OpPPC64MOVBZload { 13430 break 13431 } 13432 i1 := x1.AuxInt 13433 if x1.Aux != s { 13434 break 13435 } 13436 _ = x1.Args[1] 13437 if p != x1.Args[0] { 13438 break 13439 } 13440 if mem != x1.Args[1] { 13441 break 13442 } 13443 s1 := o1.Args[1] 13444 if s1.Op != OpPPC64SLDconst { 13445 break 13446 } 13447 if s1.AuxInt != 16 { 13448 break 13449 } 13450 x2 := s1.Args[0] 13451 if x2.Op != OpPPC64MOVBZload { 13452 break 13453 } 13454 i2 := x2.AuxInt 13455 if x2.Aux != s { 13456 break 13457 } 13458 _ = x2.Args[1] 13459 if p != x2.Args[0] { 13460 break 13461 } 13462 if mem != x2.Args[1] { 13463 break 13464 } 13465 s2 := o2.Args[1] 13466 if s2.Op != OpPPC64SLDconst { 13467 break 13468 } 13469 if s2.AuxInt != 24 { 13470 break 13471 } 13472 x3 := s2.Args[0] 13473 if x3.Op != OpPPC64MOVBZload { 13474 break 13475 } 13476 i3 := x3.AuxInt 13477 if x3.Aux != s { 13478 break 13479 } 13480 _ = x3.Args[1] 13481 if p != x3.Args[0] { 13482 break 13483 } 13484 if mem != x3.Args[1] { 13485 break 13486 } 13487 s3 := o3.Args[1] 13488 if s3.Op != OpPPC64SLDconst { 13489 break 13490 } 13491 if s3.AuxInt != 32 { 13492 break 13493 } 13494 x4 := s3.Args[0] 13495 if x4.Op != OpPPC64MOVBZload { 13496 break 13497 } 13498 i4 := x4.AuxInt 13499 if x4.Aux != s { 13500 break 13501 } 13502 _ = x4.Args[1] 13503 if p != x4.Args[0] { 13504 break 13505 } 13506 if mem != x4.Args[1] { 13507 break 13508 } 13509 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)) { 13510 break 13511 } 13512 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 13513 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 13514 v.reset(OpCopy) 13515 v.AddArg(v0) 13516 v0.AuxInt = i0 13517 v0.Aux = s 13518 v0.AddArg(p) 13519 v0.AddArg(mem) 13520 return true 13521 } 13522 // 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])))) 13523 // 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) 13524 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 13525 for { 13526 t := v.Type 13527 _ = v.Args[1] 13528 s6 := v.Args[0] 13529 if s6.Op != OpPPC64SLDconst { 13530 break 13531 } 13532 if s6.AuxInt != 56 { 13533 break 13534 } 13535 x7 := s6.Args[0] 13536 if x7.Op != OpPPC64MOVBZload { 13537 break 13538 } 13539 i7 := x7.AuxInt 13540 s := x7.Aux 13541 _ = x7.Args[1] 13542 p := x7.Args[0] 13543 mem := x7.Args[1] 13544 o5 := v.Args[1] 13545 if o5.Op != OpPPC64OR { 13546 break 13547 } 13548 if o5.Type != t { 13549 break 13550 } 13551 _ = o5.Args[1] 13552 s5 := o5.Args[0] 13553 if s5.Op != OpPPC64SLDconst { 13554 break 13555 } 13556 if s5.AuxInt != 48 { 13557 break 13558 } 13559 x6 := s5.Args[0] 13560 if x6.Op != OpPPC64MOVBZload { 13561 break 13562 } 13563 i6 := x6.AuxInt 13564 if x6.Aux != s { 13565 break 13566 } 13567 _ = x6.Args[1] 13568 if p != x6.Args[0] { 13569 break 13570 } 13571 if mem != x6.Args[1] { 13572 break 13573 } 13574 o4 := o5.Args[1] 13575 if o4.Op != OpPPC64OR { 13576 break 13577 } 13578 if o4.Type != t { 13579 break 13580 } 13581 _ = o4.Args[1] 13582 o3 := o4.Args[0] 13583 if o3.Op != OpPPC64OR { 13584 break 13585 } 13586 if o3.Type != t { 13587 break 13588 } 13589 _ = o3.Args[1] 13590 s3 := o3.Args[0] 13591 if s3.Op != OpPPC64SLDconst { 13592 break 13593 } 13594 if s3.AuxInt != 32 { 13595 break 13596 } 13597 x4 := s3.Args[0] 13598 if x4.Op != OpPPC64MOVBZload { 13599 break 13600 } 13601 i4 := x4.AuxInt 13602 if x4.Aux != s { 13603 break 13604 } 13605 _ = x4.Args[1] 13606 if p != x4.Args[0] { 13607 break 13608 } 13609 if mem != x4.Args[1] { 13610 break 13611 } 13612 o2 := o3.Args[1] 13613 if o2.Op != OpPPC64OR { 13614 break 13615 } 13616 if o2.Type != t { 13617 break 13618 } 13619 _ = o2.Args[1] 13620 s2 := o2.Args[0] 13621 if s2.Op != OpPPC64SLDconst { 13622 break 13623 } 13624 if s2.AuxInt != 24 { 13625 break 13626 } 13627 x3 := s2.Args[0] 13628 if x3.Op != OpPPC64MOVBZload { 13629 break 13630 } 13631 i3 := x3.AuxInt 13632 if x3.Aux != s { 13633 break 13634 } 13635 _ = x3.Args[1] 13636 if p != x3.Args[0] { 13637 break 13638 } 13639 if mem != x3.Args[1] { 13640 break 13641 } 13642 o1 := o2.Args[1] 13643 if o1.Op != OpPPC64OR { 13644 break 13645 } 13646 if o1.Type != t { 13647 break 13648 } 13649 _ = o1.Args[1] 13650 s1 := o1.Args[0] 13651 if s1.Op != OpPPC64SLDconst { 13652 break 13653 } 13654 if s1.AuxInt != 16 { 13655 break 13656 } 13657 x2 := s1.Args[0] 13658 if x2.Op != OpPPC64MOVBZload { 13659 break 13660 } 13661 i2 := x2.AuxInt 13662 if x2.Aux != s { 13663 break 13664 } 13665 _ = x2.Args[1] 13666 if p != x2.Args[0] { 13667 break 13668 } 13669 if mem != x2.Args[1] { 13670 break 13671 } 13672 o0 := o1.Args[1] 13673 if o0.Op != OpPPC64OR { 13674 break 13675 } 13676 if o0.Type != t { 13677 break 13678 } 13679 _ = o0.Args[1] 13680 s0 := o0.Args[0] 13681 if s0.Op != OpPPC64SLDconst { 13682 break 13683 } 13684 if s0.AuxInt != 8 { 13685 break 13686 } 13687 x1 := s0.Args[0] 13688 if x1.Op != OpPPC64MOVBZload { 13689 break 13690 } 13691 i1 := x1.AuxInt 13692 if x1.Aux != s { 13693 break 13694 } 13695 _ = x1.Args[1] 13696 if p != x1.Args[0] { 13697 break 13698 } 13699 if mem != x1.Args[1] { 13700 break 13701 } 13702 x0 := o0.Args[1] 13703 if x0.Op != OpPPC64MOVBZload { 13704 break 13705 } 13706 i0 := x0.AuxInt 13707 if x0.Aux != s { 13708 break 13709 } 13710 _ = x0.Args[1] 13711 if p != x0.Args[0] { 13712 break 13713 } 13714 if mem != x0.Args[1] { 13715 break 13716 } 13717 s4 := o4.Args[1] 13718 if s4.Op != OpPPC64SLDconst { 13719 break 13720 } 13721 if s4.AuxInt != 40 { 13722 break 13723 } 13724 x5 := s4.Args[0] 13725 if x5.Op != OpPPC64MOVBZload { 13726 break 13727 } 13728 i5 := x5.AuxInt 13729 if x5.Aux != s { 13730 break 13731 } 13732 _ = x5.Args[1] 13733 if p != x5.Args[0] { 13734 break 13735 } 13736 if mem != x5.Args[1] { 13737 break 13738 } 13739 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)) { 13740 break 13741 } 13742 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 13743 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 13744 v.reset(OpCopy) 13745 v.AddArg(v0) 13746 v0.AuxInt = i0 13747 v0.Aux = s 13748 v0.AddArg(p) 13749 v0.AddArg(mem) 13750 return true 13751 } 13752 // 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])))) 13753 // 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) 13754 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 13755 for { 13756 t := v.Type 13757 _ = v.Args[1] 13758 s6 := v.Args[0] 13759 if s6.Op != OpPPC64SLDconst { 13760 break 13761 } 13762 if s6.AuxInt != 56 { 13763 break 13764 } 13765 x7 := s6.Args[0] 13766 if x7.Op != OpPPC64MOVBZload { 13767 break 13768 } 13769 i7 := x7.AuxInt 13770 s := x7.Aux 13771 _ = x7.Args[1] 13772 p := x7.Args[0] 13773 mem := x7.Args[1] 13774 o5 := v.Args[1] 13775 if o5.Op != OpPPC64OR { 13776 break 13777 } 13778 if o5.Type != t { 13779 break 13780 } 13781 _ = o5.Args[1] 13782 s5 := o5.Args[0] 13783 if s5.Op != OpPPC64SLDconst { 13784 break 13785 } 13786 if s5.AuxInt != 48 { 13787 break 13788 } 13789 x6 := s5.Args[0] 13790 if x6.Op != OpPPC64MOVBZload { 13791 break 13792 } 13793 i6 := x6.AuxInt 13794 if x6.Aux != s { 13795 break 13796 } 13797 _ = x6.Args[1] 13798 if p != x6.Args[0] { 13799 break 13800 } 13801 if mem != x6.Args[1] { 13802 break 13803 } 13804 o4 := o5.Args[1] 13805 if o4.Op != OpPPC64OR { 13806 break 13807 } 13808 if o4.Type != t { 13809 break 13810 } 13811 _ = o4.Args[1] 13812 o3 := o4.Args[0] 13813 if o3.Op != OpPPC64OR { 13814 break 13815 } 13816 if o3.Type != t { 13817 break 13818 } 13819 _ = o3.Args[1] 13820 s3 := o3.Args[0] 13821 if s3.Op != OpPPC64SLDconst { 13822 break 13823 } 13824 if s3.AuxInt != 32 { 13825 break 13826 } 13827 x4 := s3.Args[0] 13828 if x4.Op != OpPPC64MOVBZload { 13829 break 13830 } 13831 i4 := x4.AuxInt 13832 if x4.Aux != s { 13833 break 13834 } 13835 _ = x4.Args[1] 13836 if p != x4.Args[0] { 13837 break 13838 } 13839 if mem != x4.Args[1] { 13840 break 13841 } 13842 o2 := o3.Args[1] 13843 if o2.Op != OpPPC64OR { 13844 break 13845 } 13846 if o2.Type != t { 13847 break 13848 } 13849 _ = o2.Args[1] 13850 s2 := o2.Args[0] 13851 if s2.Op != OpPPC64SLDconst { 13852 break 13853 } 13854 if s2.AuxInt != 24 { 13855 break 13856 } 13857 x3 := s2.Args[0] 13858 if x3.Op != OpPPC64MOVBZload { 13859 break 13860 } 13861 i3 := x3.AuxInt 13862 if x3.Aux != s { 13863 break 13864 } 13865 _ = x3.Args[1] 13866 if p != x3.Args[0] { 13867 break 13868 } 13869 if mem != x3.Args[1] { 13870 break 13871 } 13872 o1 := o2.Args[1] 13873 if o1.Op != OpPPC64OR { 13874 break 13875 } 13876 if o1.Type != t { 13877 break 13878 } 13879 _ = o1.Args[1] 13880 s1 := o1.Args[0] 13881 if s1.Op != OpPPC64SLDconst { 13882 break 13883 } 13884 if s1.AuxInt != 16 { 13885 break 13886 } 13887 x2 := s1.Args[0] 13888 if x2.Op != OpPPC64MOVBZload { 13889 break 13890 } 13891 i2 := x2.AuxInt 13892 if x2.Aux != s { 13893 break 13894 } 13895 _ = x2.Args[1] 13896 if p != x2.Args[0] { 13897 break 13898 } 13899 if mem != x2.Args[1] { 13900 break 13901 } 13902 o0 := o1.Args[1] 13903 if o0.Op != OpPPC64OR { 13904 break 13905 } 13906 if o0.Type != t { 13907 break 13908 } 13909 _ = o0.Args[1] 13910 x0 := o0.Args[0] 13911 if x0.Op != OpPPC64MOVBZload { 13912 break 13913 } 13914 i0 := x0.AuxInt 13915 if x0.Aux != s { 13916 break 13917 } 13918 _ = x0.Args[1] 13919 if p != x0.Args[0] { 13920 break 13921 } 13922 if mem != x0.Args[1] { 13923 break 13924 } 13925 s0 := o0.Args[1] 13926 if s0.Op != OpPPC64SLDconst { 13927 break 13928 } 13929 if s0.AuxInt != 8 { 13930 break 13931 } 13932 x1 := s0.Args[0] 13933 if x1.Op != OpPPC64MOVBZload { 13934 break 13935 } 13936 i1 := x1.AuxInt 13937 if x1.Aux != s { 13938 break 13939 } 13940 _ = x1.Args[1] 13941 if p != x1.Args[0] { 13942 break 13943 } 13944 if mem != x1.Args[1] { 13945 break 13946 } 13947 s4 := o4.Args[1] 13948 if s4.Op != OpPPC64SLDconst { 13949 break 13950 } 13951 if s4.AuxInt != 40 { 13952 break 13953 } 13954 x5 := s4.Args[0] 13955 if x5.Op != OpPPC64MOVBZload { 13956 break 13957 } 13958 i5 := x5.AuxInt 13959 if x5.Aux != s { 13960 break 13961 } 13962 _ = x5.Args[1] 13963 if p != x5.Args[0] { 13964 break 13965 } 13966 if mem != x5.Args[1] { 13967 break 13968 } 13969 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)) { 13970 break 13971 } 13972 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 13973 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 13974 v.reset(OpCopy) 13975 v.AddArg(v0) 13976 v0.AuxInt = i0 13977 v0.Aux = s 13978 v0.AddArg(p) 13979 v0.AddArg(mem) 13980 return true 13981 } 13982 // 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])))) 13983 // 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) 13984 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 13985 for { 13986 t := v.Type 13987 _ = v.Args[1] 13988 s6 := v.Args[0] 13989 if s6.Op != OpPPC64SLDconst { 13990 break 13991 } 13992 if s6.AuxInt != 56 { 13993 break 13994 } 13995 x7 := s6.Args[0] 13996 if x7.Op != OpPPC64MOVBZload { 13997 break 13998 } 13999 i7 := x7.AuxInt 14000 s := x7.Aux 14001 _ = x7.Args[1] 14002 p := x7.Args[0] 14003 mem := x7.Args[1] 14004 o5 := v.Args[1] 14005 if o5.Op != OpPPC64OR { 14006 break 14007 } 14008 if o5.Type != t { 14009 break 14010 } 14011 _ = o5.Args[1] 14012 s5 := o5.Args[0] 14013 if s5.Op != OpPPC64SLDconst { 14014 break 14015 } 14016 if s5.AuxInt != 48 { 14017 break 14018 } 14019 x6 := s5.Args[0] 14020 if x6.Op != OpPPC64MOVBZload { 14021 break 14022 } 14023 i6 := x6.AuxInt 14024 if x6.Aux != s { 14025 break 14026 } 14027 _ = x6.Args[1] 14028 if p != x6.Args[0] { 14029 break 14030 } 14031 if mem != x6.Args[1] { 14032 break 14033 } 14034 o4 := o5.Args[1] 14035 if o4.Op != OpPPC64OR { 14036 break 14037 } 14038 if o4.Type != t { 14039 break 14040 } 14041 _ = o4.Args[1] 14042 o3 := o4.Args[0] 14043 if o3.Op != OpPPC64OR { 14044 break 14045 } 14046 if o3.Type != t { 14047 break 14048 } 14049 _ = o3.Args[1] 14050 s3 := o3.Args[0] 14051 if s3.Op != OpPPC64SLDconst { 14052 break 14053 } 14054 if s3.AuxInt != 32 { 14055 break 14056 } 14057 x4 := s3.Args[0] 14058 if x4.Op != OpPPC64MOVBZload { 14059 break 14060 } 14061 i4 := x4.AuxInt 14062 if x4.Aux != s { 14063 break 14064 } 14065 _ = x4.Args[1] 14066 if p != x4.Args[0] { 14067 break 14068 } 14069 if mem != x4.Args[1] { 14070 break 14071 } 14072 o2 := o3.Args[1] 14073 if o2.Op != OpPPC64OR { 14074 break 14075 } 14076 if o2.Type != t { 14077 break 14078 } 14079 _ = o2.Args[1] 14080 s2 := o2.Args[0] 14081 if s2.Op != OpPPC64SLDconst { 14082 break 14083 } 14084 if s2.AuxInt != 24 { 14085 break 14086 } 14087 x3 := s2.Args[0] 14088 if x3.Op != OpPPC64MOVBZload { 14089 break 14090 } 14091 i3 := x3.AuxInt 14092 if x3.Aux != s { 14093 break 14094 } 14095 _ = x3.Args[1] 14096 if p != x3.Args[0] { 14097 break 14098 } 14099 if mem != x3.Args[1] { 14100 break 14101 } 14102 o1 := o2.Args[1] 14103 if o1.Op != OpPPC64OR { 14104 break 14105 } 14106 if o1.Type != t { 14107 break 14108 } 14109 _ = o1.Args[1] 14110 o0 := o1.Args[0] 14111 if o0.Op != OpPPC64OR { 14112 break 14113 } 14114 if o0.Type != t { 14115 break 14116 } 14117 _ = o0.Args[1] 14118 s0 := o0.Args[0] 14119 if s0.Op != OpPPC64SLDconst { 14120 break 14121 } 14122 if s0.AuxInt != 8 { 14123 break 14124 } 14125 x1 := s0.Args[0] 14126 if x1.Op != OpPPC64MOVBZload { 14127 break 14128 } 14129 i1 := x1.AuxInt 14130 if x1.Aux != s { 14131 break 14132 } 14133 _ = x1.Args[1] 14134 if p != x1.Args[0] { 14135 break 14136 } 14137 if mem != x1.Args[1] { 14138 break 14139 } 14140 x0 := o0.Args[1] 14141 if x0.Op != OpPPC64MOVBZload { 14142 break 14143 } 14144 i0 := x0.AuxInt 14145 if x0.Aux != s { 14146 break 14147 } 14148 _ = x0.Args[1] 14149 if p != x0.Args[0] { 14150 break 14151 } 14152 if mem != x0.Args[1] { 14153 break 14154 } 14155 s1 := o1.Args[1] 14156 if s1.Op != OpPPC64SLDconst { 14157 break 14158 } 14159 if s1.AuxInt != 16 { 14160 break 14161 } 14162 x2 := s1.Args[0] 14163 if x2.Op != OpPPC64MOVBZload { 14164 break 14165 } 14166 i2 := x2.AuxInt 14167 if x2.Aux != s { 14168 break 14169 } 14170 _ = x2.Args[1] 14171 if p != x2.Args[0] { 14172 break 14173 } 14174 if mem != x2.Args[1] { 14175 break 14176 } 14177 s4 := o4.Args[1] 14178 if s4.Op != OpPPC64SLDconst { 14179 break 14180 } 14181 if s4.AuxInt != 40 { 14182 break 14183 } 14184 x5 := s4.Args[0] 14185 if x5.Op != OpPPC64MOVBZload { 14186 break 14187 } 14188 i5 := x5.AuxInt 14189 if x5.Aux != s { 14190 break 14191 } 14192 _ = x5.Args[1] 14193 if p != x5.Args[0] { 14194 break 14195 } 14196 if mem != x5.Args[1] { 14197 break 14198 } 14199 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)) { 14200 break 14201 } 14202 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 14203 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 14204 v.reset(OpCopy) 14205 v.AddArg(v0) 14206 v0.AuxInt = i0 14207 v0.Aux = s 14208 v0.AddArg(p) 14209 v0.AddArg(mem) 14210 return true 14211 } 14212 // 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])))) 14213 // 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) 14214 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 14215 for { 14216 t := v.Type 14217 _ = v.Args[1] 14218 s6 := v.Args[0] 14219 if s6.Op != OpPPC64SLDconst { 14220 break 14221 } 14222 if s6.AuxInt != 56 { 14223 break 14224 } 14225 x7 := s6.Args[0] 14226 if x7.Op != OpPPC64MOVBZload { 14227 break 14228 } 14229 i7 := x7.AuxInt 14230 s := x7.Aux 14231 _ = x7.Args[1] 14232 p := x7.Args[0] 14233 mem := x7.Args[1] 14234 o5 := v.Args[1] 14235 if o5.Op != OpPPC64OR { 14236 break 14237 } 14238 if o5.Type != t { 14239 break 14240 } 14241 _ = o5.Args[1] 14242 s5 := o5.Args[0] 14243 if s5.Op != OpPPC64SLDconst { 14244 break 14245 } 14246 if s5.AuxInt != 48 { 14247 break 14248 } 14249 x6 := s5.Args[0] 14250 if x6.Op != OpPPC64MOVBZload { 14251 break 14252 } 14253 i6 := x6.AuxInt 14254 if x6.Aux != s { 14255 break 14256 } 14257 _ = x6.Args[1] 14258 if p != x6.Args[0] { 14259 break 14260 } 14261 if mem != x6.Args[1] { 14262 break 14263 } 14264 o4 := o5.Args[1] 14265 if o4.Op != OpPPC64OR { 14266 break 14267 } 14268 if o4.Type != t { 14269 break 14270 } 14271 _ = o4.Args[1] 14272 o3 := o4.Args[0] 14273 if o3.Op != OpPPC64OR { 14274 break 14275 } 14276 if o3.Type != t { 14277 break 14278 } 14279 _ = o3.Args[1] 14280 s3 := o3.Args[0] 14281 if s3.Op != OpPPC64SLDconst { 14282 break 14283 } 14284 if s3.AuxInt != 32 { 14285 break 14286 } 14287 x4 := s3.Args[0] 14288 if x4.Op != OpPPC64MOVBZload { 14289 break 14290 } 14291 i4 := x4.AuxInt 14292 if x4.Aux != s { 14293 break 14294 } 14295 _ = x4.Args[1] 14296 if p != x4.Args[0] { 14297 break 14298 } 14299 if mem != x4.Args[1] { 14300 break 14301 } 14302 o2 := o3.Args[1] 14303 if o2.Op != OpPPC64OR { 14304 break 14305 } 14306 if o2.Type != t { 14307 break 14308 } 14309 _ = o2.Args[1] 14310 s2 := o2.Args[0] 14311 if s2.Op != OpPPC64SLDconst { 14312 break 14313 } 14314 if s2.AuxInt != 24 { 14315 break 14316 } 14317 x3 := s2.Args[0] 14318 if x3.Op != OpPPC64MOVBZload { 14319 break 14320 } 14321 i3 := x3.AuxInt 14322 if x3.Aux != s { 14323 break 14324 } 14325 _ = x3.Args[1] 14326 if p != x3.Args[0] { 14327 break 14328 } 14329 if mem != x3.Args[1] { 14330 break 14331 } 14332 o1 := o2.Args[1] 14333 if o1.Op != OpPPC64OR { 14334 break 14335 } 14336 if o1.Type != t { 14337 break 14338 } 14339 _ = o1.Args[1] 14340 o0 := o1.Args[0] 14341 if o0.Op != OpPPC64OR { 14342 break 14343 } 14344 if o0.Type != t { 14345 break 14346 } 14347 _ = o0.Args[1] 14348 x0 := o0.Args[0] 14349 if x0.Op != OpPPC64MOVBZload { 14350 break 14351 } 14352 i0 := x0.AuxInt 14353 if x0.Aux != s { 14354 break 14355 } 14356 _ = x0.Args[1] 14357 if p != x0.Args[0] { 14358 break 14359 } 14360 if mem != x0.Args[1] { 14361 break 14362 } 14363 s0 := o0.Args[1] 14364 if s0.Op != OpPPC64SLDconst { 14365 break 14366 } 14367 if s0.AuxInt != 8 { 14368 break 14369 } 14370 x1 := s0.Args[0] 14371 if x1.Op != OpPPC64MOVBZload { 14372 break 14373 } 14374 i1 := x1.AuxInt 14375 if x1.Aux != s { 14376 break 14377 } 14378 _ = x1.Args[1] 14379 if p != x1.Args[0] { 14380 break 14381 } 14382 if mem != x1.Args[1] { 14383 break 14384 } 14385 s1 := o1.Args[1] 14386 if s1.Op != OpPPC64SLDconst { 14387 break 14388 } 14389 if s1.AuxInt != 16 { 14390 break 14391 } 14392 x2 := s1.Args[0] 14393 if x2.Op != OpPPC64MOVBZload { 14394 break 14395 } 14396 i2 := x2.AuxInt 14397 if x2.Aux != s { 14398 break 14399 } 14400 _ = x2.Args[1] 14401 if p != x2.Args[0] { 14402 break 14403 } 14404 if mem != x2.Args[1] { 14405 break 14406 } 14407 s4 := o4.Args[1] 14408 if s4.Op != OpPPC64SLDconst { 14409 break 14410 } 14411 if s4.AuxInt != 40 { 14412 break 14413 } 14414 x5 := s4.Args[0] 14415 if x5.Op != OpPPC64MOVBZload { 14416 break 14417 } 14418 i5 := x5.AuxInt 14419 if x5.Aux != s { 14420 break 14421 } 14422 _ = x5.Args[1] 14423 if p != x5.Args[0] { 14424 break 14425 } 14426 if mem != x5.Args[1] { 14427 break 14428 } 14429 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)) { 14430 break 14431 } 14432 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 14433 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 14434 v.reset(OpCopy) 14435 v.AddArg(v0) 14436 v0.AuxInt = i0 14437 v0.Aux = s 14438 v0.AddArg(p) 14439 v0.AddArg(mem) 14440 return true 14441 } 14442 // 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])))) 14443 // 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) 14444 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 14445 for { 14446 t := v.Type 14447 _ = v.Args[1] 14448 s6 := v.Args[0] 14449 if s6.Op != OpPPC64SLDconst { 14450 break 14451 } 14452 if s6.AuxInt != 56 { 14453 break 14454 } 14455 x7 := s6.Args[0] 14456 if x7.Op != OpPPC64MOVBZload { 14457 break 14458 } 14459 i7 := x7.AuxInt 14460 s := x7.Aux 14461 _ = x7.Args[1] 14462 p := x7.Args[0] 14463 mem := x7.Args[1] 14464 o5 := v.Args[1] 14465 if o5.Op != OpPPC64OR { 14466 break 14467 } 14468 if o5.Type != t { 14469 break 14470 } 14471 _ = o5.Args[1] 14472 s5 := o5.Args[0] 14473 if s5.Op != OpPPC64SLDconst { 14474 break 14475 } 14476 if s5.AuxInt != 48 { 14477 break 14478 } 14479 x6 := s5.Args[0] 14480 if x6.Op != OpPPC64MOVBZload { 14481 break 14482 } 14483 i6 := x6.AuxInt 14484 if x6.Aux != s { 14485 break 14486 } 14487 _ = x6.Args[1] 14488 if p != x6.Args[0] { 14489 break 14490 } 14491 if mem != x6.Args[1] { 14492 break 14493 } 14494 o4 := o5.Args[1] 14495 if o4.Op != OpPPC64OR { 14496 break 14497 } 14498 if o4.Type != t { 14499 break 14500 } 14501 _ = o4.Args[1] 14502 o3 := o4.Args[0] 14503 if o3.Op != OpPPC64OR { 14504 break 14505 } 14506 if o3.Type != t { 14507 break 14508 } 14509 _ = o3.Args[1] 14510 s3 := o3.Args[0] 14511 if s3.Op != OpPPC64SLDconst { 14512 break 14513 } 14514 if s3.AuxInt != 32 { 14515 break 14516 } 14517 x4 := s3.Args[0] 14518 if x4.Op != OpPPC64MOVBZload { 14519 break 14520 } 14521 i4 := x4.AuxInt 14522 if x4.Aux != s { 14523 break 14524 } 14525 _ = x4.Args[1] 14526 if p != x4.Args[0] { 14527 break 14528 } 14529 if mem != x4.Args[1] { 14530 break 14531 } 14532 o2 := o3.Args[1] 14533 if o2.Op != OpPPC64OR { 14534 break 14535 } 14536 if o2.Type != t { 14537 break 14538 } 14539 _ = o2.Args[1] 14540 o1 := o2.Args[0] 14541 if o1.Op != OpPPC64OR { 14542 break 14543 } 14544 if o1.Type != t { 14545 break 14546 } 14547 _ = o1.Args[1] 14548 s1 := o1.Args[0] 14549 if s1.Op != OpPPC64SLDconst { 14550 break 14551 } 14552 if s1.AuxInt != 16 { 14553 break 14554 } 14555 x2 := s1.Args[0] 14556 if x2.Op != OpPPC64MOVBZload { 14557 break 14558 } 14559 i2 := x2.AuxInt 14560 if x2.Aux != s { 14561 break 14562 } 14563 _ = x2.Args[1] 14564 if p != x2.Args[0] { 14565 break 14566 } 14567 if mem != x2.Args[1] { 14568 break 14569 } 14570 o0 := o1.Args[1] 14571 if o0.Op != OpPPC64OR { 14572 break 14573 } 14574 if o0.Type != t { 14575 break 14576 } 14577 _ = o0.Args[1] 14578 s0 := o0.Args[0] 14579 if s0.Op != OpPPC64SLDconst { 14580 break 14581 } 14582 if s0.AuxInt != 8 { 14583 break 14584 } 14585 x1 := s0.Args[0] 14586 if x1.Op != OpPPC64MOVBZload { 14587 break 14588 } 14589 i1 := x1.AuxInt 14590 if x1.Aux != s { 14591 break 14592 } 14593 _ = x1.Args[1] 14594 if p != x1.Args[0] { 14595 break 14596 } 14597 if mem != x1.Args[1] { 14598 break 14599 } 14600 x0 := o0.Args[1] 14601 if x0.Op != OpPPC64MOVBZload { 14602 break 14603 } 14604 i0 := x0.AuxInt 14605 if x0.Aux != s { 14606 break 14607 } 14608 _ = x0.Args[1] 14609 if p != x0.Args[0] { 14610 break 14611 } 14612 if mem != x0.Args[1] { 14613 break 14614 } 14615 s2 := o2.Args[1] 14616 if s2.Op != OpPPC64SLDconst { 14617 break 14618 } 14619 if s2.AuxInt != 24 { 14620 break 14621 } 14622 x3 := s2.Args[0] 14623 if x3.Op != OpPPC64MOVBZload { 14624 break 14625 } 14626 i3 := x3.AuxInt 14627 if x3.Aux != s { 14628 break 14629 } 14630 _ = x3.Args[1] 14631 if p != x3.Args[0] { 14632 break 14633 } 14634 if mem != x3.Args[1] { 14635 break 14636 } 14637 s4 := o4.Args[1] 14638 if s4.Op != OpPPC64SLDconst { 14639 break 14640 } 14641 if s4.AuxInt != 40 { 14642 break 14643 } 14644 x5 := s4.Args[0] 14645 if x5.Op != OpPPC64MOVBZload { 14646 break 14647 } 14648 i5 := x5.AuxInt 14649 if x5.Aux != s { 14650 break 14651 } 14652 _ = x5.Args[1] 14653 if p != x5.Args[0] { 14654 break 14655 } 14656 if mem != x5.Args[1] { 14657 break 14658 } 14659 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)) { 14660 break 14661 } 14662 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 14663 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 14664 v.reset(OpCopy) 14665 v.AddArg(v0) 14666 v0.AuxInt = i0 14667 v0.Aux = s 14668 v0.AddArg(p) 14669 v0.AddArg(mem) 14670 return true 14671 } 14672 // 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])))) 14673 // 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) 14674 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 14675 for { 14676 t := v.Type 14677 _ = v.Args[1] 14678 s6 := v.Args[0] 14679 if s6.Op != OpPPC64SLDconst { 14680 break 14681 } 14682 if s6.AuxInt != 56 { 14683 break 14684 } 14685 x7 := s6.Args[0] 14686 if x7.Op != OpPPC64MOVBZload { 14687 break 14688 } 14689 i7 := x7.AuxInt 14690 s := x7.Aux 14691 _ = x7.Args[1] 14692 p := x7.Args[0] 14693 mem := x7.Args[1] 14694 o5 := v.Args[1] 14695 if o5.Op != OpPPC64OR { 14696 break 14697 } 14698 if o5.Type != t { 14699 break 14700 } 14701 _ = o5.Args[1] 14702 s5 := o5.Args[0] 14703 if s5.Op != OpPPC64SLDconst { 14704 break 14705 } 14706 if s5.AuxInt != 48 { 14707 break 14708 } 14709 x6 := s5.Args[0] 14710 if x6.Op != OpPPC64MOVBZload { 14711 break 14712 } 14713 i6 := x6.AuxInt 14714 if x6.Aux != s { 14715 break 14716 } 14717 _ = x6.Args[1] 14718 if p != x6.Args[0] { 14719 break 14720 } 14721 if mem != x6.Args[1] { 14722 break 14723 } 14724 o4 := o5.Args[1] 14725 if o4.Op != OpPPC64OR { 14726 break 14727 } 14728 if o4.Type != t { 14729 break 14730 } 14731 _ = o4.Args[1] 14732 o3 := o4.Args[0] 14733 if o3.Op != OpPPC64OR { 14734 break 14735 } 14736 if o3.Type != t { 14737 break 14738 } 14739 _ = o3.Args[1] 14740 s3 := o3.Args[0] 14741 if s3.Op != OpPPC64SLDconst { 14742 break 14743 } 14744 if s3.AuxInt != 32 { 14745 break 14746 } 14747 x4 := s3.Args[0] 14748 if x4.Op != OpPPC64MOVBZload { 14749 break 14750 } 14751 i4 := x4.AuxInt 14752 if x4.Aux != s { 14753 break 14754 } 14755 _ = x4.Args[1] 14756 if p != x4.Args[0] { 14757 break 14758 } 14759 if mem != x4.Args[1] { 14760 break 14761 } 14762 o2 := o3.Args[1] 14763 if o2.Op != OpPPC64OR { 14764 break 14765 } 14766 if o2.Type != t { 14767 break 14768 } 14769 _ = o2.Args[1] 14770 o1 := o2.Args[0] 14771 if o1.Op != OpPPC64OR { 14772 break 14773 } 14774 if o1.Type != t { 14775 break 14776 } 14777 _ = o1.Args[1] 14778 s1 := o1.Args[0] 14779 if s1.Op != OpPPC64SLDconst { 14780 break 14781 } 14782 if s1.AuxInt != 16 { 14783 break 14784 } 14785 x2 := s1.Args[0] 14786 if x2.Op != OpPPC64MOVBZload { 14787 break 14788 } 14789 i2 := x2.AuxInt 14790 if x2.Aux != s { 14791 break 14792 } 14793 _ = x2.Args[1] 14794 if p != x2.Args[0] { 14795 break 14796 } 14797 if mem != x2.Args[1] { 14798 break 14799 } 14800 o0 := o1.Args[1] 14801 if o0.Op != OpPPC64OR { 14802 break 14803 } 14804 if o0.Type != t { 14805 break 14806 } 14807 _ = o0.Args[1] 14808 x0 := o0.Args[0] 14809 if x0.Op != OpPPC64MOVBZload { 14810 break 14811 } 14812 i0 := x0.AuxInt 14813 if x0.Aux != s { 14814 break 14815 } 14816 _ = x0.Args[1] 14817 if p != x0.Args[0] { 14818 break 14819 } 14820 if mem != x0.Args[1] { 14821 break 14822 } 14823 s0 := o0.Args[1] 14824 if s0.Op != OpPPC64SLDconst { 14825 break 14826 } 14827 if s0.AuxInt != 8 { 14828 break 14829 } 14830 x1 := s0.Args[0] 14831 if x1.Op != OpPPC64MOVBZload { 14832 break 14833 } 14834 i1 := x1.AuxInt 14835 if x1.Aux != s { 14836 break 14837 } 14838 _ = x1.Args[1] 14839 if p != x1.Args[0] { 14840 break 14841 } 14842 if mem != x1.Args[1] { 14843 break 14844 } 14845 s2 := o2.Args[1] 14846 if s2.Op != OpPPC64SLDconst { 14847 break 14848 } 14849 if s2.AuxInt != 24 { 14850 break 14851 } 14852 x3 := s2.Args[0] 14853 if x3.Op != OpPPC64MOVBZload { 14854 break 14855 } 14856 i3 := x3.AuxInt 14857 if x3.Aux != s { 14858 break 14859 } 14860 _ = x3.Args[1] 14861 if p != x3.Args[0] { 14862 break 14863 } 14864 if mem != x3.Args[1] { 14865 break 14866 } 14867 s4 := o4.Args[1] 14868 if s4.Op != OpPPC64SLDconst { 14869 break 14870 } 14871 if s4.AuxInt != 40 { 14872 break 14873 } 14874 x5 := s4.Args[0] 14875 if x5.Op != OpPPC64MOVBZload { 14876 break 14877 } 14878 i5 := x5.AuxInt 14879 if x5.Aux != s { 14880 break 14881 } 14882 _ = x5.Args[1] 14883 if p != x5.Args[0] { 14884 break 14885 } 14886 if mem != x5.Args[1] { 14887 break 14888 } 14889 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)) { 14890 break 14891 } 14892 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 14893 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 14894 v.reset(OpCopy) 14895 v.AddArg(v0) 14896 v0.AuxInt = i0 14897 v0.Aux = s 14898 v0.AddArg(p) 14899 v0.AddArg(mem) 14900 return true 14901 } 14902 return false 14903 } 14904 func rewriteValuePPC64_OpPPC64OR_40(v *Value) bool { 14905 b := v.Block 14906 _ = b 14907 config := b.Func.Config 14908 _ = config 14909 // 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])))) 14910 // 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) 14911 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 14912 for { 14913 t := v.Type 14914 _ = v.Args[1] 14915 s6 := v.Args[0] 14916 if s6.Op != OpPPC64SLDconst { 14917 break 14918 } 14919 if s6.AuxInt != 56 { 14920 break 14921 } 14922 x7 := s6.Args[0] 14923 if x7.Op != OpPPC64MOVBZload { 14924 break 14925 } 14926 i7 := x7.AuxInt 14927 s := x7.Aux 14928 _ = x7.Args[1] 14929 p := x7.Args[0] 14930 mem := x7.Args[1] 14931 o5 := v.Args[1] 14932 if o5.Op != OpPPC64OR { 14933 break 14934 } 14935 if o5.Type != t { 14936 break 14937 } 14938 _ = o5.Args[1] 14939 s5 := o5.Args[0] 14940 if s5.Op != OpPPC64SLDconst { 14941 break 14942 } 14943 if s5.AuxInt != 48 { 14944 break 14945 } 14946 x6 := s5.Args[0] 14947 if x6.Op != OpPPC64MOVBZload { 14948 break 14949 } 14950 i6 := x6.AuxInt 14951 if x6.Aux != s { 14952 break 14953 } 14954 _ = x6.Args[1] 14955 if p != x6.Args[0] { 14956 break 14957 } 14958 if mem != x6.Args[1] { 14959 break 14960 } 14961 o4 := o5.Args[1] 14962 if o4.Op != OpPPC64OR { 14963 break 14964 } 14965 if o4.Type != t { 14966 break 14967 } 14968 _ = o4.Args[1] 14969 o3 := o4.Args[0] 14970 if o3.Op != OpPPC64OR { 14971 break 14972 } 14973 if o3.Type != t { 14974 break 14975 } 14976 _ = o3.Args[1] 14977 s3 := o3.Args[0] 14978 if s3.Op != OpPPC64SLDconst { 14979 break 14980 } 14981 if s3.AuxInt != 32 { 14982 break 14983 } 14984 x4 := s3.Args[0] 14985 if x4.Op != OpPPC64MOVBZload { 14986 break 14987 } 14988 i4 := x4.AuxInt 14989 if x4.Aux != s { 14990 break 14991 } 14992 _ = x4.Args[1] 14993 if p != x4.Args[0] { 14994 break 14995 } 14996 if mem != x4.Args[1] { 14997 break 14998 } 14999 o2 := o3.Args[1] 15000 if o2.Op != OpPPC64OR { 15001 break 15002 } 15003 if o2.Type != t { 15004 break 15005 } 15006 _ = o2.Args[1] 15007 o1 := o2.Args[0] 15008 if o1.Op != OpPPC64OR { 15009 break 15010 } 15011 if o1.Type != t { 15012 break 15013 } 15014 _ = o1.Args[1] 15015 o0 := o1.Args[0] 15016 if o0.Op != OpPPC64OR { 15017 break 15018 } 15019 if o0.Type != t { 15020 break 15021 } 15022 _ = o0.Args[1] 15023 s0 := o0.Args[0] 15024 if s0.Op != OpPPC64SLDconst { 15025 break 15026 } 15027 if s0.AuxInt != 8 { 15028 break 15029 } 15030 x1 := s0.Args[0] 15031 if x1.Op != OpPPC64MOVBZload { 15032 break 15033 } 15034 i1 := x1.AuxInt 15035 if x1.Aux != s { 15036 break 15037 } 15038 _ = x1.Args[1] 15039 if p != x1.Args[0] { 15040 break 15041 } 15042 if mem != x1.Args[1] { 15043 break 15044 } 15045 x0 := o0.Args[1] 15046 if x0.Op != OpPPC64MOVBZload { 15047 break 15048 } 15049 i0 := x0.AuxInt 15050 if x0.Aux != s { 15051 break 15052 } 15053 _ = x0.Args[1] 15054 if p != x0.Args[0] { 15055 break 15056 } 15057 if mem != x0.Args[1] { 15058 break 15059 } 15060 s1 := o1.Args[1] 15061 if s1.Op != OpPPC64SLDconst { 15062 break 15063 } 15064 if s1.AuxInt != 16 { 15065 break 15066 } 15067 x2 := s1.Args[0] 15068 if x2.Op != OpPPC64MOVBZload { 15069 break 15070 } 15071 i2 := x2.AuxInt 15072 if x2.Aux != s { 15073 break 15074 } 15075 _ = x2.Args[1] 15076 if p != x2.Args[0] { 15077 break 15078 } 15079 if mem != x2.Args[1] { 15080 break 15081 } 15082 s2 := o2.Args[1] 15083 if s2.Op != OpPPC64SLDconst { 15084 break 15085 } 15086 if s2.AuxInt != 24 { 15087 break 15088 } 15089 x3 := s2.Args[0] 15090 if x3.Op != OpPPC64MOVBZload { 15091 break 15092 } 15093 i3 := x3.AuxInt 15094 if x3.Aux != s { 15095 break 15096 } 15097 _ = x3.Args[1] 15098 if p != x3.Args[0] { 15099 break 15100 } 15101 if mem != x3.Args[1] { 15102 break 15103 } 15104 s4 := o4.Args[1] 15105 if s4.Op != OpPPC64SLDconst { 15106 break 15107 } 15108 if s4.AuxInt != 40 { 15109 break 15110 } 15111 x5 := s4.Args[0] 15112 if x5.Op != OpPPC64MOVBZload { 15113 break 15114 } 15115 i5 := x5.AuxInt 15116 if x5.Aux != s { 15117 break 15118 } 15119 _ = x5.Args[1] 15120 if p != x5.Args[0] { 15121 break 15122 } 15123 if mem != x5.Args[1] { 15124 break 15125 } 15126 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)) { 15127 break 15128 } 15129 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 15130 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 15131 v.reset(OpCopy) 15132 v.AddArg(v0) 15133 v0.AuxInt = i0 15134 v0.Aux = s 15135 v0.AddArg(p) 15136 v0.AddArg(mem) 15137 return true 15138 } 15139 // 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])))) 15140 // 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) 15141 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 15142 for { 15143 t := v.Type 15144 _ = v.Args[1] 15145 s6 := v.Args[0] 15146 if s6.Op != OpPPC64SLDconst { 15147 break 15148 } 15149 if s6.AuxInt != 56 { 15150 break 15151 } 15152 x7 := s6.Args[0] 15153 if x7.Op != OpPPC64MOVBZload { 15154 break 15155 } 15156 i7 := x7.AuxInt 15157 s := x7.Aux 15158 _ = x7.Args[1] 15159 p := x7.Args[0] 15160 mem := x7.Args[1] 15161 o5 := v.Args[1] 15162 if o5.Op != OpPPC64OR { 15163 break 15164 } 15165 if o5.Type != t { 15166 break 15167 } 15168 _ = o5.Args[1] 15169 s5 := o5.Args[0] 15170 if s5.Op != OpPPC64SLDconst { 15171 break 15172 } 15173 if s5.AuxInt != 48 { 15174 break 15175 } 15176 x6 := s5.Args[0] 15177 if x6.Op != OpPPC64MOVBZload { 15178 break 15179 } 15180 i6 := x6.AuxInt 15181 if x6.Aux != s { 15182 break 15183 } 15184 _ = x6.Args[1] 15185 if p != x6.Args[0] { 15186 break 15187 } 15188 if mem != x6.Args[1] { 15189 break 15190 } 15191 o4 := o5.Args[1] 15192 if o4.Op != OpPPC64OR { 15193 break 15194 } 15195 if o4.Type != t { 15196 break 15197 } 15198 _ = o4.Args[1] 15199 o3 := o4.Args[0] 15200 if o3.Op != OpPPC64OR { 15201 break 15202 } 15203 if o3.Type != t { 15204 break 15205 } 15206 _ = o3.Args[1] 15207 s3 := o3.Args[0] 15208 if s3.Op != OpPPC64SLDconst { 15209 break 15210 } 15211 if s3.AuxInt != 32 { 15212 break 15213 } 15214 x4 := s3.Args[0] 15215 if x4.Op != OpPPC64MOVBZload { 15216 break 15217 } 15218 i4 := x4.AuxInt 15219 if x4.Aux != s { 15220 break 15221 } 15222 _ = x4.Args[1] 15223 if p != x4.Args[0] { 15224 break 15225 } 15226 if mem != x4.Args[1] { 15227 break 15228 } 15229 o2 := o3.Args[1] 15230 if o2.Op != OpPPC64OR { 15231 break 15232 } 15233 if o2.Type != t { 15234 break 15235 } 15236 _ = o2.Args[1] 15237 o1 := o2.Args[0] 15238 if o1.Op != OpPPC64OR { 15239 break 15240 } 15241 if o1.Type != t { 15242 break 15243 } 15244 _ = o1.Args[1] 15245 o0 := o1.Args[0] 15246 if o0.Op != OpPPC64OR { 15247 break 15248 } 15249 if o0.Type != t { 15250 break 15251 } 15252 _ = o0.Args[1] 15253 x0 := o0.Args[0] 15254 if x0.Op != OpPPC64MOVBZload { 15255 break 15256 } 15257 i0 := x0.AuxInt 15258 if x0.Aux != s { 15259 break 15260 } 15261 _ = x0.Args[1] 15262 if p != x0.Args[0] { 15263 break 15264 } 15265 if mem != x0.Args[1] { 15266 break 15267 } 15268 s0 := o0.Args[1] 15269 if s0.Op != OpPPC64SLDconst { 15270 break 15271 } 15272 if s0.AuxInt != 8 { 15273 break 15274 } 15275 x1 := s0.Args[0] 15276 if x1.Op != OpPPC64MOVBZload { 15277 break 15278 } 15279 i1 := x1.AuxInt 15280 if x1.Aux != s { 15281 break 15282 } 15283 _ = x1.Args[1] 15284 if p != x1.Args[0] { 15285 break 15286 } 15287 if mem != x1.Args[1] { 15288 break 15289 } 15290 s1 := o1.Args[1] 15291 if s1.Op != OpPPC64SLDconst { 15292 break 15293 } 15294 if s1.AuxInt != 16 { 15295 break 15296 } 15297 x2 := s1.Args[0] 15298 if x2.Op != OpPPC64MOVBZload { 15299 break 15300 } 15301 i2 := x2.AuxInt 15302 if x2.Aux != s { 15303 break 15304 } 15305 _ = x2.Args[1] 15306 if p != x2.Args[0] { 15307 break 15308 } 15309 if mem != x2.Args[1] { 15310 break 15311 } 15312 s2 := o2.Args[1] 15313 if s2.Op != OpPPC64SLDconst { 15314 break 15315 } 15316 if s2.AuxInt != 24 { 15317 break 15318 } 15319 x3 := s2.Args[0] 15320 if x3.Op != OpPPC64MOVBZload { 15321 break 15322 } 15323 i3 := x3.AuxInt 15324 if x3.Aux != s { 15325 break 15326 } 15327 _ = x3.Args[1] 15328 if p != x3.Args[0] { 15329 break 15330 } 15331 if mem != x3.Args[1] { 15332 break 15333 } 15334 s4 := o4.Args[1] 15335 if s4.Op != OpPPC64SLDconst { 15336 break 15337 } 15338 if s4.AuxInt != 40 { 15339 break 15340 } 15341 x5 := s4.Args[0] 15342 if x5.Op != OpPPC64MOVBZload { 15343 break 15344 } 15345 i5 := x5.AuxInt 15346 if x5.Aux != s { 15347 break 15348 } 15349 _ = x5.Args[1] 15350 if p != x5.Args[0] { 15351 break 15352 } 15353 if mem != x5.Args[1] { 15354 break 15355 } 15356 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)) { 15357 break 15358 } 15359 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 15360 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 15361 v.reset(OpCopy) 15362 v.AddArg(v0) 15363 v0.AuxInt = i0 15364 v0.Aux = s 15365 v0.AddArg(p) 15366 v0.AddArg(mem) 15367 return true 15368 } 15369 // 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])))) 15370 // 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) 15371 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 15372 for { 15373 t := v.Type 15374 _ = v.Args[1] 15375 s6 := v.Args[0] 15376 if s6.Op != OpPPC64SLDconst { 15377 break 15378 } 15379 if s6.AuxInt != 56 { 15380 break 15381 } 15382 x7 := s6.Args[0] 15383 if x7.Op != OpPPC64MOVBZload { 15384 break 15385 } 15386 i7 := x7.AuxInt 15387 s := x7.Aux 15388 _ = x7.Args[1] 15389 p := x7.Args[0] 15390 mem := x7.Args[1] 15391 o5 := v.Args[1] 15392 if o5.Op != OpPPC64OR { 15393 break 15394 } 15395 if o5.Type != t { 15396 break 15397 } 15398 _ = o5.Args[1] 15399 s5 := o5.Args[0] 15400 if s5.Op != OpPPC64SLDconst { 15401 break 15402 } 15403 if s5.AuxInt != 48 { 15404 break 15405 } 15406 x6 := s5.Args[0] 15407 if x6.Op != OpPPC64MOVBZload { 15408 break 15409 } 15410 i6 := x6.AuxInt 15411 if x6.Aux != s { 15412 break 15413 } 15414 _ = x6.Args[1] 15415 if p != x6.Args[0] { 15416 break 15417 } 15418 if mem != x6.Args[1] { 15419 break 15420 } 15421 o4 := o5.Args[1] 15422 if o4.Op != OpPPC64OR { 15423 break 15424 } 15425 if o4.Type != t { 15426 break 15427 } 15428 _ = o4.Args[1] 15429 o3 := o4.Args[0] 15430 if o3.Op != OpPPC64OR { 15431 break 15432 } 15433 if o3.Type != t { 15434 break 15435 } 15436 _ = o3.Args[1] 15437 o2 := o3.Args[0] 15438 if o2.Op != OpPPC64OR { 15439 break 15440 } 15441 if o2.Type != t { 15442 break 15443 } 15444 _ = o2.Args[1] 15445 s2 := o2.Args[0] 15446 if s2.Op != OpPPC64SLDconst { 15447 break 15448 } 15449 if s2.AuxInt != 24 { 15450 break 15451 } 15452 x3 := s2.Args[0] 15453 if x3.Op != OpPPC64MOVBZload { 15454 break 15455 } 15456 i3 := x3.AuxInt 15457 if x3.Aux != s { 15458 break 15459 } 15460 _ = x3.Args[1] 15461 if p != x3.Args[0] { 15462 break 15463 } 15464 if mem != x3.Args[1] { 15465 break 15466 } 15467 o1 := o2.Args[1] 15468 if o1.Op != OpPPC64OR { 15469 break 15470 } 15471 if o1.Type != t { 15472 break 15473 } 15474 _ = o1.Args[1] 15475 s1 := o1.Args[0] 15476 if s1.Op != OpPPC64SLDconst { 15477 break 15478 } 15479 if s1.AuxInt != 16 { 15480 break 15481 } 15482 x2 := s1.Args[0] 15483 if x2.Op != OpPPC64MOVBZload { 15484 break 15485 } 15486 i2 := x2.AuxInt 15487 if x2.Aux != s { 15488 break 15489 } 15490 _ = x2.Args[1] 15491 if p != x2.Args[0] { 15492 break 15493 } 15494 if mem != x2.Args[1] { 15495 break 15496 } 15497 o0 := o1.Args[1] 15498 if o0.Op != OpPPC64OR { 15499 break 15500 } 15501 if o0.Type != t { 15502 break 15503 } 15504 _ = o0.Args[1] 15505 s0 := o0.Args[0] 15506 if s0.Op != OpPPC64SLDconst { 15507 break 15508 } 15509 if s0.AuxInt != 8 { 15510 break 15511 } 15512 x1 := s0.Args[0] 15513 if x1.Op != OpPPC64MOVBZload { 15514 break 15515 } 15516 i1 := x1.AuxInt 15517 if x1.Aux != s { 15518 break 15519 } 15520 _ = x1.Args[1] 15521 if p != x1.Args[0] { 15522 break 15523 } 15524 if mem != x1.Args[1] { 15525 break 15526 } 15527 x0 := o0.Args[1] 15528 if x0.Op != OpPPC64MOVBZload { 15529 break 15530 } 15531 i0 := x0.AuxInt 15532 if x0.Aux != s { 15533 break 15534 } 15535 _ = x0.Args[1] 15536 if p != x0.Args[0] { 15537 break 15538 } 15539 if mem != x0.Args[1] { 15540 break 15541 } 15542 s3 := o3.Args[1] 15543 if s3.Op != OpPPC64SLDconst { 15544 break 15545 } 15546 if s3.AuxInt != 32 { 15547 break 15548 } 15549 x4 := s3.Args[0] 15550 if x4.Op != OpPPC64MOVBZload { 15551 break 15552 } 15553 i4 := x4.AuxInt 15554 if x4.Aux != s { 15555 break 15556 } 15557 _ = x4.Args[1] 15558 if p != x4.Args[0] { 15559 break 15560 } 15561 if mem != x4.Args[1] { 15562 break 15563 } 15564 s4 := o4.Args[1] 15565 if s4.Op != OpPPC64SLDconst { 15566 break 15567 } 15568 if s4.AuxInt != 40 { 15569 break 15570 } 15571 x5 := s4.Args[0] 15572 if x5.Op != OpPPC64MOVBZload { 15573 break 15574 } 15575 i5 := x5.AuxInt 15576 if x5.Aux != s { 15577 break 15578 } 15579 _ = x5.Args[1] 15580 if p != x5.Args[0] { 15581 break 15582 } 15583 if mem != x5.Args[1] { 15584 break 15585 } 15586 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)) { 15587 break 15588 } 15589 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 15590 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 15591 v.reset(OpCopy) 15592 v.AddArg(v0) 15593 v0.AuxInt = i0 15594 v0.Aux = s 15595 v0.AddArg(p) 15596 v0.AddArg(mem) 15597 return true 15598 } 15599 // 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])))) 15600 // 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) 15601 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 15602 for { 15603 t := v.Type 15604 _ = v.Args[1] 15605 s6 := v.Args[0] 15606 if s6.Op != OpPPC64SLDconst { 15607 break 15608 } 15609 if s6.AuxInt != 56 { 15610 break 15611 } 15612 x7 := s6.Args[0] 15613 if x7.Op != OpPPC64MOVBZload { 15614 break 15615 } 15616 i7 := x7.AuxInt 15617 s := x7.Aux 15618 _ = x7.Args[1] 15619 p := x7.Args[0] 15620 mem := x7.Args[1] 15621 o5 := v.Args[1] 15622 if o5.Op != OpPPC64OR { 15623 break 15624 } 15625 if o5.Type != t { 15626 break 15627 } 15628 _ = o5.Args[1] 15629 s5 := o5.Args[0] 15630 if s5.Op != OpPPC64SLDconst { 15631 break 15632 } 15633 if s5.AuxInt != 48 { 15634 break 15635 } 15636 x6 := s5.Args[0] 15637 if x6.Op != OpPPC64MOVBZload { 15638 break 15639 } 15640 i6 := x6.AuxInt 15641 if x6.Aux != s { 15642 break 15643 } 15644 _ = x6.Args[1] 15645 if p != x6.Args[0] { 15646 break 15647 } 15648 if mem != x6.Args[1] { 15649 break 15650 } 15651 o4 := o5.Args[1] 15652 if o4.Op != OpPPC64OR { 15653 break 15654 } 15655 if o4.Type != t { 15656 break 15657 } 15658 _ = o4.Args[1] 15659 o3 := o4.Args[0] 15660 if o3.Op != OpPPC64OR { 15661 break 15662 } 15663 if o3.Type != t { 15664 break 15665 } 15666 _ = o3.Args[1] 15667 o2 := o3.Args[0] 15668 if o2.Op != OpPPC64OR { 15669 break 15670 } 15671 if o2.Type != t { 15672 break 15673 } 15674 _ = o2.Args[1] 15675 s2 := o2.Args[0] 15676 if s2.Op != OpPPC64SLDconst { 15677 break 15678 } 15679 if s2.AuxInt != 24 { 15680 break 15681 } 15682 x3 := s2.Args[0] 15683 if x3.Op != OpPPC64MOVBZload { 15684 break 15685 } 15686 i3 := x3.AuxInt 15687 if x3.Aux != s { 15688 break 15689 } 15690 _ = x3.Args[1] 15691 if p != x3.Args[0] { 15692 break 15693 } 15694 if mem != x3.Args[1] { 15695 break 15696 } 15697 o1 := o2.Args[1] 15698 if o1.Op != OpPPC64OR { 15699 break 15700 } 15701 if o1.Type != t { 15702 break 15703 } 15704 _ = o1.Args[1] 15705 s1 := o1.Args[0] 15706 if s1.Op != OpPPC64SLDconst { 15707 break 15708 } 15709 if s1.AuxInt != 16 { 15710 break 15711 } 15712 x2 := s1.Args[0] 15713 if x2.Op != OpPPC64MOVBZload { 15714 break 15715 } 15716 i2 := x2.AuxInt 15717 if x2.Aux != s { 15718 break 15719 } 15720 _ = x2.Args[1] 15721 if p != x2.Args[0] { 15722 break 15723 } 15724 if mem != x2.Args[1] { 15725 break 15726 } 15727 o0 := o1.Args[1] 15728 if o0.Op != OpPPC64OR { 15729 break 15730 } 15731 if o0.Type != t { 15732 break 15733 } 15734 _ = o0.Args[1] 15735 x0 := o0.Args[0] 15736 if x0.Op != OpPPC64MOVBZload { 15737 break 15738 } 15739 i0 := x0.AuxInt 15740 if x0.Aux != s { 15741 break 15742 } 15743 _ = x0.Args[1] 15744 if p != x0.Args[0] { 15745 break 15746 } 15747 if mem != x0.Args[1] { 15748 break 15749 } 15750 s0 := o0.Args[1] 15751 if s0.Op != OpPPC64SLDconst { 15752 break 15753 } 15754 if s0.AuxInt != 8 { 15755 break 15756 } 15757 x1 := s0.Args[0] 15758 if x1.Op != OpPPC64MOVBZload { 15759 break 15760 } 15761 i1 := x1.AuxInt 15762 if x1.Aux != s { 15763 break 15764 } 15765 _ = x1.Args[1] 15766 if p != x1.Args[0] { 15767 break 15768 } 15769 if mem != x1.Args[1] { 15770 break 15771 } 15772 s3 := o3.Args[1] 15773 if s3.Op != OpPPC64SLDconst { 15774 break 15775 } 15776 if s3.AuxInt != 32 { 15777 break 15778 } 15779 x4 := s3.Args[0] 15780 if x4.Op != OpPPC64MOVBZload { 15781 break 15782 } 15783 i4 := x4.AuxInt 15784 if x4.Aux != s { 15785 break 15786 } 15787 _ = x4.Args[1] 15788 if p != x4.Args[0] { 15789 break 15790 } 15791 if mem != x4.Args[1] { 15792 break 15793 } 15794 s4 := o4.Args[1] 15795 if s4.Op != OpPPC64SLDconst { 15796 break 15797 } 15798 if s4.AuxInt != 40 { 15799 break 15800 } 15801 x5 := s4.Args[0] 15802 if x5.Op != OpPPC64MOVBZload { 15803 break 15804 } 15805 i5 := x5.AuxInt 15806 if x5.Aux != s { 15807 break 15808 } 15809 _ = x5.Args[1] 15810 if p != x5.Args[0] { 15811 break 15812 } 15813 if mem != x5.Args[1] { 15814 break 15815 } 15816 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)) { 15817 break 15818 } 15819 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 15820 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 15821 v.reset(OpCopy) 15822 v.AddArg(v0) 15823 v0.AuxInt = i0 15824 v0.Aux = s 15825 v0.AddArg(p) 15826 v0.AddArg(mem) 15827 return true 15828 } 15829 // 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])))) 15830 // 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) 15831 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 15832 for { 15833 t := v.Type 15834 _ = v.Args[1] 15835 s6 := v.Args[0] 15836 if s6.Op != OpPPC64SLDconst { 15837 break 15838 } 15839 if s6.AuxInt != 56 { 15840 break 15841 } 15842 x7 := s6.Args[0] 15843 if x7.Op != OpPPC64MOVBZload { 15844 break 15845 } 15846 i7 := x7.AuxInt 15847 s := x7.Aux 15848 _ = x7.Args[1] 15849 p := x7.Args[0] 15850 mem := x7.Args[1] 15851 o5 := v.Args[1] 15852 if o5.Op != OpPPC64OR { 15853 break 15854 } 15855 if o5.Type != t { 15856 break 15857 } 15858 _ = o5.Args[1] 15859 s5 := o5.Args[0] 15860 if s5.Op != OpPPC64SLDconst { 15861 break 15862 } 15863 if s5.AuxInt != 48 { 15864 break 15865 } 15866 x6 := s5.Args[0] 15867 if x6.Op != OpPPC64MOVBZload { 15868 break 15869 } 15870 i6 := x6.AuxInt 15871 if x6.Aux != s { 15872 break 15873 } 15874 _ = x6.Args[1] 15875 if p != x6.Args[0] { 15876 break 15877 } 15878 if mem != x6.Args[1] { 15879 break 15880 } 15881 o4 := o5.Args[1] 15882 if o4.Op != OpPPC64OR { 15883 break 15884 } 15885 if o4.Type != t { 15886 break 15887 } 15888 _ = o4.Args[1] 15889 o3 := o4.Args[0] 15890 if o3.Op != OpPPC64OR { 15891 break 15892 } 15893 if o3.Type != t { 15894 break 15895 } 15896 _ = o3.Args[1] 15897 o2 := o3.Args[0] 15898 if o2.Op != OpPPC64OR { 15899 break 15900 } 15901 if o2.Type != t { 15902 break 15903 } 15904 _ = o2.Args[1] 15905 s2 := o2.Args[0] 15906 if s2.Op != OpPPC64SLDconst { 15907 break 15908 } 15909 if s2.AuxInt != 24 { 15910 break 15911 } 15912 x3 := s2.Args[0] 15913 if x3.Op != OpPPC64MOVBZload { 15914 break 15915 } 15916 i3 := x3.AuxInt 15917 if x3.Aux != s { 15918 break 15919 } 15920 _ = x3.Args[1] 15921 if p != x3.Args[0] { 15922 break 15923 } 15924 if mem != x3.Args[1] { 15925 break 15926 } 15927 o1 := o2.Args[1] 15928 if o1.Op != OpPPC64OR { 15929 break 15930 } 15931 if o1.Type != t { 15932 break 15933 } 15934 _ = o1.Args[1] 15935 o0 := o1.Args[0] 15936 if o0.Op != OpPPC64OR { 15937 break 15938 } 15939 if o0.Type != t { 15940 break 15941 } 15942 _ = o0.Args[1] 15943 s0 := o0.Args[0] 15944 if s0.Op != OpPPC64SLDconst { 15945 break 15946 } 15947 if s0.AuxInt != 8 { 15948 break 15949 } 15950 x1 := s0.Args[0] 15951 if x1.Op != OpPPC64MOVBZload { 15952 break 15953 } 15954 i1 := x1.AuxInt 15955 if x1.Aux != s { 15956 break 15957 } 15958 _ = x1.Args[1] 15959 if p != x1.Args[0] { 15960 break 15961 } 15962 if mem != x1.Args[1] { 15963 break 15964 } 15965 x0 := o0.Args[1] 15966 if x0.Op != OpPPC64MOVBZload { 15967 break 15968 } 15969 i0 := x0.AuxInt 15970 if x0.Aux != s { 15971 break 15972 } 15973 _ = x0.Args[1] 15974 if p != x0.Args[0] { 15975 break 15976 } 15977 if mem != x0.Args[1] { 15978 break 15979 } 15980 s1 := o1.Args[1] 15981 if s1.Op != OpPPC64SLDconst { 15982 break 15983 } 15984 if s1.AuxInt != 16 { 15985 break 15986 } 15987 x2 := s1.Args[0] 15988 if x2.Op != OpPPC64MOVBZload { 15989 break 15990 } 15991 i2 := x2.AuxInt 15992 if x2.Aux != s { 15993 break 15994 } 15995 _ = x2.Args[1] 15996 if p != x2.Args[0] { 15997 break 15998 } 15999 if mem != x2.Args[1] { 16000 break 16001 } 16002 s3 := o3.Args[1] 16003 if s3.Op != OpPPC64SLDconst { 16004 break 16005 } 16006 if s3.AuxInt != 32 { 16007 break 16008 } 16009 x4 := s3.Args[0] 16010 if x4.Op != OpPPC64MOVBZload { 16011 break 16012 } 16013 i4 := x4.AuxInt 16014 if x4.Aux != s { 16015 break 16016 } 16017 _ = x4.Args[1] 16018 if p != x4.Args[0] { 16019 break 16020 } 16021 if mem != x4.Args[1] { 16022 break 16023 } 16024 s4 := o4.Args[1] 16025 if s4.Op != OpPPC64SLDconst { 16026 break 16027 } 16028 if s4.AuxInt != 40 { 16029 break 16030 } 16031 x5 := s4.Args[0] 16032 if x5.Op != OpPPC64MOVBZload { 16033 break 16034 } 16035 i5 := x5.AuxInt 16036 if x5.Aux != s { 16037 break 16038 } 16039 _ = x5.Args[1] 16040 if p != x5.Args[0] { 16041 break 16042 } 16043 if mem != x5.Args[1] { 16044 break 16045 } 16046 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)) { 16047 break 16048 } 16049 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 16050 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 16051 v.reset(OpCopy) 16052 v.AddArg(v0) 16053 v0.AuxInt = i0 16054 v0.Aux = s 16055 v0.AddArg(p) 16056 v0.AddArg(mem) 16057 return true 16058 } 16059 // 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])))) 16060 // 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) 16061 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 16062 for { 16063 t := v.Type 16064 _ = v.Args[1] 16065 s6 := v.Args[0] 16066 if s6.Op != OpPPC64SLDconst { 16067 break 16068 } 16069 if s6.AuxInt != 56 { 16070 break 16071 } 16072 x7 := s6.Args[0] 16073 if x7.Op != OpPPC64MOVBZload { 16074 break 16075 } 16076 i7 := x7.AuxInt 16077 s := x7.Aux 16078 _ = x7.Args[1] 16079 p := x7.Args[0] 16080 mem := x7.Args[1] 16081 o5 := v.Args[1] 16082 if o5.Op != OpPPC64OR { 16083 break 16084 } 16085 if o5.Type != t { 16086 break 16087 } 16088 _ = o5.Args[1] 16089 s5 := o5.Args[0] 16090 if s5.Op != OpPPC64SLDconst { 16091 break 16092 } 16093 if s5.AuxInt != 48 { 16094 break 16095 } 16096 x6 := s5.Args[0] 16097 if x6.Op != OpPPC64MOVBZload { 16098 break 16099 } 16100 i6 := x6.AuxInt 16101 if x6.Aux != s { 16102 break 16103 } 16104 _ = x6.Args[1] 16105 if p != x6.Args[0] { 16106 break 16107 } 16108 if mem != x6.Args[1] { 16109 break 16110 } 16111 o4 := o5.Args[1] 16112 if o4.Op != OpPPC64OR { 16113 break 16114 } 16115 if o4.Type != t { 16116 break 16117 } 16118 _ = o4.Args[1] 16119 o3 := o4.Args[0] 16120 if o3.Op != OpPPC64OR { 16121 break 16122 } 16123 if o3.Type != t { 16124 break 16125 } 16126 _ = o3.Args[1] 16127 o2 := o3.Args[0] 16128 if o2.Op != OpPPC64OR { 16129 break 16130 } 16131 if o2.Type != t { 16132 break 16133 } 16134 _ = o2.Args[1] 16135 s2 := o2.Args[0] 16136 if s2.Op != OpPPC64SLDconst { 16137 break 16138 } 16139 if s2.AuxInt != 24 { 16140 break 16141 } 16142 x3 := s2.Args[0] 16143 if x3.Op != OpPPC64MOVBZload { 16144 break 16145 } 16146 i3 := x3.AuxInt 16147 if x3.Aux != s { 16148 break 16149 } 16150 _ = x3.Args[1] 16151 if p != x3.Args[0] { 16152 break 16153 } 16154 if mem != x3.Args[1] { 16155 break 16156 } 16157 o1 := o2.Args[1] 16158 if o1.Op != OpPPC64OR { 16159 break 16160 } 16161 if o1.Type != t { 16162 break 16163 } 16164 _ = o1.Args[1] 16165 o0 := o1.Args[0] 16166 if o0.Op != OpPPC64OR { 16167 break 16168 } 16169 if o0.Type != t { 16170 break 16171 } 16172 _ = o0.Args[1] 16173 x0 := o0.Args[0] 16174 if x0.Op != OpPPC64MOVBZload { 16175 break 16176 } 16177 i0 := x0.AuxInt 16178 if x0.Aux != s { 16179 break 16180 } 16181 _ = x0.Args[1] 16182 if p != x0.Args[0] { 16183 break 16184 } 16185 if mem != x0.Args[1] { 16186 break 16187 } 16188 s0 := o0.Args[1] 16189 if s0.Op != OpPPC64SLDconst { 16190 break 16191 } 16192 if s0.AuxInt != 8 { 16193 break 16194 } 16195 x1 := s0.Args[0] 16196 if x1.Op != OpPPC64MOVBZload { 16197 break 16198 } 16199 i1 := x1.AuxInt 16200 if x1.Aux != s { 16201 break 16202 } 16203 _ = x1.Args[1] 16204 if p != x1.Args[0] { 16205 break 16206 } 16207 if mem != x1.Args[1] { 16208 break 16209 } 16210 s1 := o1.Args[1] 16211 if s1.Op != OpPPC64SLDconst { 16212 break 16213 } 16214 if s1.AuxInt != 16 { 16215 break 16216 } 16217 x2 := s1.Args[0] 16218 if x2.Op != OpPPC64MOVBZload { 16219 break 16220 } 16221 i2 := x2.AuxInt 16222 if x2.Aux != s { 16223 break 16224 } 16225 _ = x2.Args[1] 16226 if p != x2.Args[0] { 16227 break 16228 } 16229 if mem != x2.Args[1] { 16230 break 16231 } 16232 s3 := o3.Args[1] 16233 if s3.Op != OpPPC64SLDconst { 16234 break 16235 } 16236 if s3.AuxInt != 32 { 16237 break 16238 } 16239 x4 := s3.Args[0] 16240 if x4.Op != OpPPC64MOVBZload { 16241 break 16242 } 16243 i4 := x4.AuxInt 16244 if x4.Aux != s { 16245 break 16246 } 16247 _ = x4.Args[1] 16248 if p != x4.Args[0] { 16249 break 16250 } 16251 if mem != x4.Args[1] { 16252 break 16253 } 16254 s4 := o4.Args[1] 16255 if s4.Op != OpPPC64SLDconst { 16256 break 16257 } 16258 if s4.AuxInt != 40 { 16259 break 16260 } 16261 x5 := s4.Args[0] 16262 if x5.Op != OpPPC64MOVBZload { 16263 break 16264 } 16265 i5 := x5.AuxInt 16266 if x5.Aux != s { 16267 break 16268 } 16269 _ = x5.Args[1] 16270 if p != x5.Args[0] { 16271 break 16272 } 16273 if mem != x5.Args[1] { 16274 break 16275 } 16276 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)) { 16277 break 16278 } 16279 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 16280 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 16281 v.reset(OpCopy) 16282 v.AddArg(v0) 16283 v0.AuxInt = i0 16284 v0.Aux = s 16285 v0.AddArg(p) 16286 v0.AddArg(mem) 16287 return true 16288 } 16289 // 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])))) 16290 // 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) 16291 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 16292 for { 16293 t := v.Type 16294 _ = v.Args[1] 16295 s6 := v.Args[0] 16296 if s6.Op != OpPPC64SLDconst { 16297 break 16298 } 16299 if s6.AuxInt != 56 { 16300 break 16301 } 16302 x7 := s6.Args[0] 16303 if x7.Op != OpPPC64MOVBZload { 16304 break 16305 } 16306 i7 := x7.AuxInt 16307 s := x7.Aux 16308 _ = x7.Args[1] 16309 p := x7.Args[0] 16310 mem := x7.Args[1] 16311 o5 := v.Args[1] 16312 if o5.Op != OpPPC64OR { 16313 break 16314 } 16315 if o5.Type != t { 16316 break 16317 } 16318 _ = o5.Args[1] 16319 s5 := o5.Args[0] 16320 if s5.Op != OpPPC64SLDconst { 16321 break 16322 } 16323 if s5.AuxInt != 48 { 16324 break 16325 } 16326 x6 := s5.Args[0] 16327 if x6.Op != OpPPC64MOVBZload { 16328 break 16329 } 16330 i6 := x6.AuxInt 16331 if x6.Aux != s { 16332 break 16333 } 16334 _ = x6.Args[1] 16335 if p != x6.Args[0] { 16336 break 16337 } 16338 if mem != x6.Args[1] { 16339 break 16340 } 16341 o4 := o5.Args[1] 16342 if o4.Op != OpPPC64OR { 16343 break 16344 } 16345 if o4.Type != t { 16346 break 16347 } 16348 _ = o4.Args[1] 16349 o3 := o4.Args[0] 16350 if o3.Op != OpPPC64OR { 16351 break 16352 } 16353 if o3.Type != t { 16354 break 16355 } 16356 _ = o3.Args[1] 16357 o2 := o3.Args[0] 16358 if o2.Op != OpPPC64OR { 16359 break 16360 } 16361 if o2.Type != t { 16362 break 16363 } 16364 _ = o2.Args[1] 16365 o1 := o2.Args[0] 16366 if o1.Op != OpPPC64OR { 16367 break 16368 } 16369 if o1.Type != t { 16370 break 16371 } 16372 _ = o1.Args[1] 16373 s1 := o1.Args[0] 16374 if s1.Op != OpPPC64SLDconst { 16375 break 16376 } 16377 if s1.AuxInt != 16 { 16378 break 16379 } 16380 x2 := s1.Args[0] 16381 if x2.Op != OpPPC64MOVBZload { 16382 break 16383 } 16384 i2 := x2.AuxInt 16385 if x2.Aux != s { 16386 break 16387 } 16388 _ = x2.Args[1] 16389 if p != x2.Args[0] { 16390 break 16391 } 16392 if mem != x2.Args[1] { 16393 break 16394 } 16395 o0 := o1.Args[1] 16396 if o0.Op != OpPPC64OR { 16397 break 16398 } 16399 if o0.Type != t { 16400 break 16401 } 16402 _ = o0.Args[1] 16403 s0 := o0.Args[0] 16404 if s0.Op != OpPPC64SLDconst { 16405 break 16406 } 16407 if s0.AuxInt != 8 { 16408 break 16409 } 16410 x1 := s0.Args[0] 16411 if x1.Op != OpPPC64MOVBZload { 16412 break 16413 } 16414 i1 := x1.AuxInt 16415 if x1.Aux != s { 16416 break 16417 } 16418 _ = x1.Args[1] 16419 if p != x1.Args[0] { 16420 break 16421 } 16422 if mem != x1.Args[1] { 16423 break 16424 } 16425 x0 := o0.Args[1] 16426 if x0.Op != OpPPC64MOVBZload { 16427 break 16428 } 16429 i0 := x0.AuxInt 16430 if x0.Aux != s { 16431 break 16432 } 16433 _ = x0.Args[1] 16434 if p != x0.Args[0] { 16435 break 16436 } 16437 if mem != x0.Args[1] { 16438 break 16439 } 16440 s2 := o2.Args[1] 16441 if s2.Op != OpPPC64SLDconst { 16442 break 16443 } 16444 if s2.AuxInt != 24 { 16445 break 16446 } 16447 x3 := s2.Args[0] 16448 if x3.Op != OpPPC64MOVBZload { 16449 break 16450 } 16451 i3 := x3.AuxInt 16452 if x3.Aux != s { 16453 break 16454 } 16455 _ = x3.Args[1] 16456 if p != x3.Args[0] { 16457 break 16458 } 16459 if mem != x3.Args[1] { 16460 break 16461 } 16462 s3 := o3.Args[1] 16463 if s3.Op != OpPPC64SLDconst { 16464 break 16465 } 16466 if s3.AuxInt != 32 { 16467 break 16468 } 16469 x4 := s3.Args[0] 16470 if x4.Op != OpPPC64MOVBZload { 16471 break 16472 } 16473 i4 := x4.AuxInt 16474 if x4.Aux != s { 16475 break 16476 } 16477 _ = x4.Args[1] 16478 if p != x4.Args[0] { 16479 break 16480 } 16481 if mem != x4.Args[1] { 16482 break 16483 } 16484 s4 := o4.Args[1] 16485 if s4.Op != OpPPC64SLDconst { 16486 break 16487 } 16488 if s4.AuxInt != 40 { 16489 break 16490 } 16491 x5 := s4.Args[0] 16492 if x5.Op != OpPPC64MOVBZload { 16493 break 16494 } 16495 i5 := x5.AuxInt 16496 if x5.Aux != s { 16497 break 16498 } 16499 _ = x5.Args[1] 16500 if p != x5.Args[0] { 16501 break 16502 } 16503 if mem != x5.Args[1] { 16504 break 16505 } 16506 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)) { 16507 break 16508 } 16509 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 16510 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 16511 v.reset(OpCopy) 16512 v.AddArg(v0) 16513 v0.AuxInt = i0 16514 v0.Aux = s 16515 v0.AddArg(p) 16516 v0.AddArg(mem) 16517 return true 16518 } 16519 // 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])))) 16520 // 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) 16521 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 16522 for { 16523 t := v.Type 16524 _ = v.Args[1] 16525 s6 := v.Args[0] 16526 if s6.Op != OpPPC64SLDconst { 16527 break 16528 } 16529 if s6.AuxInt != 56 { 16530 break 16531 } 16532 x7 := s6.Args[0] 16533 if x7.Op != OpPPC64MOVBZload { 16534 break 16535 } 16536 i7 := x7.AuxInt 16537 s := x7.Aux 16538 _ = x7.Args[1] 16539 p := x7.Args[0] 16540 mem := x7.Args[1] 16541 o5 := v.Args[1] 16542 if o5.Op != OpPPC64OR { 16543 break 16544 } 16545 if o5.Type != t { 16546 break 16547 } 16548 _ = o5.Args[1] 16549 s5 := o5.Args[0] 16550 if s5.Op != OpPPC64SLDconst { 16551 break 16552 } 16553 if s5.AuxInt != 48 { 16554 break 16555 } 16556 x6 := s5.Args[0] 16557 if x6.Op != OpPPC64MOVBZload { 16558 break 16559 } 16560 i6 := x6.AuxInt 16561 if x6.Aux != s { 16562 break 16563 } 16564 _ = x6.Args[1] 16565 if p != x6.Args[0] { 16566 break 16567 } 16568 if mem != x6.Args[1] { 16569 break 16570 } 16571 o4 := o5.Args[1] 16572 if o4.Op != OpPPC64OR { 16573 break 16574 } 16575 if o4.Type != t { 16576 break 16577 } 16578 _ = o4.Args[1] 16579 o3 := o4.Args[0] 16580 if o3.Op != OpPPC64OR { 16581 break 16582 } 16583 if o3.Type != t { 16584 break 16585 } 16586 _ = o3.Args[1] 16587 o2 := o3.Args[0] 16588 if o2.Op != OpPPC64OR { 16589 break 16590 } 16591 if o2.Type != t { 16592 break 16593 } 16594 _ = o2.Args[1] 16595 o1 := o2.Args[0] 16596 if o1.Op != OpPPC64OR { 16597 break 16598 } 16599 if o1.Type != t { 16600 break 16601 } 16602 _ = o1.Args[1] 16603 s1 := o1.Args[0] 16604 if s1.Op != OpPPC64SLDconst { 16605 break 16606 } 16607 if s1.AuxInt != 16 { 16608 break 16609 } 16610 x2 := s1.Args[0] 16611 if x2.Op != OpPPC64MOVBZload { 16612 break 16613 } 16614 i2 := x2.AuxInt 16615 if x2.Aux != s { 16616 break 16617 } 16618 _ = x2.Args[1] 16619 if p != x2.Args[0] { 16620 break 16621 } 16622 if mem != x2.Args[1] { 16623 break 16624 } 16625 o0 := o1.Args[1] 16626 if o0.Op != OpPPC64OR { 16627 break 16628 } 16629 if o0.Type != t { 16630 break 16631 } 16632 _ = o0.Args[1] 16633 x0 := o0.Args[0] 16634 if x0.Op != OpPPC64MOVBZload { 16635 break 16636 } 16637 i0 := x0.AuxInt 16638 if x0.Aux != s { 16639 break 16640 } 16641 _ = x0.Args[1] 16642 if p != x0.Args[0] { 16643 break 16644 } 16645 if mem != x0.Args[1] { 16646 break 16647 } 16648 s0 := o0.Args[1] 16649 if s0.Op != OpPPC64SLDconst { 16650 break 16651 } 16652 if s0.AuxInt != 8 { 16653 break 16654 } 16655 x1 := s0.Args[0] 16656 if x1.Op != OpPPC64MOVBZload { 16657 break 16658 } 16659 i1 := x1.AuxInt 16660 if x1.Aux != s { 16661 break 16662 } 16663 _ = x1.Args[1] 16664 if p != x1.Args[0] { 16665 break 16666 } 16667 if mem != x1.Args[1] { 16668 break 16669 } 16670 s2 := o2.Args[1] 16671 if s2.Op != OpPPC64SLDconst { 16672 break 16673 } 16674 if s2.AuxInt != 24 { 16675 break 16676 } 16677 x3 := s2.Args[0] 16678 if x3.Op != OpPPC64MOVBZload { 16679 break 16680 } 16681 i3 := x3.AuxInt 16682 if x3.Aux != s { 16683 break 16684 } 16685 _ = x3.Args[1] 16686 if p != x3.Args[0] { 16687 break 16688 } 16689 if mem != x3.Args[1] { 16690 break 16691 } 16692 s3 := o3.Args[1] 16693 if s3.Op != OpPPC64SLDconst { 16694 break 16695 } 16696 if s3.AuxInt != 32 { 16697 break 16698 } 16699 x4 := s3.Args[0] 16700 if x4.Op != OpPPC64MOVBZload { 16701 break 16702 } 16703 i4 := x4.AuxInt 16704 if x4.Aux != s { 16705 break 16706 } 16707 _ = x4.Args[1] 16708 if p != x4.Args[0] { 16709 break 16710 } 16711 if mem != x4.Args[1] { 16712 break 16713 } 16714 s4 := o4.Args[1] 16715 if s4.Op != OpPPC64SLDconst { 16716 break 16717 } 16718 if s4.AuxInt != 40 { 16719 break 16720 } 16721 x5 := s4.Args[0] 16722 if x5.Op != OpPPC64MOVBZload { 16723 break 16724 } 16725 i5 := x5.AuxInt 16726 if x5.Aux != s { 16727 break 16728 } 16729 _ = x5.Args[1] 16730 if p != x5.Args[0] { 16731 break 16732 } 16733 if mem != x5.Args[1] { 16734 break 16735 } 16736 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)) { 16737 break 16738 } 16739 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 16740 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 16741 v.reset(OpCopy) 16742 v.AddArg(v0) 16743 v0.AuxInt = i0 16744 v0.Aux = s 16745 v0.AddArg(p) 16746 v0.AddArg(mem) 16747 return true 16748 } 16749 // 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])))) 16750 // 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) 16751 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 16752 for { 16753 t := v.Type 16754 _ = v.Args[1] 16755 s6 := v.Args[0] 16756 if s6.Op != OpPPC64SLDconst { 16757 break 16758 } 16759 if s6.AuxInt != 56 { 16760 break 16761 } 16762 x7 := s6.Args[0] 16763 if x7.Op != OpPPC64MOVBZload { 16764 break 16765 } 16766 i7 := x7.AuxInt 16767 s := x7.Aux 16768 _ = x7.Args[1] 16769 p := x7.Args[0] 16770 mem := x7.Args[1] 16771 o5 := v.Args[1] 16772 if o5.Op != OpPPC64OR { 16773 break 16774 } 16775 if o5.Type != t { 16776 break 16777 } 16778 _ = o5.Args[1] 16779 s5 := o5.Args[0] 16780 if s5.Op != OpPPC64SLDconst { 16781 break 16782 } 16783 if s5.AuxInt != 48 { 16784 break 16785 } 16786 x6 := s5.Args[0] 16787 if x6.Op != OpPPC64MOVBZload { 16788 break 16789 } 16790 i6 := x6.AuxInt 16791 if x6.Aux != s { 16792 break 16793 } 16794 _ = x6.Args[1] 16795 if p != x6.Args[0] { 16796 break 16797 } 16798 if mem != x6.Args[1] { 16799 break 16800 } 16801 o4 := o5.Args[1] 16802 if o4.Op != OpPPC64OR { 16803 break 16804 } 16805 if o4.Type != t { 16806 break 16807 } 16808 _ = o4.Args[1] 16809 o3 := o4.Args[0] 16810 if o3.Op != OpPPC64OR { 16811 break 16812 } 16813 if o3.Type != t { 16814 break 16815 } 16816 _ = o3.Args[1] 16817 o2 := o3.Args[0] 16818 if o2.Op != OpPPC64OR { 16819 break 16820 } 16821 if o2.Type != t { 16822 break 16823 } 16824 _ = o2.Args[1] 16825 o1 := o2.Args[0] 16826 if o1.Op != OpPPC64OR { 16827 break 16828 } 16829 if o1.Type != t { 16830 break 16831 } 16832 _ = o1.Args[1] 16833 o0 := o1.Args[0] 16834 if o0.Op != OpPPC64OR { 16835 break 16836 } 16837 if o0.Type != t { 16838 break 16839 } 16840 _ = o0.Args[1] 16841 s0 := o0.Args[0] 16842 if s0.Op != OpPPC64SLDconst { 16843 break 16844 } 16845 if s0.AuxInt != 8 { 16846 break 16847 } 16848 x1 := s0.Args[0] 16849 if x1.Op != OpPPC64MOVBZload { 16850 break 16851 } 16852 i1 := x1.AuxInt 16853 if x1.Aux != s { 16854 break 16855 } 16856 _ = x1.Args[1] 16857 if p != x1.Args[0] { 16858 break 16859 } 16860 if mem != x1.Args[1] { 16861 break 16862 } 16863 x0 := o0.Args[1] 16864 if x0.Op != OpPPC64MOVBZload { 16865 break 16866 } 16867 i0 := x0.AuxInt 16868 if x0.Aux != s { 16869 break 16870 } 16871 _ = x0.Args[1] 16872 if p != x0.Args[0] { 16873 break 16874 } 16875 if mem != x0.Args[1] { 16876 break 16877 } 16878 s1 := o1.Args[1] 16879 if s1.Op != OpPPC64SLDconst { 16880 break 16881 } 16882 if s1.AuxInt != 16 { 16883 break 16884 } 16885 x2 := s1.Args[0] 16886 if x2.Op != OpPPC64MOVBZload { 16887 break 16888 } 16889 i2 := x2.AuxInt 16890 if x2.Aux != s { 16891 break 16892 } 16893 _ = x2.Args[1] 16894 if p != x2.Args[0] { 16895 break 16896 } 16897 if mem != x2.Args[1] { 16898 break 16899 } 16900 s2 := o2.Args[1] 16901 if s2.Op != OpPPC64SLDconst { 16902 break 16903 } 16904 if s2.AuxInt != 24 { 16905 break 16906 } 16907 x3 := s2.Args[0] 16908 if x3.Op != OpPPC64MOVBZload { 16909 break 16910 } 16911 i3 := x3.AuxInt 16912 if x3.Aux != s { 16913 break 16914 } 16915 _ = x3.Args[1] 16916 if p != x3.Args[0] { 16917 break 16918 } 16919 if mem != x3.Args[1] { 16920 break 16921 } 16922 s3 := o3.Args[1] 16923 if s3.Op != OpPPC64SLDconst { 16924 break 16925 } 16926 if s3.AuxInt != 32 { 16927 break 16928 } 16929 x4 := s3.Args[0] 16930 if x4.Op != OpPPC64MOVBZload { 16931 break 16932 } 16933 i4 := x4.AuxInt 16934 if x4.Aux != s { 16935 break 16936 } 16937 _ = x4.Args[1] 16938 if p != x4.Args[0] { 16939 break 16940 } 16941 if mem != x4.Args[1] { 16942 break 16943 } 16944 s4 := o4.Args[1] 16945 if s4.Op != OpPPC64SLDconst { 16946 break 16947 } 16948 if s4.AuxInt != 40 { 16949 break 16950 } 16951 x5 := s4.Args[0] 16952 if x5.Op != OpPPC64MOVBZload { 16953 break 16954 } 16955 i5 := x5.AuxInt 16956 if x5.Aux != s { 16957 break 16958 } 16959 _ = x5.Args[1] 16960 if p != x5.Args[0] { 16961 break 16962 } 16963 if mem != x5.Args[1] { 16964 break 16965 } 16966 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)) { 16967 break 16968 } 16969 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 16970 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 16971 v.reset(OpCopy) 16972 v.AddArg(v0) 16973 v0.AuxInt = i0 16974 v0.Aux = s 16975 v0.AddArg(p) 16976 v0.AddArg(mem) 16977 return true 16978 } 16979 // 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])))) 16980 // 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) 16981 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 16982 for { 16983 t := v.Type 16984 _ = v.Args[1] 16985 s6 := v.Args[0] 16986 if s6.Op != OpPPC64SLDconst { 16987 break 16988 } 16989 if s6.AuxInt != 56 { 16990 break 16991 } 16992 x7 := s6.Args[0] 16993 if x7.Op != OpPPC64MOVBZload { 16994 break 16995 } 16996 i7 := x7.AuxInt 16997 s := x7.Aux 16998 _ = x7.Args[1] 16999 p := x7.Args[0] 17000 mem := x7.Args[1] 17001 o5 := v.Args[1] 17002 if o5.Op != OpPPC64OR { 17003 break 17004 } 17005 if o5.Type != t { 17006 break 17007 } 17008 _ = o5.Args[1] 17009 s5 := o5.Args[0] 17010 if s5.Op != OpPPC64SLDconst { 17011 break 17012 } 17013 if s5.AuxInt != 48 { 17014 break 17015 } 17016 x6 := s5.Args[0] 17017 if x6.Op != OpPPC64MOVBZload { 17018 break 17019 } 17020 i6 := x6.AuxInt 17021 if x6.Aux != s { 17022 break 17023 } 17024 _ = x6.Args[1] 17025 if p != x6.Args[0] { 17026 break 17027 } 17028 if mem != x6.Args[1] { 17029 break 17030 } 17031 o4 := o5.Args[1] 17032 if o4.Op != OpPPC64OR { 17033 break 17034 } 17035 if o4.Type != t { 17036 break 17037 } 17038 _ = o4.Args[1] 17039 o3 := o4.Args[0] 17040 if o3.Op != OpPPC64OR { 17041 break 17042 } 17043 if o3.Type != t { 17044 break 17045 } 17046 _ = o3.Args[1] 17047 o2 := o3.Args[0] 17048 if o2.Op != OpPPC64OR { 17049 break 17050 } 17051 if o2.Type != t { 17052 break 17053 } 17054 _ = o2.Args[1] 17055 o1 := o2.Args[0] 17056 if o1.Op != OpPPC64OR { 17057 break 17058 } 17059 if o1.Type != t { 17060 break 17061 } 17062 _ = o1.Args[1] 17063 o0 := o1.Args[0] 17064 if o0.Op != OpPPC64OR { 17065 break 17066 } 17067 if o0.Type != t { 17068 break 17069 } 17070 _ = o0.Args[1] 17071 x0 := o0.Args[0] 17072 if x0.Op != OpPPC64MOVBZload { 17073 break 17074 } 17075 i0 := x0.AuxInt 17076 if x0.Aux != s { 17077 break 17078 } 17079 _ = x0.Args[1] 17080 if p != x0.Args[0] { 17081 break 17082 } 17083 if mem != x0.Args[1] { 17084 break 17085 } 17086 s0 := o0.Args[1] 17087 if s0.Op != OpPPC64SLDconst { 17088 break 17089 } 17090 if s0.AuxInt != 8 { 17091 break 17092 } 17093 x1 := s0.Args[0] 17094 if x1.Op != OpPPC64MOVBZload { 17095 break 17096 } 17097 i1 := x1.AuxInt 17098 if x1.Aux != s { 17099 break 17100 } 17101 _ = x1.Args[1] 17102 if p != x1.Args[0] { 17103 break 17104 } 17105 if mem != x1.Args[1] { 17106 break 17107 } 17108 s1 := o1.Args[1] 17109 if s1.Op != OpPPC64SLDconst { 17110 break 17111 } 17112 if s1.AuxInt != 16 { 17113 break 17114 } 17115 x2 := s1.Args[0] 17116 if x2.Op != OpPPC64MOVBZload { 17117 break 17118 } 17119 i2 := x2.AuxInt 17120 if x2.Aux != s { 17121 break 17122 } 17123 _ = x2.Args[1] 17124 if p != x2.Args[0] { 17125 break 17126 } 17127 if mem != x2.Args[1] { 17128 break 17129 } 17130 s2 := o2.Args[1] 17131 if s2.Op != OpPPC64SLDconst { 17132 break 17133 } 17134 if s2.AuxInt != 24 { 17135 break 17136 } 17137 x3 := s2.Args[0] 17138 if x3.Op != OpPPC64MOVBZload { 17139 break 17140 } 17141 i3 := x3.AuxInt 17142 if x3.Aux != s { 17143 break 17144 } 17145 _ = x3.Args[1] 17146 if p != x3.Args[0] { 17147 break 17148 } 17149 if mem != x3.Args[1] { 17150 break 17151 } 17152 s3 := o3.Args[1] 17153 if s3.Op != OpPPC64SLDconst { 17154 break 17155 } 17156 if s3.AuxInt != 32 { 17157 break 17158 } 17159 x4 := s3.Args[0] 17160 if x4.Op != OpPPC64MOVBZload { 17161 break 17162 } 17163 i4 := x4.AuxInt 17164 if x4.Aux != s { 17165 break 17166 } 17167 _ = x4.Args[1] 17168 if p != x4.Args[0] { 17169 break 17170 } 17171 if mem != x4.Args[1] { 17172 break 17173 } 17174 s4 := o4.Args[1] 17175 if s4.Op != OpPPC64SLDconst { 17176 break 17177 } 17178 if s4.AuxInt != 40 { 17179 break 17180 } 17181 x5 := s4.Args[0] 17182 if x5.Op != OpPPC64MOVBZload { 17183 break 17184 } 17185 i5 := x5.AuxInt 17186 if x5.Aux != s { 17187 break 17188 } 17189 _ = x5.Args[1] 17190 if p != x5.Args[0] { 17191 break 17192 } 17193 if mem != x5.Args[1] { 17194 break 17195 } 17196 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)) { 17197 break 17198 } 17199 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 17200 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 17201 v.reset(OpCopy) 17202 v.AddArg(v0) 17203 v0.AuxInt = i0 17204 v0.Aux = s 17205 v0.AddArg(p) 17206 v0.AddArg(mem) 17207 return true 17208 } 17209 return false 17210 } 17211 func rewriteValuePPC64_OpPPC64OR_50(v *Value) bool { 17212 b := v.Block 17213 _ = b 17214 config := b.Func.Config 17215 _ = config 17216 // 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]))) 17217 // 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) 17218 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 17219 for { 17220 t := v.Type 17221 _ = v.Args[1] 17222 s6 := v.Args[0] 17223 if s6.Op != OpPPC64SLDconst { 17224 break 17225 } 17226 if s6.AuxInt != 56 { 17227 break 17228 } 17229 x7 := s6.Args[0] 17230 if x7.Op != OpPPC64MOVBZload { 17231 break 17232 } 17233 i7 := x7.AuxInt 17234 s := x7.Aux 17235 _ = x7.Args[1] 17236 p := x7.Args[0] 17237 mem := x7.Args[1] 17238 o5 := v.Args[1] 17239 if o5.Op != OpPPC64OR { 17240 break 17241 } 17242 if o5.Type != t { 17243 break 17244 } 17245 _ = o5.Args[1] 17246 o4 := o5.Args[0] 17247 if o4.Op != OpPPC64OR { 17248 break 17249 } 17250 if o4.Type != t { 17251 break 17252 } 17253 _ = o4.Args[1] 17254 s4 := o4.Args[0] 17255 if s4.Op != OpPPC64SLDconst { 17256 break 17257 } 17258 if s4.AuxInt != 40 { 17259 break 17260 } 17261 x5 := s4.Args[0] 17262 if x5.Op != OpPPC64MOVBZload { 17263 break 17264 } 17265 i5 := x5.AuxInt 17266 if x5.Aux != s { 17267 break 17268 } 17269 _ = x5.Args[1] 17270 if p != x5.Args[0] { 17271 break 17272 } 17273 if mem != x5.Args[1] { 17274 break 17275 } 17276 o3 := o4.Args[1] 17277 if o3.Op != OpPPC64OR { 17278 break 17279 } 17280 if o3.Type != t { 17281 break 17282 } 17283 _ = o3.Args[1] 17284 s3 := o3.Args[0] 17285 if s3.Op != OpPPC64SLDconst { 17286 break 17287 } 17288 if s3.AuxInt != 32 { 17289 break 17290 } 17291 x4 := s3.Args[0] 17292 if x4.Op != OpPPC64MOVBZload { 17293 break 17294 } 17295 i4 := x4.AuxInt 17296 if x4.Aux != s { 17297 break 17298 } 17299 _ = x4.Args[1] 17300 if p != x4.Args[0] { 17301 break 17302 } 17303 if mem != x4.Args[1] { 17304 break 17305 } 17306 o2 := o3.Args[1] 17307 if o2.Op != OpPPC64OR { 17308 break 17309 } 17310 if o2.Type != t { 17311 break 17312 } 17313 _ = o2.Args[1] 17314 s2 := o2.Args[0] 17315 if s2.Op != OpPPC64SLDconst { 17316 break 17317 } 17318 if s2.AuxInt != 24 { 17319 break 17320 } 17321 x3 := s2.Args[0] 17322 if x3.Op != OpPPC64MOVBZload { 17323 break 17324 } 17325 i3 := x3.AuxInt 17326 if x3.Aux != s { 17327 break 17328 } 17329 _ = x3.Args[1] 17330 if p != x3.Args[0] { 17331 break 17332 } 17333 if mem != x3.Args[1] { 17334 break 17335 } 17336 o1 := o2.Args[1] 17337 if o1.Op != OpPPC64OR { 17338 break 17339 } 17340 if o1.Type != t { 17341 break 17342 } 17343 _ = o1.Args[1] 17344 s1 := o1.Args[0] 17345 if s1.Op != OpPPC64SLDconst { 17346 break 17347 } 17348 if s1.AuxInt != 16 { 17349 break 17350 } 17351 x2 := s1.Args[0] 17352 if x2.Op != OpPPC64MOVBZload { 17353 break 17354 } 17355 i2 := x2.AuxInt 17356 if x2.Aux != s { 17357 break 17358 } 17359 _ = x2.Args[1] 17360 if p != x2.Args[0] { 17361 break 17362 } 17363 if mem != x2.Args[1] { 17364 break 17365 } 17366 o0 := o1.Args[1] 17367 if o0.Op != OpPPC64OR { 17368 break 17369 } 17370 if o0.Type != t { 17371 break 17372 } 17373 _ = o0.Args[1] 17374 s0 := o0.Args[0] 17375 if s0.Op != OpPPC64SLDconst { 17376 break 17377 } 17378 if s0.AuxInt != 8 { 17379 break 17380 } 17381 x1 := s0.Args[0] 17382 if x1.Op != OpPPC64MOVBZload { 17383 break 17384 } 17385 i1 := x1.AuxInt 17386 if x1.Aux != s { 17387 break 17388 } 17389 _ = x1.Args[1] 17390 if p != x1.Args[0] { 17391 break 17392 } 17393 if mem != x1.Args[1] { 17394 break 17395 } 17396 x0 := o0.Args[1] 17397 if x0.Op != OpPPC64MOVBZload { 17398 break 17399 } 17400 i0 := x0.AuxInt 17401 if x0.Aux != s { 17402 break 17403 } 17404 _ = x0.Args[1] 17405 if p != x0.Args[0] { 17406 break 17407 } 17408 if mem != x0.Args[1] { 17409 break 17410 } 17411 s5 := o5.Args[1] 17412 if s5.Op != OpPPC64SLDconst { 17413 break 17414 } 17415 if s5.AuxInt != 48 { 17416 break 17417 } 17418 x6 := s5.Args[0] 17419 if x6.Op != OpPPC64MOVBZload { 17420 break 17421 } 17422 i6 := x6.AuxInt 17423 if x6.Aux != s { 17424 break 17425 } 17426 _ = x6.Args[1] 17427 if p != x6.Args[0] { 17428 break 17429 } 17430 if mem != x6.Args[1] { 17431 break 17432 } 17433 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)) { 17434 break 17435 } 17436 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 17437 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 17438 v.reset(OpCopy) 17439 v.AddArg(v0) 17440 v0.AuxInt = i0 17441 v0.Aux = s 17442 v0.AddArg(p) 17443 v0.AddArg(mem) 17444 return true 17445 } 17446 // 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]))) 17447 // 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) 17448 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 17449 for { 17450 t := v.Type 17451 _ = v.Args[1] 17452 s6 := v.Args[0] 17453 if s6.Op != OpPPC64SLDconst { 17454 break 17455 } 17456 if s6.AuxInt != 56 { 17457 break 17458 } 17459 x7 := s6.Args[0] 17460 if x7.Op != OpPPC64MOVBZload { 17461 break 17462 } 17463 i7 := x7.AuxInt 17464 s := x7.Aux 17465 _ = x7.Args[1] 17466 p := x7.Args[0] 17467 mem := x7.Args[1] 17468 o5 := v.Args[1] 17469 if o5.Op != OpPPC64OR { 17470 break 17471 } 17472 if o5.Type != t { 17473 break 17474 } 17475 _ = o5.Args[1] 17476 o4 := o5.Args[0] 17477 if o4.Op != OpPPC64OR { 17478 break 17479 } 17480 if o4.Type != t { 17481 break 17482 } 17483 _ = o4.Args[1] 17484 s4 := o4.Args[0] 17485 if s4.Op != OpPPC64SLDconst { 17486 break 17487 } 17488 if s4.AuxInt != 40 { 17489 break 17490 } 17491 x5 := s4.Args[0] 17492 if x5.Op != OpPPC64MOVBZload { 17493 break 17494 } 17495 i5 := x5.AuxInt 17496 if x5.Aux != s { 17497 break 17498 } 17499 _ = x5.Args[1] 17500 if p != x5.Args[0] { 17501 break 17502 } 17503 if mem != x5.Args[1] { 17504 break 17505 } 17506 o3 := o4.Args[1] 17507 if o3.Op != OpPPC64OR { 17508 break 17509 } 17510 if o3.Type != t { 17511 break 17512 } 17513 _ = o3.Args[1] 17514 s3 := o3.Args[0] 17515 if s3.Op != OpPPC64SLDconst { 17516 break 17517 } 17518 if s3.AuxInt != 32 { 17519 break 17520 } 17521 x4 := s3.Args[0] 17522 if x4.Op != OpPPC64MOVBZload { 17523 break 17524 } 17525 i4 := x4.AuxInt 17526 if x4.Aux != s { 17527 break 17528 } 17529 _ = x4.Args[1] 17530 if p != x4.Args[0] { 17531 break 17532 } 17533 if mem != x4.Args[1] { 17534 break 17535 } 17536 o2 := o3.Args[1] 17537 if o2.Op != OpPPC64OR { 17538 break 17539 } 17540 if o2.Type != t { 17541 break 17542 } 17543 _ = o2.Args[1] 17544 s2 := o2.Args[0] 17545 if s2.Op != OpPPC64SLDconst { 17546 break 17547 } 17548 if s2.AuxInt != 24 { 17549 break 17550 } 17551 x3 := s2.Args[0] 17552 if x3.Op != OpPPC64MOVBZload { 17553 break 17554 } 17555 i3 := x3.AuxInt 17556 if x3.Aux != s { 17557 break 17558 } 17559 _ = x3.Args[1] 17560 if p != x3.Args[0] { 17561 break 17562 } 17563 if mem != x3.Args[1] { 17564 break 17565 } 17566 o1 := o2.Args[1] 17567 if o1.Op != OpPPC64OR { 17568 break 17569 } 17570 if o1.Type != t { 17571 break 17572 } 17573 _ = o1.Args[1] 17574 s1 := o1.Args[0] 17575 if s1.Op != OpPPC64SLDconst { 17576 break 17577 } 17578 if s1.AuxInt != 16 { 17579 break 17580 } 17581 x2 := s1.Args[0] 17582 if x2.Op != OpPPC64MOVBZload { 17583 break 17584 } 17585 i2 := x2.AuxInt 17586 if x2.Aux != s { 17587 break 17588 } 17589 _ = x2.Args[1] 17590 if p != x2.Args[0] { 17591 break 17592 } 17593 if mem != x2.Args[1] { 17594 break 17595 } 17596 o0 := o1.Args[1] 17597 if o0.Op != OpPPC64OR { 17598 break 17599 } 17600 if o0.Type != t { 17601 break 17602 } 17603 _ = o0.Args[1] 17604 x0 := o0.Args[0] 17605 if x0.Op != OpPPC64MOVBZload { 17606 break 17607 } 17608 i0 := x0.AuxInt 17609 if x0.Aux != s { 17610 break 17611 } 17612 _ = x0.Args[1] 17613 if p != x0.Args[0] { 17614 break 17615 } 17616 if mem != x0.Args[1] { 17617 break 17618 } 17619 s0 := o0.Args[1] 17620 if s0.Op != OpPPC64SLDconst { 17621 break 17622 } 17623 if s0.AuxInt != 8 { 17624 break 17625 } 17626 x1 := s0.Args[0] 17627 if x1.Op != OpPPC64MOVBZload { 17628 break 17629 } 17630 i1 := x1.AuxInt 17631 if x1.Aux != s { 17632 break 17633 } 17634 _ = x1.Args[1] 17635 if p != x1.Args[0] { 17636 break 17637 } 17638 if mem != x1.Args[1] { 17639 break 17640 } 17641 s5 := o5.Args[1] 17642 if s5.Op != OpPPC64SLDconst { 17643 break 17644 } 17645 if s5.AuxInt != 48 { 17646 break 17647 } 17648 x6 := s5.Args[0] 17649 if x6.Op != OpPPC64MOVBZload { 17650 break 17651 } 17652 i6 := x6.AuxInt 17653 if x6.Aux != s { 17654 break 17655 } 17656 _ = x6.Args[1] 17657 if p != x6.Args[0] { 17658 break 17659 } 17660 if mem != x6.Args[1] { 17661 break 17662 } 17663 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)) { 17664 break 17665 } 17666 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 17667 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 17668 v.reset(OpCopy) 17669 v.AddArg(v0) 17670 v0.AuxInt = i0 17671 v0.Aux = s 17672 v0.AddArg(p) 17673 v0.AddArg(mem) 17674 return true 17675 } 17676 // 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]))) 17677 // 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) 17678 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 17679 for { 17680 t := v.Type 17681 _ = v.Args[1] 17682 s6 := v.Args[0] 17683 if s6.Op != OpPPC64SLDconst { 17684 break 17685 } 17686 if s6.AuxInt != 56 { 17687 break 17688 } 17689 x7 := s6.Args[0] 17690 if x7.Op != OpPPC64MOVBZload { 17691 break 17692 } 17693 i7 := x7.AuxInt 17694 s := x7.Aux 17695 _ = x7.Args[1] 17696 p := x7.Args[0] 17697 mem := x7.Args[1] 17698 o5 := v.Args[1] 17699 if o5.Op != OpPPC64OR { 17700 break 17701 } 17702 if o5.Type != t { 17703 break 17704 } 17705 _ = o5.Args[1] 17706 o4 := o5.Args[0] 17707 if o4.Op != OpPPC64OR { 17708 break 17709 } 17710 if o4.Type != t { 17711 break 17712 } 17713 _ = o4.Args[1] 17714 s4 := o4.Args[0] 17715 if s4.Op != OpPPC64SLDconst { 17716 break 17717 } 17718 if s4.AuxInt != 40 { 17719 break 17720 } 17721 x5 := s4.Args[0] 17722 if x5.Op != OpPPC64MOVBZload { 17723 break 17724 } 17725 i5 := x5.AuxInt 17726 if x5.Aux != s { 17727 break 17728 } 17729 _ = x5.Args[1] 17730 if p != x5.Args[0] { 17731 break 17732 } 17733 if mem != x5.Args[1] { 17734 break 17735 } 17736 o3 := o4.Args[1] 17737 if o3.Op != OpPPC64OR { 17738 break 17739 } 17740 if o3.Type != t { 17741 break 17742 } 17743 _ = o3.Args[1] 17744 s3 := o3.Args[0] 17745 if s3.Op != OpPPC64SLDconst { 17746 break 17747 } 17748 if s3.AuxInt != 32 { 17749 break 17750 } 17751 x4 := s3.Args[0] 17752 if x4.Op != OpPPC64MOVBZload { 17753 break 17754 } 17755 i4 := x4.AuxInt 17756 if x4.Aux != s { 17757 break 17758 } 17759 _ = x4.Args[1] 17760 if p != x4.Args[0] { 17761 break 17762 } 17763 if mem != x4.Args[1] { 17764 break 17765 } 17766 o2 := o3.Args[1] 17767 if o2.Op != OpPPC64OR { 17768 break 17769 } 17770 if o2.Type != t { 17771 break 17772 } 17773 _ = o2.Args[1] 17774 s2 := o2.Args[0] 17775 if s2.Op != OpPPC64SLDconst { 17776 break 17777 } 17778 if s2.AuxInt != 24 { 17779 break 17780 } 17781 x3 := s2.Args[0] 17782 if x3.Op != OpPPC64MOVBZload { 17783 break 17784 } 17785 i3 := x3.AuxInt 17786 if x3.Aux != s { 17787 break 17788 } 17789 _ = x3.Args[1] 17790 if p != x3.Args[0] { 17791 break 17792 } 17793 if mem != x3.Args[1] { 17794 break 17795 } 17796 o1 := o2.Args[1] 17797 if o1.Op != OpPPC64OR { 17798 break 17799 } 17800 if o1.Type != t { 17801 break 17802 } 17803 _ = o1.Args[1] 17804 o0 := o1.Args[0] 17805 if o0.Op != OpPPC64OR { 17806 break 17807 } 17808 if o0.Type != t { 17809 break 17810 } 17811 _ = o0.Args[1] 17812 s0 := o0.Args[0] 17813 if s0.Op != OpPPC64SLDconst { 17814 break 17815 } 17816 if s0.AuxInt != 8 { 17817 break 17818 } 17819 x1 := s0.Args[0] 17820 if x1.Op != OpPPC64MOVBZload { 17821 break 17822 } 17823 i1 := x1.AuxInt 17824 if x1.Aux != s { 17825 break 17826 } 17827 _ = x1.Args[1] 17828 if p != x1.Args[0] { 17829 break 17830 } 17831 if mem != x1.Args[1] { 17832 break 17833 } 17834 x0 := o0.Args[1] 17835 if x0.Op != OpPPC64MOVBZload { 17836 break 17837 } 17838 i0 := x0.AuxInt 17839 if x0.Aux != s { 17840 break 17841 } 17842 _ = x0.Args[1] 17843 if p != x0.Args[0] { 17844 break 17845 } 17846 if mem != x0.Args[1] { 17847 break 17848 } 17849 s1 := o1.Args[1] 17850 if s1.Op != OpPPC64SLDconst { 17851 break 17852 } 17853 if s1.AuxInt != 16 { 17854 break 17855 } 17856 x2 := s1.Args[0] 17857 if x2.Op != OpPPC64MOVBZload { 17858 break 17859 } 17860 i2 := x2.AuxInt 17861 if x2.Aux != s { 17862 break 17863 } 17864 _ = x2.Args[1] 17865 if p != x2.Args[0] { 17866 break 17867 } 17868 if mem != x2.Args[1] { 17869 break 17870 } 17871 s5 := o5.Args[1] 17872 if s5.Op != OpPPC64SLDconst { 17873 break 17874 } 17875 if s5.AuxInt != 48 { 17876 break 17877 } 17878 x6 := s5.Args[0] 17879 if x6.Op != OpPPC64MOVBZload { 17880 break 17881 } 17882 i6 := x6.AuxInt 17883 if x6.Aux != s { 17884 break 17885 } 17886 _ = x6.Args[1] 17887 if p != x6.Args[0] { 17888 break 17889 } 17890 if mem != x6.Args[1] { 17891 break 17892 } 17893 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)) { 17894 break 17895 } 17896 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 17897 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 17898 v.reset(OpCopy) 17899 v.AddArg(v0) 17900 v0.AuxInt = i0 17901 v0.Aux = s 17902 v0.AddArg(p) 17903 v0.AddArg(mem) 17904 return true 17905 } 17906 // 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]))) 17907 // 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) 17908 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 17909 for { 17910 t := v.Type 17911 _ = v.Args[1] 17912 s6 := v.Args[0] 17913 if s6.Op != OpPPC64SLDconst { 17914 break 17915 } 17916 if s6.AuxInt != 56 { 17917 break 17918 } 17919 x7 := s6.Args[0] 17920 if x7.Op != OpPPC64MOVBZload { 17921 break 17922 } 17923 i7 := x7.AuxInt 17924 s := x7.Aux 17925 _ = x7.Args[1] 17926 p := x7.Args[0] 17927 mem := x7.Args[1] 17928 o5 := v.Args[1] 17929 if o5.Op != OpPPC64OR { 17930 break 17931 } 17932 if o5.Type != t { 17933 break 17934 } 17935 _ = o5.Args[1] 17936 o4 := o5.Args[0] 17937 if o4.Op != OpPPC64OR { 17938 break 17939 } 17940 if o4.Type != t { 17941 break 17942 } 17943 _ = o4.Args[1] 17944 s4 := o4.Args[0] 17945 if s4.Op != OpPPC64SLDconst { 17946 break 17947 } 17948 if s4.AuxInt != 40 { 17949 break 17950 } 17951 x5 := s4.Args[0] 17952 if x5.Op != OpPPC64MOVBZload { 17953 break 17954 } 17955 i5 := x5.AuxInt 17956 if x5.Aux != s { 17957 break 17958 } 17959 _ = x5.Args[1] 17960 if p != x5.Args[0] { 17961 break 17962 } 17963 if mem != x5.Args[1] { 17964 break 17965 } 17966 o3 := o4.Args[1] 17967 if o3.Op != OpPPC64OR { 17968 break 17969 } 17970 if o3.Type != t { 17971 break 17972 } 17973 _ = o3.Args[1] 17974 s3 := o3.Args[0] 17975 if s3.Op != OpPPC64SLDconst { 17976 break 17977 } 17978 if s3.AuxInt != 32 { 17979 break 17980 } 17981 x4 := s3.Args[0] 17982 if x4.Op != OpPPC64MOVBZload { 17983 break 17984 } 17985 i4 := x4.AuxInt 17986 if x4.Aux != s { 17987 break 17988 } 17989 _ = x4.Args[1] 17990 if p != x4.Args[0] { 17991 break 17992 } 17993 if mem != x4.Args[1] { 17994 break 17995 } 17996 o2 := o3.Args[1] 17997 if o2.Op != OpPPC64OR { 17998 break 17999 } 18000 if o2.Type != t { 18001 break 18002 } 18003 _ = o2.Args[1] 18004 s2 := o2.Args[0] 18005 if s2.Op != OpPPC64SLDconst { 18006 break 18007 } 18008 if s2.AuxInt != 24 { 18009 break 18010 } 18011 x3 := s2.Args[0] 18012 if x3.Op != OpPPC64MOVBZload { 18013 break 18014 } 18015 i3 := x3.AuxInt 18016 if x3.Aux != s { 18017 break 18018 } 18019 _ = x3.Args[1] 18020 if p != x3.Args[0] { 18021 break 18022 } 18023 if mem != x3.Args[1] { 18024 break 18025 } 18026 o1 := o2.Args[1] 18027 if o1.Op != OpPPC64OR { 18028 break 18029 } 18030 if o1.Type != t { 18031 break 18032 } 18033 _ = o1.Args[1] 18034 o0 := o1.Args[0] 18035 if o0.Op != OpPPC64OR { 18036 break 18037 } 18038 if o0.Type != t { 18039 break 18040 } 18041 _ = o0.Args[1] 18042 x0 := o0.Args[0] 18043 if x0.Op != OpPPC64MOVBZload { 18044 break 18045 } 18046 i0 := x0.AuxInt 18047 if x0.Aux != s { 18048 break 18049 } 18050 _ = x0.Args[1] 18051 if p != x0.Args[0] { 18052 break 18053 } 18054 if mem != x0.Args[1] { 18055 break 18056 } 18057 s0 := o0.Args[1] 18058 if s0.Op != OpPPC64SLDconst { 18059 break 18060 } 18061 if s0.AuxInt != 8 { 18062 break 18063 } 18064 x1 := s0.Args[0] 18065 if x1.Op != OpPPC64MOVBZload { 18066 break 18067 } 18068 i1 := x1.AuxInt 18069 if x1.Aux != s { 18070 break 18071 } 18072 _ = x1.Args[1] 18073 if p != x1.Args[0] { 18074 break 18075 } 18076 if mem != x1.Args[1] { 18077 break 18078 } 18079 s1 := o1.Args[1] 18080 if s1.Op != OpPPC64SLDconst { 18081 break 18082 } 18083 if s1.AuxInt != 16 { 18084 break 18085 } 18086 x2 := s1.Args[0] 18087 if x2.Op != OpPPC64MOVBZload { 18088 break 18089 } 18090 i2 := x2.AuxInt 18091 if x2.Aux != s { 18092 break 18093 } 18094 _ = x2.Args[1] 18095 if p != x2.Args[0] { 18096 break 18097 } 18098 if mem != x2.Args[1] { 18099 break 18100 } 18101 s5 := o5.Args[1] 18102 if s5.Op != OpPPC64SLDconst { 18103 break 18104 } 18105 if s5.AuxInt != 48 { 18106 break 18107 } 18108 x6 := s5.Args[0] 18109 if x6.Op != OpPPC64MOVBZload { 18110 break 18111 } 18112 i6 := x6.AuxInt 18113 if x6.Aux != s { 18114 break 18115 } 18116 _ = x6.Args[1] 18117 if p != x6.Args[0] { 18118 break 18119 } 18120 if mem != x6.Args[1] { 18121 break 18122 } 18123 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)) { 18124 break 18125 } 18126 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 18127 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 18128 v.reset(OpCopy) 18129 v.AddArg(v0) 18130 v0.AuxInt = i0 18131 v0.Aux = s 18132 v0.AddArg(p) 18133 v0.AddArg(mem) 18134 return true 18135 } 18136 // 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]))) 18137 // 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) 18138 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 18139 for { 18140 t := v.Type 18141 _ = v.Args[1] 18142 s6 := v.Args[0] 18143 if s6.Op != OpPPC64SLDconst { 18144 break 18145 } 18146 if s6.AuxInt != 56 { 18147 break 18148 } 18149 x7 := s6.Args[0] 18150 if x7.Op != OpPPC64MOVBZload { 18151 break 18152 } 18153 i7 := x7.AuxInt 18154 s := x7.Aux 18155 _ = x7.Args[1] 18156 p := x7.Args[0] 18157 mem := x7.Args[1] 18158 o5 := v.Args[1] 18159 if o5.Op != OpPPC64OR { 18160 break 18161 } 18162 if o5.Type != t { 18163 break 18164 } 18165 _ = o5.Args[1] 18166 o4 := o5.Args[0] 18167 if o4.Op != OpPPC64OR { 18168 break 18169 } 18170 if o4.Type != t { 18171 break 18172 } 18173 _ = o4.Args[1] 18174 s4 := o4.Args[0] 18175 if s4.Op != OpPPC64SLDconst { 18176 break 18177 } 18178 if s4.AuxInt != 40 { 18179 break 18180 } 18181 x5 := s4.Args[0] 18182 if x5.Op != OpPPC64MOVBZload { 18183 break 18184 } 18185 i5 := x5.AuxInt 18186 if x5.Aux != s { 18187 break 18188 } 18189 _ = x5.Args[1] 18190 if p != x5.Args[0] { 18191 break 18192 } 18193 if mem != x5.Args[1] { 18194 break 18195 } 18196 o3 := o4.Args[1] 18197 if o3.Op != OpPPC64OR { 18198 break 18199 } 18200 if o3.Type != t { 18201 break 18202 } 18203 _ = o3.Args[1] 18204 s3 := o3.Args[0] 18205 if s3.Op != OpPPC64SLDconst { 18206 break 18207 } 18208 if s3.AuxInt != 32 { 18209 break 18210 } 18211 x4 := s3.Args[0] 18212 if x4.Op != OpPPC64MOVBZload { 18213 break 18214 } 18215 i4 := x4.AuxInt 18216 if x4.Aux != s { 18217 break 18218 } 18219 _ = x4.Args[1] 18220 if p != x4.Args[0] { 18221 break 18222 } 18223 if mem != x4.Args[1] { 18224 break 18225 } 18226 o2 := o3.Args[1] 18227 if o2.Op != OpPPC64OR { 18228 break 18229 } 18230 if o2.Type != t { 18231 break 18232 } 18233 _ = o2.Args[1] 18234 o1 := o2.Args[0] 18235 if o1.Op != OpPPC64OR { 18236 break 18237 } 18238 if o1.Type != t { 18239 break 18240 } 18241 _ = o1.Args[1] 18242 s1 := o1.Args[0] 18243 if s1.Op != OpPPC64SLDconst { 18244 break 18245 } 18246 if s1.AuxInt != 16 { 18247 break 18248 } 18249 x2 := s1.Args[0] 18250 if x2.Op != OpPPC64MOVBZload { 18251 break 18252 } 18253 i2 := x2.AuxInt 18254 if x2.Aux != s { 18255 break 18256 } 18257 _ = x2.Args[1] 18258 if p != x2.Args[0] { 18259 break 18260 } 18261 if mem != x2.Args[1] { 18262 break 18263 } 18264 o0 := o1.Args[1] 18265 if o0.Op != OpPPC64OR { 18266 break 18267 } 18268 if o0.Type != t { 18269 break 18270 } 18271 _ = o0.Args[1] 18272 s0 := o0.Args[0] 18273 if s0.Op != OpPPC64SLDconst { 18274 break 18275 } 18276 if s0.AuxInt != 8 { 18277 break 18278 } 18279 x1 := s0.Args[0] 18280 if x1.Op != OpPPC64MOVBZload { 18281 break 18282 } 18283 i1 := x1.AuxInt 18284 if x1.Aux != s { 18285 break 18286 } 18287 _ = x1.Args[1] 18288 if p != x1.Args[0] { 18289 break 18290 } 18291 if mem != x1.Args[1] { 18292 break 18293 } 18294 x0 := o0.Args[1] 18295 if x0.Op != OpPPC64MOVBZload { 18296 break 18297 } 18298 i0 := x0.AuxInt 18299 if x0.Aux != s { 18300 break 18301 } 18302 _ = x0.Args[1] 18303 if p != x0.Args[0] { 18304 break 18305 } 18306 if mem != x0.Args[1] { 18307 break 18308 } 18309 s2 := o2.Args[1] 18310 if s2.Op != OpPPC64SLDconst { 18311 break 18312 } 18313 if s2.AuxInt != 24 { 18314 break 18315 } 18316 x3 := s2.Args[0] 18317 if x3.Op != OpPPC64MOVBZload { 18318 break 18319 } 18320 i3 := x3.AuxInt 18321 if x3.Aux != s { 18322 break 18323 } 18324 _ = x3.Args[1] 18325 if p != x3.Args[0] { 18326 break 18327 } 18328 if mem != x3.Args[1] { 18329 break 18330 } 18331 s5 := o5.Args[1] 18332 if s5.Op != OpPPC64SLDconst { 18333 break 18334 } 18335 if s5.AuxInt != 48 { 18336 break 18337 } 18338 x6 := s5.Args[0] 18339 if x6.Op != OpPPC64MOVBZload { 18340 break 18341 } 18342 i6 := x6.AuxInt 18343 if x6.Aux != s { 18344 break 18345 } 18346 _ = x6.Args[1] 18347 if p != x6.Args[0] { 18348 break 18349 } 18350 if mem != x6.Args[1] { 18351 break 18352 } 18353 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)) { 18354 break 18355 } 18356 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 18357 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 18358 v.reset(OpCopy) 18359 v.AddArg(v0) 18360 v0.AuxInt = i0 18361 v0.Aux = s 18362 v0.AddArg(p) 18363 v0.AddArg(mem) 18364 return true 18365 } 18366 // 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]))) 18367 // 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) 18368 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 18369 for { 18370 t := v.Type 18371 _ = v.Args[1] 18372 s6 := v.Args[0] 18373 if s6.Op != OpPPC64SLDconst { 18374 break 18375 } 18376 if s6.AuxInt != 56 { 18377 break 18378 } 18379 x7 := s6.Args[0] 18380 if x7.Op != OpPPC64MOVBZload { 18381 break 18382 } 18383 i7 := x7.AuxInt 18384 s := x7.Aux 18385 _ = x7.Args[1] 18386 p := x7.Args[0] 18387 mem := x7.Args[1] 18388 o5 := v.Args[1] 18389 if o5.Op != OpPPC64OR { 18390 break 18391 } 18392 if o5.Type != t { 18393 break 18394 } 18395 _ = o5.Args[1] 18396 o4 := o5.Args[0] 18397 if o4.Op != OpPPC64OR { 18398 break 18399 } 18400 if o4.Type != t { 18401 break 18402 } 18403 _ = o4.Args[1] 18404 s4 := o4.Args[0] 18405 if s4.Op != OpPPC64SLDconst { 18406 break 18407 } 18408 if s4.AuxInt != 40 { 18409 break 18410 } 18411 x5 := s4.Args[0] 18412 if x5.Op != OpPPC64MOVBZload { 18413 break 18414 } 18415 i5 := x5.AuxInt 18416 if x5.Aux != s { 18417 break 18418 } 18419 _ = x5.Args[1] 18420 if p != x5.Args[0] { 18421 break 18422 } 18423 if mem != x5.Args[1] { 18424 break 18425 } 18426 o3 := o4.Args[1] 18427 if o3.Op != OpPPC64OR { 18428 break 18429 } 18430 if o3.Type != t { 18431 break 18432 } 18433 _ = o3.Args[1] 18434 s3 := o3.Args[0] 18435 if s3.Op != OpPPC64SLDconst { 18436 break 18437 } 18438 if s3.AuxInt != 32 { 18439 break 18440 } 18441 x4 := s3.Args[0] 18442 if x4.Op != OpPPC64MOVBZload { 18443 break 18444 } 18445 i4 := x4.AuxInt 18446 if x4.Aux != s { 18447 break 18448 } 18449 _ = x4.Args[1] 18450 if p != x4.Args[0] { 18451 break 18452 } 18453 if mem != x4.Args[1] { 18454 break 18455 } 18456 o2 := o3.Args[1] 18457 if o2.Op != OpPPC64OR { 18458 break 18459 } 18460 if o2.Type != t { 18461 break 18462 } 18463 _ = o2.Args[1] 18464 o1 := o2.Args[0] 18465 if o1.Op != OpPPC64OR { 18466 break 18467 } 18468 if o1.Type != t { 18469 break 18470 } 18471 _ = o1.Args[1] 18472 s1 := o1.Args[0] 18473 if s1.Op != OpPPC64SLDconst { 18474 break 18475 } 18476 if s1.AuxInt != 16 { 18477 break 18478 } 18479 x2 := s1.Args[0] 18480 if x2.Op != OpPPC64MOVBZload { 18481 break 18482 } 18483 i2 := x2.AuxInt 18484 if x2.Aux != s { 18485 break 18486 } 18487 _ = x2.Args[1] 18488 if p != x2.Args[0] { 18489 break 18490 } 18491 if mem != x2.Args[1] { 18492 break 18493 } 18494 o0 := o1.Args[1] 18495 if o0.Op != OpPPC64OR { 18496 break 18497 } 18498 if o0.Type != t { 18499 break 18500 } 18501 _ = o0.Args[1] 18502 x0 := o0.Args[0] 18503 if x0.Op != OpPPC64MOVBZload { 18504 break 18505 } 18506 i0 := x0.AuxInt 18507 if x0.Aux != s { 18508 break 18509 } 18510 _ = x0.Args[1] 18511 if p != x0.Args[0] { 18512 break 18513 } 18514 if mem != x0.Args[1] { 18515 break 18516 } 18517 s0 := o0.Args[1] 18518 if s0.Op != OpPPC64SLDconst { 18519 break 18520 } 18521 if s0.AuxInt != 8 { 18522 break 18523 } 18524 x1 := s0.Args[0] 18525 if x1.Op != OpPPC64MOVBZload { 18526 break 18527 } 18528 i1 := x1.AuxInt 18529 if x1.Aux != s { 18530 break 18531 } 18532 _ = x1.Args[1] 18533 if p != x1.Args[0] { 18534 break 18535 } 18536 if mem != x1.Args[1] { 18537 break 18538 } 18539 s2 := o2.Args[1] 18540 if s2.Op != OpPPC64SLDconst { 18541 break 18542 } 18543 if s2.AuxInt != 24 { 18544 break 18545 } 18546 x3 := s2.Args[0] 18547 if x3.Op != OpPPC64MOVBZload { 18548 break 18549 } 18550 i3 := x3.AuxInt 18551 if x3.Aux != s { 18552 break 18553 } 18554 _ = x3.Args[1] 18555 if p != x3.Args[0] { 18556 break 18557 } 18558 if mem != x3.Args[1] { 18559 break 18560 } 18561 s5 := o5.Args[1] 18562 if s5.Op != OpPPC64SLDconst { 18563 break 18564 } 18565 if s5.AuxInt != 48 { 18566 break 18567 } 18568 x6 := s5.Args[0] 18569 if x6.Op != OpPPC64MOVBZload { 18570 break 18571 } 18572 i6 := x6.AuxInt 18573 if x6.Aux != s { 18574 break 18575 } 18576 _ = x6.Args[1] 18577 if p != x6.Args[0] { 18578 break 18579 } 18580 if mem != x6.Args[1] { 18581 break 18582 } 18583 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)) { 18584 break 18585 } 18586 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 18587 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 18588 v.reset(OpCopy) 18589 v.AddArg(v0) 18590 v0.AuxInt = i0 18591 v0.Aux = s 18592 v0.AddArg(p) 18593 v0.AddArg(mem) 18594 return true 18595 } 18596 // 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]))) 18597 // 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) 18598 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 18599 for { 18600 t := v.Type 18601 _ = v.Args[1] 18602 s6 := v.Args[0] 18603 if s6.Op != OpPPC64SLDconst { 18604 break 18605 } 18606 if s6.AuxInt != 56 { 18607 break 18608 } 18609 x7 := s6.Args[0] 18610 if x7.Op != OpPPC64MOVBZload { 18611 break 18612 } 18613 i7 := x7.AuxInt 18614 s := x7.Aux 18615 _ = x7.Args[1] 18616 p := x7.Args[0] 18617 mem := x7.Args[1] 18618 o5 := v.Args[1] 18619 if o5.Op != OpPPC64OR { 18620 break 18621 } 18622 if o5.Type != t { 18623 break 18624 } 18625 _ = o5.Args[1] 18626 o4 := o5.Args[0] 18627 if o4.Op != OpPPC64OR { 18628 break 18629 } 18630 if o4.Type != t { 18631 break 18632 } 18633 _ = o4.Args[1] 18634 s4 := o4.Args[0] 18635 if s4.Op != OpPPC64SLDconst { 18636 break 18637 } 18638 if s4.AuxInt != 40 { 18639 break 18640 } 18641 x5 := s4.Args[0] 18642 if x5.Op != OpPPC64MOVBZload { 18643 break 18644 } 18645 i5 := x5.AuxInt 18646 if x5.Aux != s { 18647 break 18648 } 18649 _ = x5.Args[1] 18650 if p != x5.Args[0] { 18651 break 18652 } 18653 if mem != x5.Args[1] { 18654 break 18655 } 18656 o3 := o4.Args[1] 18657 if o3.Op != OpPPC64OR { 18658 break 18659 } 18660 if o3.Type != t { 18661 break 18662 } 18663 _ = o3.Args[1] 18664 s3 := o3.Args[0] 18665 if s3.Op != OpPPC64SLDconst { 18666 break 18667 } 18668 if s3.AuxInt != 32 { 18669 break 18670 } 18671 x4 := s3.Args[0] 18672 if x4.Op != OpPPC64MOVBZload { 18673 break 18674 } 18675 i4 := x4.AuxInt 18676 if x4.Aux != s { 18677 break 18678 } 18679 _ = x4.Args[1] 18680 if p != x4.Args[0] { 18681 break 18682 } 18683 if mem != x4.Args[1] { 18684 break 18685 } 18686 o2 := o3.Args[1] 18687 if o2.Op != OpPPC64OR { 18688 break 18689 } 18690 if o2.Type != t { 18691 break 18692 } 18693 _ = o2.Args[1] 18694 o1 := o2.Args[0] 18695 if o1.Op != OpPPC64OR { 18696 break 18697 } 18698 if o1.Type != t { 18699 break 18700 } 18701 _ = o1.Args[1] 18702 o0 := o1.Args[0] 18703 if o0.Op != OpPPC64OR { 18704 break 18705 } 18706 if o0.Type != t { 18707 break 18708 } 18709 _ = o0.Args[1] 18710 s0 := o0.Args[0] 18711 if s0.Op != OpPPC64SLDconst { 18712 break 18713 } 18714 if s0.AuxInt != 8 { 18715 break 18716 } 18717 x1 := s0.Args[0] 18718 if x1.Op != OpPPC64MOVBZload { 18719 break 18720 } 18721 i1 := x1.AuxInt 18722 if x1.Aux != s { 18723 break 18724 } 18725 _ = x1.Args[1] 18726 if p != x1.Args[0] { 18727 break 18728 } 18729 if mem != x1.Args[1] { 18730 break 18731 } 18732 x0 := o0.Args[1] 18733 if x0.Op != OpPPC64MOVBZload { 18734 break 18735 } 18736 i0 := x0.AuxInt 18737 if x0.Aux != s { 18738 break 18739 } 18740 _ = x0.Args[1] 18741 if p != x0.Args[0] { 18742 break 18743 } 18744 if mem != x0.Args[1] { 18745 break 18746 } 18747 s1 := o1.Args[1] 18748 if s1.Op != OpPPC64SLDconst { 18749 break 18750 } 18751 if s1.AuxInt != 16 { 18752 break 18753 } 18754 x2 := s1.Args[0] 18755 if x2.Op != OpPPC64MOVBZload { 18756 break 18757 } 18758 i2 := x2.AuxInt 18759 if x2.Aux != s { 18760 break 18761 } 18762 _ = x2.Args[1] 18763 if p != x2.Args[0] { 18764 break 18765 } 18766 if mem != x2.Args[1] { 18767 break 18768 } 18769 s2 := o2.Args[1] 18770 if s2.Op != OpPPC64SLDconst { 18771 break 18772 } 18773 if s2.AuxInt != 24 { 18774 break 18775 } 18776 x3 := s2.Args[0] 18777 if x3.Op != OpPPC64MOVBZload { 18778 break 18779 } 18780 i3 := x3.AuxInt 18781 if x3.Aux != s { 18782 break 18783 } 18784 _ = x3.Args[1] 18785 if p != x3.Args[0] { 18786 break 18787 } 18788 if mem != x3.Args[1] { 18789 break 18790 } 18791 s5 := o5.Args[1] 18792 if s5.Op != OpPPC64SLDconst { 18793 break 18794 } 18795 if s5.AuxInt != 48 { 18796 break 18797 } 18798 x6 := s5.Args[0] 18799 if x6.Op != OpPPC64MOVBZload { 18800 break 18801 } 18802 i6 := x6.AuxInt 18803 if x6.Aux != s { 18804 break 18805 } 18806 _ = x6.Args[1] 18807 if p != x6.Args[0] { 18808 break 18809 } 18810 if mem != x6.Args[1] { 18811 break 18812 } 18813 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)) { 18814 break 18815 } 18816 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 18817 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 18818 v.reset(OpCopy) 18819 v.AddArg(v0) 18820 v0.AuxInt = i0 18821 v0.Aux = s 18822 v0.AddArg(p) 18823 v0.AddArg(mem) 18824 return true 18825 } 18826 // 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]))) 18827 // 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) 18828 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 18829 for { 18830 t := v.Type 18831 _ = v.Args[1] 18832 s6 := v.Args[0] 18833 if s6.Op != OpPPC64SLDconst { 18834 break 18835 } 18836 if s6.AuxInt != 56 { 18837 break 18838 } 18839 x7 := s6.Args[0] 18840 if x7.Op != OpPPC64MOVBZload { 18841 break 18842 } 18843 i7 := x7.AuxInt 18844 s := x7.Aux 18845 _ = x7.Args[1] 18846 p := x7.Args[0] 18847 mem := x7.Args[1] 18848 o5 := v.Args[1] 18849 if o5.Op != OpPPC64OR { 18850 break 18851 } 18852 if o5.Type != t { 18853 break 18854 } 18855 _ = o5.Args[1] 18856 o4 := o5.Args[0] 18857 if o4.Op != OpPPC64OR { 18858 break 18859 } 18860 if o4.Type != t { 18861 break 18862 } 18863 _ = o4.Args[1] 18864 s4 := o4.Args[0] 18865 if s4.Op != OpPPC64SLDconst { 18866 break 18867 } 18868 if s4.AuxInt != 40 { 18869 break 18870 } 18871 x5 := s4.Args[0] 18872 if x5.Op != OpPPC64MOVBZload { 18873 break 18874 } 18875 i5 := x5.AuxInt 18876 if x5.Aux != s { 18877 break 18878 } 18879 _ = x5.Args[1] 18880 if p != x5.Args[0] { 18881 break 18882 } 18883 if mem != x5.Args[1] { 18884 break 18885 } 18886 o3 := o4.Args[1] 18887 if o3.Op != OpPPC64OR { 18888 break 18889 } 18890 if o3.Type != t { 18891 break 18892 } 18893 _ = o3.Args[1] 18894 s3 := o3.Args[0] 18895 if s3.Op != OpPPC64SLDconst { 18896 break 18897 } 18898 if s3.AuxInt != 32 { 18899 break 18900 } 18901 x4 := s3.Args[0] 18902 if x4.Op != OpPPC64MOVBZload { 18903 break 18904 } 18905 i4 := x4.AuxInt 18906 if x4.Aux != s { 18907 break 18908 } 18909 _ = x4.Args[1] 18910 if p != x4.Args[0] { 18911 break 18912 } 18913 if mem != x4.Args[1] { 18914 break 18915 } 18916 o2 := o3.Args[1] 18917 if o2.Op != OpPPC64OR { 18918 break 18919 } 18920 if o2.Type != t { 18921 break 18922 } 18923 _ = o2.Args[1] 18924 o1 := o2.Args[0] 18925 if o1.Op != OpPPC64OR { 18926 break 18927 } 18928 if o1.Type != t { 18929 break 18930 } 18931 _ = o1.Args[1] 18932 o0 := o1.Args[0] 18933 if o0.Op != OpPPC64OR { 18934 break 18935 } 18936 if o0.Type != t { 18937 break 18938 } 18939 _ = o0.Args[1] 18940 x0 := o0.Args[0] 18941 if x0.Op != OpPPC64MOVBZload { 18942 break 18943 } 18944 i0 := x0.AuxInt 18945 if x0.Aux != s { 18946 break 18947 } 18948 _ = x0.Args[1] 18949 if p != x0.Args[0] { 18950 break 18951 } 18952 if mem != x0.Args[1] { 18953 break 18954 } 18955 s0 := o0.Args[1] 18956 if s0.Op != OpPPC64SLDconst { 18957 break 18958 } 18959 if s0.AuxInt != 8 { 18960 break 18961 } 18962 x1 := s0.Args[0] 18963 if x1.Op != OpPPC64MOVBZload { 18964 break 18965 } 18966 i1 := x1.AuxInt 18967 if x1.Aux != s { 18968 break 18969 } 18970 _ = x1.Args[1] 18971 if p != x1.Args[0] { 18972 break 18973 } 18974 if mem != x1.Args[1] { 18975 break 18976 } 18977 s1 := o1.Args[1] 18978 if s1.Op != OpPPC64SLDconst { 18979 break 18980 } 18981 if s1.AuxInt != 16 { 18982 break 18983 } 18984 x2 := s1.Args[0] 18985 if x2.Op != OpPPC64MOVBZload { 18986 break 18987 } 18988 i2 := x2.AuxInt 18989 if x2.Aux != s { 18990 break 18991 } 18992 _ = x2.Args[1] 18993 if p != x2.Args[0] { 18994 break 18995 } 18996 if mem != x2.Args[1] { 18997 break 18998 } 18999 s2 := o2.Args[1] 19000 if s2.Op != OpPPC64SLDconst { 19001 break 19002 } 19003 if s2.AuxInt != 24 { 19004 break 19005 } 19006 x3 := s2.Args[0] 19007 if x3.Op != OpPPC64MOVBZload { 19008 break 19009 } 19010 i3 := x3.AuxInt 19011 if x3.Aux != s { 19012 break 19013 } 19014 _ = x3.Args[1] 19015 if p != x3.Args[0] { 19016 break 19017 } 19018 if mem != x3.Args[1] { 19019 break 19020 } 19021 s5 := o5.Args[1] 19022 if s5.Op != OpPPC64SLDconst { 19023 break 19024 } 19025 if s5.AuxInt != 48 { 19026 break 19027 } 19028 x6 := s5.Args[0] 19029 if x6.Op != OpPPC64MOVBZload { 19030 break 19031 } 19032 i6 := x6.AuxInt 19033 if x6.Aux != s { 19034 break 19035 } 19036 _ = x6.Args[1] 19037 if p != x6.Args[0] { 19038 break 19039 } 19040 if mem != x6.Args[1] { 19041 break 19042 } 19043 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)) { 19044 break 19045 } 19046 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 19047 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 19048 v.reset(OpCopy) 19049 v.AddArg(v0) 19050 v0.AuxInt = i0 19051 v0.Aux = s 19052 v0.AddArg(p) 19053 v0.AddArg(mem) 19054 return true 19055 } 19056 // 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]))) 19057 // 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) 19058 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 19059 for { 19060 t := v.Type 19061 _ = v.Args[1] 19062 s6 := v.Args[0] 19063 if s6.Op != OpPPC64SLDconst { 19064 break 19065 } 19066 if s6.AuxInt != 56 { 19067 break 19068 } 19069 x7 := s6.Args[0] 19070 if x7.Op != OpPPC64MOVBZload { 19071 break 19072 } 19073 i7 := x7.AuxInt 19074 s := x7.Aux 19075 _ = x7.Args[1] 19076 p := x7.Args[0] 19077 mem := x7.Args[1] 19078 o5 := v.Args[1] 19079 if o5.Op != OpPPC64OR { 19080 break 19081 } 19082 if o5.Type != t { 19083 break 19084 } 19085 _ = o5.Args[1] 19086 o4 := o5.Args[0] 19087 if o4.Op != OpPPC64OR { 19088 break 19089 } 19090 if o4.Type != t { 19091 break 19092 } 19093 _ = o4.Args[1] 19094 s4 := o4.Args[0] 19095 if s4.Op != OpPPC64SLDconst { 19096 break 19097 } 19098 if s4.AuxInt != 40 { 19099 break 19100 } 19101 x5 := s4.Args[0] 19102 if x5.Op != OpPPC64MOVBZload { 19103 break 19104 } 19105 i5 := x5.AuxInt 19106 if x5.Aux != s { 19107 break 19108 } 19109 _ = x5.Args[1] 19110 if p != x5.Args[0] { 19111 break 19112 } 19113 if mem != x5.Args[1] { 19114 break 19115 } 19116 o3 := o4.Args[1] 19117 if o3.Op != OpPPC64OR { 19118 break 19119 } 19120 if o3.Type != t { 19121 break 19122 } 19123 _ = o3.Args[1] 19124 o2 := o3.Args[0] 19125 if o2.Op != OpPPC64OR { 19126 break 19127 } 19128 if o2.Type != t { 19129 break 19130 } 19131 _ = o2.Args[1] 19132 s2 := o2.Args[0] 19133 if s2.Op != OpPPC64SLDconst { 19134 break 19135 } 19136 if s2.AuxInt != 24 { 19137 break 19138 } 19139 x3 := s2.Args[0] 19140 if x3.Op != OpPPC64MOVBZload { 19141 break 19142 } 19143 i3 := x3.AuxInt 19144 if x3.Aux != s { 19145 break 19146 } 19147 _ = x3.Args[1] 19148 if p != x3.Args[0] { 19149 break 19150 } 19151 if mem != x3.Args[1] { 19152 break 19153 } 19154 o1 := o2.Args[1] 19155 if o1.Op != OpPPC64OR { 19156 break 19157 } 19158 if o1.Type != t { 19159 break 19160 } 19161 _ = o1.Args[1] 19162 s1 := o1.Args[0] 19163 if s1.Op != OpPPC64SLDconst { 19164 break 19165 } 19166 if s1.AuxInt != 16 { 19167 break 19168 } 19169 x2 := s1.Args[0] 19170 if x2.Op != OpPPC64MOVBZload { 19171 break 19172 } 19173 i2 := x2.AuxInt 19174 if x2.Aux != s { 19175 break 19176 } 19177 _ = x2.Args[1] 19178 if p != x2.Args[0] { 19179 break 19180 } 19181 if mem != x2.Args[1] { 19182 break 19183 } 19184 o0 := o1.Args[1] 19185 if o0.Op != OpPPC64OR { 19186 break 19187 } 19188 if o0.Type != t { 19189 break 19190 } 19191 _ = o0.Args[1] 19192 s0 := o0.Args[0] 19193 if s0.Op != OpPPC64SLDconst { 19194 break 19195 } 19196 if s0.AuxInt != 8 { 19197 break 19198 } 19199 x1 := s0.Args[0] 19200 if x1.Op != OpPPC64MOVBZload { 19201 break 19202 } 19203 i1 := x1.AuxInt 19204 if x1.Aux != s { 19205 break 19206 } 19207 _ = x1.Args[1] 19208 if p != x1.Args[0] { 19209 break 19210 } 19211 if mem != x1.Args[1] { 19212 break 19213 } 19214 x0 := o0.Args[1] 19215 if x0.Op != OpPPC64MOVBZload { 19216 break 19217 } 19218 i0 := x0.AuxInt 19219 if x0.Aux != s { 19220 break 19221 } 19222 _ = x0.Args[1] 19223 if p != x0.Args[0] { 19224 break 19225 } 19226 if mem != x0.Args[1] { 19227 break 19228 } 19229 s3 := o3.Args[1] 19230 if s3.Op != OpPPC64SLDconst { 19231 break 19232 } 19233 if s3.AuxInt != 32 { 19234 break 19235 } 19236 x4 := s3.Args[0] 19237 if x4.Op != OpPPC64MOVBZload { 19238 break 19239 } 19240 i4 := x4.AuxInt 19241 if x4.Aux != s { 19242 break 19243 } 19244 _ = x4.Args[1] 19245 if p != x4.Args[0] { 19246 break 19247 } 19248 if mem != x4.Args[1] { 19249 break 19250 } 19251 s5 := o5.Args[1] 19252 if s5.Op != OpPPC64SLDconst { 19253 break 19254 } 19255 if s5.AuxInt != 48 { 19256 break 19257 } 19258 x6 := s5.Args[0] 19259 if x6.Op != OpPPC64MOVBZload { 19260 break 19261 } 19262 i6 := x6.AuxInt 19263 if x6.Aux != s { 19264 break 19265 } 19266 _ = x6.Args[1] 19267 if p != x6.Args[0] { 19268 break 19269 } 19270 if mem != x6.Args[1] { 19271 break 19272 } 19273 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)) { 19274 break 19275 } 19276 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 19277 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 19278 v.reset(OpCopy) 19279 v.AddArg(v0) 19280 v0.AuxInt = i0 19281 v0.Aux = s 19282 v0.AddArg(p) 19283 v0.AddArg(mem) 19284 return true 19285 } 19286 // 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]))) 19287 // 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) 19288 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 19289 for { 19290 t := v.Type 19291 _ = v.Args[1] 19292 s6 := v.Args[0] 19293 if s6.Op != OpPPC64SLDconst { 19294 break 19295 } 19296 if s6.AuxInt != 56 { 19297 break 19298 } 19299 x7 := s6.Args[0] 19300 if x7.Op != OpPPC64MOVBZload { 19301 break 19302 } 19303 i7 := x7.AuxInt 19304 s := x7.Aux 19305 _ = x7.Args[1] 19306 p := x7.Args[0] 19307 mem := x7.Args[1] 19308 o5 := v.Args[1] 19309 if o5.Op != OpPPC64OR { 19310 break 19311 } 19312 if o5.Type != t { 19313 break 19314 } 19315 _ = o5.Args[1] 19316 o4 := o5.Args[0] 19317 if o4.Op != OpPPC64OR { 19318 break 19319 } 19320 if o4.Type != t { 19321 break 19322 } 19323 _ = o4.Args[1] 19324 s4 := o4.Args[0] 19325 if s4.Op != OpPPC64SLDconst { 19326 break 19327 } 19328 if s4.AuxInt != 40 { 19329 break 19330 } 19331 x5 := s4.Args[0] 19332 if x5.Op != OpPPC64MOVBZload { 19333 break 19334 } 19335 i5 := x5.AuxInt 19336 if x5.Aux != s { 19337 break 19338 } 19339 _ = x5.Args[1] 19340 if p != x5.Args[0] { 19341 break 19342 } 19343 if mem != x5.Args[1] { 19344 break 19345 } 19346 o3 := o4.Args[1] 19347 if o3.Op != OpPPC64OR { 19348 break 19349 } 19350 if o3.Type != t { 19351 break 19352 } 19353 _ = o3.Args[1] 19354 o2 := o3.Args[0] 19355 if o2.Op != OpPPC64OR { 19356 break 19357 } 19358 if o2.Type != t { 19359 break 19360 } 19361 _ = o2.Args[1] 19362 s2 := o2.Args[0] 19363 if s2.Op != OpPPC64SLDconst { 19364 break 19365 } 19366 if s2.AuxInt != 24 { 19367 break 19368 } 19369 x3 := s2.Args[0] 19370 if x3.Op != OpPPC64MOVBZload { 19371 break 19372 } 19373 i3 := x3.AuxInt 19374 if x3.Aux != s { 19375 break 19376 } 19377 _ = x3.Args[1] 19378 if p != x3.Args[0] { 19379 break 19380 } 19381 if mem != x3.Args[1] { 19382 break 19383 } 19384 o1 := o2.Args[1] 19385 if o1.Op != OpPPC64OR { 19386 break 19387 } 19388 if o1.Type != t { 19389 break 19390 } 19391 _ = o1.Args[1] 19392 s1 := o1.Args[0] 19393 if s1.Op != OpPPC64SLDconst { 19394 break 19395 } 19396 if s1.AuxInt != 16 { 19397 break 19398 } 19399 x2 := s1.Args[0] 19400 if x2.Op != OpPPC64MOVBZload { 19401 break 19402 } 19403 i2 := x2.AuxInt 19404 if x2.Aux != s { 19405 break 19406 } 19407 _ = x2.Args[1] 19408 if p != x2.Args[0] { 19409 break 19410 } 19411 if mem != x2.Args[1] { 19412 break 19413 } 19414 o0 := o1.Args[1] 19415 if o0.Op != OpPPC64OR { 19416 break 19417 } 19418 if o0.Type != t { 19419 break 19420 } 19421 _ = o0.Args[1] 19422 x0 := o0.Args[0] 19423 if x0.Op != OpPPC64MOVBZload { 19424 break 19425 } 19426 i0 := x0.AuxInt 19427 if x0.Aux != s { 19428 break 19429 } 19430 _ = x0.Args[1] 19431 if p != x0.Args[0] { 19432 break 19433 } 19434 if mem != x0.Args[1] { 19435 break 19436 } 19437 s0 := o0.Args[1] 19438 if s0.Op != OpPPC64SLDconst { 19439 break 19440 } 19441 if s0.AuxInt != 8 { 19442 break 19443 } 19444 x1 := s0.Args[0] 19445 if x1.Op != OpPPC64MOVBZload { 19446 break 19447 } 19448 i1 := x1.AuxInt 19449 if x1.Aux != s { 19450 break 19451 } 19452 _ = x1.Args[1] 19453 if p != x1.Args[0] { 19454 break 19455 } 19456 if mem != x1.Args[1] { 19457 break 19458 } 19459 s3 := o3.Args[1] 19460 if s3.Op != OpPPC64SLDconst { 19461 break 19462 } 19463 if s3.AuxInt != 32 { 19464 break 19465 } 19466 x4 := s3.Args[0] 19467 if x4.Op != OpPPC64MOVBZload { 19468 break 19469 } 19470 i4 := x4.AuxInt 19471 if x4.Aux != s { 19472 break 19473 } 19474 _ = x4.Args[1] 19475 if p != x4.Args[0] { 19476 break 19477 } 19478 if mem != x4.Args[1] { 19479 break 19480 } 19481 s5 := o5.Args[1] 19482 if s5.Op != OpPPC64SLDconst { 19483 break 19484 } 19485 if s5.AuxInt != 48 { 19486 break 19487 } 19488 x6 := s5.Args[0] 19489 if x6.Op != OpPPC64MOVBZload { 19490 break 19491 } 19492 i6 := x6.AuxInt 19493 if x6.Aux != s { 19494 break 19495 } 19496 _ = x6.Args[1] 19497 if p != x6.Args[0] { 19498 break 19499 } 19500 if mem != x6.Args[1] { 19501 break 19502 } 19503 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)) { 19504 break 19505 } 19506 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 19507 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 19508 v.reset(OpCopy) 19509 v.AddArg(v0) 19510 v0.AuxInt = i0 19511 v0.Aux = s 19512 v0.AddArg(p) 19513 v0.AddArg(mem) 19514 return true 19515 } 19516 return false 19517 } 19518 func rewriteValuePPC64_OpPPC64OR_60(v *Value) bool { 19519 b := v.Block 19520 _ = b 19521 config := b.Func.Config 19522 _ = config 19523 // 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]))) 19524 // 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) 19525 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 19526 for { 19527 t := v.Type 19528 _ = v.Args[1] 19529 s6 := v.Args[0] 19530 if s6.Op != OpPPC64SLDconst { 19531 break 19532 } 19533 if s6.AuxInt != 56 { 19534 break 19535 } 19536 x7 := s6.Args[0] 19537 if x7.Op != OpPPC64MOVBZload { 19538 break 19539 } 19540 i7 := x7.AuxInt 19541 s := x7.Aux 19542 _ = x7.Args[1] 19543 p := x7.Args[0] 19544 mem := x7.Args[1] 19545 o5 := v.Args[1] 19546 if o5.Op != OpPPC64OR { 19547 break 19548 } 19549 if o5.Type != t { 19550 break 19551 } 19552 _ = o5.Args[1] 19553 o4 := o5.Args[0] 19554 if o4.Op != OpPPC64OR { 19555 break 19556 } 19557 if o4.Type != t { 19558 break 19559 } 19560 _ = o4.Args[1] 19561 s4 := o4.Args[0] 19562 if s4.Op != OpPPC64SLDconst { 19563 break 19564 } 19565 if s4.AuxInt != 40 { 19566 break 19567 } 19568 x5 := s4.Args[0] 19569 if x5.Op != OpPPC64MOVBZload { 19570 break 19571 } 19572 i5 := x5.AuxInt 19573 if x5.Aux != s { 19574 break 19575 } 19576 _ = x5.Args[1] 19577 if p != x5.Args[0] { 19578 break 19579 } 19580 if mem != x5.Args[1] { 19581 break 19582 } 19583 o3 := o4.Args[1] 19584 if o3.Op != OpPPC64OR { 19585 break 19586 } 19587 if o3.Type != t { 19588 break 19589 } 19590 _ = o3.Args[1] 19591 o2 := o3.Args[0] 19592 if o2.Op != OpPPC64OR { 19593 break 19594 } 19595 if o2.Type != t { 19596 break 19597 } 19598 _ = o2.Args[1] 19599 s2 := o2.Args[0] 19600 if s2.Op != OpPPC64SLDconst { 19601 break 19602 } 19603 if s2.AuxInt != 24 { 19604 break 19605 } 19606 x3 := s2.Args[0] 19607 if x3.Op != OpPPC64MOVBZload { 19608 break 19609 } 19610 i3 := x3.AuxInt 19611 if x3.Aux != s { 19612 break 19613 } 19614 _ = x3.Args[1] 19615 if p != x3.Args[0] { 19616 break 19617 } 19618 if mem != x3.Args[1] { 19619 break 19620 } 19621 o1 := o2.Args[1] 19622 if o1.Op != OpPPC64OR { 19623 break 19624 } 19625 if o1.Type != t { 19626 break 19627 } 19628 _ = o1.Args[1] 19629 o0 := o1.Args[0] 19630 if o0.Op != OpPPC64OR { 19631 break 19632 } 19633 if o0.Type != t { 19634 break 19635 } 19636 _ = o0.Args[1] 19637 s0 := o0.Args[0] 19638 if s0.Op != OpPPC64SLDconst { 19639 break 19640 } 19641 if s0.AuxInt != 8 { 19642 break 19643 } 19644 x1 := s0.Args[0] 19645 if x1.Op != OpPPC64MOVBZload { 19646 break 19647 } 19648 i1 := x1.AuxInt 19649 if x1.Aux != s { 19650 break 19651 } 19652 _ = x1.Args[1] 19653 if p != x1.Args[0] { 19654 break 19655 } 19656 if mem != x1.Args[1] { 19657 break 19658 } 19659 x0 := o0.Args[1] 19660 if x0.Op != OpPPC64MOVBZload { 19661 break 19662 } 19663 i0 := x0.AuxInt 19664 if x0.Aux != s { 19665 break 19666 } 19667 _ = x0.Args[1] 19668 if p != x0.Args[0] { 19669 break 19670 } 19671 if mem != x0.Args[1] { 19672 break 19673 } 19674 s1 := o1.Args[1] 19675 if s1.Op != OpPPC64SLDconst { 19676 break 19677 } 19678 if s1.AuxInt != 16 { 19679 break 19680 } 19681 x2 := s1.Args[0] 19682 if x2.Op != OpPPC64MOVBZload { 19683 break 19684 } 19685 i2 := x2.AuxInt 19686 if x2.Aux != s { 19687 break 19688 } 19689 _ = x2.Args[1] 19690 if p != x2.Args[0] { 19691 break 19692 } 19693 if mem != x2.Args[1] { 19694 break 19695 } 19696 s3 := o3.Args[1] 19697 if s3.Op != OpPPC64SLDconst { 19698 break 19699 } 19700 if s3.AuxInt != 32 { 19701 break 19702 } 19703 x4 := s3.Args[0] 19704 if x4.Op != OpPPC64MOVBZload { 19705 break 19706 } 19707 i4 := x4.AuxInt 19708 if x4.Aux != s { 19709 break 19710 } 19711 _ = x4.Args[1] 19712 if p != x4.Args[0] { 19713 break 19714 } 19715 if mem != x4.Args[1] { 19716 break 19717 } 19718 s5 := o5.Args[1] 19719 if s5.Op != OpPPC64SLDconst { 19720 break 19721 } 19722 if s5.AuxInt != 48 { 19723 break 19724 } 19725 x6 := s5.Args[0] 19726 if x6.Op != OpPPC64MOVBZload { 19727 break 19728 } 19729 i6 := x6.AuxInt 19730 if x6.Aux != s { 19731 break 19732 } 19733 _ = x6.Args[1] 19734 if p != x6.Args[0] { 19735 break 19736 } 19737 if mem != x6.Args[1] { 19738 break 19739 } 19740 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)) { 19741 break 19742 } 19743 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 19744 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 19745 v.reset(OpCopy) 19746 v.AddArg(v0) 19747 v0.AuxInt = i0 19748 v0.Aux = s 19749 v0.AddArg(p) 19750 v0.AddArg(mem) 19751 return true 19752 } 19753 // 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]))) 19754 // 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) 19755 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 19756 for { 19757 t := v.Type 19758 _ = v.Args[1] 19759 s6 := v.Args[0] 19760 if s6.Op != OpPPC64SLDconst { 19761 break 19762 } 19763 if s6.AuxInt != 56 { 19764 break 19765 } 19766 x7 := s6.Args[0] 19767 if x7.Op != OpPPC64MOVBZload { 19768 break 19769 } 19770 i7 := x7.AuxInt 19771 s := x7.Aux 19772 _ = x7.Args[1] 19773 p := x7.Args[0] 19774 mem := x7.Args[1] 19775 o5 := v.Args[1] 19776 if o5.Op != OpPPC64OR { 19777 break 19778 } 19779 if o5.Type != t { 19780 break 19781 } 19782 _ = o5.Args[1] 19783 o4 := o5.Args[0] 19784 if o4.Op != OpPPC64OR { 19785 break 19786 } 19787 if o4.Type != t { 19788 break 19789 } 19790 _ = o4.Args[1] 19791 s4 := o4.Args[0] 19792 if s4.Op != OpPPC64SLDconst { 19793 break 19794 } 19795 if s4.AuxInt != 40 { 19796 break 19797 } 19798 x5 := s4.Args[0] 19799 if x5.Op != OpPPC64MOVBZload { 19800 break 19801 } 19802 i5 := x5.AuxInt 19803 if x5.Aux != s { 19804 break 19805 } 19806 _ = x5.Args[1] 19807 if p != x5.Args[0] { 19808 break 19809 } 19810 if mem != x5.Args[1] { 19811 break 19812 } 19813 o3 := o4.Args[1] 19814 if o3.Op != OpPPC64OR { 19815 break 19816 } 19817 if o3.Type != t { 19818 break 19819 } 19820 _ = o3.Args[1] 19821 o2 := o3.Args[0] 19822 if o2.Op != OpPPC64OR { 19823 break 19824 } 19825 if o2.Type != t { 19826 break 19827 } 19828 _ = o2.Args[1] 19829 s2 := o2.Args[0] 19830 if s2.Op != OpPPC64SLDconst { 19831 break 19832 } 19833 if s2.AuxInt != 24 { 19834 break 19835 } 19836 x3 := s2.Args[0] 19837 if x3.Op != OpPPC64MOVBZload { 19838 break 19839 } 19840 i3 := x3.AuxInt 19841 if x3.Aux != s { 19842 break 19843 } 19844 _ = x3.Args[1] 19845 if p != x3.Args[0] { 19846 break 19847 } 19848 if mem != x3.Args[1] { 19849 break 19850 } 19851 o1 := o2.Args[1] 19852 if o1.Op != OpPPC64OR { 19853 break 19854 } 19855 if o1.Type != t { 19856 break 19857 } 19858 _ = o1.Args[1] 19859 o0 := o1.Args[0] 19860 if o0.Op != OpPPC64OR { 19861 break 19862 } 19863 if o0.Type != t { 19864 break 19865 } 19866 _ = o0.Args[1] 19867 x0 := o0.Args[0] 19868 if x0.Op != OpPPC64MOVBZload { 19869 break 19870 } 19871 i0 := x0.AuxInt 19872 if x0.Aux != s { 19873 break 19874 } 19875 _ = x0.Args[1] 19876 if p != x0.Args[0] { 19877 break 19878 } 19879 if mem != x0.Args[1] { 19880 break 19881 } 19882 s0 := o0.Args[1] 19883 if s0.Op != OpPPC64SLDconst { 19884 break 19885 } 19886 if s0.AuxInt != 8 { 19887 break 19888 } 19889 x1 := s0.Args[0] 19890 if x1.Op != OpPPC64MOVBZload { 19891 break 19892 } 19893 i1 := x1.AuxInt 19894 if x1.Aux != s { 19895 break 19896 } 19897 _ = x1.Args[1] 19898 if p != x1.Args[0] { 19899 break 19900 } 19901 if mem != x1.Args[1] { 19902 break 19903 } 19904 s1 := o1.Args[1] 19905 if s1.Op != OpPPC64SLDconst { 19906 break 19907 } 19908 if s1.AuxInt != 16 { 19909 break 19910 } 19911 x2 := s1.Args[0] 19912 if x2.Op != OpPPC64MOVBZload { 19913 break 19914 } 19915 i2 := x2.AuxInt 19916 if x2.Aux != s { 19917 break 19918 } 19919 _ = x2.Args[1] 19920 if p != x2.Args[0] { 19921 break 19922 } 19923 if mem != x2.Args[1] { 19924 break 19925 } 19926 s3 := o3.Args[1] 19927 if s3.Op != OpPPC64SLDconst { 19928 break 19929 } 19930 if s3.AuxInt != 32 { 19931 break 19932 } 19933 x4 := s3.Args[0] 19934 if x4.Op != OpPPC64MOVBZload { 19935 break 19936 } 19937 i4 := x4.AuxInt 19938 if x4.Aux != s { 19939 break 19940 } 19941 _ = x4.Args[1] 19942 if p != x4.Args[0] { 19943 break 19944 } 19945 if mem != x4.Args[1] { 19946 break 19947 } 19948 s5 := o5.Args[1] 19949 if s5.Op != OpPPC64SLDconst { 19950 break 19951 } 19952 if s5.AuxInt != 48 { 19953 break 19954 } 19955 x6 := s5.Args[0] 19956 if x6.Op != OpPPC64MOVBZload { 19957 break 19958 } 19959 i6 := x6.AuxInt 19960 if x6.Aux != s { 19961 break 19962 } 19963 _ = x6.Args[1] 19964 if p != x6.Args[0] { 19965 break 19966 } 19967 if mem != x6.Args[1] { 19968 break 19969 } 19970 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)) { 19971 break 19972 } 19973 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 19974 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 19975 v.reset(OpCopy) 19976 v.AddArg(v0) 19977 v0.AuxInt = i0 19978 v0.Aux = s 19979 v0.AddArg(p) 19980 v0.AddArg(mem) 19981 return true 19982 } 19983 // 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]))) 19984 // 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) 19985 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 19986 for { 19987 t := v.Type 19988 _ = v.Args[1] 19989 s6 := v.Args[0] 19990 if s6.Op != OpPPC64SLDconst { 19991 break 19992 } 19993 if s6.AuxInt != 56 { 19994 break 19995 } 19996 x7 := s6.Args[0] 19997 if x7.Op != OpPPC64MOVBZload { 19998 break 19999 } 20000 i7 := x7.AuxInt 20001 s := x7.Aux 20002 _ = x7.Args[1] 20003 p := x7.Args[0] 20004 mem := x7.Args[1] 20005 o5 := v.Args[1] 20006 if o5.Op != OpPPC64OR { 20007 break 20008 } 20009 if o5.Type != t { 20010 break 20011 } 20012 _ = o5.Args[1] 20013 o4 := o5.Args[0] 20014 if o4.Op != OpPPC64OR { 20015 break 20016 } 20017 if o4.Type != t { 20018 break 20019 } 20020 _ = o4.Args[1] 20021 s4 := o4.Args[0] 20022 if s4.Op != OpPPC64SLDconst { 20023 break 20024 } 20025 if s4.AuxInt != 40 { 20026 break 20027 } 20028 x5 := s4.Args[0] 20029 if x5.Op != OpPPC64MOVBZload { 20030 break 20031 } 20032 i5 := x5.AuxInt 20033 if x5.Aux != s { 20034 break 20035 } 20036 _ = x5.Args[1] 20037 if p != x5.Args[0] { 20038 break 20039 } 20040 if mem != x5.Args[1] { 20041 break 20042 } 20043 o3 := o4.Args[1] 20044 if o3.Op != OpPPC64OR { 20045 break 20046 } 20047 if o3.Type != t { 20048 break 20049 } 20050 _ = o3.Args[1] 20051 o2 := o3.Args[0] 20052 if o2.Op != OpPPC64OR { 20053 break 20054 } 20055 if o2.Type != t { 20056 break 20057 } 20058 _ = o2.Args[1] 20059 o1 := o2.Args[0] 20060 if o1.Op != OpPPC64OR { 20061 break 20062 } 20063 if o1.Type != t { 20064 break 20065 } 20066 _ = o1.Args[1] 20067 s1 := o1.Args[0] 20068 if s1.Op != OpPPC64SLDconst { 20069 break 20070 } 20071 if s1.AuxInt != 16 { 20072 break 20073 } 20074 x2 := s1.Args[0] 20075 if x2.Op != OpPPC64MOVBZload { 20076 break 20077 } 20078 i2 := x2.AuxInt 20079 if x2.Aux != s { 20080 break 20081 } 20082 _ = x2.Args[1] 20083 if p != x2.Args[0] { 20084 break 20085 } 20086 if mem != x2.Args[1] { 20087 break 20088 } 20089 o0 := o1.Args[1] 20090 if o0.Op != OpPPC64OR { 20091 break 20092 } 20093 if o0.Type != t { 20094 break 20095 } 20096 _ = o0.Args[1] 20097 s0 := o0.Args[0] 20098 if s0.Op != OpPPC64SLDconst { 20099 break 20100 } 20101 if s0.AuxInt != 8 { 20102 break 20103 } 20104 x1 := s0.Args[0] 20105 if x1.Op != OpPPC64MOVBZload { 20106 break 20107 } 20108 i1 := x1.AuxInt 20109 if x1.Aux != s { 20110 break 20111 } 20112 _ = x1.Args[1] 20113 if p != x1.Args[0] { 20114 break 20115 } 20116 if mem != x1.Args[1] { 20117 break 20118 } 20119 x0 := o0.Args[1] 20120 if x0.Op != OpPPC64MOVBZload { 20121 break 20122 } 20123 i0 := x0.AuxInt 20124 if x0.Aux != s { 20125 break 20126 } 20127 _ = x0.Args[1] 20128 if p != x0.Args[0] { 20129 break 20130 } 20131 if mem != x0.Args[1] { 20132 break 20133 } 20134 s2 := o2.Args[1] 20135 if s2.Op != OpPPC64SLDconst { 20136 break 20137 } 20138 if s2.AuxInt != 24 { 20139 break 20140 } 20141 x3 := s2.Args[0] 20142 if x3.Op != OpPPC64MOVBZload { 20143 break 20144 } 20145 i3 := x3.AuxInt 20146 if x3.Aux != s { 20147 break 20148 } 20149 _ = x3.Args[1] 20150 if p != x3.Args[0] { 20151 break 20152 } 20153 if mem != x3.Args[1] { 20154 break 20155 } 20156 s3 := o3.Args[1] 20157 if s3.Op != OpPPC64SLDconst { 20158 break 20159 } 20160 if s3.AuxInt != 32 { 20161 break 20162 } 20163 x4 := s3.Args[0] 20164 if x4.Op != OpPPC64MOVBZload { 20165 break 20166 } 20167 i4 := x4.AuxInt 20168 if x4.Aux != s { 20169 break 20170 } 20171 _ = x4.Args[1] 20172 if p != x4.Args[0] { 20173 break 20174 } 20175 if mem != x4.Args[1] { 20176 break 20177 } 20178 s5 := o5.Args[1] 20179 if s5.Op != OpPPC64SLDconst { 20180 break 20181 } 20182 if s5.AuxInt != 48 { 20183 break 20184 } 20185 x6 := s5.Args[0] 20186 if x6.Op != OpPPC64MOVBZload { 20187 break 20188 } 20189 i6 := x6.AuxInt 20190 if x6.Aux != s { 20191 break 20192 } 20193 _ = x6.Args[1] 20194 if p != x6.Args[0] { 20195 break 20196 } 20197 if mem != x6.Args[1] { 20198 break 20199 } 20200 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)) { 20201 break 20202 } 20203 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 20204 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 20205 v.reset(OpCopy) 20206 v.AddArg(v0) 20207 v0.AuxInt = i0 20208 v0.Aux = s 20209 v0.AddArg(p) 20210 v0.AddArg(mem) 20211 return true 20212 } 20213 // 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]))) 20214 // 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) 20215 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 20216 for { 20217 t := v.Type 20218 _ = v.Args[1] 20219 s6 := v.Args[0] 20220 if s6.Op != OpPPC64SLDconst { 20221 break 20222 } 20223 if s6.AuxInt != 56 { 20224 break 20225 } 20226 x7 := s6.Args[0] 20227 if x7.Op != OpPPC64MOVBZload { 20228 break 20229 } 20230 i7 := x7.AuxInt 20231 s := x7.Aux 20232 _ = x7.Args[1] 20233 p := x7.Args[0] 20234 mem := x7.Args[1] 20235 o5 := v.Args[1] 20236 if o5.Op != OpPPC64OR { 20237 break 20238 } 20239 if o5.Type != t { 20240 break 20241 } 20242 _ = o5.Args[1] 20243 o4 := o5.Args[0] 20244 if o4.Op != OpPPC64OR { 20245 break 20246 } 20247 if o4.Type != t { 20248 break 20249 } 20250 _ = o4.Args[1] 20251 s4 := o4.Args[0] 20252 if s4.Op != OpPPC64SLDconst { 20253 break 20254 } 20255 if s4.AuxInt != 40 { 20256 break 20257 } 20258 x5 := s4.Args[0] 20259 if x5.Op != OpPPC64MOVBZload { 20260 break 20261 } 20262 i5 := x5.AuxInt 20263 if x5.Aux != s { 20264 break 20265 } 20266 _ = x5.Args[1] 20267 if p != x5.Args[0] { 20268 break 20269 } 20270 if mem != x5.Args[1] { 20271 break 20272 } 20273 o3 := o4.Args[1] 20274 if o3.Op != OpPPC64OR { 20275 break 20276 } 20277 if o3.Type != t { 20278 break 20279 } 20280 _ = o3.Args[1] 20281 o2 := o3.Args[0] 20282 if o2.Op != OpPPC64OR { 20283 break 20284 } 20285 if o2.Type != t { 20286 break 20287 } 20288 _ = o2.Args[1] 20289 o1 := o2.Args[0] 20290 if o1.Op != OpPPC64OR { 20291 break 20292 } 20293 if o1.Type != t { 20294 break 20295 } 20296 _ = o1.Args[1] 20297 s1 := o1.Args[0] 20298 if s1.Op != OpPPC64SLDconst { 20299 break 20300 } 20301 if s1.AuxInt != 16 { 20302 break 20303 } 20304 x2 := s1.Args[0] 20305 if x2.Op != OpPPC64MOVBZload { 20306 break 20307 } 20308 i2 := x2.AuxInt 20309 if x2.Aux != s { 20310 break 20311 } 20312 _ = x2.Args[1] 20313 if p != x2.Args[0] { 20314 break 20315 } 20316 if mem != x2.Args[1] { 20317 break 20318 } 20319 o0 := o1.Args[1] 20320 if o0.Op != OpPPC64OR { 20321 break 20322 } 20323 if o0.Type != t { 20324 break 20325 } 20326 _ = o0.Args[1] 20327 x0 := o0.Args[0] 20328 if x0.Op != OpPPC64MOVBZload { 20329 break 20330 } 20331 i0 := x0.AuxInt 20332 if x0.Aux != s { 20333 break 20334 } 20335 _ = x0.Args[1] 20336 if p != x0.Args[0] { 20337 break 20338 } 20339 if mem != x0.Args[1] { 20340 break 20341 } 20342 s0 := o0.Args[1] 20343 if s0.Op != OpPPC64SLDconst { 20344 break 20345 } 20346 if s0.AuxInt != 8 { 20347 break 20348 } 20349 x1 := s0.Args[0] 20350 if x1.Op != OpPPC64MOVBZload { 20351 break 20352 } 20353 i1 := x1.AuxInt 20354 if x1.Aux != s { 20355 break 20356 } 20357 _ = x1.Args[1] 20358 if p != x1.Args[0] { 20359 break 20360 } 20361 if mem != x1.Args[1] { 20362 break 20363 } 20364 s2 := o2.Args[1] 20365 if s2.Op != OpPPC64SLDconst { 20366 break 20367 } 20368 if s2.AuxInt != 24 { 20369 break 20370 } 20371 x3 := s2.Args[0] 20372 if x3.Op != OpPPC64MOVBZload { 20373 break 20374 } 20375 i3 := x3.AuxInt 20376 if x3.Aux != s { 20377 break 20378 } 20379 _ = x3.Args[1] 20380 if p != x3.Args[0] { 20381 break 20382 } 20383 if mem != x3.Args[1] { 20384 break 20385 } 20386 s3 := o3.Args[1] 20387 if s3.Op != OpPPC64SLDconst { 20388 break 20389 } 20390 if s3.AuxInt != 32 { 20391 break 20392 } 20393 x4 := s3.Args[0] 20394 if x4.Op != OpPPC64MOVBZload { 20395 break 20396 } 20397 i4 := x4.AuxInt 20398 if x4.Aux != s { 20399 break 20400 } 20401 _ = x4.Args[1] 20402 if p != x4.Args[0] { 20403 break 20404 } 20405 if mem != x4.Args[1] { 20406 break 20407 } 20408 s5 := o5.Args[1] 20409 if s5.Op != OpPPC64SLDconst { 20410 break 20411 } 20412 if s5.AuxInt != 48 { 20413 break 20414 } 20415 x6 := s5.Args[0] 20416 if x6.Op != OpPPC64MOVBZload { 20417 break 20418 } 20419 i6 := x6.AuxInt 20420 if x6.Aux != s { 20421 break 20422 } 20423 _ = x6.Args[1] 20424 if p != x6.Args[0] { 20425 break 20426 } 20427 if mem != x6.Args[1] { 20428 break 20429 } 20430 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)) { 20431 break 20432 } 20433 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 20434 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 20435 v.reset(OpCopy) 20436 v.AddArg(v0) 20437 v0.AuxInt = i0 20438 v0.Aux = s 20439 v0.AddArg(p) 20440 v0.AddArg(mem) 20441 return true 20442 } 20443 // 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]))) 20444 // 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) 20445 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 20446 for { 20447 t := v.Type 20448 _ = v.Args[1] 20449 s6 := v.Args[0] 20450 if s6.Op != OpPPC64SLDconst { 20451 break 20452 } 20453 if s6.AuxInt != 56 { 20454 break 20455 } 20456 x7 := s6.Args[0] 20457 if x7.Op != OpPPC64MOVBZload { 20458 break 20459 } 20460 i7 := x7.AuxInt 20461 s := x7.Aux 20462 _ = x7.Args[1] 20463 p := x7.Args[0] 20464 mem := x7.Args[1] 20465 o5 := v.Args[1] 20466 if o5.Op != OpPPC64OR { 20467 break 20468 } 20469 if o5.Type != t { 20470 break 20471 } 20472 _ = o5.Args[1] 20473 o4 := o5.Args[0] 20474 if o4.Op != OpPPC64OR { 20475 break 20476 } 20477 if o4.Type != t { 20478 break 20479 } 20480 _ = o4.Args[1] 20481 s4 := o4.Args[0] 20482 if s4.Op != OpPPC64SLDconst { 20483 break 20484 } 20485 if s4.AuxInt != 40 { 20486 break 20487 } 20488 x5 := s4.Args[0] 20489 if x5.Op != OpPPC64MOVBZload { 20490 break 20491 } 20492 i5 := x5.AuxInt 20493 if x5.Aux != s { 20494 break 20495 } 20496 _ = x5.Args[1] 20497 if p != x5.Args[0] { 20498 break 20499 } 20500 if mem != x5.Args[1] { 20501 break 20502 } 20503 o3 := o4.Args[1] 20504 if o3.Op != OpPPC64OR { 20505 break 20506 } 20507 if o3.Type != t { 20508 break 20509 } 20510 _ = o3.Args[1] 20511 o2 := o3.Args[0] 20512 if o2.Op != OpPPC64OR { 20513 break 20514 } 20515 if o2.Type != t { 20516 break 20517 } 20518 _ = o2.Args[1] 20519 o1 := o2.Args[0] 20520 if o1.Op != OpPPC64OR { 20521 break 20522 } 20523 if o1.Type != t { 20524 break 20525 } 20526 _ = o1.Args[1] 20527 o0 := o1.Args[0] 20528 if o0.Op != OpPPC64OR { 20529 break 20530 } 20531 if o0.Type != t { 20532 break 20533 } 20534 _ = o0.Args[1] 20535 s0 := o0.Args[0] 20536 if s0.Op != OpPPC64SLDconst { 20537 break 20538 } 20539 if s0.AuxInt != 8 { 20540 break 20541 } 20542 x1 := s0.Args[0] 20543 if x1.Op != OpPPC64MOVBZload { 20544 break 20545 } 20546 i1 := x1.AuxInt 20547 if x1.Aux != s { 20548 break 20549 } 20550 _ = x1.Args[1] 20551 if p != x1.Args[0] { 20552 break 20553 } 20554 if mem != x1.Args[1] { 20555 break 20556 } 20557 x0 := o0.Args[1] 20558 if x0.Op != OpPPC64MOVBZload { 20559 break 20560 } 20561 i0 := x0.AuxInt 20562 if x0.Aux != s { 20563 break 20564 } 20565 _ = x0.Args[1] 20566 if p != x0.Args[0] { 20567 break 20568 } 20569 if mem != x0.Args[1] { 20570 break 20571 } 20572 s1 := o1.Args[1] 20573 if s1.Op != OpPPC64SLDconst { 20574 break 20575 } 20576 if s1.AuxInt != 16 { 20577 break 20578 } 20579 x2 := s1.Args[0] 20580 if x2.Op != OpPPC64MOVBZload { 20581 break 20582 } 20583 i2 := x2.AuxInt 20584 if x2.Aux != s { 20585 break 20586 } 20587 _ = x2.Args[1] 20588 if p != x2.Args[0] { 20589 break 20590 } 20591 if mem != x2.Args[1] { 20592 break 20593 } 20594 s2 := o2.Args[1] 20595 if s2.Op != OpPPC64SLDconst { 20596 break 20597 } 20598 if s2.AuxInt != 24 { 20599 break 20600 } 20601 x3 := s2.Args[0] 20602 if x3.Op != OpPPC64MOVBZload { 20603 break 20604 } 20605 i3 := x3.AuxInt 20606 if x3.Aux != s { 20607 break 20608 } 20609 _ = x3.Args[1] 20610 if p != x3.Args[0] { 20611 break 20612 } 20613 if mem != x3.Args[1] { 20614 break 20615 } 20616 s3 := o3.Args[1] 20617 if s3.Op != OpPPC64SLDconst { 20618 break 20619 } 20620 if s3.AuxInt != 32 { 20621 break 20622 } 20623 x4 := s3.Args[0] 20624 if x4.Op != OpPPC64MOVBZload { 20625 break 20626 } 20627 i4 := x4.AuxInt 20628 if x4.Aux != s { 20629 break 20630 } 20631 _ = x4.Args[1] 20632 if p != x4.Args[0] { 20633 break 20634 } 20635 if mem != x4.Args[1] { 20636 break 20637 } 20638 s5 := o5.Args[1] 20639 if s5.Op != OpPPC64SLDconst { 20640 break 20641 } 20642 if s5.AuxInt != 48 { 20643 break 20644 } 20645 x6 := s5.Args[0] 20646 if x6.Op != OpPPC64MOVBZload { 20647 break 20648 } 20649 i6 := x6.AuxInt 20650 if x6.Aux != s { 20651 break 20652 } 20653 _ = x6.Args[1] 20654 if p != x6.Args[0] { 20655 break 20656 } 20657 if mem != x6.Args[1] { 20658 break 20659 } 20660 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)) { 20661 break 20662 } 20663 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 20664 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 20665 v.reset(OpCopy) 20666 v.AddArg(v0) 20667 v0.AuxInt = i0 20668 v0.Aux = s 20669 v0.AddArg(p) 20670 v0.AddArg(mem) 20671 return true 20672 } 20673 // 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]))) 20674 // 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) 20675 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 20676 for { 20677 t := v.Type 20678 _ = v.Args[1] 20679 s6 := v.Args[0] 20680 if s6.Op != OpPPC64SLDconst { 20681 break 20682 } 20683 if s6.AuxInt != 56 { 20684 break 20685 } 20686 x7 := s6.Args[0] 20687 if x7.Op != OpPPC64MOVBZload { 20688 break 20689 } 20690 i7 := x7.AuxInt 20691 s := x7.Aux 20692 _ = x7.Args[1] 20693 p := x7.Args[0] 20694 mem := x7.Args[1] 20695 o5 := v.Args[1] 20696 if o5.Op != OpPPC64OR { 20697 break 20698 } 20699 if o5.Type != t { 20700 break 20701 } 20702 _ = o5.Args[1] 20703 o4 := o5.Args[0] 20704 if o4.Op != OpPPC64OR { 20705 break 20706 } 20707 if o4.Type != t { 20708 break 20709 } 20710 _ = o4.Args[1] 20711 s4 := o4.Args[0] 20712 if s4.Op != OpPPC64SLDconst { 20713 break 20714 } 20715 if s4.AuxInt != 40 { 20716 break 20717 } 20718 x5 := s4.Args[0] 20719 if x5.Op != OpPPC64MOVBZload { 20720 break 20721 } 20722 i5 := x5.AuxInt 20723 if x5.Aux != s { 20724 break 20725 } 20726 _ = x5.Args[1] 20727 if p != x5.Args[0] { 20728 break 20729 } 20730 if mem != x5.Args[1] { 20731 break 20732 } 20733 o3 := o4.Args[1] 20734 if o3.Op != OpPPC64OR { 20735 break 20736 } 20737 if o3.Type != t { 20738 break 20739 } 20740 _ = o3.Args[1] 20741 o2 := o3.Args[0] 20742 if o2.Op != OpPPC64OR { 20743 break 20744 } 20745 if o2.Type != t { 20746 break 20747 } 20748 _ = o2.Args[1] 20749 o1 := o2.Args[0] 20750 if o1.Op != OpPPC64OR { 20751 break 20752 } 20753 if o1.Type != t { 20754 break 20755 } 20756 _ = o1.Args[1] 20757 o0 := o1.Args[0] 20758 if o0.Op != OpPPC64OR { 20759 break 20760 } 20761 if o0.Type != t { 20762 break 20763 } 20764 _ = o0.Args[1] 20765 x0 := o0.Args[0] 20766 if x0.Op != OpPPC64MOVBZload { 20767 break 20768 } 20769 i0 := x0.AuxInt 20770 if x0.Aux != s { 20771 break 20772 } 20773 _ = x0.Args[1] 20774 if p != x0.Args[0] { 20775 break 20776 } 20777 if mem != x0.Args[1] { 20778 break 20779 } 20780 s0 := o0.Args[1] 20781 if s0.Op != OpPPC64SLDconst { 20782 break 20783 } 20784 if s0.AuxInt != 8 { 20785 break 20786 } 20787 x1 := s0.Args[0] 20788 if x1.Op != OpPPC64MOVBZload { 20789 break 20790 } 20791 i1 := x1.AuxInt 20792 if x1.Aux != s { 20793 break 20794 } 20795 _ = x1.Args[1] 20796 if p != x1.Args[0] { 20797 break 20798 } 20799 if mem != x1.Args[1] { 20800 break 20801 } 20802 s1 := o1.Args[1] 20803 if s1.Op != OpPPC64SLDconst { 20804 break 20805 } 20806 if s1.AuxInt != 16 { 20807 break 20808 } 20809 x2 := s1.Args[0] 20810 if x2.Op != OpPPC64MOVBZload { 20811 break 20812 } 20813 i2 := x2.AuxInt 20814 if x2.Aux != s { 20815 break 20816 } 20817 _ = x2.Args[1] 20818 if p != x2.Args[0] { 20819 break 20820 } 20821 if mem != x2.Args[1] { 20822 break 20823 } 20824 s2 := o2.Args[1] 20825 if s2.Op != OpPPC64SLDconst { 20826 break 20827 } 20828 if s2.AuxInt != 24 { 20829 break 20830 } 20831 x3 := s2.Args[0] 20832 if x3.Op != OpPPC64MOVBZload { 20833 break 20834 } 20835 i3 := x3.AuxInt 20836 if x3.Aux != s { 20837 break 20838 } 20839 _ = x3.Args[1] 20840 if p != x3.Args[0] { 20841 break 20842 } 20843 if mem != x3.Args[1] { 20844 break 20845 } 20846 s3 := o3.Args[1] 20847 if s3.Op != OpPPC64SLDconst { 20848 break 20849 } 20850 if s3.AuxInt != 32 { 20851 break 20852 } 20853 x4 := s3.Args[0] 20854 if x4.Op != OpPPC64MOVBZload { 20855 break 20856 } 20857 i4 := x4.AuxInt 20858 if x4.Aux != s { 20859 break 20860 } 20861 _ = x4.Args[1] 20862 if p != x4.Args[0] { 20863 break 20864 } 20865 if mem != x4.Args[1] { 20866 break 20867 } 20868 s5 := o5.Args[1] 20869 if s5.Op != OpPPC64SLDconst { 20870 break 20871 } 20872 if s5.AuxInt != 48 { 20873 break 20874 } 20875 x6 := s5.Args[0] 20876 if x6.Op != OpPPC64MOVBZload { 20877 break 20878 } 20879 i6 := x6.AuxInt 20880 if x6.Aux != s { 20881 break 20882 } 20883 _ = x6.Args[1] 20884 if p != x6.Args[0] { 20885 break 20886 } 20887 if mem != x6.Args[1] { 20888 break 20889 } 20890 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)) { 20891 break 20892 } 20893 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 20894 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 20895 v.reset(OpCopy) 20896 v.AddArg(v0) 20897 v0.AuxInt = i0 20898 v0.Aux = s 20899 v0.AddArg(p) 20900 v0.AddArg(mem) 20901 return true 20902 } 20903 // 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]))) 20904 // 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) 20905 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 20906 for { 20907 t := v.Type 20908 _ = v.Args[1] 20909 s6 := v.Args[0] 20910 if s6.Op != OpPPC64SLDconst { 20911 break 20912 } 20913 if s6.AuxInt != 56 { 20914 break 20915 } 20916 x7 := s6.Args[0] 20917 if x7.Op != OpPPC64MOVBZload { 20918 break 20919 } 20920 i7 := x7.AuxInt 20921 s := x7.Aux 20922 _ = x7.Args[1] 20923 p := x7.Args[0] 20924 mem := x7.Args[1] 20925 o5 := v.Args[1] 20926 if o5.Op != OpPPC64OR { 20927 break 20928 } 20929 if o5.Type != t { 20930 break 20931 } 20932 _ = o5.Args[1] 20933 o4 := o5.Args[0] 20934 if o4.Op != OpPPC64OR { 20935 break 20936 } 20937 if o4.Type != t { 20938 break 20939 } 20940 _ = o4.Args[1] 20941 o3 := o4.Args[0] 20942 if o3.Op != OpPPC64OR { 20943 break 20944 } 20945 if o3.Type != t { 20946 break 20947 } 20948 _ = o3.Args[1] 20949 s3 := o3.Args[0] 20950 if s3.Op != OpPPC64SLDconst { 20951 break 20952 } 20953 if s3.AuxInt != 32 { 20954 break 20955 } 20956 x4 := s3.Args[0] 20957 if x4.Op != OpPPC64MOVBZload { 20958 break 20959 } 20960 i4 := x4.AuxInt 20961 if x4.Aux != s { 20962 break 20963 } 20964 _ = x4.Args[1] 20965 if p != x4.Args[0] { 20966 break 20967 } 20968 if mem != x4.Args[1] { 20969 break 20970 } 20971 o2 := o3.Args[1] 20972 if o2.Op != OpPPC64OR { 20973 break 20974 } 20975 if o2.Type != t { 20976 break 20977 } 20978 _ = o2.Args[1] 20979 s2 := o2.Args[0] 20980 if s2.Op != OpPPC64SLDconst { 20981 break 20982 } 20983 if s2.AuxInt != 24 { 20984 break 20985 } 20986 x3 := s2.Args[0] 20987 if x3.Op != OpPPC64MOVBZload { 20988 break 20989 } 20990 i3 := x3.AuxInt 20991 if x3.Aux != s { 20992 break 20993 } 20994 _ = x3.Args[1] 20995 if p != x3.Args[0] { 20996 break 20997 } 20998 if mem != x3.Args[1] { 20999 break 21000 } 21001 o1 := o2.Args[1] 21002 if o1.Op != OpPPC64OR { 21003 break 21004 } 21005 if o1.Type != t { 21006 break 21007 } 21008 _ = o1.Args[1] 21009 s1 := o1.Args[0] 21010 if s1.Op != OpPPC64SLDconst { 21011 break 21012 } 21013 if s1.AuxInt != 16 { 21014 break 21015 } 21016 x2 := s1.Args[0] 21017 if x2.Op != OpPPC64MOVBZload { 21018 break 21019 } 21020 i2 := x2.AuxInt 21021 if x2.Aux != s { 21022 break 21023 } 21024 _ = x2.Args[1] 21025 if p != x2.Args[0] { 21026 break 21027 } 21028 if mem != x2.Args[1] { 21029 break 21030 } 21031 o0 := o1.Args[1] 21032 if o0.Op != OpPPC64OR { 21033 break 21034 } 21035 if o0.Type != t { 21036 break 21037 } 21038 _ = o0.Args[1] 21039 s0 := o0.Args[0] 21040 if s0.Op != OpPPC64SLDconst { 21041 break 21042 } 21043 if s0.AuxInt != 8 { 21044 break 21045 } 21046 x1 := s0.Args[0] 21047 if x1.Op != OpPPC64MOVBZload { 21048 break 21049 } 21050 i1 := x1.AuxInt 21051 if x1.Aux != s { 21052 break 21053 } 21054 _ = x1.Args[1] 21055 if p != x1.Args[0] { 21056 break 21057 } 21058 if mem != x1.Args[1] { 21059 break 21060 } 21061 x0 := o0.Args[1] 21062 if x0.Op != OpPPC64MOVBZload { 21063 break 21064 } 21065 i0 := x0.AuxInt 21066 if x0.Aux != s { 21067 break 21068 } 21069 _ = x0.Args[1] 21070 if p != x0.Args[0] { 21071 break 21072 } 21073 if mem != x0.Args[1] { 21074 break 21075 } 21076 s4 := o4.Args[1] 21077 if s4.Op != OpPPC64SLDconst { 21078 break 21079 } 21080 if s4.AuxInt != 40 { 21081 break 21082 } 21083 x5 := s4.Args[0] 21084 if x5.Op != OpPPC64MOVBZload { 21085 break 21086 } 21087 i5 := x5.AuxInt 21088 if x5.Aux != s { 21089 break 21090 } 21091 _ = x5.Args[1] 21092 if p != x5.Args[0] { 21093 break 21094 } 21095 if mem != x5.Args[1] { 21096 break 21097 } 21098 s5 := o5.Args[1] 21099 if s5.Op != OpPPC64SLDconst { 21100 break 21101 } 21102 if s5.AuxInt != 48 { 21103 break 21104 } 21105 x6 := s5.Args[0] 21106 if x6.Op != OpPPC64MOVBZload { 21107 break 21108 } 21109 i6 := x6.AuxInt 21110 if x6.Aux != s { 21111 break 21112 } 21113 _ = x6.Args[1] 21114 if p != x6.Args[0] { 21115 break 21116 } 21117 if mem != x6.Args[1] { 21118 break 21119 } 21120 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)) { 21121 break 21122 } 21123 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 21124 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 21125 v.reset(OpCopy) 21126 v.AddArg(v0) 21127 v0.AuxInt = i0 21128 v0.Aux = s 21129 v0.AddArg(p) 21130 v0.AddArg(mem) 21131 return true 21132 } 21133 // 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]))) 21134 // 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) 21135 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 21136 for { 21137 t := v.Type 21138 _ = v.Args[1] 21139 s6 := v.Args[0] 21140 if s6.Op != OpPPC64SLDconst { 21141 break 21142 } 21143 if s6.AuxInt != 56 { 21144 break 21145 } 21146 x7 := s6.Args[0] 21147 if x7.Op != OpPPC64MOVBZload { 21148 break 21149 } 21150 i7 := x7.AuxInt 21151 s := x7.Aux 21152 _ = x7.Args[1] 21153 p := x7.Args[0] 21154 mem := x7.Args[1] 21155 o5 := v.Args[1] 21156 if o5.Op != OpPPC64OR { 21157 break 21158 } 21159 if o5.Type != t { 21160 break 21161 } 21162 _ = o5.Args[1] 21163 o4 := o5.Args[0] 21164 if o4.Op != OpPPC64OR { 21165 break 21166 } 21167 if o4.Type != t { 21168 break 21169 } 21170 _ = o4.Args[1] 21171 o3 := o4.Args[0] 21172 if o3.Op != OpPPC64OR { 21173 break 21174 } 21175 if o3.Type != t { 21176 break 21177 } 21178 _ = o3.Args[1] 21179 s3 := o3.Args[0] 21180 if s3.Op != OpPPC64SLDconst { 21181 break 21182 } 21183 if s3.AuxInt != 32 { 21184 break 21185 } 21186 x4 := s3.Args[0] 21187 if x4.Op != OpPPC64MOVBZload { 21188 break 21189 } 21190 i4 := x4.AuxInt 21191 if x4.Aux != s { 21192 break 21193 } 21194 _ = x4.Args[1] 21195 if p != x4.Args[0] { 21196 break 21197 } 21198 if mem != x4.Args[1] { 21199 break 21200 } 21201 o2 := o3.Args[1] 21202 if o2.Op != OpPPC64OR { 21203 break 21204 } 21205 if o2.Type != t { 21206 break 21207 } 21208 _ = o2.Args[1] 21209 s2 := o2.Args[0] 21210 if s2.Op != OpPPC64SLDconst { 21211 break 21212 } 21213 if s2.AuxInt != 24 { 21214 break 21215 } 21216 x3 := s2.Args[0] 21217 if x3.Op != OpPPC64MOVBZload { 21218 break 21219 } 21220 i3 := x3.AuxInt 21221 if x3.Aux != s { 21222 break 21223 } 21224 _ = x3.Args[1] 21225 if p != x3.Args[0] { 21226 break 21227 } 21228 if mem != x3.Args[1] { 21229 break 21230 } 21231 o1 := o2.Args[1] 21232 if o1.Op != OpPPC64OR { 21233 break 21234 } 21235 if o1.Type != t { 21236 break 21237 } 21238 _ = o1.Args[1] 21239 s1 := o1.Args[0] 21240 if s1.Op != OpPPC64SLDconst { 21241 break 21242 } 21243 if s1.AuxInt != 16 { 21244 break 21245 } 21246 x2 := s1.Args[0] 21247 if x2.Op != OpPPC64MOVBZload { 21248 break 21249 } 21250 i2 := x2.AuxInt 21251 if x2.Aux != s { 21252 break 21253 } 21254 _ = x2.Args[1] 21255 if p != x2.Args[0] { 21256 break 21257 } 21258 if mem != x2.Args[1] { 21259 break 21260 } 21261 o0 := o1.Args[1] 21262 if o0.Op != OpPPC64OR { 21263 break 21264 } 21265 if o0.Type != t { 21266 break 21267 } 21268 _ = o0.Args[1] 21269 x0 := o0.Args[0] 21270 if x0.Op != OpPPC64MOVBZload { 21271 break 21272 } 21273 i0 := x0.AuxInt 21274 if x0.Aux != s { 21275 break 21276 } 21277 _ = x0.Args[1] 21278 if p != x0.Args[0] { 21279 break 21280 } 21281 if mem != x0.Args[1] { 21282 break 21283 } 21284 s0 := o0.Args[1] 21285 if s0.Op != OpPPC64SLDconst { 21286 break 21287 } 21288 if s0.AuxInt != 8 { 21289 break 21290 } 21291 x1 := s0.Args[0] 21292 if x1.Op != OpPPC64MOVBZload { 21293 break 21294 } 21295 i1 := x1.AuxInt 21296 if x1.Aux != s { 21297 break 21298 } 21299 _ = x1.Args[1] 21300 if p != x1.Args[0] { 21301 break 21302 } 21303 if mem != x1.Args[1] { 21304 break 21305 } 21306 s4 := o4.Args[1] 21307 if s4.Op != OpPPC64SLDconst { 21308 break 21309 } 21310 if s4.AuxInt != 40 { 21311 break 21312 } 21313 x5 := s4.Args[0] 21314 if x5.Op != OpPPC64MOVBZload { 21315 break 21316 } 21317 i5 := x5.AuxInt 21318 if x5.Aux != s { 21319 break 21320 } 21321 _ = x5.Args[1] 21322 if p != x5.Args[0] { 21323 break 21324 } 21325 if mem != x5.Args[1] { 21326 break 21327 } 21328 s5 := o5.Args[1] 21329 if s5.Op != OpPPC64SLDconst { 21330 break 21331 } 21332 if s5.AuxInt != 48 { 21333 break 21334 } 21335 x6 := s5.Args[0] 21336 if x6.Op != OpPPC64MOVBZload { 21337 break 21338 } 21339 i6 := x6.AuxInt 21340 if x6.Aux != s { 21341 break 21342 } 21343 _ = x6.Args[1] 21344 if p != x6.Args[0] { 21345 break 21346 } 21347 if mem != x6.Args[1] { 21348 break 21349 } 21350 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)) { 21351 break 21352 } 21353 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 21354 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 21355 v.reset(OpCopy) 21356 v.AddArg(v0) 21357 v0.AuxInt = i0 21358 v0.Aux = s 21359 v0.AddArg(p) 21360 v0.AddArg(mem) 21361 return true 21362 } 21363 // 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]))) 21364 // 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) 21365 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 21366 for { 21367 t := v.Type 21368 _ = v.Args[1] 21369 s6 := v.Args[0] 21370 if s6.Op != OpPPC64SLDconst { 21371 break 21372 } 21373 if s6.AuxInt != 56 { 21374 break 21375 } 21376 x7 := s6.Args[0] 21377 if x7.Op != OpPPC64MOVBZload { 21378 break 21379 } 21380 i7 := x7.AuxInt 21381 s := x7.Aux 21382 _ = x7.Args[1] 21383 p := x7.Args[0] 21384 mem := x7.Args[1] 21385 o5 := v.Args[1] 21386 if o5.Op != OpPPC64OR { 21387 break 21388 } 21389 if o5.Type != t { 21390 break 21391 } 21392 _ = o5.Args[1] 21393 o4 := o5.Args[0] 21394 if o4.Op != OpPPC64OR { 21395 break 21396 } 21397 if o4.Type != t { 21398 break 21399 } 21400 _ = o4.Args[1] 21401 o3 := o4.Args[0] 21402 if o3.Op != OpPPC64OR { 21403 break 21404 } 21405 if o3.Type != t { 21406 break 21407 } 21408 _ = o3.Args[1] 21409 s3 := o3.Args[0] 21410 if s3.Op != OpPPC64SLDconst { 21411 break 21412 } 21413 if s3.AuxInt != 32 { 21414 break 21415 } 21416 x4 := s3.Args[0] 21417 if x4.Op != OpPPC64MOVBZload { 21418 break 21419 } 21420 i4 := x4.AuxInt 21421 if x4.Aux != s { 21422 break 21423 } 21424 _ = x4.Args[1] 21425 if p != x4.Args[0] { 21426 break 21427 } 21428 if mem != x4.Args[1] { 21429 break 21430 } 21431 o2 := o3.Args[1] 21432 if o2.Op != OpPPC64OR { 21433 break 21434 } 21435 if o2.Type != t { 21436 break 21437 } 21438 _ = o2.Args[1] 21439 s2 := o2.Args[0] 21440 if s2.Op != OpPPC64SLDconst { 21441 break 21442 } 21443 if s2.AuxInt != 24 { 21444 break 21445 } 21446 x3 := s2.Args[0] 21447 if x3.Op != OpPPC64MOVBZload { 21448 break 21449 } 21450 i3 := x3.AuxInt 21451 if x3.Aux != s { 21452 break 21453 } 21454 _ = x3.Args[1] 21455 if p != x3.Args[0] { 21456 break 21457 } 21458 if mem != x3.Args[1] { 21459 break 21460 } 21461 o1 := o2.Args[1] 21462 if o1.Op != OpPPC64OR { 21463 break 21464 } 21465 if o1.Type != t { 21466 break 21467 } 21468 _ = o1.Args[1] 21469 o0 := o1.Args[0] 21470 if o0.Op != OpPPC64OR { 21471 break 21472 } 21473 if o0.Type != t { 21474 break 21475 } 21476 _ = o0.Args[1] 21477 s0 := o0.Args[0] 21478 if s0.Op != OpPPC64SLDconst { 21479 break 21480 } 21481 if s0.AuxInt != 8 { 21482 break 21483 } 21484 x1 := s0.Args[0] 21485 if x1.Op != OpPPC64MOVBZload { 21486 break 21487 } 21488 i1 := x1.AuxInt 21489 if x1.Aux != s { 21490 break 21491 } 21492 _ = x1.Args[1] 21493 if p != x1.Args[0] { 21494 break 21495 } 21496 if mem != x1.Args[1] { 21497 break 21498 } 21499 x0 := o0.Args[1] 21500 if x0.Op != OpPPC64MOVBZload { 21501 break 21502 } 21503 i0 := x0.AuxInt 21504 if x0.Aux != s { 21505 break 21506 } 21507 _ = x0.Args[1] 21508 if p != x0.Args[0] { 21509 break 21510 } 21511 if mem != x0.Args[1] { 21512 break 21513 } 21514 s1 := o1.Args[1] 21515 if s1.Op != OpPPC64SLDconst { 21516 break 21517 } 21518 if s1.AuxInt != 16 { 21519 break 21520 } 21521 x2 := s1.Args[0] 21522 if x2.Op != OpPPC64MOVBZload { 21523 break 21524 } 21525 i2 := x2.AuxInt 21526 if x2.Aux != s { 21527 break 21528 } 21529 _ = x2.Args[1] 21530 if p != x2.Args[0] { 21531 break 21532 } 21533 if mem != x2.Args[1] { 21534 break 21535 } 21536 s4 := o4.Args[1] 21537 if s4.Op != OpPPC64SLDconst { 21538 break 21539 } 21540 if s4.AuxInt != 40 { 21541 break 21542 } 21543 x5 := s4.Args[0] 21544 if x5.Op != OpPPC64MOVBZload { 21545 break 21546 } 21547 i5 := x5.AuxInt 21548 if x5.Aux != s { 21549 break 21550 } 21551 _ = x5.Args[1] 21552 if p != x5.Args[0] { 21553 break 21554 } 21555 if mem != x5.Args[1] { 21556 break 21557 } 21558 s5 := o5.Args[1] 21559 if s5.Op != OpPPC64SLDconst { 21560 break 21561 } 21562 if s5.AuxInt != 48 { 21563 break 21564 } 21565 x6 := s5.Args[0] 21566 if x6.Op != OpPPC64MOVBZload { 21567 break 21568 } 21569 i6 := x6.AuxInt 21570 if x6.Aux != s { 21571 break 21572 } 21573 _ = x6.Args[1] 21574 if p != x6.Args[0] { 21575 break 21576 } 21577 if mem != x6.Args[1] { 21578 break 21579 } 21580 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)) { 21581 break 21582 } 21583 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 21584 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 21585 v.reset(OpCopy) 21586 v.AddArg(v0) 21587 v0.AuxInt = i0 21588 v0.Aux = s 21589 v0.AddArg(p) 21590 v0.AddArg(mem) 21591 return true 21592 } 21593 // 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]))) 21594 // 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) 21595 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 21596 for { 21597 t := v.Type 21598 _ = v.Args[1] 21599 s6 := v.Args[0] 21600 if s6.Op != OpPPC64SLDconst { 21601 break 21602 } 21603 if s6.AuxInt != 56 { 21604 break 21605 } 21606 x7 := s6.Args[0] 21607 if x7.Op != OpPPC64MOVBZload { 21608 break 21609 } 21610 i7 := x7.AuxInt 21611 s := x7.Aux 21612 _ = x7.Args[1] 21613 p := x7.Args[0] 21614 mem := x7.Args[1] 21615 o5 := v.Args[1] 21616 if o5.Op != OpPPC64OR { 21617 break 21618 } 21619 if o5.Type != t { 21620 break 21621 } 21622 _ = o5.Args[1] 21623 o4 := o5.Args[0] 21624 if o4.Op != OpPPC64OR { 21625 break 21626 } 21627 if o4.Type != t { 21628 break 21629 } 21630 _ = o4.Args[1] 21631 o3 := o4.Args[0] 21632 if o3.Op != OpPPC64OR { 21633 break 21634 } 21635 if o3.Type != t { 21636 break 21637 } 21638 _ = o3.Args[1] 21639 s3 := o3.Args[0] 21640 if s3.Op != OpPPC64SLDconst { 21641 break 21642 } 21643 if s3.AuxInt != 32 { 21644 break 21645 } 21646 x4 := s3.Args[0] 21647 if x4.Op != OpPPC64MOVBZload { 21648 break 21649 } 21650 i4 := x4.AuxInt 21651 if x4.Aux != s { 21652 break 21653 } 21654 _ = x4.Args[1] 21655 if p != x4.Args[0] { 21656 break 21657 } 21658 if mem != x4.Args[1] { 21659 break 21660 } 21661 o2 := o3.Args[1] 21662 if o2.Op != OpPPC64OR { 21663 break 21664 } 21665 if o2.Type != t { 21666 break 21667 } 21668 _ = o2.Args[1] 21669 s2 := o2.Args[0] 21670 if s2.Op != OpPPC64SLDconst { 21671 break 21672 } 21673 if s2.AuxInt != 24 { 21674 break 21675 } 21676 x3 := s2.Args[0] 21677 if x3.Op != OpPPC64MOVBZload { 21678 break 21679 } 21680 i3 := x3.AuxInt 21681 if x3.Aux != s { 21682 break 21683 } 21684 _ = x3.Args[1] 21685 if p != x3.Args[0] { 21686 break 21687 } 21688 if mem != x3.Args[1] { 21689 break 21690 } 21691 o1 := o2.Args[1] 21692 if o1.Op != OpPPC64OR { 21693 break 21694 } 21695 if o1.Type != t { 21696 break 21697 } 21698 _ = o1.Args[1] 21699 o0 := o1.Args[0] 21700 if o0.Op != OpPPC64OR { 21701 break 21702 } 21703 if o0.Type != t { 21704 break 21705 } 21706 _ = o0.Args[1] 21707 x0 := o0.Args[0] 21708 if x0.Op != OpPPC64MOVBZload { 21709 break 21710 } 21711 i0 := x0.AuxInt 21712 if x0.Aux != s { 21713 break 21714 } 21715 _ = x0.Args[1] 21716 if p != x0.Args[0] { 21717 break 21718 } 21719 if mem != x0.Args[1] { 21720 break 21721 } 21722 s0 := o0.Args[1] 21723 if s0.Op != OpPPC64SLDconst { 21724 break 21725 } 21726 if s0.AuxInt != 8 { 21727 break 21728 } 21729 x1 := s0.Args[0] 21730 if x1.Op != OpPPC64MOVBZload { 21731 break 21732 } 21733 i1 := x1.AuxInt 21734 if x1.Aux != s { 21735 break 21736 } 21737 _ = x1.Args[1] 21738 if p != x1.Args[0] { 21739 break 21740 } 21741 if mem != x1.Args[1] { 21742 break 21743 } 21744 s1 := o1.Args[1] 21745 if s1.Op != OpPPC64SLDconst { 21746 break 21747 } 21748 if s1.AuxInt != 16 { 21749 break 21750 } 21751 x2 := s1.Args[0] 21752 if x2.Op != OpPPC64MOVBZload { 21753 break 21754 } 21755 i2 := x2.AuxInt 21756 if x2.Aux != s { 21757 break 21758 } 21759 _ = x2.Args[1] 21760 if p != x2.Args[0] { 21761 break 21762 } 21763 if mem != x2.Args[1] { 21764 break 21765 } 21766 s4 := o4.Args[1] 21767 if s4.Op != OpPPC64SLDconst { 21768 break 21769 } 21770 if s4.AuxInt != 40 { 21771 break 21772 } 21773 x5 := s4.Args[0] 21774 if x5.Op != OpPPC64MOVBZload { 21775 break 21776 } 21777 i5 := x5.AuxInt 21778 if x5.Aux != s { 21779 break 21780 } 21781 _ = x5.Args[1] 21782 if p != x5.Args[0] { 21783 break 21784 } 21785 if mem != x5.Args[1] { 21786 break 21787 } 21788 s5 := o5.Args[1] 21789 if s5.Op != OpPPC64SLDconst { 21790 break 21791 } 21792 if s5.AuxInt != 48 { 21793 break 21794 } 21795 x6 := s5.Args[0] 21796 if x6.Op != OpPPC64MOVBZload { 21797 break 21798 } 21799 i6 := x6.AuxInt 21800 if x6.Aux != s { 21801 break 21802 } 21803 _ = x6.Args[1] 21804 if p != x6.Args[0] { 21805 break 21806 } 21807 if mem != x6.Args[1] { 21808 break 21809 } 21810 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)) { 21811 break 21812 } 21813 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 21814 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 21815 v.reset(OpCopy) 21816 v.AddArg(v0) 21817 v0.AuxInt = i0 21818 v0.Aux = s 21819 v0.AddArg(p) 21820 v0.AddArg(mem) 21821 return true 21822 } 21823 return false 21824 } 21825 func rewriteValuePPC64_OpPPC64OR_70(v *Value) bool { 21826 b := v.Block 21827 _ = b 21828 config := b.Func.Config 21829 _ = config 21830 // 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]))) 21831 // 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) 21832 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 21833 for { 21834 t := v.Type 21835 _ = v.Args[1] 21836 s6 := v.Args[0] 21837 if s6.Op != OpPPC64SLDconst { 21838 break 21839 } 21840 if s6.AuxInt != 56 { 21841 break 21842 } 21843 x7 := s6.Args[0] 21844 if x7.Op != OpPPC64MOVBZload { 21845 break 21846 } 21847 i7 := x7.AuxInt 21848 s := x7.Aux 21849 _ = x7.Args[1] 21850 p := x7.Args[0] 21851 mem := x7.Args[1] 21852 o5 := v.Args[1] 21853 if o5.Op != OpPPC64OR { 21854 break 21855 } 21856 if o5.Type != t { 21857 break 21858 } 21859 _ = o5.Args[1] 21860 o4 := o5.Args[0] 21861 if o4.Op != OpPPC64OR { 21862 break 21863 } 21864 if o4.Type != t { 21865 break 21866 } 21867 _ = o4.Args[1] 21868 o3 := o4.Args[0] 21869 if o3.Op != OpPPC64OR { 21870 break 21871 } 21872 if o3.Type != t { 21873 break 21874 } 21875 _ = o3.Args[1] 21876 s3 := o3.Args[0] 21877 if s3.Op != OpPPC64SLDconst { 21878 break 21879 } 21880 if s3.AuxInt != 32 { 21881 break 21882 } 21883 x4 := s3.Args[0] 21884 if x4.Op != OpPPC64MOVBZload { 21885 break 21886 } 21887 i4 := x4.AuxInt 21888 if x4.Aux != s { 21889 break 21890 } 21891 _ = x4.Args[1] 21892 if p != x4.Args[0] { 21893 break 21894 } 21895 if mem != x4.Args[1] { 21896 break 21897 } 21898 o2 := o3.Args[1] 21899 if o2.Op != OpPPC64OR { 21900 break 21901 } 21902 if o2.Type != t { 21903 break 21904 } 21905 _ = o2.Args[1] 21906 o1 := o2.Args[0] 21907 if o1.Op != OpPPC64OR { 21908 break 21909 } 21910 if o1.Type != t { 21911 break 21912 } 21913 _ = o1.Args[1] 21914 s1 := o1.Args[0] 21915 if s1.Op != OpPPC64SLDconst { 21916 break 21917 } 21918 if s1.AuxInt != 16 { 21919 break 21920 } 21921 x2 := s1.Args[0] 21922 if x2.Op != OpPPC64MOVBZload { 21923 break 21924 } 21925 i2 := x2.AuxInt 21926 if x2.Aux != s { 21927 break 21928 } 21929 _ = x2.Args[1] 21930 if p != x2.Args[0] { 21931 break 21932 } 21933 if mem != x2.Args[1] { 21934 break 21935 } 21936 o0 := o1.Args[1] 21937 if o0.Op != OpPPC64OR { 21938 break 21939 } 21940 if o0.Type != t { 21941 break 21942 } 21943 _ = o0.Args[1] 21944 s0 := o0.Args[0] 21945 if s0.Op != OpPPC64SLDconst { 21946 break 21947 } 21948 if s0.AuxInt != 8 { 21949 break 21950 } 21951 x1 := s0.Args[0] 21952 if x1.Op != OpPPC64MOVBZload { 21953 break 21954 } 21955 i1 := x1.AuxInt 21956 if x1.Aux != s { 21957 break 21958 } 21959 _ = x1.Args[1] 21960 if p != x1.Args[0] { 21961 break 21962 } 21963 if mem != x1.Args[1] { 21964 break 21965 } 21966 x0 := o0.Args[1] 21967 if x0.Op != OpPPC64MOVBZload { 21968 break 21969 } 21970 i0 := x0.AuxInt 21971 if x0.Aux != s { 21972 break 21973 } 21974 _ = x0.Args[1] 21975 if p != x0.Args[0] { 21976 break 21977 } 21978 if mem != x0.Args[1] { 21979 break 21980 } 21981 s2 := o2.Args[1] 21982 if s2.Op != OpPPC64SLDconst { 21983 break 21984 } 21985 if s2.AuxInt != 24 { 21986 break 21987 } 21988 x3 := s2.Args[0] 21989 if x3.Op != OpPPC64MOVBZload { 21990 break 21991 } 21992 i3 := x3.AuxInt 21993 if x3.Aux != s { 21994 break 21995 } 21996 _ = x3.Args[1] 21997 if p != x3.Args[0] { 21998 break 21999 } 22000 if mem != x3.Args[1] { 22001 break 22002 } 22003 s4 := o4.Args[1] 22004 if s4.Op != OpPPC64SLDconst { 22005 break 22006 } 22007 if s4.AuxInt != 40 { 22008 break 22009 } 22010 x5 := s4.Args[0] 22011 if x5.Op != OpPPC64MOVBZload { 22012 break 22013 } 22014 i5 := x5.AuxInt 22015 if x5.Aux != s { 22016 break 22017 } 22018 _ = x5.Args[1] 22019 if p != x5.Args[0] { 22020 break 22021 } 22022 if mem != x5.Args[1] { 22023 break 22024 } 22025 s5 := o5.Args[1] 22026 if s5.Op != OpPPC64SLDconst { 22027 break 22028 } 22029 if s5.AuxInt != 48 { 22030 break 22031 } 22032 x6 := s5.Args[0] 22033 if x6.Op != OpPPC64MOVBZload { 22034 break 22035 } 22036 i6 := x6.AuxInt 22037 if x6.Aux != s { 22038 break 22039 } 22040 _ = x6.Args[1] 22041 if p != x6.Args[0] { 22042 break 22043 } 22044 if mem != x6.Args[1] { 22045 break 22046 } 22047 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)) { 22048 break 22049 } 22050 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 22051 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 22052 v.reset(OpCopy) 22053 v.AddArg(v0) 22054 v0.AuxInt = i0 22055 v0.Aux = s 22056 v0.AddArg(p) 22057 v0.AddArg(mem) 22058 return true 22059 } 22060 // 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]))) 22061 // 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) 22062 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 22063 for { 22064 t := v.Type 22065 _ = v.Args[1] 22066 s6 := v.Args[0] 22067 if s6.Op != OpPPC64SLDconst { 22068 break 22069 } 22070 if s6.AuxInt != 56 { 22071 break 22072 } 22073 x7 := s6.Args[0] 22074 if x7.Op != OpPPC64MOVBZload { 22075 break 22076 } 22077 i7 := x7.AuxInt 22078 s := x7.Aux 22079 _ = x7.Args[1] 22080 p := x7.Args[0] 22081 mem := x7.Args[1] 22082 o5 := v.Args[1] 22083 if o5.Op != OpPPC64OR { 22084 break 22085 } 22086 if o5.Type != t { 22087 break 22088 } 22089 _ = o5.Args[1] 22090 o4 := o5.Args[0] 22091 if o4.Op != OpPPC64OR { 22092 break 22093 } 22094 if o4.Type != t { 22095 break 22096 } 22097 _ = o4.Args[1] 22098 o3 := o4.Args[0] 22099 if o3.Op != OpPPC64OR { 22100 break 22101 } 22102 if o3.Type != t { 22103 break 22104 } 22105 _ = o3.Args[1] 22106 s3 := o3.Args[0] 22107 if s3.Op != OpPPC64SLDconst { 22108 break 22109 } 22110 if s3.AuxInt != 32 { 22111 break 22112 } 22113 x4 := s3.Args[0] 22114 if x4.Op != OpPPC64MOVBZload { 22115 break 22116 } 22117 i4 := x4.AuxInt 22118 if x4.Aux != s { 22119 break 22120 } 22121 _ = x4.Args[1] 22122 if p != x4.Args[0] { 22123 break 22124 } 22125 if mem != x4.Args[1] { 22126 break 22127 } 22128 o2 := o3.Args[1] 22129 if o2.Op != OpPPC64OR { 22130 break 22131 } 22132 if o2.Type != t { 22133 break 22134 } 22135 _ = o2.Args[1] 22136 o1 := o2.Args[0] 22137 if o1.Op != OpPPC64OR { 22138 break 22139 } 22140 if o1.Type != t { 22141 break 22142 } 22143 _ = o1.Args[1] 22144 s1 := o1.Args[0] 22145 if s1.Op != OpPPC64SLDconst { 22146 break 22147 } 22148 if s1.AuxInt != 16 { 22149 break 22150 } 22151 x2 := s1.Args[0] 22152 if x2.Op != OpPPC64MOVBZload { 22153 break 22154 } 22155 i2 := x2.AuxInt 22156 if x2.Aux != s { 22157 break 22158 } 22159 _ = x2.Args[1] 22160 if p != x2.Args[0] { 22161 break 22162 } 22163 if mem != x2.Args[1] { 22164 break 22165 } 22166 o0 := o1.Args[1] 22167 if o0.Op != OpPPC64OR { 22168 break 22169 } 22170 if o0.Type != t { 22171 break 22172 } 22173 _ = o0.Args[1] 22174 x0 := o0.Args[0] 22175 if x0.Op != OpPPC64MOVBZload { 22176 break 22177 } 22178 i0 := x0.AuxInt 22179 if x0.Aux != s { 22180 break 22181 } 22182 _ = x0.Args[1] 22183 if p != x0.Args[0] { 22184 break 22185 } 22186 if mem != x0.Args[1] { 22187 break 22188 } 22189 s0 := o0.Args[1] 22190 if s0.Op != OpPPC64SLDconst { 22191 break 22192 } 22193 if s0.AuxInt != 8 { 22194 break 22195 } 22196 x1 := s0.Args[0] 22197 if x1.Op != OpPPC64MOVBZload { 22198 break 22199 } 22200 i1 := x1.AuxInt 22201 if x1.Aux != s { 22202 break 22203 } 22204 _ = x1.Args[1] 22205 if p != x1.Args[0] { 22206 break 22207 } 22208 if mem != x1.Args[1] { 22209 break 22210 } 22211 s2 := o2.Args[1] 22212 if s2.Op != OpPPC64SLDconst { 22213 break 22214 } 22215 if s2.AuxInt != 24 { 22216 break 22217 } 22218 x3 := s2.Args[0] 22219 if x3.Op != OpPPC64MOVBZload { 22220 break 22221 } 22222 i3 := x3.AuxInt 22223 if x3.Aux != s { 22224 break 22225 } 22226 _ = x3.Args[1] 22227 if p != x3.Args[0] { 22228 break 22229 } 22230 if mem != x3.Args[1] { 22231 break 22232 } 22233 s4 := o4.Args[1] 22234 if s4.Op != OpPPC64SLDconst { 22235 break 22236 } 22237 if s4.AuxInt != 40 { 22238 break 22239 } 22240 x5 := s4.Args[0] 22241 if x5.Op != OpPPC64MOVBZload { 22242 break 22243 } 22244 i5 := x5.AuxInt 22245 if x5.Aux != s { 22246 break 22247 } 22248 _ = x5.Args[1] 22249 if p != x5.Args[0] { 22250 break 22251 } 22252 if mem != x5.Args[1] { 22253 break 22254 } 22255 s5 := o5.Args[1] 22256 if s5.Op != OpPPC64SLDconst { 22257 break 22258 } 22259 if s5.AuxInt != 48 { 22260 break 22261 } 22262 x6 := s5.Args[0] 22263 if x6.Op != OpPPC64MOVBZload { 22264 break 22265 } 22266 i6 := x6.AuxInt 22267 if x6.Aux != s { 22268 break 22269 } 22270 _ = x6.Args[1] 22271 if p != x6.Args[0] { 22272 break 22273 } 22274 if mem != x6.Args[1] { 22275 break 22276 } 22277 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)) { 22278 break 22279 } 22280 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 22281 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 22282 v.reset(OpCopy) 22283 v.AddArg(v0) 22284 v0.AuxInt = i0 22285 v0.Aux = s 22286 v0.AddArg(p) 22287 v0.AddArg(mem) 22288 return true 22289 } 22290 // 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]))) 22291 // 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) 22292 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 22293 for { 22294 t := v.Type 22295 _ = v.Args[1] 22296 s6 := v.Args[0] 22297 if s6.Op != OpPPC64SLDconst { 22298 break 22299 } 22300 if s6.AuxInt != 56 { 22301 break 22302 } 22303 x7 := s6.Args[0] 22304 if x7.Op != OpPPC64MOVBZload { 22305 break 22306 } 22307 i7 := x7.AuxInt 22308 s := x7.Aux 22309 _ = x7.Args[1] 22310 p := x7.Args[0] 22311 mem := x7.Args[1] 22312 o5 := v.Args[1] 22313 if o5.Op != OpPPC64OR { 22314 break 22315 } 22316 if o5.Type != t { 22317 break 22318 } 22319 _ = o5.Args[1] 22320 o4 := o5.Args[0] 22321 if o4.Op != OpPPC64OR { 22322 break 22323 } 22324 if o4.Type != t { 22325 break 22326 } 22327 _ = o4.Args[1] 22328 o3 := o4.Args[0] 22329 if o3.Op != OpPPC64OR { 22330 break 22331 } 22332 if o3.Type != t { 22333 break 22334 } 22335 _ = o3.Args[1] 22336 s3 := o3.Args[0] 22337 if s3.Op != OpPPC64SLDconst { 22338 break 22339 } 22340 if s3.AuxInt != 32 { 22341 break 22342 } 22343 x4 := s3.Args[0] 22344 if x4.Op != OpPPC64MOVBZload { 22345 break 22346 } 22347 i4 := x4.AuxInt 22348 if x4.Aux != s { 22349 break 22350 } 22351 _ = x4.Args[1] 22352 if p != x4.Args[0] { 22353 break 22354 } 22355 if mem != x4.Args[1] { 22356 break 22357 } 22358 o2 := o3.Args[1] 22359 if o2.Op != OpPPC64OR { 22360 break 22361 } 22362 if o2.Type != t { 22363 break 22364 } 22365 _ = o2.Args[1] 22366 o1 := o2.Args[0] 22367 if o1.Op != OpPPC64OR { 22368 break 22369 } 22370 if o1.Type != t { 22371 break 22372 } 22373 _ = o1.Args[1] 22374 o0 := o1.Args[0] 22375 if o0.Op != OpPPC64OR { 22376 break 22377 } 22378 if o0.Type != t { 22379 break 22380 } 22381 _ = o0.Args[1] 22382 s0 := o0.Args[0] 22383 if s0.Op != OpPPC64SLDconst { 22384 break 22385 } 22386 if s0.AuxInt != 8 { 22387 break 22388 } 22389 x1 := s0.Args[0] 22390 if x1.Op != OpPPC64MOVBZload { 22391 break 22392 } 22393 i1 := x1.AuxInt 22394 if x1.Aux != s { 22395 break 22396 } 22397 _ = x1.Args[1] 22398 if p != x1.Args[0] { 22399 break 22400 } 22401 if mem != x1.Args[1] { 22402 break 22403 } 22404 x0 := o0.Args[1] 22405 if x0.Op != OpPPC64MOVBZload { 22406 break 22407 } 22408 i0 := x0.AuxInt 22409 if x0.Aux != s { 22410 break 22411 } 22412 _ = x0.Args[1] 22413 if p != x0.Args[0] { 22414 break 22415 } 22416 if mem != x0.Args[1] { 22417 break 22418 } 22419 s1 := o1.Args[1] 22420 if s1.Op != OpPPC64SLDconst { 22421 break 22422 } 22423 if s1.AuxInt != 16 { 22424 break 22425 } 22426 x2 := s1.Args[0] 22427 if x2.Op != OpPPC64MOVBZload { 22428 break 22429 } 22430 i2 := x2.AuxInt 22431 if x2.Aux != s { 22432 break 22433 } 22434 _ = x2.Args[1] 22435 if p != x2.Args[0] { 22436 break 22437 } 22438 if mem != x2.Args[1] { 22439 break 22440 } 22441 s2 := o2.Args[1] 22442 if s2.Op != OpPPC64SLDconst { 22443 break 22444 } 22445 if s2.AuxInt != 24 { 22446 break 22447 } 22448 x3 := s2.Args[0] 22449 if x3.Op != OpPPC64MOVBZload { 22450 break 22451 } 22452 i3 := x3.AuxInt 22453 if x3.Aux != s { 22454 break 22455 } 22456 _ = x3.Args[1] 22457 if p != x3.Args[0] { 22458 break 22459 } 22460 if mem != x3.Args[1] { 22461 break 22462 } 22463 s4 := o4.Args[1] 22464 if s4.Op != OpPPC64SLDconst { 22465 break 22466 } 22467 if s4.AuxInt != 40 { 22468 break 22469 } 22470 x5 := s4.Args[0] 22471 if x5.Op != OpPPC64MOVBZload { 22472 break 22473 } 22474 i5 := x5.AuxInt 22475 if x5.Aux != s { 22476 break 22477 } 22478 _ = x5.Args[1] 22479 if p != x5.Args[0] { 22480 break 22481 } 22482 if mem != x5.Args[1] { 22483 break 22484 } 22485 s5 := o5.Args[1] 22486 if s5.Op != OpPPC64SLDconst { 22487 break 22488 } 22489 if s5.AuxInt != 48 { 22490 break 22491 } 22492 x6 := s5.Args[0] 22493 if x6.Op != OpPPC64MOVBZload { 22494 break 22495 } 22496 i6 := x6.AuxInt 22497 if x6.Aux != s { 22498 break 22499 } 22500 _ = x6.Args[1] 22501 if p != x6.Args[0] { 22502 break 22503 } 22504 if mem != x6.Args[1] { 22505 break 22506 } 22507 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)) { 22508 break 22509 } 22510 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 22511 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 22512 v.reset(OpCopy) 22513 v.AddArg(v0) 22514 v0.AuxInt = i0 22515 v0.Aux = s 22516 v0.AddArg(p) 22517 v0.AddArg(mem) 22518 return true 22519 } 22520 // 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]))) 22521 // 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) 22522 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 22523 for { 22524 t := v.Type 22525 _ = v.Args[1] 22526 s6 := v.Args[0] 22527 if s6.Op != OpPPC64SLDconst { 22528 break 22529 } 22530 if s6.AuxInt != 56 { 22531 break 22532 } 22533 x7 := s6.Args[0] 22534 if x7.Op != OpPPC64MOVBZload { 22535 break 22536 } 22537 i7 := x7.AuxInt 22538 s := x7.Aux 22539 _ = x7.Args[1] 22540 p := x7.Args[0] 22541 mem := x7.Args[1] 22542 o5 := v.Args[1] 22543 if o5.Op != OpPPC64OR { 22544 break 22545 } 22546 if o5.Type != t { 22547 break 22548 } 22549 _ = o5.Args[1] 22550 o4 := o5.Args[0] 22551 if o4.Op != OpPPC64OR { 22552 break 22553 } 22554 if o4.Type != t { 22555 break 22556 } 22557 _ = o4.Args[1] 22558 o3 := o4.Args[0] 22559 if o3.Op != OpPPC64OR { 22560 break 22561 } 22562 if o3.Type != t { 22563 break 22564 } 22565 _ = o3.Args[1] 22566 s3 := o3.Args[0] 22567 if s3.Op != OpPPC64SLDconst { 22568 break 22569 } 22570 if s3.AuxInt != 32 { 22571 break 22572 } 22573 x4 := s3.Args[0] 22574 if x4.Op != OpPPC64MOVBZload { 22575 break 22576 } 22577 i4 := x4.AuxInt 22578 if x4.Aux != s { 22579 break 22580 } 22581 _ = x4.Args[1] 22582 if p != x4.Args[0] { 22583 break 22584 } 22585 if mem != x4.Args[1] { 22586 break 22587 } 22588 o2 := o3.Args[1] 22589 if o2.Op != OpPPC64OR { 22590 break 22591 } 22592 if o2.Type != t { 22593 break 22594 } 22595 _ = o2.Args[1] 22596 o1 := o2.Args[0] 22597 if o1.Op != OpPPC64OR { 22598 break 22599 } 22600 if o1.Type != t { 22601 break 22602 } 22603 _ = o1.Args[1] 22604 o0 := o1.Args[0] 22605 if o0.Op != OpPPC64OR { 22606 break 22607 } 22608 if o0.Type != t { 22609 break 22610 } 22611 _ = o0.Args[1] 22612 x0 := o0.Args[0] 22613 if x0.Op != OpPPC64MOVBZload { 22614 break 22615 } 22616 i0 := x0.AuxInt 22617 if x0.Aux != s { 22618 break 22619 } 22620 _ = x0.Args[1] 22621 if p != x0.Args[0] { 22622 break 22623 } 22624 if mem != x0.Args[1] { 22625 break 22626 } 22627 s0 := o0.Args[1] 22628 if s0.Op != OpPPC64SLDconst { 22629 break 22630 } 22631 if s0.AuxInt != 8 { 22632 break 22633 } 22634 x1 := s0.Args[0] 22635 if x1.Op != OpPPC64MOVBZload { 22636 break 22637 } 22638 i1 := x1.AuxInt 22639 if x1.Aux != s { 22640 break 22641 } 22642 _ = x1.Args[1] 22643 if p != x1.Args[0] { 22644 break 22645 } 22646 if mem != x1.Args[1] { 22647 break 22648 } 22649 s1 := o1.Args[1] 22650 if s1.Op != OpPPC64SLDconst { 22651 break 22652 } 22653 if s1.AuxInt != 16 { 22654 break 22655 } 22656 x2 := s1.Args[0] 22657 if x2.Op != OpPPC64MOVBZload { 22658 break 22659 } 22660 i2 := x2.AuxInt 22661 if x2.Aux != s { 22662 break 22663 } 22664 _ = x2.Args[1] 22665 if p != x2.Args[0] { 22666 break 22667 } 22668 if mem != x2.Args[1] { 22669 break 22670 } 22671 s2 := o2.Args[1] 22672 if s2.Op != OpPPC64SLDconst { 22673 break 22674 } 22675 if s2.AuxInt != 24 { 22676 break 22677 } 22678 x3 := s2.Args[0] 22679 if x3.Op != OpPPC64MOVBZload { 22680 break 22681 } 22682 i3 := x3.AuxInt 22683 if x3.Aux != s { 22684 break 22685 } 22686 _ = x3.Args[1] 22687 if p != x3.Args[0] { 22688 break 22689 } 22690 if mem != x3.Args[1] { 22691 break 22692 } 22693 s4 := o4.Args[1] 22694 if s4.Op != OpPPC64SLDconst { 22695 break 22696 } 22697 if s4.AuxInt != 40 { 22698 break 22699 } 22700 x5 := s4.Args[0] 22701 if x5.Op != OpPPC64MOVBZload { 22702 break 22703 } 22704 i5 := x5.AuxInt 22705 if x5.Aux != s { 22706 break 22707 } 22708 _ = x5.Args[1] 22709 if p != x5.Args[0] { 22710 break 22711 } 22712 if mem != x5.Args[1] { 22713 break 22714 } 22715 s5 := o5.Args[1] 22716 if s5.Op != OpPPC64SLDconst { 22717 break 22718 } 22719 if s5.AuxInt != 48 { 22720 break 22721 } 22722 x6 := s5.Args[0] 22723 if x6.Op != OpPPC64MOVBZload { 22724 break 22725 } 22726 i6 := x6.AuxInt 22727 if x6.Aux != s { 22728 break 22729 } 22730 _ = x6.Args[1] 22731 if p != x6.Args[0] { 22732 break 22733 } 22734 if mem != x6.Args[1] { 22735 break 22736 } 22737 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)) { 22738 break 22739 } 22740 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 22741 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 22742 v.reset(OpCopy) 22743 v.AddArg(v0) 22744 v0.AuxInt = i0 22745 v0.Aux = s 22746 v0.AddArg(p) 22747 v0.AddArg(mem) 22748 return true 22749 } 22750 // 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]))) 22751 // 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) 22752 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 22753 for { 22754 t := v.Type 22755 _ = v.Args[1] 22756 s6 := v.Args[0] 22757 if s6.Op != OpPPC64SLDconst { 22758 break 22759 } 22760 if s6.AuxInt != 56 { 22761 break 22762 } 22763 x7 := s6.Args[0] 22764 if x7.Op != OpPPC64MOVBZload { 22765 break 22766 } 22767 i7 := x7.AuxInt 22768 s := x7.Aux 22769 _ = x7.Args[1] 22770 p := x7.Args[0] 22771 mem := x7.Args[1] 22772 o5 := v.Args[1] 22773 if o5.Op != OpPPC64OR { 22774 break 22775 } 22776 if o5.Type != t { 22777 break 22778 } 22779 _ = o5.Args[1] 22780 o4 := o5.Args[0] 22781 if o4.Op != OpPPC64OR { 22782 break 22783 } 22784 if o4.Type != t { 22785 break 22786 } 22787 _ = o4.Args[1] 22788 o3 := o4.Args[0] 22789 if o3.Op != OpPPC64OR { 22790 break 22791 } 22792 if o3.Type != t { 22793 break 22794 } 22795 _ = o3.Args[1] 22796 o2 := o3.Args[0] 22797 if o2.Op != OpPPC64OR { 22798 break 22799 } 22800 if o2.Type != t { 22801 break 22802 } 22803 _ = o2.Args[1] 22804 s2 := o2.Args[0] 22805 if s2.Op != OpPPC64SLDconst { 22806 break 22807 } 22808 if s2.AuxInt != 24 { 22809 break 22810 } 22811 x3 := s2.Args[0] 22812 if x3.Op != OpPPC64MOVBZload { 22813 break 22814 } 22815 i3 := x3.AuxInt 22816 if x3.Aux != s { 22817 break 22818 } 22819 _ = x3.Args[1] 22820 if p != x3.Args[0] { 22821 break 22822 } 22823 if mem != x3.Args[1] { 22824 break 22825 } 22826 o1 := o2.Args[1] 22827 if o1.Op != OpPPC64OR { 22828 break 22829 } 22830 if o1.Type != t { 22831 break 22832 } 22833 _ = o1.Args[1] 22834 s1 := o1.Args[0] 22835 if s1.Op != OpPPC64SLDconst { 22836 break 22837 } 22838 if s1.AuxInt != 16 { 22839 break 22840 } 22841 x2 := s1.Args[0] 22842 if x2.Op != OpPPC64MOVBZload { 22843 break 22844 } 22845 i2 := x2.AuxInt 22846 if x2.Aux != s { 22847 break 22848 } 22849 _ = x2.Args[1] 22850 if p != x2.Args[0] { 22851 break 22852 } 22853 if mem != x2.Args[1] { 22854 break 22855 } 22856 o0 := o1.Args[1] 22857 if o0.Op != OpPPC64OR { 22858 break 22859 } 22860 if o0.Type != t { 22861 break 22862 } 22863 _ = o0.Args[1] 22864 s0 := o0.Args[0] 22865 if s0.Op != OpPPC64SLDconst { 22866 break 22867 } 22868 if s0.AuxInt != 8 { 22869 break 22870 } 22871 x1 := s0.Args[0] 22872 if x1.Op != OpPPC64MOVBZload { 22873 break 22874 } 22875 i1 := x1.AuxInt 22876 if x1.Aux != s { 22877 break 22878 } 22879 _ = x1.Args[1] 22880 if p != x1.Args[0] { 22881 break 22882 } 22883 if mem != x1.Args[1] { 22884 break 22885 } 22886 x0 := o0.Args[1] 22887 if x0.Op != OpPPC64MOVBZload { 22888 break 22889 } 22890 i0 := x0.AuxInt 22891 if x0.Aux != s { 22892 break 22893 } 22894 _ = x0.Args[1] 22895 if p != x0.Args[0] { 22896 break 22897 } 22898 if mem != x0.Args[1] { 22899 break 22900 } 22901 s3 := o3.Args[1] 22902 if s3.Op != OpPPC64SLDconst { 22903 break 22904 } 22905 if s3.AuxInt != 32 { 22906 break 22907 } 22908 x4 := s3.Args[0] 22909 if x4.Op != OpPPC64MOVBZload { 22910 break 22911 } 22912 i4 := x4.AuxInt 22913 if x4.Aux != s { 22914 break 22915 } 22916 _ = x4.Args[1] 22917 if p != x4.Args[0] { 22918 break 22919 } 22920 if mem != x4.Args[1] { 22921 break 22922 } 22923 s4 := o4.Args[1] 22924 if s4.Op != OpPPC64SLDconst { 22925 break 22926 } 22927 if s4.AuxInt != 40 { 22928 break 22929 } 22930 x5 := s4.Args[0] 22931 if x5.Op != OpPPC64MOVBZload { 22932 break 22933 } 22934 i5 := x5.AuxInt 22935 if x5.Aux != s { 22936 break 22937 } 22938 _ = x5.Args[1] 22939 if p != x5.Args[0] { 22940 break 22941 } 22942 if mem != x5.Args[1] { 22943 break 22944 } 22945 s5 := o5.Args[1] 22946 if s5.Op != OpPPC64SLDconst { 22947 break 22948 } 22949 if s5.AuxInt != 48 { 22950 break 22951 } 22952 x6 := s5.Args[0] 22953 if x6.Op != OpPPC64MOVBZload { 22954 break 22955 } 22956 i6 := x6.AuxInt 22957 if x6.Aux != s { 22958 break 22959 } 22960 _ = x6.Args[1] 22961 if p != x6.Args[0] { 22962 break 22963 } 22964 if mem != x6.Args[1] { 22965 break 22966 } 22967 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)) { 22968 break 22969 } 22970 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 22971 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 22972 v.reset(OpCopy) 22973 v.AddArg(v0) 22974 v0.AuxInt = i0 22975 v0.Aux = s 22976 v0.AddArg(p) 22977 v0.AddArg(mem) 22978 return true 22979 } 22980 // 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]))) 22981 // 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) 22982 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 22983 for { 22984 t := v.Type 22985 _ = v.Args[1] 22986 s6 := v.Args[0] 22987 if s6.Op != OpPPC64SLDconst { 22988 break 22989 } 22990 if s6.AuxInt != 56 { 22991 break 22992 } 22993 x7 := s6.Args[0] 22994 if x7.Op != OpPPC64MOVBZload { 22995 break 22996 } 22997 i7 := x7.AuxInt 22998 s := x7.Aux 22999 _ = x7.Args[1] 23000 p := x7.Args[0] 23001 mem := x7.Args[1] 23002 o5 := v.Args[1] 23003 if o5.Op != OpPPC64OR { 23004 break 23005 } 23006 if o5.Type != t { 23007 break 23008 } 23009 _ = o5.Args[1] 23010 o4 := o5.Args[0] 23011 if o4.Op != OpPPC64OR { 23012 break 23013 } 23014 if o4.Type != t { 23015 break 23016 } 23017 _ = o4.Args[1] 23018 o3 := o4.Args[0] 23019 if o3.Op != OpPPC64OR { 23020 break 23021 } 23022 if o3.Type != t { 23023 break 23024 } 23025 _ = o3.Args[1] 23026 o2 := o3.Args[0] 23027 if o2.Op != OpPPC64OR { 23028 break 23029 } 23030 if o2.Type != t { 23031 break 23032 } 23033 _ = o2.Args[1] 23034 s2 := o2.Args[0] 23035 if s2.Op != OpPPC64SLDconst { 23036 break 23037 } 23038 if s2.AuxInt != 24 { 23039 break 23040 } 23041 x3 := s2.Args[0] 23042 if x3.Op != OpPPC64MOVBZload { 23043 break 23044 } 23045 i3 := x3.AuxInt 23046 if x3.Aux != s { 23047 break 23048 } 23049 _ = x3.Args[1] 23050 if p != x3.Args[0] { 23051 break 23052 } 23053 if mem != x3.Args[1] { 23054 break 23055 } 23056 o1 := o2.Args[1] 23057 if o1.Op != OpPPC64OR { 23058 break 23059 } 23060 if o1.Type != t { 23061 break 23062 } 23063 _ = o1.Args[1] 23064 s1 := o1.Args[0] 23065 if s1.Op != OpPPC64SLDconst { 23066 break 23067 } 23068 if s1.AuxInt != 16 { 23069 break 23070 } 23071 x2 := s1.Args[0] 23072 if x2.Op != OpPPC64MOVBZload { 23073 break 23074 } 23075 i2 := x2.AuxInt 23076 if x2.Aux != s { 23077 break 23078 } 23079 _ = x2.Args[1] 23080 if p != x2.Args[0] { 23081 break 23082 } 23083 if mem != x2.Args[1] { 23084 break 23085 } 23086 o0 := o1.Args[1] 23087 if o0.Op != OpPPC64OR { 23088 break 23089 } 23090 if o0.Type != t { 23091 break 23092 } 23093 _ = o0.Args[1] 23094 x0 := o0.Args[0] 23095 if x0.Op != OpPPC64MOVBZload { 23096 break 23097 } 23098 i0 := x0.AuxInt 23099 if x0.Aux != s { 23100 break 23101 } 23102 _ = x0.Args[1] 23103 if p != x0.Args[0] { 23104 break 23105 } 23106 if mem != x0.Args[1] { 23107 break 23108 } 23109 s0 := o0.Args[1] 23110 if s0.Op != OpPPC64SLDconst { 23111 break 23112 } 23113 if s0.AuxInt != 8 { 23114 break 23115 } 23116 x1 := s0.Args[0] 23117 if x1.Op != OpPPC64MOVBZload { 23118 break 23119 } 23120 i1 := x1.AuxInt 23121 if x1.Aux != s { 23122 break 23123 } 23124 _ = x1.Args[1] 23125 if p != x1.Args[0] { 23126 break 23127 } 23128 if mem != x1.Args[1] { 23129 break 23130 } 23131 s3 := o3.Args[1] 23132 if s3.Op != OpPPC64SLDconst { 23133 break 23134 } 23135 if s3.AuxInt != 32 { 23136 break 23137 } 23138 x4 := s3.Args[0] 23139 if x4.Op != OpPPC64MOVBZload { 23140 break 23141 } 23142 i4 := x4.AuxInt 23143 if x4.Aux != s { 23144 break 23145 } 23146 _ = x4.Args[1] 23147 if p != x4.Args[0] { 23148 break 23149 } 23150 if mem != x4.Args[1] { 23151 break 23152 } 23153 s4 := o4.Args[1] 23154 if s4.Op != OpPPC64SLDconst { 23155 break 23156 } 23157 if s4.AuxInt != 40 { 23158 break 23159 } 23160 x5 := s4.Args[0] 23161 if x5.Op != OpPPC64MOVBZload { 23162 break 23163 } 23164 i5 := x5.AuxInt 23165 if x5.Aux != s { 23166 break 23167 } 23168 _ = x5.Args[1] 23169 if p != x5.Args[0] { 23170 break 23171 } 23172 if mem != x5.Args[1] { 23173 break 23174 } 23175 s5 := o5.Args[1] 23176 if s5.Op != OpPPC64SLDconst { 23177 break 23178 } 23179 if s5.AuxInt != 48 { 23180 break 23181 } 23182 x6 := s5.Args[0] 23183 if x6.Op != OpPPC64MOVBZload { 23184 break 23185 } 23186 i6 := x6.AuxInt 23187 if x6.Aux != s { 23188 break 23189 } 23190 _ = x6.Args[1] 23191 if p != x6.Args[0] { 23192 break 23193 } 23194 if mem != x6.Args[1] { 23195 break 23196 } 23197 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)) { 23198 break 23199 } 23200 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 23201 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 23202 v.reset(OpCopy) 23203 v.AddArg(v0) 23204 v0.AuxInt = i0 23205 v0.Aux = s 23206 v0.AddArg(p) 23207 v0.AddArg(mem) 23208 return true 23209 } 23210 // 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]))) 23211 // 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) 23212 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 23213 for { 23214 t := v.Type 23215 _ = v.Args[1] 23216 s6 := v.Args[0] 23217 if s6.Op != OpPPC64SLDconst { 23218 break 23219 } 23220 if s6.AuxInt != 56 { 23221 break 23222 } 23223 x7 := s6.Args[0] 23224 if x7.Op != OpPPC64MOVBZload { 23225 break 23226 } 23227 i7 := x7.AuxInt 23228 s := x7.Aux 23229 _ = x7.Args[1] 23230 p := x7.Args[0] 23231 mem := x7.Args[1] 23232 o5 := v.Args[1] 23233 if o5.Op != OpPPC64OR { 23234 break 23235 } 23236 if o5.Type != t { 23237 break 23238 } 23239 _ = o5.Args[1] 23240 o4 := o5.Args[0] 23241 if o4.Op != OpPPC64OR { 23242 break 23243 } 23244 if o4.Type != t { 23245 break 23246 } 23247 _ = o4.Args[1] 23248 o3 := o4.Args[0] 23249 if o3.Op != OpPPC64OR { 23250 break 23251 } 23252 if o3.Type != t { 23253 break 23254 } 23255 _ = o3.Args[1] 23256 o2 := o3.Args[0] 23257 if o2.Op != OpPPC64OR { 23258 break 23259 } 23260 if o2.Type != t { 23261 break 23262 } 23263 _ = o2.Args[1] 23264 s2 := o2.Args[0] 23265 if s2.Op != OpPPC64SLDconst { 23266 break 23267 } 23268 if s2.AuxInt != 24 { 23269 break 23270 } 23271 x3 := s2.Args[0] 23272 if x3.Op != OpPPC64MOVBZload { 23273 break 23274 } 23275 i3 := x3.AuxInt 23276 if x3.Aux != s { 23277 break 23278 } 23279 _ = x3.Args[1] 23280 if p != x3.Args[0] { 23281 break 23282 } 23283 if mem != x3.Args[1] { 23284 break 23285 } 23286 o1 := o2.Args[1] 23287 if o1.Op != OpPPC64OR { 23288 break 23289 } 23290 if o1.Type != t { 23291 break 23292 } 23293 _ = o1.Args[1] 23294 o0 := o1.Args[0] 23295 if o0.Op != OpPPC64OR { 23296 break 23297 } 23298 if o0.Type != t { 23299 break 23300 } 23301 _ = o0.Args[1] 23302 s0 := o0.Args[0] 23303 if s0.Op != OpPPC64SLDconst { 23304 break 23305 } 23306 if s0.AuxInt != 8 { 23307 break 23308 } 23309 x1 := s0.Args[0] 23310 if x1.Op != OpPPC64MOVBZload { 23311 break 23312 } 23313 i1 := x1.AuxInt 23314 if x1.Aux != s { 23315 break 23316 } 23317 _ = x1.Args[1] 23318 if p != x1.Args[0] { 23319 break 23320 } 23321 if mem != x1.Args[1] { 23322 break 23323 } 23324 x0 := o0.Args[1] 23325 if x0.Op != OpPPC64MOVBZload { 23326 break 23327 } 23328 i0 := x0.AuxInt 23329 if x0.Aux != s { 23330 break 23331 } 23332 _ = x0.Args[1] 23333 if p != x0.Args[0] { 23334 break 23335 } 23336 if mem != x0.Args[1] { 23337 break 23338 } 23339 s1 := o1.Args[1] 23340 if s1.Op != OpPPC64SLDconst { 23341 break 23342 } 23343 if s1.AuxInt != 16 { 23344 break 23345 } 23346 x2 := s1.Args[0] 23347 if x2.Op != OpPPC64MOVBZload { 23348 break 23349 } 23350 i2 := x2.AuxInt 23351 if x2.Aux != s { 23352 break 23353 } 23354 _ = x2.Args[1] 23355 if p != x2.Args[0] { 23356 break 23357 } 23358 if mem != x2.Args[1] { 23359 break 23360 } 23361 s3 := o3.Args[1] 23362 if s3.Op != OpPPC64SLDconst { 23363 break 23364 } 23365 if s3.AuxInt != 32 { 23366 break 23367 } 23368 x4 := s3.Args[0] 23369 if x4.Op != OpPPC64MOVBZload { 23370 break 23371 } 23372 i4 := x4.AuxInt 23373 if x4.Aux != s { 23374 break 23375 } 23376 _ = x4.Args[1] 23377 if p != x4.Args[0] { 23378 break 23379 } 23380 if mem != x4.Args[1] { 23381 break 23382 } 23383 s4 := o4.Args[1] 23384 if s4.Op != OpPPC64SLDconst { 23385 break 23386 } 23387 if s4.AuxInt != 40 { 23388 break 23389 } 23390 x5 := s4.Args[0] 23391 if x5.Op != OpPPC64MOVBZload { 23392 break 23393 } 23394 i5 := x5.AuxInt 23395 if x5.Aux != s { 23396 break 23397 } 23398 _ = x5.Args[1] 23399 if p != x5.Args[0] { 23400 break 23401 } 23402 if mem != x5.Args[1] { 23403 break 23404 } 23405 s5 := o5.Args[1] 23406 if s5.Op != OpPPC64SLDconst { 23407 break 23408 } 23409 if s5.AuxInt != 48 { 23410 break 23411 } 23412 x6 := s5.Args[0] 23413 if x6.Op != OpPPC64MOVBZload { 23414 break 23415 } 23416 i6 := x6.AuxInt 23417 if x6.Aux != s { 23418 break 23419 } 23420 _ = x6.Args[1] 23421 if p != x6.Args[0] { 23422 break 23423 } 23424 if mem != x6.Args[1] { 23425 break 23426 } 23427 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)) { 23428 break 23429 } 23430 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 23431 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 23432 v.reset(OpCopy) 23433 v.AddArg(v0) 23434 v0.AuxInt = i0 23435 v0.Aux = s 23436 v0.AddArg(p) 23437 v0.AddArg(mem) 23438 return true 23439 } 23440 // 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]))) 23441 // 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) 23442 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 23443 for { 23444 t := v.Type 23445 _ = v.Args[1] 23446 s6 := v.Args[0] 23447 if s6.Op != OpPPC64SLDconst { 23448 break 23449 } 23450 if s6.AuxInt != 56 { 23451 break 23452 } 23453 x7 := s6.Args[0] 23454 if x7.Op != OpPPC64MOVBZload { 23455 break 23456 } 23457 i7 := x7.AuxInt 23458 s := x7.Aux 23459 _ = x7.Args[1] 23460 p := x7.Args[0] 23461 mem := x7.Args[1] 23462 o5 := v.Args[1] 23463 if o5.Op != OpPPC64OR { 23464 break 23465 } 23466 if o5.Type != t { 23467 break 23468 } 23469 _ = o5.Args[1] 23470 o4 := o5.Args[0] 23471 if o4.Op != OpPPC64OR { 23472 break 23473 } 23474 if o4.Type != t { 23475 break 23476 } 23477 _ = o4.Args[1] 23478 o3 := o4.Args[0] 23479 if o3.Op != OpPPC64OR { 23480 break 23481 } 23482 if o3.Type != t { 23483 break 23484 } 23485 _ = o3.Args[1] 23486 o2 := o3.Args[0] 23487 if o2.Op != OpPPC64OR { 23488 break 23489 } 23490 if o2.Type != t { 23491 break 23492 } 23493 _ = o2.Args[1] 23494 s2 := o2.Args[0] 23495 if s2.Op != OpPPC64SLDconst { 23496 break 23497 } 23498 if s2.AuxInt != 24 { 23499 break 23500 } 23501 x3 := s2.Args[0] 23502 if x3.Op != OpPPC64MOVBZload { 23503 break 23504 } 23505 i3 := x3.AuxInt 23506 if x3.Aux != s { 23507 break 23508 } 23509 _ = x3.Args[1] 23510 if p != x3.Args[0] { 23511 break 23512 } 23513 if mem != x3.Args[1] { 23514 break 23515 } 23516 o1 := o2.Args[1] 23517 if o1.Op != OpPPC64OR { 23518 break 23519 } 23520 if o1.Type != t { 23521 break 23522 } 23523 _ = o1.Args[1] 23524 o0 := o1.Args[0] 23525 if o0.Op != OpPPC64OR { 23526 break 23527 } 23528 if o0.Type != t { 23529 break 23530 } 23531 _ = o0.Args[1] 23532 x0 := o0.Args[0] 23533 if x0.Op != OpPPC64MOVBZload { 23534 break 23535 } 23536 i0 := x0.AuxInt 23537 if x0.Aux != s { 23538 break 23539 } 23540 _ = x0.Args[1] 23541 if p != x0.Args[0] { 23542 break 23543 } 23544 if mem != x0.Args[1] { 23545 break 23546 } 23547 s0 := o0.Args[1] 23548 if s0.Op != OpPPC64SLDconst { 23549 break 23550 } 23551 if s0.AuxInt != 8 { 23552 break 23553 } 23554 x1 := s0.Args[0] 23555 if x1.Op != OpPPC64MOVBZload { 23556 break 23557 } 23558 i1 := x1.AuxInt 23559 if x1.Aux != s { 23560 break 23561 } 23562 _ = x1.Args[1] 23563 if p != x1.Args[0] { 23564 break 23565 } 23566 if mem != x1.Args[1] { 23567 break 23568 } 23569 s1 := o1.Args[1] 23570 if s1.Op != OpPPC64SLDconst { 23571 break 23572 } 23573 if s1.AuxInt != 16 { 23574 break 23575 } 23576 x2 := s1.Args[0] 23577 if x2.Op != OpPPC64MOVBZload { 23578 break 23579 } 23580 i2 := x2.AuxInt 23581 if x2.Aux != s { 23582 break 23583 } 23584 _ = x2.Args[1] 23585 if p != x2.Args[0] { 23586 break 23587 } 23588 if mem != x2.Args[1] { 23589 break 23590 } 23591 s3 := o3.Args[1] 23592 if s3.Op != OpPPC64SLDconst { 23593 break 23594 } 23595 if s3.AuxInt != 32 { 23596 break 23597 } 23598 x4 := s3.Args[0] 23599 if x4.Op != OpPPC64MOVBZload { 23600 break 23601 } 23602 i4 := x4.AuxInt 23603 if x4.Aux != s { 23604 break 23605 } 23606 _ = x4.Args[1] 23607 if p != x4.Args[0] { 23608 break 23609 } 23610 if mem != x4.Args[1] { 23611 break 23612 } 23613 s4 := o4.Args[1] 23614 if s4.Op != OpPPC64SLDconst { 23615 break 23616 } 23617 if s4.AuxInt != 40 { 23618 break 23619 } 23620 x5 := s4.Args[0] 23621 if x5.Op != OpPPC64MOVBZload { 23622 break 23623 } 23624 i5 := x5.AuxInt 23625 if x5.Aux != s { 23626 break 23627 } 23628 _ = x5.Args[1] 23629 if p != x5.Args[0] { 23630 break 23631 } 23632 if mem != x5.Args[1] { 23633 break 23634 } 23635 s5 := o5.Args[1] 23636 if s5.Op != OpPPC64SLDconst { 23637 break 23638 } 23639 if s5.AuxInt != 48 { 23640 break 23641 } 23642 x6 := s5.Args[0] 23643 if x6.Op != OpPPC64MOVBZload { 23644 break 23645 } 23646 i6 := x6.AuxInt 23647 if x6.Aux != s { 23648 break 23649 } 23650 _ = x6.Args[1] 23651 if p != x6.Args[0] { 23652 break 23653 } 23654 if mem != x6.Args[1] { 23655 break 23656 } 23657 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)) { 23658 break 23659 } 23660 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 23661 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 23662 v.reset(OpCopy) 23663 v.AddArg(v0) 23664 v0.AuxInt = i0 23665 v0.Aux = s 23666 v0.AddArg(p) 23667 v0.AddArg(mem) 23668 return true 23669 } 23670 // 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]))) 23671 // 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) 23672 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 23673 for { 23674 t := v.Type 23675 _ = v.Args[1] 23676 s6 := v.Args[0] 23677 if s6.Op != OpPPC64SLDconst { 23678 break 23679 } 23680 if s6.AuxInt != 56 { 23681 break 23682 } 23683 x7 := s6.Args[0] 23684 if x7.Op != OpPPC64MOVBZload { 23685 break 23686 } 23687 i7 := x7.AuxInt 23688 s := x7.Aux 23689 _ = x7.Args[1] 23690 p := x7.Args[0] 23691 mem := x7.Args[1] 23692 o5 := v.Args[1] 23693 if o5.Op != OpPPC64OR { 23694 break 23695 } 23696 if o5.Type != t { 23697 break 23698 } 23699 _ = o5.Args[1] 23700 o4 := o5.Args[0] 23701 if o4.Op != OpPPC64OR { 23702 break 23703 } 23704 if o4.Type != t { 23705 break 23706 } 23707 _ = o4.Args[1] 23708 o3 := o4.Args[0] 23709 if o3.Op != OpPPC64OR { 23710 break 23711 } 23712 if o3.Type != t { 23713 break 23714 } 23715 _ = o3.Args[1] 23716 o2 := o3.Args[0] 23717 if o2.Op != OpPPC64OR { 23718 break 23719 } 23720 if o2.Type != t { 23721 break 23722 } 23723 _ = o2.Args[1] 23724 o1 := o2.Args[0] 23725 if o1.Op != OpPPC64OR { 23726 break 23727 } 23728 if o1.Type != t { 23729 break 23730 } 23731 _ = o1.Args[1] 23732 s1 := o1.Args[0] 23733 if s1.Op != OpPPC64SLDconst { 23734 break 23735 } 23736 if s1.AuxInt != 16 { 23737 break 23738 } 23739 x2 := s1.Args[0] 23740 if x2.Op != OpPPC64MOVBZload { 23741 break 23742 } 23743 i2 := x2.AuxInt 23744 if x2.Aux != s { 23745 break 23746 } 23747 _ = x2.Args[1] 23748 if p != x2.Args[0] { 23749 break 23750 } 23751 if mem != x2.Args[1] { 23752 break 23753 } 23754 o0 := o1.Args[1] 23755 if o0.Op != OpPPC64OR { 23756 break 23757 } 23758 if o0.Type != t { 23759 break 23760 } 23761 _ = o0.Args[1] 23762 s0 := o0.Args[0] 23763 if s0.Op != OpPPC64SLDconst { 23764 break 23765 } 23766 if s0.AuxInt != 8 { 23767 break 23768 } 23769 x1 := s0.Args[0] 23770 if x1.Op != OpPPC64MOVBZload { 23771 break 23772 } 23773 i1 := x1.AuxInt 23774 if x1.Aux != s { 23775 break 23776 } 23777 _ = x1.Args[1] 23778 if p != x1.Args[0] { 23779 break 23780 } 23781 if mem != x1.Args[1] { 23782 break 23783 } 23784 x0 := o0.Args[1] 23785 if x0.Op != OpPPC64MOVBZload { 23786 break 23787 } 23788 i0 := x0.AuxInt 23789 if x0.Aux != s { 23790 break 23791 } 23792 _ = x0.Args[1] 23793 if p != x0.Args[0] { 23794 break 23795 } 23796 if mem != x0.Args[1] { 23797 break 23798 } 23799 s2 := o2.Args[1] 23800 if s2.Op != OpPPC64SLDconst { 23801 break 23802 } 23803 if s2.AuxInt != 24 { 23804 break 23805 } 23806 x3 := s2.Args[0] 23807 if x3.Op != OpPPC64MOVBZload { 23808 break 23809 } 23810 i3 := x3.AuxInt 23811 if x3.Aux != s { 23812 break 23813 } 23814 _ = x3.Args[1] 23815 if p != x3.Args[0] { 23816 break 23817 } 23818 if mem != x3.Args[1] { 23819 break 23820 } 23821 s3 := o3.Args[1] 23822 if s3.Op != OpPPC64SLDconst { 23823 break 23824 } 23825 if s3.AuxInt != 32 { 23826 break 23827 } 23828 x4 := s3.Args[0] 23829 if x4.Op != OpPPC64MOVBZload { 23830 break 23831 } 23832 i4 := x4.AuxInt 23833 if x4.Aux != s { 23834 break 23835 } 23836 _ = x4.Args[1] 23837 if p != x4.Args[0] { 23838 break 23839 } 23840 if mem != x4.Args[1] { 23841 break 23842 } 23843 s4 := o4.Args[1] 23844 if s4.Op != OpPPC64SLDconst { 23845 break 23846 } 23847 if s4.AuxInt != 40 { 23848 break 23849 } 23850 x5 := s4.Args[0] 23851 if x5.Op != OpPPC64MOVBZload { 23852 break 23853 } 23854 i5 := x5.AuxInt 23855 if x5.Aux != s { 23856 break 23857 } 23858 _ = x5.Args[1] 23859 if p != x5.Args[0] { 23860 break 23861 } 23862 if mem != x5.Args[1] { 23863 break 23864 } 23865 s5 := o5.Args[1] 23866 if s5.Op != OpPPC64SLDconst { 23867 break 23868 } 23869 if s5.AuxInt != 48 { 23870 break 23871 } 23872 x6 := s5.Args[0] 23873 if x6.Op != OpPPC64MOVBZload { 23874 break 23875 } 23876 i6 := x6.AuxInt 23877 if x6.Aux != s { 23878 break 23879 } 23880 _ = x6.Args[1] 23881 if p != x6.Args[0] { 23882 break 23883 } 23884 if mem != x6.Args[1] { 23885 break 23886 } 23887 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)) { 23888 break 23889 } 23890 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 23891 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 23892 v.reset(OpCopy) 23893 v.AddArg(v0) 23894 v0.AuxInt = i0 23895 v0.Aux = s 23896 v0.AddArg(p) 23897 v0.AddArg(mem) 23898 return true 23899 } 23900 // 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]))) 23901 // 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) 23902 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 23903 for { 23904 t := v.Type 23905 _ = v.Args[1] 23906 s6 := v.Args[0] 23907 if s6.Op != OpPPC64SLDconst { 23908 break 23909 } 23910 if s6.AuxInt != 56 { 23911 break 23912 } 23913 x7 := s6.Args[0] 23914 if x7.Op != OpPPC64MOVBZload { 23915 break 23916 } 23917 i7 := x7.AuxInt 23918 s := x7.Aux 23919 _ = x7.Args[1] 23920 p := x7.Args[0] 23921 mem := x7.Args[1] 23922 o5 := v.Args[1] 23923 if o5.Op != OpPPC64OR { 23924 break 23925 } 23926 if o5.Type != t { 23927 break 23928 } 23929 _ = o5.Args[1] 23930 o4 := o5.Args[0] 23931 if o4.Op != OpPPC64OR { 23932 break 23933 } 23934 if o4.Type != t { 23935 break 23936 } 23937 _ = o4.Args[1] 23938 o3 := o4.Args[0] 23939 if o3.Op != OpPPC64OR { 23940 break 23941 } 23942 if o3.Type != t { 23943 break 23944 } 23945 _ = o3.Args[1] 23946 o2 := o3.Args[0] 23947 if o2.Op != OpPPC64OR { 23948 break 23949 } 23950 if o2.Type != t { 23951 break 23952 } 23953 _ = o2.Args[1] 23954 o1 := o2.Args[0] 23955 if o1.Op != OpPPC64OR { 23956 break 23957 } 23958 if o1.Type != t { 23959 break 23960 } 23961 _ = o1.Args[1] 23962 s1 := o1.Args[0] 23963 if s1.Op != OpPPC64SLDconst { 23964 break 23965 } 23966 if s1.AuxInt != 16 { 23967 break 23968 } 23969 x2 := s1.Args[0] 23970 if x2.Op != OpPPC64MOVBZload { 23971 break 23972 } 23973 i2 := x2.AuxInt 23974 if x2.Aux != s { 23975 break 23976 } 23977 _ = x2.Args[1] 23978 if p != x2.Args[0] { 23979 break 23980 } 23981 if mem != x2.Args[1] { 23982 break 23983 } 23984 o0 := o1.Args[1] 23985 if o0.Op != OpPPC64OR { 23986 break 23987 } 23988 if o0.Type != t { 23989 break 23990 } 23991 _ = o0.Args[1] 23992 x0 := o0.Args[0] 23993 if x0.Op != OpPPC64MOVBZload { 23994 break 23995 } 23996 i0 := x0.AuxInt 23997 if x0.Aux != s { 23998 break 23999 } 24000 _ = x0.Args[1] 24001 if p != x0.Args[0] { 24002 break 24003 } 24004 if mem != x0.Args[1] { 24005 break 24006 } 24007 s0 := o0.Args[1] 24008 if s0.Op != OpPPC64SLDconst { 24009 break 24010 } 24011 if s0.AuxInt != 8 { 24012 break 24013 } 24014 x1 := s0.Args[0] 24015 if x1.Op != OpPPC64MOVBZload { 24016 break 24017 } 24018 i1 := x1.AuxInt 24019 if x1.Aux != s { 24020 break 24021 } 24022 _ = x1.Args[1] 24023 if p != x1.Args[0] { 24024 break 24025 } 24026 if mem != x1.Args[1] { 24027 break 24028 } 24029 s2 := o2.Args[1] 24030 if s2.Op != OpPPC64SLDconst { 24031 break 24032 } 24033 if s2.AuxInt != 24 { 24034 break 24035 } 24036 x3 := s2.Args[0] 24037 if x3.Op != OpPPC64MOVBZload { 24038 break 24039 } 24040 i3 := x3.AuxInt 24041 if x3.Aux != s { 24042 break 24043 } 24044 _ = x3.Args[1] 24045 if p != x3.Args[0] { 24046 break 24047 } 24048 if mem != x3.Args[1] { 24049 break 24050 } 24051 s3 := o3.Args[1] 24052 if s3.Op != OpPPC64SLDconst { 24053 break 24054 } 24055 if s3.AuxInt != 32 { 24056 break 24057 } 24058 x4 := s3.Args[0] 24059 if x4.Op != OpPPC64MOVBZload { 24060 break 24061 } 24062 i4 := x4.AuxInt 24063 if x4.Aux != s { 24064 break 24065 } 24066 _ = x4.Args[1] 24067 if p != x4.Args[0] { 24068 break 24069 } 24070 if mem != x4.Args[1] { 24071 break 24072 } 24073 s4 := o4.Args[1] 24074 if s4.Op != OpPPC64SLDconst { 24075 break 24076 } 24077 if s4.AuxInt != 40 { 24078 break 24079 } 24080 x5 := s4.Args[0] 24081 if x5.Op != OpPPC64MOVBZload { 24082 break 24083 } 24084 i5 := x5.AuxInt 24085 if x5.Aux != s { 24086 break 24087 } 24088 _ = x5.Args[1] 24089 if p != x5.Args[0] { 24090 break 24091 } 24092 if mem != x5.Args[1] { 24093 break 24094 } 24095 s5 := o5.Args[1] 24096 if s5.Op != OpPPC64SLDconst { 24097 break 24098 } 24099 if s5.AuxInt != 48 { 24100 break 24101 } 24102 x6 := s5.Args[0] 24103 if x6.Op != OpPPC64MOVBZload { 24104 break 24105 } 24106 i6 := x6.AuxInt 24107 if x6.Aux != s { 24108 break 24109 } 24110 _ = x6.Args[1] 24111 if p != x6.Args[0] { 24112 break 24113 } 24114 if mem != x6.Args[1] { 24115 break 24116 } 24117 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)) { 24118 break 24119 } 24120 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 24121 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 24122 v.reset(OpCopy) 24123 v.AddArg(v0) 24124 v0.AuxInt = i0 24125 v0.Aux = s 24126 v0.AddArg(p) 24127 v0.AddArg(mem) 24128 return true 24129 } 24130 return false 24131 } 24132 func rewriteValuePPC64_OpPPC64OR_80(v *Value) bool { 24133 b := v.Block 24134 _ = b 24135 config := b.Func.Config 24136 _ = config 24137 // 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]))) 24138 // 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) 24139 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 24140 for { 24141 t := v.Type 24142 _ = v.Args[1] 24143 s6 := v.Args[0] 24144 if s6.Op != OpPPC64SLDconst { 24145 break 24146 } 24147 if s6.AuxInt != 56 { 24148 break 24149 } 24150 x7 := s6.Args[0] 24151 if x7.Op != OpPPC64MOVBZload { 24152 break 24153 } 24154 i7 := x7.AuxInt 24155 s := x7.Aux 24156 _ = x7.Args[1] 24157 p := x7.Args[0] 24158 mem := x7.Args[1] 24159 o5 := v.Args[1] 24160 if o5.Op != OpPPC64OR { 24161 break 24162 } 24163 if o5.Type != t { 24164 break 24165 } 24166 _ = o5.Args[1] 24167 o4 := o5.Args[0] 24168 if o4.Op != OpPPC64OR { 24169 break 24170 } 24171 if o4.Type != t { 24172 break 24173 } 24174 _ = o4.Args[1] 24175 o3 := o4.Args[0] 24176 if o3.Op != OpPPC64OR { 24177 break 24178 } 24179 if o3.Type != t { 24180 break 24181 } 24182 _ = o3.Args[1] 24183 o2 := o3.Args[0] 24184 if o2.Op != OpPPC64OR { 24185 break 24186 } 24187 if o2.Type != t { 24188 break 24189 } 24190 _ = o2.Args[1] 24191 o1 := o2.Args[0] 24192 if o1.Op != OpPPC64OR { 24193 break 24194 } 24195 if o1.Type != t { 24196 break 24197 } 24198 _ = o1.Args[1] 24199 o0 := o1.Args[0] 24200 if o0.Op != OpPPC64OR { 24201 break 24202 } 24203 if o0.Type != t { 24204 break 24205 } 24206 _ = o0.Args[1] 24207 s0 := o0.Args[0] 24208 if s0.Op != OpPPC64SLDconst { 24209 break 24210 } 24211 if s0.AuxInt != 8 { 24212 break 24213 } 24214 x1 := s0.Args[0] 24215 if x1.Op != OpPPC64MOVBZload { 24216 break 24217 } 24218 i1 := x1.AuxInt 24219 if x1.Aux != s { 24220 break 24221 } 24222 _ = x1.Args[1] 24223 if p != x1.Args[0] { 24224 break 24225 } 24226 if mem != x1.Args[1] { 24227 break 24228 } 24229 x0 := o0.Args[1] 24230 if x0.Op != OpPPC64MOVBZload { 24231 break 24232 } 24233 i0 := x0.AuxInt 24234 if x0.Aux != s { 24235 break 24236 } 24237 _ = x0.Args[1] 24238 if p != x0.Args[0] { 24239 break 24240 } 24241 if mem != x0.Args[1] { 24242 break 24243 } 24244 s1 := o1.Args[1] 24245 if s1.Op != OpPPC64SLDconst { 24246 break 24247 } 24248 if s1.AuxInt != 16 { 24249 break 24250 } 24251 x2 := s1.Args[0] 24252 if x2.Op != OpPPC64MOVBZload { 24253 break 24254 } 24255 i2 := x2.AuxInt 24256 if x2.Aux != s { 24257 break 24258 } 24259 _ = x2.Args[1] 24260 if p != x2.Args[0] { 24261 break 24262 } 24263 if mem != x2.Args[1] { 24264 break 24265 } 24266 s2 := o2.Args[1] 24267 if s2.Op != OpPPC64SLDconst { 24268 break 24269 } 24270 if s2.AuxInt != 24 { 24271 break 24272 } 24273 x3 := s2.Args[0] 24274 if x3.Op != OpPPC64MOVBZload { 24275 break 24276 } 24277 i3 := x3.AuxInt 24278 if x3.Aux != s { 24279 break 24280 } 24281 _ = x3.Args[1] 24282 if p != x3.Args[0] { 24283 break 24284 } 24285 if mem != x3.Args[1] { 24286 break 24287 } 24288 s3 := o3.Args[1] 24289 if s3.Op != OpPPC64SLDconst { 24290 break 24291 } 24292 if s3.AuxInt != 32 { 24293 break 24294 } 24295 x4 := s3.Args[0] 24296 if x4.Op != OpPPC64MOVBZload { 24297 break 24298 } 24299 i4 := x4.AuxInt 24300 if x4.Aux != s { 24301 break 24302 } 24303 _ = x4.Args[1] 24304 if p != x4.Args[0] { 24305 break 24306 } 24307 if mem != x4.Args[1] { 24308 break 24309 } 24310 s4 := o4.Args[1] 24311 if s4.Op != OpPPC64SLDconst { 24312 break 24313 } 24314 if s4.AuxInt != 40 { 24315 break 24316 } 24317 x5 := s4.Args[0] 24318 if x5.Op != OpPPC64MOVBZload { 24319 break 24320 } 24321 i5 := x5.AuxInt 24322 if x5.Aux != s { 24323 break 24324 } 24325 _ = x5.Args[1] 24326 if p != x5.Args[0] { 24327 break 24328 } 24329 if mem != x5.Args[1] { 24330 break 24331 } 24332 s5 := o5.Args[1] 24333 if s5.Op != OpPPC64SLDconst { 24334 break 24335 } 24336 if s5.AuxInt != 48 { 24337 break 24338 } 24339 x6 := s5.Args[0] 24340 if x6.Op != OpPPC64MOVBZload { 24341 break 24342 } 24343 i6 := x6.AuxInt 24344 if x6.Aux != s { 24345 break 24346 } 24347 _ = x6.Args[1] 24348 if p != x6.Args[0] { 24349 break 24350 } 24351 if mem != x6.Args[1] { 24352 break 24353 } 24354 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)) { 24355 break 24356 } 24357 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 24358 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 24359 v.reset(OpCopy) 24360 v.AddArg(v0) 24361 v0.AuxInt = i0 24362 v0.Aux = s 24363 v0.AddArg(p) 24364 v0.AddArg(mem) 24365 return true 24366 } 24367 // 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]))) 24368 // 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) 24369 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 24370 for { 24371 t := v.Type 24372 _ = v.Args[1] 24373 s6 := v.Args[0] 24374 if s6.Op != OpPPC64SLDconst { 24375 break 24376 } 24377 if s6.AuxInt != 56 { 24378 break 24379 } 24380 x7 := s6.Args[0] 24381 if x7.Op != OpPPC64MOVBZload { 24382 break 24383 } 24384 i7 := x7.AuxInt 24385 s := x7.Aux 24386 _ = x7.Args[1] 24387 p := x7.Args[0] 24388 mem := x7.Args[1] 24389 o5 := v.Args[1] 24390 if o5.Op != OpPPC64OR { 24391 break 24392 } 24393 if o5.Type != t { 24394 break 24395 } 24396 _ = o5.Args[1] 24397 o4 := o5.Args[0] 24398 if o4.Op != OpPPC64OR { 24399 break 24400 } 24401 if o4.Type != t { 24402 break 24403 } 24404 _ = o4.Args[1] 24405 o3 := o4.Args[0] 24406 if o3.Op != OpPPC64OR { 24407 break 24408 } 24409 if o3.Type != t { 24410 break 24411 } 24412 _ = o3.Args[1] 24413 o2 := o3.Args[0] 24414 if o2.Op != OpPPC64OR { 24415 break 24416 } 24417 if o2.Type != t { 24418 break 24419 } 24420 _ = o2.Args[1] 24421 o1 := o2.Args[0] 24422 if o1.Op != OpPPC64OR { 24423 break 24424 } 24425 if o1.Type != t { 24426 break 24427 } 24428 _ = o1.Args[1] 24429 o0 := o1.Args[0] 24430 if o0.Op != OpPPC64OR { 24431 break 24432 } 24433 if o0.Type != t { 24434 break 24435 } 24436 _ = o0.Args[1] 24437 x0 := o0.Args[0] 24438 if x0.Op != OpPPC64MOVBZload { 24439 break 24440 } 24441 i0 := x0.AuxInt 24442 if x0.Aux != s { 24443 break 24444 } 24445 _ = x0.Args[1] 24446 if p != x0.Args[0] { 24447 break 24448 } 24449 if mem != x0.Args[1] { 24450 break 24451 } 24452 s0 := o0.Args[1] 24453 if s0.Op != OpPPC64SLDconst { 24454 break 24455 } 24456 if s0.AuxInt != 8 { 24457 break 24458 } 24459 x1 := s0.Args[0] 24460 if x1.Op != OpPPC64MOVBZload { 24461 break 24462 } 24463 i1 := x1.AuxInt 24464 if x1.Aux != s { 24465 break 24466 } 24467 _ = x1.Args[1] 24468 if p != x1.Args[0] { 24469 break 24470 } 24471 if mem != x1.Args[1] { 24472 break 24473 } 24474 s1 := o1.Args[1] 24475 if s1.Op != OpPPC64SLDconst { 24476 break 24477 } 24478 if s1.AuxInt != 16 { 24479 break 24480 } 24481 x2 := s1.Args[0] 24482 if x2.Op != OpPPC64MOVBZload { 24483 break 24484 } 24485 i2 := x2.AuxInt 24486 if x2.Aux != s { 24487 break 24488 } 24489 _ = x2.Args[1] 24490 if p != x2.Args[0] { 24491 break 24492 } 24493 if mem != x2.Args[1] { 24494 break 24495 } 24496 s2 := o2.Args[1] 24497 if s2.Op != OpPPC64SLDconst { 24498 break 24499 } 24500 if s2.AuxInt != 24 { 24501 break 24502 } 24503 x3 := s2.Args[0] 24504 if x3.Op != OpPPC64MOVBZload { 24505 break 24506 } 24507 i3 := x3.AuxInt 24508 if x3.Aux != s { 24509 break 24510 } 24511 _ = x3.Args[1] 24512 if p != x3.Args[0] { 24513 break 24514 } 24515 if mem != x3.Args[1] { 24516 break 24517 } 24518 s3 := o3.Args[1] 24519 if s3.Op != OpPPC64SLDconst { 24520 break 24521 } 24522 if s3.AuxInt != 32 { 24523 break 24524 } 24525 x4 := s3.Args[0] 24526 if x4.Op != OpPPC64MOVBZload { 24527 break 24528 } 24529 i4 := x4.AuxInt 24530 if x4.Aux != s { 24531 break 24532 } 24533 _ = x4.Args[1] 24534 if p != x4.Args[0] { 24535 break 24536 } 24537 if mem != x4.Args[1] { 24538 break 24539 } 24540 s4 := o4.Args[1] 24541 if s4.Op != OpPPC64SLDconst { 24542 break 24543 } 24544 if s4.AuxInt != 40 { 24545 break 24546 } 24547 x5 := s4.Args[0] 24548 if x5.Op != OpPPC64MOVBZload { 24549 break 24550 } 24551 i5 := x5.AuxInt 24552 if x5.Aux != s { 24553 break 24554 } 24555 _ = x5.Args[1] 24556 if p != x5.Args[0] { 24557 break 24558 } 24559 if mem != x5.Args[1] { 24560 break 24561 } 24562 s5 := o5.Args[1] 24563 if s5.Op != OpPPC64SLDconst { 24564 break 24565 } 24566 if s5.AuxInt != 48 { 24567 break 24568 } 24569 x6 := s5.Args[0] 24570 if x6.Op != OpPPC64MOVBZload { 24571 break 24572 } 24573 i6 := x6.AuxInt 24574 if x6.Aux != s { 24575 break 24576 } 24577 _ = x6.Args[1] 24578 if p != x6.Args[0] { 24579 break 24580 } 24581 if mem != x6.Args[1] { 24582 break 24583 } 24584 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)) { 24585 break 24586 } 24587 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 24588 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 24589 v.reset(OpCopy) 24590 v.AddArg(v0) 24591 v0.AuxInt = i0 24592 v0.Aux = s 24593 v0.AddArg(p) 24594 v0.AddArg(mem) 24595 return true 24596 } 24597 // 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])) 24598 // 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) 24599 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 24600 for { 24601 t := v.Type 24602 _ = v.Args[1] 24603 o5 := v.Args[0] 24604 if o5.Op != OpPPC64OR { 24605 break 24606 } 24607 if o5.Type != t { 24608 break 24609 } 24610 _ = o5.Args[1] 24611 s5 := o5.Args[0] 24612 if s5.Op != OpPPC64SLDconst { 24613 break 24614 } 24615 if s5.AuxInt != 48 { 24616 break 24617 } 24618 x6 := s5.Args[0] 24619 if x6.Op != OpPPC64MOVBZload { 24620 break 24621 } 24622 i6 := x6.AuxInt 24623 s := x6.Aux 24624 _ = x6.Args[1] 24625 p := x6.Args[0] 24626 mem := x6.Args[1] 24627 o4 := o5.Args[1] 24628 if o4.Op != OpPPC64OR { 24629 break 24630 } 24631 if o4.Type != t { 24632 break 24633 } 24634 _ = o4.Args[1] 24635 s4 := o4.Args[0] 24636 if s4.Op != OpPPC64SLDconst { 24637 break 24638 } 24639 if s4.AuxInt != 40 { 24640 break 24641 } 24642 x5 := s4.Args[0] 24643 if x5.Op != OpPPC64MOVBZload { 24644 break 24645 } 24646 i5 := x5.AuxInt 24647 if x5.Aux != s { 24648 break 24649 } 24650 _ = x5.Args[1] 24651 if p != x5.Args[0] { 24652 break 24653 } 24654 if mem != x5.Args[1] { 24655 break 24656 } 24657 o3 := o4.Args[1] 24658 if o3.Op != OpPPC64OR { 24659 break 24660 } 24661 if o3.Type != t { 24662 break 24663 } 24664 _ = o3.Args[1] 24665 s3 := o3.Args[0] 24666 if s3.Op != OpPPC64SLDconst { 24667 break 24668 } 24669 if s3.AuxInt != 32 { 24670 break 24671 } 24672 x4 := s3.Args[0] 24673 if x4.Op != OpPPC64MOVBZload { 24674 break 24675 } 24676 i4 := x4.AuxInt 24677 if x4.Aux != s { 24678 break 24679 } 24680 _ = x4.Args[1] 24681 if p != x4.Args[0] { 24682 break 24683 } 24684 if mem != x4.Args[1] { 24685 break 24686 } 24687 o2 := o3.Args[1] 24688 if o2.Op != OpPPC64OR { 24689 break 24690 } 24691 if o2.Type != t { 24692 break 24693 } 24694 _ = o2.Args[1] 24695 s2 := o2.Args[0] 24696 if s2.Op != OpPPC64SLDconst { 24697 break 24698 } 24699 if s2.AuxInt != 24 { 24700 break 24701 } 24702 x3 := s2.Args[0] 24703 if x3.Op != OpPPC64MOVBZload { 24704 break 24705 } 24706 i3 := x3.AuxInt 24707 if x3.Aux != s { 24708 break 24709 } 24710 _ = x3.Args[1] 24711 if p != x3.Args[0] { 24712 break 24713 } 24714 if mem != x3.Args[1] { 24715 break 24716 } 24717 o1 := o2.Args[1] 24718 if o1.Op != OpPPC64OR { 24719 break 24720 } 24721 if o1.Type != t { 24722 break 24723 } 24724 _ = o1.Args[1] 24725 s1 := o1.Args[0] 24726 if s1.Op != OpPPC64SLDconst { 24727 break 24728 } 24729 if s1.AuxInt != 16 { 24730 break 24731 } 24732 x2 := s1.Args[0] 24733 if x2.Op != OpPPC64MOVBZload { 24734 break 24735 } 24736 i2 := x2.AuxInt 24737 if x2.Aux != s { 24738 break 24739 } 24740 _ = x2.Args[1] 24741 if p != x2.Args[0] { 24742 break 24743 } 24744 if mem != x2.Args[1] { 24745 break 24746 } 24747 o0 := o1.Args[1] 24748 if o0.Op != OpPPC64OR { 24749 break 24750 } 24751 if o0.Type != t { 24752 break 24753 } 24754 _ = o0.Args[1] 24755 s0 := o0.Args[0] 24756 if s0.Op != OpPPC64SLDconst { 24757 break 24758 } 24759 if s0.AuxInt != 8 { 24760 break 24761 } 24762 x1 := s0.Args[0] 24763 if x1.Op != OpPPC64MOVBZload { 24764 break 24765 } 24766 i1 := x1.AuxInt 24767 if x1.Aux != s { 24768 break 24769 } 24770 _ = x1.Args[1] 24771 if p != x1.Args[0] { 24772 break 24773 } 24774 if mem != x1.Args[1] { 24775 break 24776 } 24777 x0 := o0.Args[1] 24778 if x0.Op != OpPPC64MOVBZload { 24779 break 24780 } 24781 i0 := x0.AuxInt 24782 if x0.Aux != s { 24783 break 24784 } 24785 _ = x0.Args[1] 24786 if p != x0.Args[0] { 24787 break 24788 } 24789 if mem != x0.Args[1] { 24790 break 24791 } 24792 s6 := v.Args[1] 24793 if s6.Op != OpPPC64SLDconst { 24794 break 24795 } 24796 if s6.AuxInt != 56 { 24797 break 24798 } 24799 x7 := s6.Args[0] 24800 if x7.Op != OpPPC64MOVBZload { 24801 break 24802 } 24803 i7 := x7.AuxInt 24804 if x7.Aux != s { 24805 break 24806 } 24807 _ = x7.Args[1] 24808 if p != x7.Args[0] { 24809 break 24810 } 24811 if mem != x7.Args[1] { 24812 break 24813 } 24814 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)) { 24815 break 24816 } 24817 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 24818 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 24819 v.reset(OpCopy) 24820 v.AddArg(v0) 24821 v0.AuxInt = i0 24822 v0.Aux = s 24823 v0.AddArg(p) 24824 v0.AddArg(mem) 24825 return true 24826 } 24827 // 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])) 24828 // 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) 24829 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 24830 for { 24831 t := v.Type 24832 _ = v.Args[1] 24833 o5 := v.Args[0] 24834 if o5.Op != OpPPC64OR { 24835 break 24836 } 24837 if o5.Type != t { 24838 break 24839 } 24840 _ = o5.Args[1] 24841 s5 := o5.Args[0] 24842 if s5.Op != OpPPC64SLDconst { 24843 break 24844 } 24845 if s5.AuxInt != 48 { 24846 break 24847 } 24848 x6 := s5.Args[0] 24849 if x6.Op != OpPPC64MOVBZload { 24850 break 24851 } 24852 i6 := x6.AuxInt 24853 s := x6.Aux 24854 _ = x6.Args[1] 24855 p := x6.Args[0] 24856 mem := x6.Args[1] 24857 o4 := o5.Args[1] 24858 if o4.Op != OpPPC64OR { 24859 break 24860 } 24861 if o4.Type != t { 24862 break 24863 } 24864 _ = o4.Args[1] 24865 s4 := o4.Args[0] 24866 if s4.Op != OpPPC64SLDconst { 24867 break 24868 } 24869 if s4.AuxInt != 40 { 24870 break 24871 } 24872 x5 := s4.Args[0] 24873 if x5.Op != OpPPC64MOVBZload { 24874 break 24875 } 24876 i5 := x5.AuxInt 24877 if x5.Aux != s { 24878 break 24879 } 24880 _ = x5.Args[1] 24881 if p != x5.Args[0] { 24882 break 24883 } 24884 if mem != x5.Args[1] { 24885 break 24886 } 24887 o3 := o4.Args[1] 24888 if o3.Op != OpPPC64OR { 24889 break 24890 } 24891 if o3.Type != t { 24892 break 24893 } 24894 _ = o3.Args[1] 24895 s3 := o3.Args[0] 24896 if s3.Op != OpPPC64SLDconst { 24897 break 24898 } 24899 if s3.AuxInt != 32 { 24900 break 24901 } 24902 x4 := s3.Args[0] 24903 if x4.Op != OpPPC64MOVBZload { 24904 break 24905 } 24906 i4 := x4.AuxInt 24907 if x4.Aux != s { 24908 break 24909 } 24910 _ = x4.Args[1] 24911 if p != x4.Args[0] { 24912 break 24913 } 24914 if mem != x4.Args[1] { 24915 break 24916 } 24917 o2 := o3.Args[1] 24918 if o2.Op != OpPPC64OR { 24919 break 24920 } 24921 if o2.Type != t { 24922 break 24923 } 24924 _ = o2.Args[1] 24925 s2 := o2.Args[0] 24926 if s2.Op != OpPPC64SLDconst { 24927 break 24928 } 24929 if s2.AuxInt != 24 { 24930 break 24931 } 24932 x3 := s2.Args[0] 24933 if x3.Op != OpPPC64MOVBZload { 24934 break 24935 } 24936 i3 := x3.AuxInt 24937 if x3.Aux != s { 24938 break 24939 } 24940 _ = x3.Args[1] 24941 if p != x3.Args[0] { 24942 break 24943 } 24944 if mem != x3.Args[1] { 24945 break 24946 } 24947 o1 := o2.Args[1] 24948 if o1.Op != OpPPC64OR { 24949 break 24950 } 24951 if o1.Type != t { 24952 break 24953 } 24954 _ = o1.Args[1] 24955 s1 := o1.Args[0] 24956 if s1.Op != OpPPC64SLDconst { 24957 break 24958 } 24959 if s1.AuxInt != 16 { 24960 break 24961 } 24962 x2 := s1.Args[0] 24963 if x2.Op != OpPPC64MOVBZload { 24964 break 24965 } 24966 i2 := x2.AuxInt 24967 if x2.Aux != s { 24968 break 24969 } 24970 _ = x2.Args[1] 24971 if p != x2.Args[0] { 24972 break 24973 } 24974 if mem != x2.Args[1] { 24975 break 24976 } 24977 o0 := o1.Args[1] 24978 if o0.Op != OpPPC64OR { 24979 break 24980 } 24981 if o0.Type != t { 24982 break 24983 } 24984 _ = o0.Args[1] 24985 x0 := o0.Args[0] 24986 if x0.Op != OpPPC64MOVBZload { 24987 break 24988 } 24989 i0 := x0.AuxInt 24990 if x0.Aux != s { 24991 break 24992 } 24993 _ = x0.Args[1] 24994 if p != x0.Args[0] { 24995 break 24996 } 24997 if mem != x0.Args[1] { 24998 break 24999 } 25000 s0 := o0.Args[1] 25001 if s0.Op != OpPPC64SLDconst { 25002 break 25003 } 25004 if s0.AuxInt != 8 { 25005 break 25006 } 25007 x1 := s0.Args[0] 25008 if x1.Op != OpPPC64MOVBZload { 25009 break 25010 } 25011 i1 := x1.AuxInt 25012 if x1.Aux != s { 25013 break 25014 } 25015 _ = x1.Args[1] 25016 if p != x1.Args[0] { 25017 break 25018 } 25019 if mem != x1.Args[1] { 25020 break 25021 } 25022 s6 := v.Args[1] 25023 if s6.Op != OpPPC64SLDconst { 25024 break 25025 } 25026 if s6.AuxInt != 56 { 25027 break 25028 } 25029 x7 := s6.Args[0] 25030 if x7.Op != OpPPC64MOVBZload { 25031 break 25032 } 25033 i7 := x7.AuxInt 25034 if x7.Aux != s { 25035 break 25036 } 25037 _ = x7.Args[1] 25038 if p != x7.Args[0] { 25039 break 25040 } 25041 if mem != x7.Args[1] { 25042 break 25043 } 25044 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)) { 25045 break 25046 } 25047 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 25048 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 25049 v.reset(OpCopy) 25050 v.AddArg(v0) 25051 v0.AuxInt = i0 25052 v0.Aux = s 25053 v0.AddArg(p) 25054 v0.AddArg(mem) 25055 return true 25056 } 25057 // 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])) 25058 // 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) 25059 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 25060 for { 25061 t := v.Type 25062 _ = v.Args[1] 25063 o5 := v.Args[0] 25064 if o5.Op != OpPPC64OR { 25065 break 25066 } 25067 if o5.Type != t { 25068 break 25069 } 25070 _ = o5.Args[1] 25071 s5 := o5.Args[0] 25072 if s5.Op != OpPPC64SLDconst { 25073 break 25074 } 25075 if s5.AuxInt != 48 { 25076 break 25077 } 25078 x6 := s5.Args[0] 25079 if x6.Op != OpPPC64MOVBZload { 25080 break 25081 } 25082 i6 := x6.AuxInt 25083 s := x6.Aux 25084 _ = x6.Args[1] 25085 p := x6.Args[0] 25086 mem := x6.Args[1] 25087 o4 := o5.Args[1] 25088 if o4.Op != OpPPC64OR { 25089 break 25090 } 25091 if o4.Type != t { 25092 break 25093 } 25094 _ = o4.Args[1] 25095 s4 := o4.Args[0] 25096 if s4.Op != OpPPC64SLDconst { 25097 break 25098 } 25099 if s4.AuxInt != 40 { 25100 break 25101 } 25102 x5 := s4.Args[0] 25103 if x5.Op != OpPPC64MOVBZload { 25104 break 25105 } 25106 i5 := x5.AuxInt 25107 if x5.Aux != s { 25108 break 25109 } 25110 _ = x5.Args[1] 25111 if p != x5.Args[0] { 25112 break 25113 } 25114 if mem != x5.Args[1] { 25115 break 25116 } 25117 o3 := o4.Args[1] 25118 if o3.Op != OpPPC64OR { 25119 break 25120 } 25121 if o3.Type != t { 25122 break 25123 } 25124 _ = o3.Args[1] 25125 s3 := o3.Args[0] 25126 if s3.Op != OpPPC64SLDconst { 25127 break 25128 } 25129 if s3.AuxInt != 32 { 25130 break 25131 } 25132 x4 := s3.Args[0] 25133 if x4.Op != OpPPC64MOVBZload { 25134 break 25135 } 25136 i4 := x4.AuxInt 25137 if x4.Aux != s { 25138 break 25139 } 25140 _ = x4.Args[1] 25141 if p != x4.Args[0] { 25142 break 25143 } 25144 if mem != x4.Args[1] { 25145 break 25146 } 25147 o2 := o3.Args[1] 25148 if o2.Op != OpPPC64OR { 25149 break 25150 } 25151 if o2.Type != t { 25152 break 25153 } 25154 _ = o2.Args[1] 25155 s2 := o2.Args[0] 25156 if s2.Op != OpPPC64SLDconst { 25157 break 25158 } 25159 if s2.AuxInt != 24 { 25160 break 25161 } 25162 x3 := s2.Args[0] 25163 if x3.Op != OpPPC64MOVBZload { 25164 break 25165 } 25166 i3 := x3.AuxInt 25167 if x3.Aux != s { 25168 break 25169 } 25170 _ = x3.Args[1] 25171 if p != x3.Args[0] { 25172 break 25173 } 25174 if mem != x3.Args[1] { 25175 break 25176 } 25177 o1 := o2.Args[1] 25178 if o1.Op != OpPPC64OR { 25179 break 25180 } 25181 if o1.Type != t { 25182 break 25183 } 25184 _ = o1.Args[1] 25185 o0 := o1.Args[0] 25186 if o0.Op != OpPPC64OR { 25187 break 25188 } 25189 if o0.Type != t { 25190 break 25191 } 25192 _ = o0.Args[1] 25193 s0 := o0.Args[0] 25194 if s0.Op != OpPPC64SLDconst { 25195 break 25196 } 25197 if s0.AuxInt != 8 { 25198 break 25199 } 25200 x1 := s0.Args[0] 25201 if x1.Op != OpPPC64MOVBZload { 25202 break 25203 } 25204 i1 := x1.AuxInt 25205 if x1.Aux != s { 25206 break 25207 } 25208 _ = x1.Args[1] 25209 if p != x1.Args[0] { 25210 break 25211 } 25212 if mem != x1.Args[1] { 25213 break 25214 } 25215 x0 := o0.Args[1] 25216 if x0.Op != OpPPC64MOVBZload { 25217 break 25218 } 25219 i0 := x0.AuxInt 25220 if x0.Aux != s { 25221 break 25222 } 25223 _ = x0.Args[1] 25224 if p != x0.Args[0] { 25225 break 25226 } 25227 if mem != x0.Args[1] { 25228 break 25229 } 25230 s1 := o1.Args[1] 25231 if s1.Op != OpPPC64SLDconst { 25232 break 25233 } 25234 if s1.AuxInt != 16 { 25235 break 25236 } 25237 x2 := s1.Args[0] 25238 if x2.Op != OpPPC64MOVBZload { 25239 break 25240 } 25241 i2 := x2.AuxInt 25242 if x2.Aux != s { 25243 break 25244 } 25245 _ = x2.Args[1] 25246 if p != x2.Args[0] { 25247 break 25248 } 25249 if mem != x2.Args[1] { 25250 break 25251 } 25252 s6 := v.Args[1] 25253 if s6.Op != OpPPC64SLDconst { 25254 break 25255 } 25256 if s6.AuxInt != 56 { 25257 break 25258 } 25259 x7 := s6.Args[0] 25260 if x7.Op != OpPPC64MOVBZload { 25261 break 25262 } 25263 i7 := x7.AuxInt 25264 if x7.Aux != s { 25265 break 25266 } 25267 _ = x7.Args[1] 25268 if p != x7.Args[0] { 25269 break 25270 } 25271 if mem != x7.Args[1] { 25272 break 25273 } 25274 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)) { 25275 break 25276 } 25277 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 25278 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 25279 v.reset(OpCopy) 25280 v.AddArg(v0) 25281 v0.AuxInt = i0 25282 v0.Aux = s 25283 v0.AddArg(p) 25284 v0.AddArg(mem) 25285 return true 25286 } 25287 // 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])) 25288 // 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) 25289 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 25290 for { 25291 t := v.Type 25292 _ = v.Args[1] 25293 o5 := v.Args[0] 25294 if o5.Op != OpPPC64OR { 25295 break 25296 } 25297 if o5.Type != t { 25298 break 25299 } 25300 _ = o5.Args[1] 25301 s5 := o5.Args[0] 25302 if s5.Op != OpPPC64SLDconst { 25303 break 25304 } 25305 if s5.AuxInt != 48 { 25306 break 25307 } 25308 x6 := s5.Args[0] 25309 if x6.Op != OpPPC64MOVBZload { 25310 break 25311 } 25312 i6 := x6.AuxInt 25313 s := x6.Aux 25314 _ = x6.Args[1] 25315 p := x6.Args[0] 25316 mem := x6.Args[1] 25317 o4 := o5.Args[1] 25318 if o4.Op != OpPPC64OR { 25319 break 25320 } 25321 if o4.Type != t { 25322 break 25323 } 25324 _ = o4.Args[1] 25325 s4 := o4.Args[0] 25326 if s4.Op != OpPPC64SLDconst { 25327 break 25328 } 25329 if s4.AuxInt != 40 { 25330 break 25331 } 25332 x5 := s4.Args[0] 25333 if x5.Op != OpPPC64MOVBZload { 25334 break 25335 } 25336 i5 := x5.AuxInt 25337 if x5.Aux != s { 25338 break 25339 } 25340 _ = x5.Args[1] 25341 if p != x5.Args[0] { 25342 break 25343 } 25344 if mem != x5.Args[1] { 25345 break 25346 } 25347 o3 := o4.Args[1] 25348 if o3.Op != OpPPC64OR { 25349 break 25350 } 25351 if o3.Type != t { 25352 break 25353 } 25354 _ = o3.Args[1] 25355 s3 := o3.Args[0] 25356 if s3.Op != OpPPC64SLDconst { 25357 break 25358 } 25359 if s3.AuxInt != 32 { 25360 break 25361 } 25362 x4 := s3.Args[0] 25363 if x4.Op != OpPPC64MOVBZload { 25364 break 25365 } 25366 i4 := x4.AuxInt 25367 if x4.Aux != s { 25368 break 25369 } 25370 _ = x4.Args[1] 25371 if p != x4.Args[0] { 25372 break 25373 } 25374 if mem != x4.Args[1] { 25375 break 25376 } 25377 o2 := o3.Args[1] 25378 if o2.Op != OpPPC64OR { 25379 break 25380 } 25381 if o2.Type != t { 25382 break 25383 } 25384 _ = o2.Args[1] 25385 s2 := o2.Args[0] 25386 if s2.Op != OpPPC64SLDconst { 25387 break 25388 } 25389 if s2.AuxInt != 24 { 25390 break 25391 } 25392 x3 := s2.Args[0] 25393 if x3.Op != OpPPC64MOVBZload { 25394 break 25395 } 25396 i3 := x3.AuxInt 25397 if x3.Aux != s { 25398 break 25399 } 25400 _ = x3.Args[1] 25401 if p != x3.Args[0] { 25402 break 25403 } 25404 if mem != x3.Args[1] { 25405 break 25406 } 25407 o1 := o2.Args[1] 25408 if o1.Op != OpPPC64OR { 25409 break 25410 } 25411 if o1.Type != t { 25412 break 25413 } 25414 _ = o1.Args[1] 25415 o0 := o1.Args[0] 25416 if o0.Op != OpPPC64OR { 25417 break 25418 } 25419 if o0.Type != t { 25420 break 25421 } 25422 _ = o0.Args[1] 25423 x0 := o0.Args[0] 25424 if x0.Op != OpPPC64MOVBZload { 25425 break 25426 } 25427 i0 := x0.AuxInt 25428 if x0.Aux != s { 25429 break 25430 } 25431 _ = x0.Args[1] 25432 if p != x0.Args[0] { 25433 break 25434 } 25435 if mem != x0.Args[1] { 25436 break 25437 } 25438 s0 := o0.Args[1] 25439 if s0.Op != OpPPC64SLDconst { 25440 break 25441 } 25442 if s0.AuxInt != 8 { 25443 break 25444 } 25445 x1 := s0.Args[0] 25446 if x1.Op != OpPPC64MOVBZload { 25447 break 25448 } 25449 i1 := x1.AuxInt 25450 if x1.Aux != s { 25451 break 25452 } 25453 _ = x1.Args[1] 25454 if p != x1.Args[0] { 25455 break 25456 } 25457 if mem != x1.Args[1] { 25458 break 25459 } 25460 s1 := o1.Args[1] 25461 if s1.Op != OpPPC64SLDconst { 25462 break 25463 } 25464 if s1.AuxInt != 16 { 25465 break 25466 } 25467 x2 := s1.Args[0] 25468 if x2.Op != OpPPC64MOVBZload { 25469 break 25470 } 25471 i2 := x2.AuxInt 25472 if x2.Aux != s { 25473 break 25474 } 25475 _ = x2.Args[1] 25476 if p != x2.Args[0] { 25477 break 25478 } 25479 if mem != x2.Args[1] { 25480 break 25481 } 25482 s6 := v.Args[1] 25483 if s6.Op != OpPPC64SLDconst { 25484 break 25485 } 25486 if s6.AuxInt != 56 { 25487 break 25488 } 25489 x7 := s6.Args[0] 25490 if x7.Op != OpPPC64MOVBZload { 25491 break 25492 } 25493 i7 := x7.AuxInt 25494 if x7.Aux != s { 25495 break 25496 } 25497 _ = x7.Args[1] 25498 if p != x7.Args[0] { 25499 break 25500 } 25501 if mem != x7.Args[1] { 25502 break 25503 } 25504 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)) { 25505 break 25506 } 25507 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 25508 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 25509 v.reset(OpCopy) 25510 v.AddArg(v0) 25511 v0.AuxInt = i0 25512 v0.Aux = s 25513 v0.AddArg(p) 25514 v0.AddArg(mem) 25515 return true 25516 } 25517 // 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])) 25518 // 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) 25519 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 25520 for { 25521 t := v.Type 25522 _ = v.Args[1] 25523 o5 := v.Args[0] 25524 if o5.Op != OpPPC64OR { 25525 break 25526 } 25527 if o5.Type != t { 25528 break 25529 } 25530 _ = o5.Args[1] 25531 s5 := o5.Args[0] 25532 if s5.Op != OpPPC64SLDconst { 25533 break 25534 } 25535 if s5.AuxInt != 48 { 25536 break 25537 } 25538 x6 := s5.Args[0] 25539 if x6.Op != OpPPC64MOVBZload { 25540 break 25541 } 25542 i6 := x6.AuxInt 25543 s := x6.Aux 25544 _ = x6.Args[1] 25545 p := x6.Args[0] 25546 mem := x6.Args[1] 25547 o4 := o5.Args[1] 25548 if o4.Op != OpPPC64OR { 25549 break 25550 } 25551 if o4.Type != t { 25552 break 25553 } 25554 _ = o4.Args[1] 25555 s4 := o4.Args[0] 25556 if s4.Op != OpPPC64SLDconst { 25557 break 25558 } 25559 if s4.AuxInt != 40 { 25560 break 25561 } 25562 x5 := s4.Args[0] 25563 if x5.Op != OpPPC64MOVBZload { 25564 break 25565 } 25566 i5 := x5.AuxInt 25567 if x5.Aux != s { 25568 break 25569 } 25570 _ = x5.Args[1] 25571 if p != x5.Args[0] { 25572 break 25573 } 25574 if mem != x5.Args[1] { 25575 break 25576 } 25577 o3 := o4.Args[1] 25578 if o3.Op != OpPPC64OR { 25579 break 25580 } 25581 if o3.Type != t { 25582 break 25583 } 25584 _ = o3.Args[1] 25585 s3 := o3.Args[0] 25586 if s3.Op != OpPPC64SLDconst { 25587 break 25588 } 25589 if s3.AuxInt != 32 { 25590 break 25591 } 25592 x4 := s3.Args[0] 25593 if x4.Op != OpPPC64MOVBZload { 25594 break 25595 } 25596 i4 := x4.AuxInt 25597 if x4.Aux != s { 25598 break 25599 } 25600 _ = x4.Args[1] 25601 if p != x4.Args[0] { 25602 break 25603 } 25604 if mem != x4.Args[1] { 25605 break 25606 } 25607 o2 := o3.Args[1] 25608 if o2.Op != OpPPC64OR { 25609 break 25610 } 25611 if o2.Type != t { 25612 break 25613 } 25614 _ = o2.Args[1] 25615 o1 := o2.Args[0] 25616 if o1.Op != OpPPC64OR { 25617 break 25618 } 25619 if o1.Type != t { 25620 break 25621 } 25622 _ = o1.Args[1] 25623 s1 := o1.Args[0] 25624 if s1.Op != OpPPC64SLDconst { 25625 break 25626 } 25627 if s1.AuxInt != 16 { 25628 break 25629 } 25630 x2 := s1.Args[0] 25631 if x2.Op != OpPPC64MOVBZload { 25632 break 25633 } 25634 i2 := x2.AuxInt 25635 if x2.Aux != s { 25636 break 25637 } 25638 _ = x2.Args[1] 25639 if p != x2.Args[0] { 25640 break 25641 } 25642 if mem != x2.Args[1] { 25643 break 25644 } 25645 o0 := o1.Args[1] 25646 if o0.Op != OpPPC64OR { 25647 break 25648 } 25649 if o0.Type != t { 25650 break 25651 } 25652 _ = o0.Args[1] 25653 s0 := o0.Args[0] 25654 if s0.Op != OpPPC64SLDconst { 25655 break 25656 } 25657 if s0.AuxInt != 8 { 25658 break 25659 } 25660 x1 := s0.Args[0] 25661 if x1.Op != OpPPC64MOVBZload { 25662 break 25663 } 25664 i1 := x1.AuxInt 25665 if x1.Aux != s { 25666 break 25667 } 25668 _ = x1.Args[1] 25669 if p != x1.Args[0] { 25670 break 25671 } 25672 if mem != x1.Args[1] { 25673 break 25674 } 25675 x0 := o0.Args[1] 25676 if x0.Op != OpPPC64MOVBZload { 25677 break 25678 } 25679 i0 := x0.AuxInt 25680 if x0.Aux != s { 25681 break 25682 } 25683 _ = x0.Args[1] 25684 if p != x0.Args[0] { 25685 break 25686 } 25687 if mem != x0.Args[1] { 25688 break 25689 } 25690 s2 := o2.Args[1] 25691 if s2.Op != OpPPC64SLDconst { 25692 break 25693 } 25694 if s2.AuxInt != 24 { 25695 break 25696 } 25697 x3 := s2.Args[0] 25698 if x3.Op != OpPPC64MOVBZload { 25699 break 25700 } 25701 i3 := x3.AuxInt 25702 if x3.Aux != s { 25703 break 25704 } 25705 _ = x3.Args[1] 25706 if p != x3.Args[0] { 25707 break 25708 } 25709 if mem != x3.Args[1] { 25710 break 25711 } 25712 s6 := v.Args[1] 25713 if s6.Op != OpPPC64SLDconst { 25714 break 25715 } 25716 if s6.AuxInt != 56 { 25717 break 25718 } 25719 x7 := s6.Args[0] 25720 if x7.Op != OpPPC64MOVBZload { 25721 break 25722 } 25723 i7 := x7.AuxInt 25724 if x7.Aux != s { 25725 break 25726 } 25727 _ = x7.Args[1] 25728 if p != x7.Args[0] { 25729 break 25730 } 25731 if mem != x7.Args[1] { 25732 break 25733 } 25734 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)) { 25735 break 25736 } 25737 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 25738 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 25739 v.reset(OpCopy) 25740 v.AddArg(v0) 25741 v0.AuxInt = i0 25742 v0.Aux = s 25743 v0.AddArg(p) 25744 v0.AddArg(mem) 25745 return true 25746 } 25747 // 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])) 25748 // 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) 25749 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 25750 for { 25751 t := v.Type 25752 _ = v.Args[1] 25753 o5 := v.Args[0] 25754 if o5.Op != OpPPC64OR { 25755 break 25756 } 25757 if o5.Type != t { 25758 break 25759 } 25760 _ = o5.Args[1] 25761 s5 := o5.Args[0] 25762 if s5.Op != OpPPC64SLDconst { 25763 break 25764 } 25765 if s5.AuxInt != 48 { 25766 break 25767 } 25768 x6 := s5.Args[0] 25769 if x6.Op != OpPPC64MOVBZload { 25770 break 25771 } 25772 i6 := x6.AuxInt 25773 s := x6.Aux 25774 _ = x6.Args[1] 25775 p := x6.Args[0] 25776 mem := x6.Args[1] 25777 o4 := o5.Args[1] 25778 if o4.Op != OpPPC64OR { 25779 break 25780 } 25781 if o4.Type != t { 25782 break 25783 } 25784 _ = o4.Args[1] 25785 s4 := o4.Args[0] 25786 if s4.Op != OpPPC64SLDconst { 25787 break 25788 } 25789 if s4.AuxInt != 40 { 25790 break 25791 } 25792 x5 := s4.Args[0] 25793 if x5.Op != OpPPC64MOVBZload { 25794 break 25795 } 25796 i5 := x5.AuxInt 25797 if x5.Aux != s { 25798 break 25799 } 25800 _ = x5.Args[1] 25801 if p != x5.Args[0] { 25802 break 25803 } 25804 if mem != x5.Args[1] { 25805 break 25806 } 25807 o3 := o4.Args[1] 25808 if o3.Op != OpPPC64OR { 25809 break 25810 } 25811 if o3.Type != t { 25812 break 25813 } 25814 _ = o3.Args[1] 25815 s3 := o3.Args[0] 25816 if s3.Op != OpPPC64SLDconst { 25817 break 25818 } 25819 if s3.AuxInt != 32 { 25820 break 25821 } 25822 x4 := s3.Args[0] 25823 if x4.Op != OpPPC64MOVBZload { 25824 break 25825 } 25826 i4 := x4.AuxInt 25827 if x4.Aux != s { 25828 break 25829 } 25830 _ = x4.Args[1] 25831 if p != x4.Args[0] { 25832 break 25833 } 25834 if mem != x4.Args[1] { 25835 break 25836 } 25837 o2 := o3.Args[1] 25838 if o2.Op != OpPPC64OR { 25839 break 25840 } 25841 if o2.Type != t { 25842 break 25843 } 25844 _ = o2.Args[1] 25845 o1 := o2.Args[0] 25846 if o1.Op != OpPPC64OR { 25847 break 25848 } 25849 if o1.Type != t { 25850 break 25851 } 25852 _ = o1.Args[1] 25853 s1 := o1.Args[0] 25854 if s1.Op != OpPPC64SLDconst { 25855 break 25856 } 25857 if s1.AuxInt != 16 { 25858 break 25859 } 25860 x2 := s1.Args[0] 25861 if x2.Op != OpPPC64MOVBZload { 25862 break 25863 } 25864 i2 := x2.AuxInt 25865 if x2.Aux != s { 25866 break 25867 } 25868 _ = x2.Args[1] 25869 if p != x2.Args[0] { 25870 break 25871 } 25872 if mem != x2.Args[1] { 25873 break 25874 } 25875 o0 := o1.Args[1] 25876 if o0.Op != OpPPC64OR { 25877 break 25878 } 25879 if o0.Type != t { 25880 break 25881 } 25882 _ = o0.Args[1] 25883 x0 := o0.Args[0] 25884 if x0.Op != OpPPC64MOVBZload { 25885 break 25886 } 25887 i0 := x0.AuxInt 25888 if x0.Aux != s { 25889 break 25890 } 25891 _ = x0.Args[1] 25892 if p != x0.Args[0] { 25893 break 25894 } 25895 if mem != x0.Args[1] { 25896 break 25897 } 25898 s0 := o0.Args[1] 25899 if s0.Op != OpPPC64SLDconst { 25900 break 25901 } 25902 if s0.AuxInt != 8 { 25903 break 25904 } 25905 x1 := s0.Args[0] 25906 if x1.Op != OpPPC64MOVBZload { 25907 break 25908 } 25909 i1 := x1.AuxInt 25910 if x1.Aux != s { 25911 break 25912 } 25913 _ = x1.Args[1] 25914 if p != x1.Args[0] { 25915 break 25916 } 25917 if mem != x1.Args[1] { 25918 break 25919 } 25920 s2 := o2.Args[1] 25921 if s2.Op != OpPPC64SLDconst { 25922 break 25923 } 25924 if s2.AuxInt != 24 { 25925 break 25926 } 25927 x3 := s2.Args[0] 25928 if x3.Op != OpPPC64MOVBZload { 25929 break 25930 } 25931 i3 := x3.AuxInt 25932 if x3.Aux != s { 25933 break 25934 } 25935 _ = x3.Args[1] 25936 if p != x3.Args[0] { 25937 break 25938 } 25939 if mem != x3.Args[1] { 25940 break 25941 } 25942 s6 := v.Args[1] 25943 if s6.Op != OpPPC64SLDconst { 25944 break 25945 } 25946 if s6.AuxInt != 56 { 25947 break 25948 } 25949 x7 := s6.Args[0] 25950 if x7.Op != OpPPC64MOVBZload { 25951 break 25952 } 25953 i7 := x7.AuxInt 25954 if x7.Aux != s { 25955 break 25956 } 25957 _ = x7.Args[1] 25958 if p != x7.Args[0] { 25959 break 25960 } 25961 if mem != x7.Args[1] { 25962 break 25963 } 25964 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)) { 25965 break 25966 } 25967 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 25968 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 25969 v.reset(OpCopy) 25970 v.AddArg(v0) 25971 v0.AuxInt = i0 25972 v0.Aux = s 25973 v0.AddArg(p) 25974 v0.AddArg(mem) 25975 return true 25976 } 25977 // 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])) 25978 // 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) 25979 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 25980 for { 25981 t := v.Type 25982 _ = v.Args[1] 25983 o5 := v.Args[0] 25984 if o5.Op != OpPPC64OR { 25985 break 25986 } 25987 if o5.Type != t { 25988 break 25989 } 25990 _ = o5.Args[1] 25991 s5 := o5.Args[0] 25992 if s5.Op != OpPPC64SLDconst { 25993 break 25994 } 25995 if s5.AuxInt != 48 { 25996 break 25997 } 25998 x6 := s5.Args[0] 25999 if x6.Op != OpPPC64MOVBZload { 26000 break 26001 } 26002 i6 := x6.AuxInt 26003 s := x6.Aux 26004 _ = x6.Args[1] 26005 p := x6.Args[0] 26006 mem := x6.Args[1] 26007 o4 := o5.Args[1] 26008 if o4.Op != OpPPC64OR { 26009 break 26010 } 26011 if o4.Type != t { 26012 break 26013 } 26014 _ = o4.Args[1] 26015 s4 := o4.Args[0] 26016 if s4.Op != OpPPC64SLDconst { 26017 break 26018 } 26019 if s4.AuxInt != 40 { 26020 break 26021 } 26022 x5 := s4.Args[0] 26023 if x5.Op != OpPPC64MOVBZload { 26024 break 26025 } 26026 i5 := x5.AuxInt 26027 if x5.Aux != s { 26028 break 26029 } 26030 _ = x5.Args[1] 26031 if p != x5.Args[0] { 26032 break 26033 } 26034 if mem != x5.Args[1] { 26035 break 26036 } 26037 o3 := o4.Args[1] 26038 if o3.Op != OpPPC64OR { 26039 break 26040 } 26041 if o3.Type != t { 26042 break 26043 } 26044 _ = o3.Args[1] 26045 s3 := o3.Args[0] 26046 if s3.Op != OpPPC64SLDconst { 26047 break 26048 } 26049 if s3.AuxInt != 32 { 26050 break 26051 } 26052 x4 := s3.Args[0] 26053 if x4.Op != OpPPC64MOVBZload { 26054 break 26055 } 26056 i4 := x4.AuxInt 26057 if x4.Aux != s { 26058 break 26059 } 26060 _ = x4.Args[1] 26061 if p != x4.Args[0] { 26062 break 26063 } 26064 if mem != x4.Args[1] { 26065 break 26066 } 26067 o2 := o3.Args[1] 26068 if o2.Op != OpPPC64OR { 26069 break 26070 } 26071 if o2.Type != t { 26072 break 26073 } 26074 _ = o2.Args[1] 26075 o1 := o2.Args[0] 26076 if o1.Op != OpPPC64OR { 26077 break 26078 } 26079 if o1.Type != t { 26080 break 26081 } 26082 _ = o1.Args[1] 26083 o0 := o1.Args[0] 26084 if o0.Op != OpPPC64OR { 26085 break 26086 } 26087 if o0.Type != t { 26088 break 26089 } 26090 _ = o0.Args[1] 26091 s0 := o0.Args[0] 26092 if s0.Op != OpPPC64SLDconst { 26093 break 26094 } 26095 if s0.AuxInt != 8 { 26096 break 26097 } 26098 x1 := s0.Args[0] 26099 if x1.Op != OpPPC64MOVBZload { 26100 break 26101 } 26102 i1 := x1.AuxInt 26103 if x1.Aux != s { 26104 break 26105 } 26106 _ = x1.Args[1] 26107 if p != x1.Args[0] { 26108 break 26109 } 26110 if mem != x1.Args[1] { 26111 break 26112 } 26113 x0 := o0.Args[1] 26114 if x0.Op != OpPPC64MOVBZload { 26115 break 26116 } 26117 i0 := x0.AuxInt 26118 if x0.Aux != s { 26119 break 26120 } 26121 _ = x0.Args[1] 26122 if p != x0.Args[0] { 26123 break 26124 } 26125 if mem != x0.Args[1] { 26126 break 26127 } 26128 s1 := o1.Args[1] 26129 if s1.Op != OpPPC64SLDconst { 26130 break 26131 } 26132 if s1.AuxInt != 16 { 26133 break 26134 } 26135 x2 := s1.Args[0] 26136 if x2.Op != OpPPC64MOVBZload { 26137 break 26138 } 26139 i2 := x2.AuxInt 26140 if x2.Aux != s { 26141 break 26142 } 26143 _ = x2.Args[1] 26144 if p != x2.Args[0] { 26145 break 26146 } 26147 if mem != x2.Args[1] { 26148 break 26149 } 26150 s2 := o2.Args[1] 26151 if s2.Op != OpPPC64SLDconst { 26152 break 26153 } 26154 if s2.AuxInt != 24 { 26155 break 26156 } 26157 x3 := s2.Args[0] 26158 if x3.Op != OpPPC64MOVBZload { 26159 break 26160 } 26161 i3 := x3.AuxInt 26162 if x3.Aux != s { 26163 break 26164 } 26165 _ = x3.Args[1] 26166 if p != x3.Args[0] { 26167 break 26168 } 26169 if mem != x3.Args[1] { 26170 break 26171 } 26172 s6 := v.Args[1] 26173 if s6.Op != OpPPC64SLDconst { 26174 break 26175 } 26176 if s6.AuxInt != 56 { 26177 break 26178 } 26179 x7 := s6.Args[0] 26180 if x7.Op != OpPPC64MOVBZload { 26181 break 26182 } 26183 i7 := x7.AuxInt 26184 if x7.Aux != s { 26185 break 26186 } 26187 _ = x7.Args[1] 26188 if p != x7.Args[0] { 26189 break 26190 } 26191 if mem != x7.Args[1] { 26192 break 26193 } 26194 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)) { 26195 break 26196 } 26197 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 26198 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 26199 v.reset(OpCopy) 26200 v.AddArg(v0) 26201 v0.AuxInt = i0 26202 v0.Aux = s 26203 v0.AddArg(p) 26204 v0.AddArg(mem) 26205 return true 26206 } 26207 // 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])) 26208 // 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) 26209 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 26210 for { 26211 t := v.Type 26212 _ = v.Args[1] 26213 o5 := v.Args[0] 26214 if o5.Op != OpPPC64OR { 26215 break 26216 } 26217 if o5.Type != t { 26218 break 26219 } 26220 _ = o5.Args[1] 26221 s5 := o5.Args[0] 26222 if s5.Op != OpPPC64SLDconst { 26223 break 26224 } 26225 if s5.AuxInt != 48 { 26226 break 26227 } 26228 x6 := s5.Args[0] 26229 if x6.Op != OpPPC64MOVBZload { 26230 break 26231 } 26232 i6 := x6.AuxInt 26233 s := x6.Aux 26234 _ = x6.Args[1] 26235 p := x6.Args[0] 26236 mem := x6.Args[1] 26237 o4 := o5.Args[1] 26238 if o4.Op != OpPPC64OR { 26239 break 26240 } 26241 if o4.Type != t { 26242 break 26243 } 26244 _ = o4.Args[1] 26245 s4 := o4.Args[0] 26246 if s4.Op != OpPPC64SLDconst { 26247 break 26248 } 26249 if s4.AuxInt != 40 { 26250 break 26251 } 26252 x5 := s4.Args[0] 26253 if x5.Op != OpPPC64MOVBZload { 26254 break 26255 } 26256 i5 := x5.AuxInt 26257 if x5.Aux != s { 26258 break 26259 } 26260 _ = x5.Args[1] 26261 if p != x5.Args[0] { 26262 break 26263 } 26264 if mem != x5.Args[1] { 26265 break 26266 } 26267 o3 := o4.Args[1] 26268 if o3.Op != OpPPC64OR { 26269 break 26270 } 26271 if o3.Type != t { 26272 break 26273 } 26274 _ = o3.Args[1] 26275 s3 := o3.Args[0] 26276 if s3.Op != OpPPC64SLDconst { 26277 break 26278 } 26279 if s3.AuxInt != 32 { 26280 break 26281 } 26282 x4 := s3.Args[0] 26283 if x4.Op != OpPPC64MOVBZload { 26284 break 26285 } 26286 i4 := x4.AuxInt 26287 if x4.Aux != s { 26288 break 26289 } 26290 _ = x4.Args[1] 26291 if p != x4.Args[0] { 26292 break 26293 } 26294 if mem != x4.Args[1] { 26295 break 26296 } 26297 o2 := o3.Args[1] 26298 if o2.Op != OpPPC64OR { 26299 break 26300 } 26301 if o2.Type != t { 26302 break 26303 } 26304 _ = o2.Args[1] 26305 o1 := o2.Args[0] 26306 if o1.Op != OpPPC64OR { 26307 break 26308 } 26309 if o1.Type != t { 26310 break 26311 } 26312 _ = o1.Args[1] 26313 o0 := o1.Args[0] 26314 if o0.Op != OpPPC64OR { 26315 break 26316 } 26317 if o0.Type != t { 26318 break 26319 } 26320 _ = o0.Args[1] 26321 x0 := o0.Args[0] 26322 if x0.Op != OpPPC64MOVBZload { 26323 break 26324 } 26325 i0 := x0.AuxInt 26326 if x0.Aux != s { 26327 break 26328 } 26329 _ = x0.Args[1] 26330 if p != x0.Args[0] { 26331 break 26332 } 26333 if mem != x0.Args[1] { 26334 break 26335 } 26336 s0 := o0.Args[1] 26337 if s0.Op != OpPPC64SLDconst { 26338 break 26339 } 26340 if s0.AuxInt != 8 { 26341 break 26342 } 26343 x1 := s0.Args[0] 26344 if x1.Op != OpPPC64MOVBZload { 26345 break 26346 } 26347 i1 := x1.AuxInt 26348 if x1.Aux != s { 26349 break 26350 } 26351 _ = x1.Args[1] 26352 if p != x1.Args[0] { 26353 break 26354 } 26355 if mem != x1.Args[1] { 26356 break 26357 } 26358 s1 := o1.Args[1] 26359 if s1.Op != OpPPC64SLDconst { 26360 break 26361 } 26362 if s1.AuxInt != 16 { 26363 break 26364 } 26365 x2 := s1.Args[0] 26366 if x2.Op != OpPPC64MOVBZload { 26367 break 26368 } 26369 i2 := x2.AuxInt 26370 if x2.Aux != s { 26371 break 26372 } 26373 _ = x2.Args[1] 26374 if p != x2.Args[0] { 26375 break 26376 } 26377 if mem != x2.Args[1] { 26378 break 26379 } 26380 s2 := o2.Args[1] 26381 if s2.Op != OpPPC64SLDconst { 26382 break 26383 } 26384 if s2.AuxInt != 24 { 26385 break 26386 } 26387 x3 := s2.Args[0] 26388 if x3.Op != OpPPC64MOVBZload { 26389 break 26390 } 26391 i3 := x3.AuxInt 26392 if x3.Aux != s { 26393 break 26394 } 26395 _ = x3.Args[1] 26396 if p != x3.Args[0] { 26397 break 26398 } 26399 if mem != x3.Args[1] { 26400 break 26401 } 26402 s6 := v.Args[1] 26403 if s6.Op != OpPPC64SLDconst { 26404 break 26405 } 26406 if s6.AuxInt != 56 { 26407 break 26408 } 26409 x7 := s6.Args[0] 26410 if x7.Op != OpPPC64MOVBZload { 26411 break 26412 } 26413 i7 := x7.AuxInt 26414 if x7.Aux != s { 26415 break 26416 } 26417 _ = x7.Args[1] 26418 if p != x7.Args[0] { 26419 break 26420 } 26421 if mem != x7.Args[1] { 26422 break 26423 } 26424 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)) { 26425 break 26426 } 26427 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 26428 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 26429 v.reset(OpCopy) 26430 v.AddArg(v0) 26431 v0.AuxInt = i0 26432 v0.Aux = s 26433 v0.AddArg(p) 26434 v0.AddArg(mem) 26435 return true 26436 } 26437 return false 26438 } 26439 func rewriteValuePPC64_OpPPC64OR_90(v *Value) bool { 26440 b := v.Block 26441 _ = b 26442 config := b.Func.Config 26443 _ = config 26444 // 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])) 26445 // 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) 26446 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 26447 for { 26448 t := v.Type 26449 _ = v.Args[1] 26450 o5 := v.Args[0] 26451 if o5.Op != OpPPC64OR { 26452 break 26453 } 26454 if o5.Type != t { 26455 break 26456 } 26457 _ = o5.Args[1] 26458 s5 := o5.Args[0] 26459 if s5.Op != OpPPC64SLDconst { 26460 break 26461 } 26462 if s5.AuxInt != 48 { 26463 break 26464 } 26465 x6 := s5.Args[0] 26466 if x6.Op != OpPPC64MOVBZload { 26467 break 26468 } 26469 i6 := x6.AuxInt 26470 s := x6.Aux 26471 _ = x6.Args[1] 26472 p := x6.Args[0] 26473 mem := x6.Args[1] 26474 o4 := o5.Args[1] 26475 if o4.Op != OpPPC64OR { 26476 break 26477 } 26478 if o4.Type != t { 26479 break 26480 } 26481 _ = o4.Args[1] 26482 s4 := o4.Args[0] 26483 if s4.Op != OpPPC64SLDconst { 26484 break 26485 } 26486 if s4.AuxInt != 40 { 26487 break 26488 } 26489 x5 := s4.Args[0] 26490 if x5.Op != OpPPC64MOVBZload { 26491 break 26492 } 26493 i5 := x5.AuxInt 26494 if x5.Aux != s { 26495 break 26496 } 26497 _ = x5.Args[1] 26498 if p != x5.Args[0] { 26499 break 26500 } 26501 if mem != x5.Args[1] { 26502 break 26503 } 26504 o3 := o4.Args[1] 26505 if o3.Op != OpPPC64OR { 26506 break 26507 } 26508 if o3.Type != t { 26509 break 26510 } 26511 _ = o3.Args[1] 26512 o2 := o3.Args[0] 26513 if o2.Op != OpPPC64OR { 26514 break 26515 } 26516 if o2.Type != t { 26517 break 26518 } 26519 _ = o2.Args[1] 26520 s2 := o2.Args[0] 26521 if s2.Op != OpPPC64SLDconst { 26522 break 26523 } 26524 if s2.AuxInt != 24 { 26525 break 26526 } 26527 x3 := s2.Args[0] 26528 if x3.Op != OpPPC64MOVBZload { 26529 break 26530 } 26531 i3 := x3.AuxInt 26532 if x3.Aux != s { 26533 break 26534 } 26535 _ = x3.Args[1] 26536 if p != x3.Args[0] { 26537 break 26538 } 26539 if mem != x3.Args[1] { 26540 break 26541 } 26542 o1 := o2.Args[1] 26543 if o1.Op != OpPPC64OR { 26544 break 26545 } 26546 if o1.Type != t { 26547 break 26548 } 26549 _ = o1.Args[1] 26550 s1 := o1.Args[0] 26551 if s1.Op != OpPPC64SLDconst { 26552 break 26553 } 26554 if s1.AuxInt != 16 { 26555 break 26556 } 26557 x2 := s1.Args[0] 26558 if x2.Op != OpPPC64MOVBZload { 26559 break 26560 } 26561 i2 := x2.AuxInt 26562 if x2.Aux != s { 26563 break 26564 } 26565 _ = x2.Args[1] 26566 if p != x2.Args[0] { 26567 break 26568 } 26569 if mem != x2.Args[1] { 26570 break 26571 } 26572 o0 := o1.Args[1] 26573 if o0.Op != OpPPC64OR { 26574 break 26575 } 26576 if o0.Type != t { 26577 break 26578 } 26579 _ = o0.Args[1] 26580 s0 := o0.Args[0] 26581 if s0.Op != OpPPC64SLDconst { 26582 break 26583 } 26584 if s0.AuxInt != 8 { 26585 break 26586 } 26587 x1 := s0.Args[0] 26588 if x1.Op != OpPPC64MOVBZload { 26589 break 26590 } 26591 i1 := x1.AuxInt 26592 if x1.Aux != s { 26593 break 26594 } 26595 _ = x1.Args[1] 26596 if p != x1.Args[0] { 26597 break 26598 } 26599 if mem != x1.Args[1] { 26600 break 26601 } 26602 x0 := o0.Args[1] 26603 if x0.Op != OpPPC64MOVBZload { 26604 break 26605 } 26606 i0 := x0.AuxInt 26607 if x0.Aux != s { 26608 break 26609 } 26610 _ = x0.Args[1] 26611 if p != x0.Args[0] { 26612 break 26613 } 26614 if mem != x0.Args[1] { 26615 break 26616 } 26617 s3 := o3.Args[1] 26618 if s3.Op != OpPPC64SLDconst { 26619 break 26620 } 26621 if s3.AuxInt != 32 { 26622 break 26623 } 26624 x4 := s3.Args[0] 26625 if x4.Op != OpPPC64MOVBZload { 26626 break 26627 } 26628 i4 := x4.AuxInt 26629 if x4.Aux != s { 26630 break 26631 } 26632 _ = x4.Args[1] 26633 if p != x4.Args[0] { 26634 break 26635 } 26636 if mem != x4.Args[1] { 26637 break 26638 } 26639 s6 := v.Args[1] 26640 if s6.Op != OpPPC64SLDconst { 26641 break 26642 } 26643 if s6.AuxInt != 56 { 26644 break 26645 } 26646 x7 := s6.Args[0] 26647 if x7.Op != OpPPC64MOVBZload { 26648 break 26649 } 26650 i7 := x7.AuxInt 26651 if x7.Aux != s { 26652 break 26653 } 26654 _ = x7.Args[1] 26655 if p != x7.Args[0] { 26656 break 26657 } 26658 if mem != x7.Args[1] { 26659 break 26660 } 26661 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)) { 26662 break 26663 } 26664 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 26665 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 26666 v.reset(OpCopy) 26667 v.AddArg(v0) 26668 v0.AuxInt = i0 26669 v0.Aux = s 26670 v0.AddArg(p) 26671 v0.AddArg(mem) 26672 return true 26673 } 26674 // 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])) 26675 // 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) 26676 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 26677 for { 26678 t := v.Type 26679 _ = v.Args[1] 26680 o5 := v.Args[0] 26681 if o5.Op != OpPPC64OR { 26682 break 26683 } 26684 if o5.Type != t { 26685 break 26686 } 26687 _ = o5.Args[1] 26688 s5 := o5.Args[0] 26689 if s5.Op != OpPPC64SLDconst { 26690 break 26691 } 26692 if s5.AuxInt != 48 { 26693 break 26694 } 26695 x6 := s5.Args[0] 26696 if x6.Op != OpPPC64MOVBZload { 26697 break 26698 } 26699 i6 := x6.AuxInt 26700 s := x6.Aux 26701 _ = x6.Args[1] 26702 p := x6.Args[0] 26703 mem := x6.Args[1] 26704 o4 := o5.Args[1] 26705 if o4.Op != OpPPC64OR { 26706 break 26707 } 26708 if o4.Type != t { 26709 break 26710 } 26711 _ = o4.Args[1] 26712 s4 := o4.Args[0] 26713 if s4.Op != OpPPC64SLDconst { 26714 break 26715 } 26716 if s4.AuxInt != 40 { 26717 break 26718 } 26719 x5 := s4.Args[0] 26720 if x5.Op != OpPPC64MOVBZload { 26721 break 26722 } 26723 i5 := x5.AuxInt 26724 if x5.Aux != s { 26725 break 26726 } 26727 _ = x5.Args[1] 26728 if p != x5.Args[0] { 26729 break 26730 } 26731 if mem != x5.Args[1] { 26732 break 26733 } 26734 o3 := o4.Args[1] 26735 if o3.Op != OpPPC64OR { 26736 break 26737 } 26738 if o3.Type != t { 26739 break 26740 } 26741 _ = o3.Args[1] 26742 o2 := o3.Args[0] 26743 if o2.Op != OpPPC64OR { 26744 break 26745 } 26746 if o2.Type != t { 26747 break 26748 } 26749 _ = o2.Args[1] 26750 s2 := o2.Args[0] 26751 if s2.Op != OpPPC64SLDconst { 26752 break 26753 } 26754 if s2.AuxInt != 24 { 26755 break 26756 } 26757 x3 := s2.Args[0] 26758 if x3.Op != OpPPC64MOVBZload { 26759 break 26760 } 26761 i3 := x3.AuxInt 26762 if x3.Aux != s { 26763 break 26764 } 26765 _ = x3.Args[1] 26766 if p != x3.Args[0] { 26767 break 26768 } 26769 if mem != x3.Args[1] { 26770 break 26771 } 26772 o1 := o2.Args[1] 26773 if o1.Op != OpPPC64OR { 26774 break 26775 } 26776 if o1.Type != t { 26777 break 26778 } 26779 _ = o1.Args[1] 26780 s1 := o1.Args[0] 26781 if s1.Op != OpPPC64SLDconst { 26782 break 26783 } 26784 if s1.AuxInt != 16 { 26785 break 26786 } 26787 x2 := s1.Args[0] 26788 if x2.Op != OpPPC64MOVBZload { 26789 break 26790 } 26791 i2 := x2.AuxInt 26792 if x2.Aux != s { 26793 break 26794 } 26795 _ = x2.Args[1] 26796 if p != x2.Args[0] { 26797 break 26798 } 26799 if mem != x2.Args[1] { 26800 break 26801 } 26802 o0 := o1.Args[1] 26803 if o0.Op != OpPPC64OR { 26804 break 26805 } 26806 if o0.Type != t { 26807 break 26808 } 26809 _ = o0.Args[1] 26810 x0 := o0.Args[0] 26811 if x0.Op != OpPPC64MOVBZload { 26812 break 26813 } 26814 i0 := x0.AuxInt 26815 if x0.Aux != s { 26816 break 26817 } 26818 _ = x0.Args[1] 26819 if p != x0.Args[0] { 26820 break 26821 } 26822 if mem != x0.Args[1] { 26823 break 26824 } 26825 s0 := o0.Args[1] 26826 if s0.Op != OpPPC64SLDconst { 26827 break 26828 } 26829 if s0.AuxInt != 8 { 26830 break 26831 } 26832 x1 := s0.Args[0] 26833 if x1.Op != OpPPC64MOVBZload { 26834 break 26835 } 26836 i1 := x1.AuxInt 26837 if x1.Aux != s { 26838 break 26839 } 26840 _ = x1.Args[1] 26841 if p != x1.Args[0] { 26842 break 26843 } 26844 if mem != x1.Args[1] { 26845 break 26846 } 26847 s3 := o3.Args[1] 26848 if s3.Op != OpPPC64SLDconst { 26849 break 26850 } 26851 if s3.AuxInt != 32 { 26852 break 26853 } 26854 x4 := s3.Args[0] 26855 if x4.Op != OpPPC64MOVBZload { 26856 break 26857 } 26858 i4 := x4.AuxInt 26859 if x4.Aux != s { 26860 break 26861 } 26862 _ = x4.Args[1] 26863 if p != x4.Args[0] { 26864 break 26865 } 26866 if mem != x4.Args[1] { 26867 break 26868 } 26869 s6 := v.Args[1] 26870 if s6.Op != OpPPC64SLDconst { 26871 break 26872 } 26873 if s6.AuxInt != 56 { 26874 break 26875 } 26876 x7 := s6.Args[0] 26877 if x7.Op != OpPPC64MOVBZload { 26878 break 26879 } 26880 i7 := x7.AuxInt 26881 if x7.Aux != s { 26882 break 26883 } 26884 _ = x7.Args[1] 26885 if p != x7.Args[0] { 26886 break 26887 } 26888 if mem != x7.Args[1] { 26889 break 26890 } 26891 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)) { 26892 break 26893 } 26894 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 26895 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 26896 v.reset(OpCopy) 26897 v.AddArg(v0) 26898 v0.AuxInt = i0 26899 v0.Aux = s 26900 v0.AddArg(p) 26901 v0.AddArg(mem) 26902 return true 26903 } 26904 // 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])) 26905 // 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) 26906 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 26907 for { 26908 t := v.Type 26909 _ = v.Args[1] 26910 o5 := v.Args[0] 26911 if o5.Op != OpPPC64OR { 26912 break 26913 } 26914 if o5.Type != t { 26915 break 26916 } 26917 _ = o5.Args[1] 26918 s5 := o5.Args[0] 26919 if s5.Op != OpPPC64SLDconst { 26920 break 26921 } 26922 if s5.AuxInt != 48 { 26923 break 26924 } 26925 x6 := s5.Args[0] 26926 if x6.Op != OpPPC64MOVBZload { 26927 break 26928 } 26929 i6 := x6.AuxInt 26930 s := x6.Aux 26931 _ = x6.Args[1] 26932 p := x6.Args[0] 26933 mem := x6.Args[1] 26934 o4 := o5.Args[1] 26935 if o4.Op != OpPPC64OR { 26936 break 26937 } 26938 if o4.Type != t { 26939 break 26940 } 26941 _ = o4.Args[1] 26942 s4 := o4.Args[0] 26943 if s4.Op != OpPPC64SLDconst { 26944 break 26945 } 26946 if s4.AuxInt != 40 { 26947 break 26948 } 26949 x5 := s4.Args[0] 26950 if x5.Op != OpPPC64MOVBZload { 26951 break 26952 } 26953 i5 := x5.AuxInt 26954 if x5.Aux != s { 26955 break 26956 } 26957 _ = x5.Args[1] 26958 if p != x5.Args[0] { 26959 break 26960 } 26961 if mem != x5.Args[1] { 26962 break 26963 } 26964 o3 := o4.Args[1] 26965 if o3.Op != OpPPC64OR { 26966 break 26967 } 26968 if o3.Type != t { 26969 break 26970 } 26971 _ = o3.Args[1] 26972 o2 := o3.Args[0] 26973 if o2.Op != OpPPC64OR { 26974 break 26975 } 26976 if o2.Type != t { 26977 break 26978 } 26979 _ = o2.Args[1] 26980 s2 := o2.Args[0] 26981 if s2.Op != OpPPC64SLDconst { 26982 break 26983 } 26984 if s2.AuxInt != 24 { 26985 break 26986 } 26987 x3 := s2.Args[0] 26988 if x3.Op != OpPPC64MOVBZload { 26989 break 26990 } 26991 i3 := x3.AuxInt 26992 if x3.Aux != s { 26993 break 26994 } 26995 _ = x3.Args[1] 26996 if p != x3.Args[0] { 26997 break 26998 } 26999 if mem != x3.Args[1] { 27000 break 27001 } 27002 o1 := o2.Args[1] 27003 if o1.Op != OpPPC64OR { 27004 break 27005 } 27006 if o1.Type != t { 27007 break 27008 } 27009 _ = o1.Args[1] 27010 o0 := o1.Args[0] 27011 if o0.Op != OpPPC64OR { 27012 break 27013 } 27014 if o0.Type != t { 27015 break 27016 } 27017 _ = o0.Args[1] 27018 s0 := o0.Args[0] 27019 if s0.Op != OpPPC64SLDconst { 27020 break 27021 } 27022 if s0.AuxInt != 8 { 27023 break 27024 } 27025 x1 := s0.Args[0] 27026 if x1.Op != OpPPC64MOVBZload { 27027 break 27028 } 27029 i1 := x1.AuxInt 27030 if x1.Aux != s { 27031 break 27032 } 27033 _ = x1.Args[1] 27034 if p != x1.Args[0] { 27035 break 27036 } 27037 if mem != x1.Args[1] { 27038 break 27039 } 27040 x0 := o0.Args[1] 27041 if x0.Op != OpPPC64MOVBZload { 27042 break 27043 } 27044 i0 := x0.AuxInt 27045 if x0.Aux != s { 27046 break 27047 } 27048 _ = x0.Args[1] 27049 if p != x0.Args[0] { 27050 break 27051 } 27052 if mem != x0.Args[1] { 27053 break 27054 } 27055 s1 := o1.Args[1] 27056 if s1.Op != OpPPC64SLDconst { 27057 break 27058 } 27059 if s1.AuxInt != 16 { 27060 break 27061 } 27062 x2 := s1.Args[0] 27063 if x2.Op != OpPPC64MOVBZload { 27064 break 27065 } 27066 i2 := x2.AuxInt 27067 if x2.Aux != s { 27068 break 27069 } 27070 _ = x2.Args[1] 27071 if p != x2.Args[0] { 27072 break 27073 } 27074 if mem != x2.Args[1] { 27075 break 27076 } 27077 s3 := o3.Args[1] 27078 if s3.Op != OpPPC64SLDconst { 27079 break 27080 } 27081 if s3.AuxInt != 32 { 27082 break 27083 } 27084 x4 := s3.Args[0] 27085 if x4.Op != OpPPC64MOVBZload { 27086 break 27087 } 27088 i4 := x4.AuxInt 27089 if x4.Aux != s { 27090 break 27091 } 27092 _ = x4.Args[1] 27093 if p != x4.Args[0] { 27094 break 27095 } 27096 if mem != x4.Args[1] { 27097 break 27098 } 27099 s6 := v.Args[1] 27100 if s6.Op != OpPPC64SLDconst { 27101 break 27102 } 27103 if s6.AuxInt != 56 { 27104 break 27105 } 27106 x7 := s6.Args[0] 27107 if x7.Op != OpPPC64MOVBZload { 27108 break 27109 } 27110 i7 := x7.AuxInt 27111 if x7.Aux != s { 27112 break 27113 } 27114 _ = x7.Args[1] 27115 if p != x7.Args[0] { 27116 break 27117 } 27118 if mem != x7.Args[1] { 27119 break 27120 } 27121 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)) { 27122 break 27123 } 27124 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 27125 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 27126 v.reset(OpCopy) 27127 v.AddArg(v0) 27128 v0.AuxInt = i0 27129 v0.Aux = s 27130 v0.AddArg(p) 27131 v0.AddArg(mem) 27132 return true 27133 } 27134 // 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])) 27135 // 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) 27136 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 27137 for { 27138 t := v.Type 27139 _ = v.Args[1] 27140 o5 := v.Args[0] 27141 if o5.Op != OpPPC64OR { 27142 break 27143 } 27144 if o5.Type != t { 27145 break 27146 } 27147 _ = o5.Args[1] 27148 s5 := o5.Args[0] 27149 if s5.Op != OpPPC64SLDconst { 27150 break 27151 } 27152 if s5.AuxInt != 48 { 27153 break 27154 } 27155 x6 := s5.Args[0] 27156 if x6.Op != OpPPC64MOVBZload { 27157 break 27158 } 27159 i6 := x6.AuxInt 27160 s := x6.Aux 27161 _ = x6.Args[1] 27162 p := x6.Args[0] 27163 mem := x6.Args[1] 27164 o4 := o5.Args[1] 27165 if o4.Op != OpPPC64OR { 27166 break 27167 } 27168 if o4.Type != t { 27169 break 27170 } 27171 _ = o4.Args[1] 27172 s4 := o4.Args[0] 27173 if s4.Op != OpPPC64SLDconst { 27174 break 27175 } 27176 if s4.AuxInt != 40 { 27177 break 27178 } 27179 x5 := s4.Args[0] 27180 if x5.Op != OpPPC64MOVBZload { 27181 break 27182 } 27183 i5 := x5.AuxInt 27184 if x5.Aux != s { 27185 break 27186 } 27187 _ = x5.Args[1] 27188 if p != x5.Args[0] { 27189 break 27190 } 27191 if mem != x5.Args[1] { 27192 break 27193 } 27194 o3 := o4.Args[1] 27195 if o3.Op != OpPPC64OR { 27196 break 27197 } 27198 if o3.Type != t { 27199 break 27200 } 27201 _ = o3.Args[1] 27202 o2 := o3.Args[0] 27203 if o2.Op != OpPPC64OR { 27204 break 27205 } 27206 if o2.Type != t { 27207 break 27208 } 27209 _ = o2.Args[1] 27210 s2 := o2.Args[0] 27211 if s2.Op != OpPPC64SLDconst { 27212 break 27213 } 27214 if s2.AuxInt != 24 { 27215 break 27216 } 27217 x3 := s2.Args[0] 27218 if x3.Op != OpPPC64MOVBZload { 27219 break 27220 } 27221 i3 := x3.AuxInt 27222 if x3.Aux != s { 27223 break 27224 } 27225 _ = x3.Args[1] 27226 if p != x3.Args[0] { 27227 break 27228 } 27229 if mem != x3.Args[1] { 27230 break 27231 } 27232 o1 := o2.Args[1] 27233 if o1.Op != OpPPC64OR { 27234 break 27235 } 27236 if o1.Type != t { 27237 break 27238 } 27239 _ = o1.Args[1] 27240 o0 := o1.Args[0] 27241 if o0.Op != OpPPC64OR { 27242 break 27243 } 27244 if o0.Type != t { 27245 break 27246 } 27247 _ = o0.Args[1] 27248 x0 := o0.Args[0] 27249 if x0.Op != OpPPC64MOVBZload { 27250 break 27251 } 27252 i0 := x0.AuxInt 27253 if x0.Aux != s { 27254 break 27255 } 27256 _ = x0.Args[1] 27257 if p != x0.Args[0] { 27258 break 27259 } 27260 if mem != x0.Args[1] { 27261 break 27262 } 27263 s0 := o0.Args[1] 27264 if s0.Op != OpPPC64SLDconst { 27265 break 27266 } 27267 if s0.AuxInt != 8 { 27268 break 27269 } 27270 x1 := s0.Args[0] 27271 if x1.Op != OpPPC64MOVBZload { 27272 break 27273 } 27274 i1 := x1.AuxInt 27275 if x1.Aux != s { 27276 break 27277 } 27278 _ = x1.Args[1] 27279 if p != x1.Args[0] { 27280 break 27281 } 27282 if mem != x1.Args[1] { 27283 break 27284 } 27285 s1 := o1.Args[1] 27286 if s1.Op != OpPPC64SLDconst { 27287 break 27288 } 27289 if s1.AuxInt != 16 { 27290 break 27291 } 27292 x2 := s1.Args[0] 27293 if x2.Op != OpPPC64MOVBZload { 27294 break 27295 } 27296 i2 := x2.AuxInt 27297 if x2.Aux != s { 27298 break 27299 } 27300 _ = x2.Args[1] 27301 if p != x2.Args[0] { 27302 break 27303 } 27304 if mem != x2.Args[1] { 27305 break 27306 } 27307 s3 := o3.Args[1] 27308 if s3.Op != OpPPC64SLDconst { 27309 break 27310 } 27311 if s3.AuxInt != 32 { 27312 break 27313 } 27314 x4 := s3.Args[0] 27315 if x4.Op != OpPPC64MOVBZload { 27316 break 27317 } 27318 i4 := x4.AuxInt 27319 if x4.Aux != s { 27320 break 27321 } 27322 _ = x4.Args[1] 27323 if p != x4.Args[0] { 27324 break 27325 } 27326 if mem != x4.Args[1] { 27327 break 27328 } 27329 s6 := v.Args[1] 27330 if s6.Op != OpPPC64SLDconst { 27331 break 27332 } 27333 if s6.AuxInt != 56 { 27334 break 27335 } 27336 x7 := s6.Args[0] 27337 if x7.Op != OpPPC64MOVBZload { 27338 break 27339 } 27340 i7 := x7.AuxInt 27341 if x7.Aux != s { 27342 break 27343 } 27344 _ = x7.Args[1] 27345 if p != x7.Args[0] { 27346 break 27347 } 27348 if mem != x7.Args[1] { 27349 break 27350 } 27351 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)) { 27352 break 27353 } 27354 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 27355 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 27356 v.reset(OpCopy) 27357 v.AddArg(v0) 27358 v0.AuxInt = i0 27359 v0.Aux = s 27360 v0.AddArg(p) 27361 v0.AddArg(mem) 27362 return true 27363 } 27364 // 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])) 27365 // 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) 27366 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 27367 for { 27368 t := v.Type 27369 _ = v.Args[1] 27370 o5 := v.Args[0] 27371 if o5.Op != OpPPC64OR { 27372 break 27373 } 27374 if o5.Type != t { 27375 break 27376 } 27377 _ = o5.Args[1] 27378 s5 := o5.Args[0] 27379 if s5.Op != OpPPC64SLDconst { 27380 break 27381 } 27382 if s5.AuxInt != 48 { 27383 break 27384 } 27385 x6 := s5.Args[0] 27386 if x6.Op != OpPPC64MOVBZload { 27387 break 27388 } 27389 i6 := x6.AuxInt 27390 s := x6.Aux 27391 _ = x6.Args[1] 27392 p := x6.Args[0] 27393 mem := x6.Args[1] 27394 o4 := o5.Args[1] 27395 if o4.Op != OpPPC64OR { 27396 break 27397 } 27398 if o4.Type != t { 27399 break 27400 } 27401 _ = o4.Args[1] 27402 s4 := o4.Args[0] 27403 if s4.Op != OpPPC64SLDconst { 27404 break 27405 } 27406 if s4.AuxInt != 40 { 27407 break 27408 } 27409 x5 := s4.Args[0] 27410 if x5.Op != OpPPC64MOVBZload { 27411 break 27412 } 27413 i5 := x5.AuxInt 27414 if x5.Aux != s { 27415 break 27416 } 27417 _ = x5.Args[1] 27418 if p != x5.Args[0] { 27419 break 27420 } 27421 if mem != x5.Args[1] { 27422 break 27423 } 27424 o3 := o4.Args[1] 27425 if o3.Op != OpPPC64OR { 27426 break 27427 } 27428 if o3.Type != t { 27429 break 27430 } 27431 _ = o3.Args[1] 27432 o2 := o3.Args[0] 27433 if o2.Op != OpPPC64OR { 27434 break 27435 } 27436 if o2.Type != t { 27437 break 27438 } 27439 _ = o2.Args[1] 27440 o1 := o2.Args[0] 27441 if o1.Op != OpPPC64OR { 27442 break 27443 } 27444 if o1.Type != t { 27445 break 27446 } 27447 _ = o1.Args[1] 27448 s1 := o1.Args[0] 27449 if s1.Op != OpPPC64SLDconst { 27450 break 27451 } 27452 if s1.AuxInt != 16 { 27453 break 27454 } 27455 x2 := s1.Args[0] 27456 if x2.Op != OpPPC64MOVBZload { 27457 break 27458 } 27459 i2 := x2.AuxInt 27460 if x2.Aux != s { 27461 break 27462 } 27463 _ = x2.Args[1] 27464 if p != x2.Args[0] { 27465 break 27466 } 27467 if mem != x2.Args[1] { 27468 break 27469 } 27470 o0 := o1.Args[1] 27471 if o0.Op != OpPPC64OR { 27472 break 27473 } 27474 if o0.Type != t { 27475 break 27476 } 27477 _ = o0.Args[1] 27478 s0 := o0.Args[0] 27479 if s0.Op != OpPPC64SLDconst { 27480 break 27481 } 27482 if s0.AuxInt != 8 { 27483 break 27484 } 27485 x1 := s0.Args[0] 27486 if x1.Op != OpPPC64MOVBZload { 27487 break 27488 } 27489 i1 := x1.AuxInt 27490 if x1.Aux != s { 27491 break 27492 } 27493 _ = x1.Args[1] 27494 if p != x1.Args[0] { 27495 break 27496 } 27497 if mem != x1.Args[1] { 27498 break 27499 } 27500 x0 := o0.Args[1] 27501 if x0.Op != OpPPC64MOVBZload { 27502 break 27503 } 27504 i0 := x0.AuxInt 27505 if x0.Aux != s { 27506 break 27507 } 27508 _ = x0.Args[1] 27509 if p != x0.Args[0] { 27510 break 27511 } 27512 if mem != x0.Args[1] { 27513 break 27514 } 27515 s2 := o2.Args[1] 27516 if s2.Op != OpPPC64SLDconst { 27517 break 27518 } 27519 if s2.AuxInt != 24 { 27520 break 27521 } 27522 x3 := s2.Args[0] 27523 if x3.Op != OpPPC64MOVBZload { 27524 break 27525 } 27526 i3 := x3.AuxInt 27527 if x3.Aux != s { 27528 break 27529 } 27530 _ = x3.Args[1] 27531 if p != x3.Args[0] { 27532 break 27533 } 27534 if mem != x3.Args[1] { 27535 break 27536 } 27537 s3 := o3.Args[1] 27538 if s3.Op != OpPPC64SLDconst { 27539 break 27540 } 27541 if s3.AuxInt != 32 { 27542 break 27543 } 27544 x4 := s3.Args[0] 27545 if x4.Op != OpPPC64MOVBZload { 27546 break 27547 } 27548 i4 := x4.AuxInt 27549 if x4.Aux != s { 27550 break 27551 } 27552 _ = x4.Args[1] 27553 if p != x4.Args[0] { 27554 break 27555 } 27556 if mem != x4.Args[1] { 27557 break 27558 } 27559 s6 := v.Args[1] 27560 if s6.Op != OpPPC64SLDconst { 27561 break 27562 } 27563 if s6.AuxInt != 56 { 27564 break 27565 } 27566 x7 := s6.Args[0] 27567 if x7.Op != OpPPC64MOVBZload { 27568 break 27569 } 27570 i7 := x7.AuxInt 27571 if x7.Aux != s { 27572 break 27573 } 27574 _ = x7.Args[1] 27575 if p != x7.Args[0] { 27576 break 27577 } 27578 if mem != x7.Args[1] { 27579 break 27580 } 27581 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)) { 27582 break 27583 } 27584 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 27585 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 27586 v.reset(OpCopy) 27587 v.AddArg(v0) 27588 v0.AuxInt = i0 27589 v0.Aux = s 27590 v0.AddArg(p) 27591 v0.AddArg(mem) 27592 return true 27593 } 27594 // 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])) 27595 // 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) 27596 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 27597 for { 27598 t := v.Type 27599 _ = v.Args[1] 27600 o5 := v.Args[0] 27601 if o5.Op != OpPPC64OR { 27602 break 27603 } 27604 if o5.Type != t { 27605 break 27606 } 27607 _ = o5.Args[1] 27608 s5 := o5.Args[0] 27609 if s5.Op != OpPPC64SLDconst { 27610 break 27611 } 27612 if s5.AuxInt != 48 { 27613 break 27614 } 27615 x6 := s5.Args[0] 27616 if x6.Op != OpPPC64MOVBZload { 27617 break 27618 } 27619 i6 := x6.AuxInt 27620 s := x6.Aux 27621 _ = x6.Args[1] 27622 p := x6.Args[0] 27623 mem := x6.Args[1] 27624 o4 := o5.Args[1] 27625 if o4.Op != OpPPC64OR { 27626 break 27627 } 27628 if o4.Type != t { 27629 break 27630 } 27631 _ = o4.Args[1] 27632 s4 := o4.Args[0] 27633 if s4.Op != OpPPC64SLDconst { 27634 break 27635 } 27636 if s4.AuxInt != 40 { 27637 break 27638 } 27639 x5 := s4.Args[0] 27640 if x5.Op != OpPPC64MOVBZload { 27641 break 27642 } 27643 i5 := x5.AuxInt 27644 if x5.Aux != s { 27645 break 27646 } 27647 _ = x5.Args[1] 27648 if p != x5.Args[0] { 27649 break 27650 } 27651 if mem != x5.Args[1] { 27652 break 27653 } 27654 o3 := o4.Args[1] 27655 if o3.Op != OpPPC64OR { 27656 break 27657 } 27658 if o3.Type != t { 27659 break 27660 } 27661 _ = o3.Args[1] 27662 o2 := o3.Args[0] 27663 if o2.Op != OpPPC64OR { 27664 break 27665 } 27666 if o2.Type != t { 27667 break 27668 } 27669 _ = o2.Args[1] 27670 o1 := o2.Args[0] 27671 if o1.Op != OpPPC64OR { 27672 break 27673 } 27674 if o1.Type != t { 27675 break 27676 } 27677 _ = o1.Args[1] 27678 s1 := o1.Args[0] 27679 if s1.Op != OpPPC64SLDconst { 27680 break 27681 } 27682 if s1.AuxInt != 16 { 27683 break 27684 } 27685 x2 := s1.Args[0] 27686 if x2.Op != OpPPC64MOVBZload { 27687 break 27688 } 27689 i2 := x2.AuxInt 27690 if x2.Aux != s { 27691 break 27692 } 27693 _ = x2.Args[1] 27694 if p != x2.Args[0] { 27695 break 27696 } 27697 if mem != x2.Args[1] { 27698 break 27699 } 27700 o0 := o1.Args[1] 27701 if o0.Op != OpPPC64OR { 27702 break 27703 } 27704 if o0.Type != t { 27705 break 27706 } 27707 _ = o0.Args[1] 27708 x0 := o0.Args[0] 27709 if x0.Op != OpPPC64MOVBZload { 27710 break 27711 } 27712 i0 := x0.AuxInt 27713 if x0.Aux != s { 27714 break 27715 } 27716 _ = x0.Args[1] 27717 if p != x0.Args[0] { 27718 break 27719 } 27720 if mem != x0.Args[1] { 27721 break 27722 } 27723 s0 := o0.Args[1] 27724 if s0.Op != OpPPC64SLDconst { 27725 break 27726 } 27727 if s0.AuxInt != 8 { 27728 break 27729 } 27730 x1 := s0.Args[0] 27731 if x1.Op != OpPPC64MOVBZload { 27732 break 27733 } 27734 i1 := x1.AuxInt 27735 if x1.Aux != s { 27736 break 27737 } 27738 _ = x1.Args[1] 27739 if p != x1.Args[0] { 27740 break 27741 } 27742 if mem != x1.Args[1] { 27743 break 27744 } 27745 s2 := o2.Args[1] 27746 if s2.Op != OpPPC64SLDconst { 27747 break 27748 } 27749 if s2.AuxInt != 24 { 27750 break 27751 } 27752 x3 := s2.Args[0] 27753 if x3.Op != OpPPC64MOVBZload { 27754 break 27755 } 27756 i3 := x3.AuxInt 27757 if x3.Aux != s { 27758 break 27759 } 27760 _ = x3.Args[1] 27761 if p != x3.Args[0] { 27762 break 27763 } 27764 if mem != x3.Args[1] { 27765 break 27766 } 27767 s3 := o3.Args[1] 27768 if s3.Op != OpPPC64SLDconst { 27769 break 27770 } 27771 if s3.AuxInt != 32 { 27772 break 27773 } 27774 x4 := s3.Args[0] 27775 if x4.Op != OpPPC64MOVBZload { 27776 break 27777 } 27778 i4 := x4.AuxInt 27779 if x4.Aux != s { 27780 break 27781 } 27782 _ = x4.Args[1] 27783 if p != x4.Args[0] { 27784 break 27785 } 27786 if mem != x4.Args[1] { 27787 break 27788 } 27789 s6 := v.Args[1] 27790 if s6.Op != OpPPC64SLDconst { 27791 break 27792 } 27793 if s6.AuxInt != 56 { 27794 break 27795 } 27796 x7 := s6.Args[0] 27797 if x7.Op != OpPPC64MOVBZload { 27798 break 27799 } 27800 i7 := x7.AuxInt 27801 if x7.Aux != s { 27802 break 27803 } 27804 _ = x7.Args[1] 27805 if p != x7.Args[0] { 27806 break 27807 } 27808 if mem != x7.Args[1] { 27809 break 27810 } 27811 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)) { 27812 break 27813 } 27814 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 27815 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 27816 v.reset(OpCopy) 27817 v.AddArg(v0) 27818 v0.AuxInt = i0 27819 v0.Aux = s 27820 v0.AddArg(p) 27821 v0.AddArg(mem) 27822 return true 27823 } 27824 // 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])) 27825 // 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) 27826 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 27827 for { 27828 t := v.Type 27829 _ = v.Args[1] 27830 o5 := v.Args[0] 27831 if o5.Op != OpPPC64OR { 27832 break 27833 } 27834 if o5.Type != t { 27835 break 27836 } 27837 _ = o5.Args[1] 27838 s5 := o5.Args[0] 27839 if s5.Op != OpPPC64SLDconst { 27840 break 27841 } 27842 if s5.AuxInt != 48 { 27843 break 27844 } 27845 x6 := s5.Args[0] 27846 if x6.Op != OpPPC64MOVBZload { 27847 break 27848 } 27849 i6 := x6.AuxInt 27850 s := x6.Aux 27851 _ = x6.Args[1] 27852 p := x6.Args[0] 27853 mem := x6.Args[1] 27854 o4 := o5.Args[1] 27855 if o4.Op != OpPPC64OR { 27856 break 27857 } 27858 if o4.Type != t { 27859 break 27860 } 27861 _ = o4.Args[1] 27862 s4 := o4.Args[0] 27863 if s4.Op != OpPPC64SLDconst { 27864 break 27865 } 27866 if s4.AuxInt != 40 { 27867 break 27868 } 27869 x5 := s4.Args[0] 27870 if x5.Op != OpPPC64MOVBZload { 27871 break 27872 } 27873 i5 := x5.AuxInt 27874 if x5.Aux != s { 27875 break 27876 } 27877 _ = x5.Args[1] 27878 if p != x5.Args[0] { 27879 break 27880 } 27881 if mem != x5.Args[1] { 27882 break 27883 } 27884 o3 := o4.Args[1] 27885 if o3.Op != OpPPC64OR { 27886 break 27887 } 27888 if o3.Type != t { 27889 break 27890 } 27891 _ = o3.Args[1] 27892 o2 := o3.Args[0] 27893 if o2.Op != OpPPC64OR { 27894 break 27895 } 27896 if o2.Type != t { 27897 break 27898 } 27899 _ = o2.Args[1] 27900 o1 := o2.Args[0] 27901 if o1.Op != OpPPC64OR { 27902 break 27903 } 27904 if o1.Type != t { 27905 break 27906 } 27907 _ = o1.Args[1] 27908 o0 := o1.Args[0] 27909 if o0.Op != OpPPC64OR { 27910 break 27911 } 27912 if o0.Type != t { 27913 break 27914 } 27915 _ = o0.Args[1] 27916 s0 := o0.Args[0] 27917 if s0.Op != OpPPC64SLDconst { 27918 break 27919 } 27920 if s0.AuxInt != 8 { 27921 break 27922 } 27923 x1 := s0.Args[0] 27924 if x1.Op != OpPPC64MOVBZload { 27925 break 27926 } 27927 i1 := x1.AuxInt 27928 if x1.Aux != s { 27929 break 27930 } 27931 _ = x1.Args[1] 27932 if p != x1.Args[0] { 27933 break 27934 } 27935 if mem != x1.Args[1] { 27936 break 27937 } 27938 x0 := o0.Args[1] 27939 if x0.Op != OpPPC64MOVBZload { 27940 break 27941 } 27942 i0 := x0.AuxInt 27943 if x0.Aux != s { 27944 break 27945 } 27946 _ = x0.Args[1] 27947 if p != x0.Args[0] { 27948 break 27949 } 27950 if mem != x0.Args[1] { 27951 break 27952 } 27953 s1 := o1.Args[1] 27954 if s1.Op != OpPPC64SLDconst { 27955 break 27956 } 27957 if s1.AuxInt != 16 { 27958 break 27959 } 27960 x2 := s1.Args[0] 27961 if x2.Op != OpPPC64MOVBZload { 27962 break 27963 } 27964 i2 := x2.AuxInt 27965 if x2.Aux != s { 27966 break 27967 } 27968 _ = x2.Args[1] 27969 if p != x2.Args[0] { 27970 break 27971 } 27972 if mem != x2.Args[1] { 27973 break 27974 } 27975 s2 := o2.Args[1] 27976 if s2.Op != OpPPC64SLDconst { 27977 break 27978 } 27979 if s2.AuxInt != 24 { 27980 break 27981 } 27982 x3 := s2.Args[0] 27983 if x3.Op != OpPPC64MOVBZload { 27984 break 27985 } 27986 i3 := x3.AuxInt 27987 if x3.Aux != s { 27988 break 27989 } 27990 _ = x3.Args[1] 27991 if p != x3.Args[0] { 27992 break 27993 } 27994 if mem != x3.Args[1] { 27995 break 27996 } 27997 s3 := o3.Args[1] 27998 if s3.Op != OpPPC64SLDconst { 27999 break 28000 } 28001 if s3.AuxInt != 32 { 28002 break 28003 } 28004 x4 := s3.Args[0] 28005 if x4.Op != OpPPC64MOVBZload { 28006 break 28007 } 28008 i4 := x4.AuxInt 28009 if x4.Aux != s { 28010 break 28011 } 28012 _ = x4.Args[1] 28013 if p != x4.Args[0] { 28014 break 28015 } 28016 if mem != x4.Args[1] { 28017 break 28018 } 28019 s6 := v.Args[1] 28020 if s6.Op != OpPPC64SLDconst { 28021 break 28022 } 28023 if s6.AuxInt != 56 { 28024 break 28025 } 28026 x7 := s6.Args[0] 28027 if x7.Op != OpPPC64MOVBZload { 28028 break 28029 } 28030 i7 := x7.AuxInt 28031 if x7.Aux != s { 28032 break 28033 } 28034 _ = x7.Args[1] 28035 if p != x7.Args[0] { 28036 break 28037 } 28038 if mem != x7.Args[1] { 28039 break 28040 } 28041 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)) { 28042 break 28043 } 28044 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 28045 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 28046 v.reset(OpCopy) 28047 v.AddArg(v0) 28048 v0.AuxInt = i0 28049 v0.Aux = s 28050 v0.AddArg(p) 28051 v0.AddArg(mem) 28052 return true 28053 } 28054 // 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])) 28055 // 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) 28056 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 28057 for { 28058 t := v.Type 28059 _ = v.Args[1] 28060 o5 := v.Args[0] 28061 if o5.Op != OpPPC64OR { 28062 break 28063 } 28064 if o5.Type != t { 28065 break 28066 } 28067 _ = o5.Args[1] 28068 s5 := o5.Args[0] 28069 if s5.Op != OpPPC64SLDconst { 28070 break 28071 } 28072 if s5.AuxInt != 48 { 28073 break 28074 } 28075 x6 := s5.Args[0] 28076 if x6.Op != OpPPC64MOVBZload { 28077 break 28078 } 28079 i6 := x6.AuxInt 28080 s := x6.Aux 28081 _ = x6.Args[1] 28082 p := x6.Args[0] 28083 mem := x6.Args[1] 28084 o4 := o5.Args[1] 28085 if o4.Op != OpPPC64OR { 28086 break 28087 } 28088 if o4.Type != t { 28089 break 28090 } 28091 _ = o4.Args[1] 28092 s4 := o4.Args[0] 28093 if s4.Op != OpPPC64SLDconst { 28094 break 28095 } 28096 if s4.AuxInt != 40 { 28097 break 28098 } 28099 x5 := s4.Args[0] 28100 if x5.Op != OpPPC64MOVBZload { 28101 break 28102 } 28103 i5 := x5.AuxInt 28104 if x5.Aux != s { 28105 break 28106 } 28107 _ = x5.Args[1] 28108 if p != x5.Args[0] { 28109 break 28110 } 28111 if mem != x5.Args[1] { 28112 break 28113 } 28114 o3 := o4.Args[1] 28115 if o3.Op != OpPPC64OR { 28116 break 28117 } 28118 if o3.Type != t { 28119 break 28120 } 28121 _ = o3.Args[1] 28122 o2 := o3.Args[0] 28123 if o2.Op != OpPPC64OR { 28124 break 28125 } 28126 if o2.Type != t { 28127 break 28128 } 28129 _ = o2.Args[1] 28130 o1 := o2.Args[0] 28131 if o1.Op != OpPPC64OR { 28132 break 28133 } 28134 if o1.Type != t { 28135 break 28136 } 28137 _ = o1.Args[1] 28138 o0 := o1.Args[0] 28139 if o0.Op != OpPPC64OR { 28140 break 28141 } 28142 if o0.Type != t { 28143 break 28144 } 28145 _ = o0.Args[1] 28146 x0 := o0.Args[0] 28147 if x0.Op != OpPPC64MOVBZload { 28148 break 28149 } 28150 i0 := x0.AuxInt 28151 if x0.Aux != s { 28152 break 28153 } 28154 _ = x0.Args[1] 28155 if p != x0.Args[0] { 28156 break 28157 } 28158 if mem != x0.Args[1] { 28159 break 28160 } 28161 s0 := o0.Args[1] 28162 if s0.Op != OpPPC64SLDconst { 28163 break 28164 } 28165 if s0.AuxInt != 8 { 28166 break 28167 } 28168 x1 := s0.Args[0] 28169 if x1.Op != OpPPC64MOVBZload { 28170 break 28171 } 28172 i1 := x1.AuxInt 28173 if x1.Aux != s { 28174 break 28175 } 28176 _ = x1.Args[1] 28177 if p != x1.Args[0] { 28178 break 28179 } 28180 if mem != x1.Args[1] { 28181 break 28182 } 28183 s1 := o1.Args[1] 28184 if s1.Op != OpPPC64SLDconst { 28185 break 28186 } 28187 if s1.AuxInt != 16 { 28188 break 28189 } 28190 x2 := s1.Args[0] 28191 if x2.Op != OpPPC64MOVBZload { 28192 break 28193 } 28194 i2 := x2.AuxInt 28195 if x2.Aux != s { 28196 break 28197 } 28198 _ = x2.Args[1] 28199 if p != x2.Args[0] { 28200 break 28201 } 28202 if mem != x2.Args[1] { 28203 break 28204 } 28205 s2 := o2.Args[1] 28206 if s2.Op != OpPPC64SLDconst { 28207 break 28208 } 28209 if s2.AuxInt != 24 { 28210 break 28211 } 28212 x3 := s2.Args[0] 28213 if x3.Op != OpPPC64MOVBZload { 28214 break 28215 } 28216 i3 := x3.AuxInt 28217 if x3.Aux != s { 28218 break 28219 } 28220 _ = x3.Args[1] 28221 if p != x3.Args[0] { 28222 break 28223 } 28224 if mem != x3.Args[1] { 28225 break 28226 } 28227 s3 := o3.Args[1] 28228 if s3.Op != OpPPC64SLDconst { 28229 break 28230 } 28231 if s3.AuxInt != 32 { 28232 break 28233 } 28234 x4 := s3.Args[0] 28235 if x4.Op != OpPPC64MOVBZload { 28236 break 28237 } 28238 i4 := x4.AuxInt 28239 if x4.Aux != s { 28240 break 28241 } 28242 _ = x4.Args[1] 28243 if p != x4.Args[0] { 28244 break 28245 } 28246 if mem != x4.Args[1] { 28247 break 28248 } 28249 s6 := v.Args[1] 28250 if s6.Op != OpPPC64SLDconst { 28251 break 28252 } 28253 if s6.AuxInt != 56 { 28254 break 28255 } 28256 x7 := s6.Args[0] 28257 if x7.Op != OpPPC64MOVBZload { 28258 break 28259 } 28260 i7 := x7.AuxInt 28261 if x7.Aux != s { 28262 break 28263 } 28264 _ = x7.Args[1] 28265 if p != x7.Args[0] { 28266 break 28267 } 28268 if mem != x7.Args[1] { 28269 break 28270 } 28271 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)) { 28272 break 28273 } 28274 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 28275 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 28276 v.reset(OpCopy) 28277 v.AddArg(v0) 28278 v0.AuxInt = i0 28279 v0.Aux = s 28280 v0.AddArg(p) 28281 v0.AddArg(mem) 28282 return true 28283 } 28284 // 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])) 28285 // 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) 28286 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 28287 for { 28288 t := v.Type 28289 _ = v.Args[1] 28290 o5 := v.Args[0] 28291 if o5.Op != OpPPC64OR { 28292 break 28293 } 28294 if o5.Type != t { 28295 break 28296 } 28297 _ = o5.Args[1] 28298 s5 := o5.Args[0] 28299 if s5.Op != OpPPC64SLDconst { 28300 break 28301 } 28302 if s5.AuxInt != 48 { 28303 break 28304 } 28305 x6 := s5.Args[0] 28306 if x6.Op != OpPPC64MOVBZload { 28307 break 28308 } 28309 i6 := x6.AuxInt 28310 s := x6.Aux 28311 _ = x6.Args[1] 28312 p := x6.Args[0] 28313 mem := x6.Args[1] 28314 o4 := o5.Args[1] 28315 if o4.Op != OpPPC64OR { 28316 break 28317 } 28318 if o4.Type != t { 28319 break 28320 } 28321 _ = o4.Args[1] 28322 o3 := o4.Args[0] 28323 if o3.Op != OpPPC64OR { 28324 break 28325 } 28326 if o3.Type != t { 28327 break 28328 } 28329 _ = o3.Args[1] 28330 s3 := o3.Args[0] 28331 if s3.Op != OpPPC64SLDconst { 28332 break 28333 } 28334 if s3.AuxInt != 32 { 28335 break 28336 } 28337 x4 := s3.Args[0] 28338 if x4.Op != OpPPC64MOVBZload { 28339 break 28340 } 28341 i4 := x4.AuxInt 28342 if x4.Aux != s { 28343 break 28344 } 28345 _ = x4.Args[1] 28346 if p != x4.Args[0] { 28347 break 28348 } 28349 if mem != x4.Args[1] { 28350 break 28351 } 28352 o2 := o3.Args[1] 28353 if o2.Op != OpPPC64OR { 28354 break 28355 } 28356 if o2.Type != t { 28357 break 28358 } 28359 _ = o2.Args[1] 28360 s2 := o2.Args[0] 28361 if s2.Op != OpPPC64SLDconst { 28362 break 28363 } 28364 if s2.AuxInt != 24 { 28365 break 28366 } 28367 x3 := s2.Args[0] 28368 if x3.Op != OpPPC64MOVBZload { 28369 break 28370 } 28371 i3 := x3.AuxInt 28372 if x3.Aux != s { 28373 break 28374 } 28375 _ = x3.Args[1] 28376 if p != x3.Args[0] { 28377 break 28378 } 28379 if mem != x3.Args[1] { 28380 break 28381 } 28382 o1 := o2.Args[1] 28383 if o1.Op != OpPPC64OR { 28384 break 28385 } 28386 if o1.Type != t { 28387 break 28388 } 28389 _ = o1.Args[1] 28390 s1 := o1.Args[0] 28391 if s1.Op != OpPPC64SLDconst { 28392 break 28393 } 28394 if s1.AuxInt != 16 { 28395 break 28396 } 28397 x2 := s1.Args[0] 28398 if x2.Op != OpPPC64MOVBZload { 28399 break 28400 } 28401 i2 := x2.AuxInt 28402 if x2.Aux != s { 28403 break 28404 } 28405 _ = x2.Args[1] 28406 if p != x2.Args[0] { 28407 break 28408 } 28409 if mem != x2.Args[1] { 28410 break 28411 } 28412 o0 := o1.Args[1] 28413 if o0.Op != OpPPC64OR { 28414 break 28415 } 28416 if o0.Type != t { 28417 break 28418 } 28419 _ = o0.Args[1] 28420 s0 := o0.Args[0] 28421 if s0.Op != OpPPC64SLDconst { 28422 break 28423 } 28424 if s0.AuxInt != 8 { 28425 break 28426 } 28427 x1 := s0.Args[0] 28428 if x1.Op != OpPPC64MOVBZload { 28429 break 28430 } 28431 i1 := x1.AuxInt 28432 if x1.Aux != s { 28433 break 28434 } 28435 _ = x1.Args[1] 28436 if p != x1.Args[0] { 28437 break 28438 } 28439 if mem != x1.Args[1] { 28440 break 28441 } 28442 x0 := o0.Args[1] 28443 if x0.Op != OpPPC64MOVBZload { 28444 break 28445 } 28446 i0 := x0.AuxInt 28447 if x0.Aux != s { 28448 break 28449 } 28450 _ = x0.Args[1] 28451 if p != x0.Args[0] { 28452 break 28453 } 28454 if mem != x0.Args[1] { 28455 break 28456 } 28457 s4 := o4.Args[1] 28458 if s4.Op != OpPPC64SLDconst { 28459 break 28460 } 28461 if s4.AuxInt != 40 { 28462 break 28463 } 28464 x5 := s4.Args[0] 28465 if x5.Op != OpPPC64MOVBZload { 28466 break 28467 } 28468 i5 := x5.AuxInt 28469 if x5.Aux != s { 28470 break 28471 } 28472 _ = x5.Args[1] 28473 if p != x5.Args[0] { 28474 break 28475 } 28476 if mem != x5.Args[1] { 28477 break 28478 } 28479 s6 := v.Args[1] 28480 if s6.Op != OpPPC64SLDconst { 28481 break 28482 } 28483 if s6.AuxInt != 56 { 28484 break 28485 } 28486 x7 := s6.Args[0] 28487 if x7.Op != OpPPC64MOVBZload { 28488 break 28489 } 28490 i7 := x7.AuxInt 28491 if x7.Aux != s { 28492 break 28493 } 28494 _ = x7.Args[1] 28495 if p != x7.Args[0] { 28496 break 28497 } 28498 if mem != x7.Args[1] { 28499 break 28500 } 28501 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)) { 28502 break 28503 } 28504 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 28505 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 28506 v.reset(OpCopy) 28507 v.AddArg(v0) 28508 v0.AuxInt = i0 28509 v0.Aux = s 28510 v0.AddArg(p) 28511 v0.AddArg(mem) 28512 return true 28513 } 28514 // 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])) 28515 // 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) 28516 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 28517 for { 28518 t := v.Type 28519 _ = v.Args[1] 28520 o5 := v.Args[0] 28521 if o5.Op != OpPPC64OR { 28522 break 28523 } 28524 if o5.Type != t { 28525 break 28526 } 28527 _ = o5.Args[1] 28528 s5 := o5.Args[0] 28529 if s5.Op != OpPPC64SLDconst { 28530 break 28531 } 28532 if s5.AuxInt != 48 { 28533 break 28534 } 28535 x6 := s5.Args[0] 28536 if x6.Op != OpPPC64MOVBZload { 28537 break 28538 } 28539 i6 := x6.AuxInt 28540 s := x6.Aux 28541 _ = x6.Args[1] 28542 p := x6.Args[0] 28543 mem := x6.Args[1] 28544 o4 := o5.Args[1] 28545 if o4.Op != OpPPC64OR { 28546 break 28547 } 28548 if o4.Type != t { 28549 break 28550 } 28551 _ = o4.Args[1] 28552 o3 := o4.Args[0] 28553 if o3.Op != OpPPC64OR { 28554 break 28555 } 28556 if o3.Type != t { 28557 break 28558 } 28559 _ = o3.Args[1] 28560 s3 := o3.Args[0] 28561 if s3.Op != OpPPC64SLDconst { 28562 break 28563 } 28564 if s3.AuxInt != 32 { 28565 break 28566 } 28567 x4 := s3.Args[0] 28568 if x4.Op != OpPPC64MOVBZload { 28569 break 28570 } 28571 i4 := x4.AuxInt 28572 if x4.Aux != s { 28573 break 28574 } 28575 _ = x4.Args[1] 28576 if p != x4.Args[0] { 28577 break 28578 } 28579 if mem != x4.Args[1] { 28580 break 28581 } 28582 o2 := o3.Args[1] 28583 if o2.Op != OpPPC64OR { 28584 break 28585 } 28586 if o2.Type != t { 28587 break 28588 } 28589 _ = o2.Args[1] 28590 s2 := o2.Args[0] 28591 if s2.Op != OpPPC64SLDconst { 28592 break 28593 } 28594 if s2.AuxInt != 24 { 28595 break 28596 } 28597 x3 := s2.Args[0] 28598 if x3.Op != OpPPC64MOVBZload { 28599 break 28600 } 28601 i3 := x3.AuxInt 28602 if x3.Aux != s { 28603 break 28604 } 28605 _ = x3.Args[1] 28606 if p != x3.Args[0] { 28607 break 28608 } 28609 if mem != x3.Args[1] { 28610 break 28611 } 28612 o1 := o2.Args[1] 28613 if o1.Op != OpPPC64OR { 28614 break 28615 } 28616 if o1.Type != t { 28617 break 28618 } 28619 _ = o1.Args[1] 28620 s1 := o1.Args[0] 28621 if s1.Op != OpPPC64SLDconst { 28622 break 28623 } 28624 if s1.AuxInt != 16 { 28625 break 28626 } 28627 x2 := s1.Args[0] 28628 if x2.Op != OpPPC64MOVBZload { 28629 break 28630 } 28631 i2 := x2.AuxInt 28632 if x2.Aux != s { 28633 break 28634 } 28635 _ = x2.Args[1] 28636 if p != x2.Args[0] { 28637 break 28638 } 28639 if mem != x2.Args[1] { 28640 break 28641 } 28642 o0 := o1.Args[1] 28643 if o0.Op != OpPPC64OR { 28644 break 28645 } 28646 if o0.Type != t { 28647 break 28648 } 28649 _ = o0.Args[1] 28650 x0 := o0.Args[0] 28651 if x0.Op != OpPPC64MOVBZload { 28652 break 28653 } 28654 i0 := x0.AuxInt 28655 if x0.Aux != s { 28656 break 28657 } 28658 _ = x0.Args[1] 28659 if p != x0.Args[0] { 28660 break 28661 } 28662 if mem != x0.Args[1] { 28663 break 28664 } 28665 s0 := o0.Args[1] 28666 if s0.Op != OpPPC64SLDconst { 28667 break 28668 } 28669 if s0.AuxInt != 8 { 28670 break 28671 } 28672 x1 := s0.Args[0] 28673 if x1.Op != OpPPC64MOVBZload { 28674 break 28675 } 28676 i1 := x1.AuxInt 28677 if x1.Aux != s { 28678 break 28679 } 28680 _ = x1.Args[1] 28681 if p != x1.Args[0] { 28682 break 28683 } 28684 if mem != x1.Args[1] { 28685 break 28686 } 28687 s4 := o4.Args[1] 28688 if s4.Op != OpPPC64SLDconst { 28689 break 28690 } 28691 if s4.AuxInt != 40 { 28692 break 28693 } 28694 x5 := s4.Args[0] 28695 if x5.Op != OpPPC64MOVBZload { 28696 break 28697 } 28698 i5 := x5.AuxInt 28699 if x5.Aux != s { 28700 break 28701 } 28702 _ = x5.Args[1] 28703 if p != x5.Args[0] { 28704 break 28705 } 28706 if mem != x5.Args[1] { 28707 break 28708 } 28709 s6 := v.Args[1] 28710 if s6.Op != OpPPC64SLDconst { 28711 break 28712 } 28713 if s6.AuxInt != 56 { 28714 break 28715 } 28716 x7 := s6.Args[0] 28717 if x7.Op != OpPPC64MOVBZload { 28718 break 28719 } 28720 i7 := x7.AuxInt 28721 if x7.Aux != s { 28722 break 28723 } 28724 _ = x7.Args[1] 28725 if p != x7.Args[0] { 28726 break 28727 } 28728 if mem != x7.Args[1] { 28729 break 28730 } 28731 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)) { 28732 break 28733 } 28734 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 28735 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 28736 v.reset(OpCopy) 28737 v.AddArg(v0) 28738 v0.AuxInt = i0 28739 v0.Aux = s 28740 v0.AddArg(p) 28741 v0.AddArg(mem) 28742 return true 28743 } 28744 return false 28745 } 28746 func rewriteValuePPC64_OpPPC64OR_100(v *Value) bool { 28747 b := v.Block 28748 _ = b 28749 config := b.Func.Config 28750 _ = config 28751 // 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])) 28752 // 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) 28753 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 28754 for { 28755 t := v.Type 28756 _ = v.Args[1] 28757 o5 := v.Args[0] 28758 if o5.Op != OpPPC64OR { 28759 break 28760 } 28761 if o5.Type != t { 28762 break 28763 } 28764 _ = o5.Args[1] 28765 s5 := o5.Args[0] 28766 if s5.Op != OpPPC64SLDconst { 28767 break 28768 } 28769 if s5.AuxInt != 48 { 28770 break 28771 } 28772 x6 := s5.Args[0] 28773 if x6.Op != OpPPC64MOVBZload { 28774 break 28775 } 28776 i6 := x6.AuxInt 28777 s := x6.Aux 28778 _ = x6.Args[1] 28779 p := x6.Args[0] 28780 mem := x6.Args[1] 28781 o4 := o5.Args[1] 28782 if o4.Op != OpPPC64OR { 28783 break 28784 } 28785 if o4.Type != t { 28786 break 28787 } 28788 _ = o4.Args[1] 28789 o3 := o4.Args[0] 28790 if o3.Op != OpPPC64OR { 28791 break 28792 } 28793 if o3.Type != t { 28794 break 28795 } 28796 _ = o3.Args[1] 28797 s3 := o3.Args[0] 28798 if s3.Op != OpPPC64SLDconst { 28799 break 28800 } 28801 if s3.AuxInt != 32 { 28802 break 28803 } 28804 x4 := s3.Args[0] 28805 if x4.Op != OpPPC64MOVBZload { 28806 break 28807 } 28808 i4 := x4.AuxInt 28809 if x4.Aux != s { 28810 break 28811 } 28812 _ = x4.Args[1] 28813 if p != x4.Args[0] { 28814 break 28815 } 28816 if mem != x4.Args[1] { 28817 break 28818 } 28819 o2 := o3.Args[1] 28820 if o2.Op != OpPPC64OR { 28821 break 28822 } 28823 if o2.Type != t { 28824 break 28825 } 28826 _ = o2.Args[1] 28827 s2 := o2.Args[0] 28828 if s2.Op != OpPPC64SLDconst { 28829 break 28830 } 28831 if s2.AuxInt != 24 { 28832 break 28833 } 28834 x3 := s2.Args[0] 28835 if x3.Op != OpPPC64MOVBZload { 28836 break 28837 } 28838 i3 := x3.AuxInt 28839 if x3.Aux != s { 28840 break 28841 } 28842 _ = x3.Args[1] 28843 if p != x3.Args[0] { 28844 break 28845 } 28846 if mem != x3.Args[1] { 28847 break 28848 } 28849 o1 := o2.Args[1] 28850 if o1.Op != OpPPC64OR { 28851 break 28852 } 28853 if o1.Type != t { 28854 break 28855 } 28856 _ = o1.Args[1] 28857 o0 := o1.Args[0] 28858 if o0.Op != OpPPC64OR { 28859 break 28860 } 28861 if o0.Type != t { 28862 break 28863 } 28864 _ = o0.Args[1] 28865 s0 := o0.Args[0] 28866 if s0.Op != OpPPC64SLDconst { 28867 break 28868 } 28869 if s0.AuxInt != 8 { 28870 break 28871 } 28872 x1 := s0.Args[0] 28873 if x1.Op != OpPPC64MOVBZload { 28874 break 28875 } 28876 i1 := x1.AuxInt 28877 if x1.Aux != s { 28878 break 28879 } 28880 _ = x1.Args[1] 28881 if p != x1.Args[0] { 28882 break 28883 } 28884 if mem != x1.Args[1] { 28885 break 28886 } 28887 x0 := o0.Args[1] 28888 if x0.Op != OpPPC64MOVBZload { 28889 break 28890 } 28891 i0 := x0.AuxInt 28892 if x0.Aux != s { 28893 break 28894 } 28895 _ = x0.Args[1] 28896 if p != x0.Args[0] { 28897 break 28898 } 28899 if mem != x0.Args[1] { 28900 break 28901 } 28902 s1 := o1.Args[1] 28903 if s1.Op != OpPPC64SLDconst { 28904 break 28905 } 28906 if s1.AuxInt != 16 { 28907 break 28908 } 28909 x2 := s1.Args[0] 28910 if x2.Op != OpPPC64MOVBZload { 28911 break 28912 } 28913 i2 := x2.AuxInt 28914 if x2.Aux != s { 28915 break 28916 } 28917 _ = x2.Args[1] 28918 if p != x2.Args[0] { 28919 break 28920 } 28921 if mem != x2.Args[1] { 28922 break 28923 } 28924 s4 := o4.Args[1] 28925 if s4.Op != OpPPC64SLDconst { 28926 break 28927 } 28928 if s4.AuxInt != 40 { 28929 break 28930 } 28931 x5 := s4.Args[0] 28932 if x5.Op != OpPPC64MOVBZload { 28933 break 28934 } 28935 i5 := x5.AuxInt 28936 if x5.Aux != s { 28937 break 28938 } 28939 _ = x5.Args[1] 28940 if p != x5.Args[0] { 28941 break 28942 } 28943 if mem != x5.Args[1] { 28944 break 28945 } 28946 s6 := v.Args[1] 28947 if s6.Op != OpPPC64SLDconst { 28948 break 28949 } 28950 if s6.AuxInt != 56 { 28951 break 28952 } 28953 x7 := s6.Args[0] 28954 if x7.Op != OpPPC64MOVBZload { 28955 break 28956 } 28957 i7 := x7.AuxInt 28958 if x7.Aux != s { 28959 break 28960 } 28961 _ = x7.Args[1] 28962 if p != x7.Args[0] { 28963 break 28964 } 28965 if mem != x7.Args[1] { 28966 break 28967 } 28968 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)) { 28969 break 28970 } 28971 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 28972 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 28973 v.reset(OpCopy) 28974 v.AddArg(v0) 28975 v0.AuxInt = i0 28976 v0.Aux = s 28977 v0.AddArg(p) 28978 v0.AddArg(mem) 28979 return true 28980 } 28981 // 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])) 28982 // 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) 28983 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 28984 for { 28985 t := v.Type 28986 _ = v.Args[1] 28987 o5 := v.Args[0] 28988 if o5.Op != OpPPC64OR { 28989 break 28990 } 28991 if o5.Type != t { 28992 break 28993 } 28994 _ = o5.Args[1] 28995 s5 := o5.Args[0] 28996 if s5.Op != OpPPC64SLDconst { 28997 break 28998 } 28999 if s5.AuxInt != 48 { 29000 break 29001 } 29002 x6 := s5.Args[0] 29003 if x6.Op != OpPPC64MOVBZload { 29004 break 29005 } 29006 i6 := x6.AuxInt 29007 s := x6.Aux 29008 _ = x6.Args[1] 29009 p := x6.Args[0] 29010 mem := x6.Args[1] 29011 o4 := o5.Args[1] 29012 if o4.Op != OpPPC64OR { 29013 break 29014 } 29015 if o4.Type != t { 29016 break 29017 } 29018 _ = o4.Args[1] 29019 o3 := o4.Args[0] 29020 if o3.Op != OpPPC64OR { 29021 break 29022 } 29023 if o3.Type != t { 29024 break 29025 } 29026 _ = o3.Args[1] 29027 s3 := o3.Args[0] 29028 if s3.Op != OpPPC64SLDconst { 29029 break 29030 } 29031 if s3.AuxInt != 32 { 29032 break 29033 } 29034 x4 := s3.Args[0] 29035 if x4.Op != OpPPC64MOVBZload { 29036 break 29037 } 29038 i4 := x4.AuxInt 29039 if x4.Aux != s { 29040 break 29041 } 29042 _ = x4.Args[1] 29043 if p != x4.Args[0] { 29044 break 29045 } 29046 if mem != x4.Args[1] { 29047 break 29048 } 29049 o2 := o3.Args[1] 29050 if o2.Op != OpPPC64OR { 29051 break 29052 } 29053 if o2.Type != t { 29054 break 29055 } 29056 _ = o2.Args[1] 29057 s2 := o2.Args[0] 29058 if s2.Op != OpPPC64SLDconst { 29059 break 29060 } 29061 if s2.AuxInt != 24 { 29062 break 29063 } 29064 x3 := s2.Args[0] 29065 if x3.Op != OpPPC64MOVBZload { 29066 break 29067 } 29068 i3 := x3.AuxInt 29069 if x3.Aux != s { 29070 break 29071 } 29072 _ = x3.Args[1] 29073 if p != x3.Args[0] { 29074 break 29075 } 29076 if mem != x3.Args[1] { 29077 break 29078 } 29079 o1 := o2.Args[1] 29080 if o1.Op != OpPPC64OR { 29081 break 29082 } 29083 if o1.Type != t { 29084 break 29085 } 29086 _ = o1.Args[1] 29087 o0 := o1.Args[0] 29088 if o0.Op != OpPPC64OR { 29089 break 29090 } 29091 if o0.Type != t { 29092 break 29093 } 29094 _ = o0.Args[1] 29095 x0 := o0.Args[0] 29096 if x0.Op != OpPPC64MOVBZload { 29097 break 29098 } 29099 i0 := x0.AuxInt 29100 if x0.Aux != s { 29101 break 29102 } 29103 _ = x0.Args[1] 29104 if p != x0.Args[0] { 29105 break 29106 } 29107 if mem != x0.Args[1] { 29108 break 29109 } 29110 s0 := o0.Args[1] 29111 if s0.Op != OpPPC64SLDconst { 29112 break 29113 } 29114 if s0.AuxInt != 8 { 29115 break 29116 } 29117 x1 := s0.Args[0] 29118 if x1.Op != OpPPC64MOVBZload { 29119 break 29120 } 29121 i1 := x1.AuxInt 29122 if x1.Aux != s { 29123 break 29124 } 29125 _ = x1.Args[1] 29126 if p != x1.Args[0] { 29127 break 29128 } 29129 if mem != x1.Args[1] { 29130 break 29131 } 29132 s1 := o1.Args[1] 29133 if s1.Op != OpPPC64SLDconst { 29134 break 29135 } 29136 if s1.AuxInt != 16 { 29137 break 29138 } 29139 x2 := s1.Args[0] 29140 if x2.Op != OpPPC64MOVBZload { 29141 break 29142 } 29143 i2 := x2.AuxInt 29144 if x2.Aux != s { 29145 break 29146 } 29147 _ = x2.Args[1] 29148 if p != x2.Args[0] { 29149 break 29150 } 29151 if mem != x2.Args[1] { 29152 break 29153 } 29154 s4 := o4.Args[1] 29155 if s4.Op != OpPPC64SLDconst { 29156 break 29157 } 29158 if s4.AuxInt != 40 { 29159 break 29160 } 29161 x5 := s4.Args[0] 29162 if x5.Op != OpPPC64MOVBZload { 29163 break 29164 } 29165 i5 := x5.AuxInt 29166 if x5.Aux != s { 29167 break 29168 } 29169 _ = x5.Args[1] 29170 if p != x5.Args[0] { 29171 break 29172 } 29173 if mem != x5.Args[1] { 29174 break 29175 } 29176 s6 := v.Args[1] 29177 if s6.Op != OpPPC64SLDconst { 29178 break 29179 } 29180 if s6.AuxInt != 56 { 29181 break 29182 } 29183 x7 := s6.Args[0] 29184 if x7.Op != OpPPC64MOVBZload { 29185 break 29186 } 29187 i7 := x7.AuxInt 29188 if x7.Aux != s { 29189 break 29190 } 29191 _ = x7.Args[1] 29192 if p != x7.Args[0] { 29193 break 29194 } 29195 if mem != x7.Args[1] { 29196 break 29197 } 29198 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)) { 29199 break 29200 } 29201 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 29202 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 29203 v.reset(OpCopy) 29204 v.AddArg(v0) 29205 v0.AuxInt = i0 29206 v0.Aux = s 29207 v0.AddArg(p) 29208 v0.AddArg(mem) 29209 return true 29210 } 29211 // 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])) 29212 // 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) 29213 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 29214 for { 29215 t := v.Type 29216 _ = v.Args[1] 29217 o5 := v.Args[0] 29218 if o5.Op != OpPPC64OR { 29219 break 29220 } 29221 if o5.Type != t { 29222 break 29223 } 29224 _ = o5.Args[1] 29225 s5 := o5.Args[0] 29226 if s5.Op != OpPPC64SLDconst { 29227 break 29228 } 29229 if s5.AuxInt != 48 { 29230 break 29231 } 29232 x6 := s5.Args[0] 29233 if x6.Op != OpPPC64MOVBZload { 29234 break 29235 } 29236 i6 := x6.AuxInt 29237 s := x6.Aux 29238 _ = x6.Args[1] 29239 p := x6.Args[0] 29240 mem := x6.Args[1] 29241 o4 := o5.Args[1] 29242 if o4.Op != OpPPC64OR { 29243 break 29244 } 29245 if o4.Type != t { 29246 break 29247 } 29248 _ = o4.Args[1] 29249 o3 := o4.Args[0] 29250 if o3.Op != OpPPC64OR { 29251 break 29252 } 29253 if o3.Type != t { 29254 break 29255 } 29256 _ = o3.Args[1] 29257 s3 := o3.Args[0] 29258 if s3.Op != OpPPC64SLDconst { 29259 break 29260 } 29261 if s3.AuxInt != 32 { 29262 break 29263 } 29264 x4 := s3.Args[0] 29265 if x4.Op != OpPPC64MOVBZload { 29266 break 29267 } 29268 i4 := x4.AuxInt 29269 if x4.Aux != s { 29270 break 29271 } 29272 _ = x4.Args[1] 29273 if p != x4.Args[0] { 29274 break 29275 } 29276 if mem != x4.Args[1] { 29277 break 29278 } 29279 o2 := o3.Args[1] 29280 if o2.Op != OpPPC64OR { 29281 break 29282 } 29283 if o2.Type != t { 29284 break 29285 } 29286 _ = o2.Args[1] 29287 o1 := o2.Args[0] 29288 if o1.Op != OpPPC64OR { 29289 break 29290 } 29291 if o1.Type != t { 29292 break 29293 } 29294 _ = o1.Args[1] 29295 s1 := o1.Args[0] 29296 if s1.Op != OpPPC64SLDconst { 29297 break 29298 } 29299 if s1.AuxInt != 16 { 29300 break 29301 } 29302 x2 := s1.Args[0] 29303 if x2.Op != OpPPC64MOVBZload { 29304 break 29305 } 29306 i2 := x2.AuxInt 29307 if x2.Aux != s { 29308 break 29309 } 29310 _ = x2.Args[1] 29311 if p != x2.Args[0] { 29312 break 29313 } 29314 if mem != x2.Args[1] { 29315 break 29316 } 29317 o0 := o1.Args[1] 29318 if o0.Op != OpPPC64OR { 29319 break 29320 } 29321 if o0.Type != t { 29322 break 29323 } 29324 _ = o0.Args[1] 29325 s0 := o0.Args[0] 29326 if s0.Op != OpPPC64SLDconst { 29327 break 29328 } 29329 if s0.AuxInt != 8 { 29330 break 29331 } 29332 x1 := s0.Args[0] 29333 if x1.Op != OpPPC64MOVBZload { 29334 break 29335 } 29336 i1 := x1.AuxInt 29337 if x1.Aux != s { 29338 break 29339 } 29340 _ = x1.Args[1] 29341 if p != x1.Args[0] { 29342 break 29343 } 29344 if mem != x1.Args[1] { 29345 break 29346 } 29347 x0 := o0.Args[1] 29348 if x0.Op != OpPPC64MOVBZload { 29349 break 29350 } 29351 i0 := x0.AuxInt 29352 if x0.Aux != s { 29353 break 29354 } 29355 _ = x0.Args[1] 29356 if p != x0.Args[0] { 29357 break 29358 } 29359 if mem != x0.Args[1] { 29360 break 29361 } 29362 s2 := o2.Args[1] 29363 if s2.Op != OpPPC64SLDconst { 29364 break 29365 } 29366 if s2.AuxInt != 24 { 29367 break 29368 } 29369 x3 := s2.Args[0] 29370 if x3.Op != OpPPC64MOVBZload { 29371 break 29372 } 29373 i3 := x3.AuxInt 29374 if x3.Aux != s { 29375 break 29376 } 29377 _ = x3.Args[1] 29378 if p != x3.Args[0] { 29379 break 29380 } 29381 if mem != x3.Args[1] { 29382 break 29383 } 29384 s4 := o4.Args[1] 29385 if s4.Op != OpPPC64SLDconst { 29386 break 29387 } 29388 if s4.AuxInt != 40 { 29389 break 29390 } 29391 x5 := s4.Args[0] 29392 if x5.Op != OpPPC64MOVBZload { 29393 break 29394 } 29395 i5 := x5.AuxInt 29396 if x5.Aux != s { 29397 break 29398 } 29399 _ = x5.Args[1] 29400 if p != x5.Args[0] { 29401 break 29402 } 29403 if mem != x5.Args[1] { 29404 break 29405 } 29406 s6 := v.Args[1] 29407 if s6.Op != OpPPC64SLDconst { 29408 break 29409 } 29410 if s6.AuxInt != 56 { 29411 break 29412 } 29413 x7 := s6.Args[0] 29414 if x7.Op != OpPPC64MOVBZload { 29415 break 29416 } 29417 i7 := x7.AuxInt 29418 if x7.Aux != s { 29419 break 29420 } 29421 _ = x7.Args[1] 29422 if p != x7.Args[0] { 29423 break 29424 } 29425 if mem != x7.Args[1] { 29426 break 29427 } 29428 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)) { 29429 break 29430 } 29431 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 29432 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 29433 v.reset(OpCopy) 29434 v.AddArg(v0) 29435 v0.AuxInt = i0 29436 v0.Aux = s 29437 v0.AddArg(p) 29438 v0.AddArg(mem) 29439 return true 29440 } 29441 // 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])) 29442 // 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) 29443 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 29444 for { 29445 t := v.Type 29446 _ = v.Args[1] 29447 o5 := v.Args[0] 29448 if o5.Op != OpPPC64OR { 29449 break 29450 } 29451 if o5.Type != t { 29452 break 29453 } 29454 _ = o5.Args[1] 29455 s5 := o5.Args[0] 29456 if s5.Op != OpPPC64SLDconst { 29457 break 29458 } 29459 if s5.AuxInt != 48 { 29460 break 29461 } 29462 x6 := s5.Args[0] 29463 if x6.Op != OpPPC64MOVBZload { 29464 break 29465 } 29466 i6 := x6.AuxInt 29467 s := x6.Aux 29468 _ = x6.Args[1] 29469 p := x6.Args[0] 29470 mem := x6.Args[1] 29471 o4 := o5.Args[1] 29472 if o4.Op != OpPPC64OR { 29473 break 29474 } 29475 if o4.Type != t { 29476 break 29477 } 29478 _ = o4.Args[1] 29479 o3 := o4.Args[0] 29480 if o3.Op != OpPPC64OR { 29481 break 29482 } 29483 if o3.Type != t { 29484 break 29485 } 29486 _ = o3.Args[1] 29487 s3 := o3.Args[0] 29488 if s3.Op != OpPPC64SLDconst { 29489 break 29490 } 29491 if s3.AuxInt != 32 { 29492 break 29493 } 29494 x4 := s3.Args[0] 29495 if x4.Op != OpPPC64MOVBZload { 29496 break 29497 } 29498 i4 := x4.AuxInt 29499 if x4.Aux != s { 29500 break 29501 } 29502 _ = x4.Args[1] 29503 if p != x4.Args[0] { 29504 break 29505 } 29506 if mem != x4.Args[1] { 29507 break 29508 } 29509 o2 := o3.Args[1] 29510 if o2.Op != OpPPC64OR { 29511 break 29512 } 29513 if o2.Type != t { 29514 break 29515 } 29516 _ = o2.Args[1] 29517 o1 := o2.Args[0] 29518 if o1.Op != OpPPC64OR { 29519 break 29520 } 29521 if o1.Type != t { 29522 break 29523 } 29524 _ = o1.Args[1] 29525 s1 := o1.Args[0] 29526 if s1.Op != OpPPC64SLDconst { 29527 break 29528 } 29529 if s1.AuxInt != 16 { 29530 break 29531 } 29532 x2 := s1.Args[0] 29533 if x2.Op != OpPPC64MOVBZload { 29534 break 29535 } 29536 i2 := x2.AuxInt 29537 if x2.Aux != s { 29538 break 29539 } 29540 _ = x2.Args[1] 29541 if p != x2.Args[0] { 29542 break 29543 } 29544 if mem != x2.Args[1] { 29545 break 29546 } 29547 o0 := o1.Args[1] 29548 if o0.Op != OpPPC64OR { 29549 break 29550 } 29551 if o0.Type != t { 29552 break 29553 } 29554 _ = o0.Args[1] 29555 x0 := o0.Args[0] 29556 if x0.Op != OpPPC64MOVBZload { 29557 break 29558 } 29559 i0 := x0.AuxInt 29560 if x0.Aux != s { 29561 break 29562 } 29563 _ = x0.Args[1] 29564 if p != x0.Args[0] { 29565 break 29566 } 29567 if mem != x0.Args[1] { 29568 break 29569 } 29570 s0 := o0.Args[1] 29571 if s0.Op != OpPPC64SLDconst { 29572 break 29573 } 29574 if s0.AuxInt != 8 { 29575 break 29576 } 29577 x1 := s0.Args[0] 29578 if x1.Op != OpPPC64MOVBZload { 29579 break 29580 } 29581 i1 := x1.AuxInt 29582 if x1.Aux != s { 29583 break 29584 } 29585 _ = x1.Args[1] 29586 if p != x1.Args[0] { 29587 break 29588 } 29589 if mem != x1.Args[1] { 29590 break 29591 } 29592 s2 := o2.Args[1] 29593 if s2.Op != OpPPC64SLDconst { 29594 break 29595 } 29596 if s2.AuxInt != 24 { 29597 break 29598 } 29599 x3 := s2.Args[0] 29600 if x3.Op != OpPPC64MOVBZload { 29601 break 29602 } 29603 i3 := x3.AuxInt 29604 if x3.Aux != s { 29605 break 29606 } 29607 _ = x3.Args[1] 29608 if p != x3.Args[0] { 29609 break 29610 } 29611 if mem != x3.Args[1] { 29612 break 29613 } 29614 s4 := o4.Args[1] 29615 if s4.Op != OpPPC64SLDconst { 29616 break 29617 } 29618 if s4.AuxInt != 40 { 29619 break 29620 } 29621 x5 := s4.Args[0] 29622 if x5.Op != OpPPC64MOVBZload { 29623 break 29624 } 29625 i5 := x5.AuxInt 29626 if x5.Aux != s { 29627 break 29628 } 29629 _ = x5.Args[1] 29630 if p != x5.Args[0] { 29631 break 29632 } 29633 if mem != x5.Args[1] { 29634 break 29635 } 29636 s6 := v.Args[1] 29637 if s6.Op != OpPPC64SLDconst { 29638 break 29639 } 29640 if s6.AuxInt != 56 { 29641 break 29642 } 29643 x7 := s6.Args[0] 29644 if x7.Op != OpPPC64MOVBZload { 29645 break 29646 } 29647 i7 := x7.AuxInt 29648 if x7.Aux != s { 29649 break 29650 } 29651 _ = x7.Args[1] 29652 if p != x7.Args[0] { 29653 break 29654 } 29655 if mem != x7.Args[1] { 29656 break 29657 } 29658 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)) { 29659 break 29660 } 29661 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 29662 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 29663 v.reset(OpCopy) 29664 v.AddArg(v0) 29665 v0.AuxInt = i0 29666 v0.Aux = s 29667 v0.AddArg(p) 29668 v0.AddArg(mem) 29669 return true 29670 } 29671 // 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])) 29672 // 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) 29673 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 29674 for { 29675 t := v.Type 29676 _ = v.Args[1] 29677 o5 := v.Args[0] 29678 if o5.Op != OpPPC64OR { 29679 break 29680 } 29681 if o5.Type != t { 29682 break 29683 } 29684 _ = o5.Args[1] 29685 s5 := o5.Args[0] 29686 if s5.Op != OpPPC64SLDconst { 29687 break 29688 } 29689 if s5.AuxInt != 48 { 29690 break 29691 } 29692 x6 := s5.Args[0] 29693 if x6.Op != OpPPC64MOVBZload { 29694 break 29695 } 29696 i6 := x6.AuxInt 29697 s := x6.Aux 29698 _ = x6.Args[1] 29699 p := x6.Args[0] 29700 mem := x6.Args[1] 29701 o4 := o5.Args[1] 29702 if o4.Op != OpPPC64OR { 29703 break 29704 } 29705 if o4.Type != t { 29706 break 29707 } 29708 _ = o4.Args[1] 29709 o3 := o4.Args[0] 29710 if o3.Op != OpPPC64OR { 29711 break 29712 } 29713 if o3.Type != t { 29714 break 29715 } 29716 _ = o3.Args[1] 29717 s3 := o3.Args[0] 29718 if s3.Op != OpPPC64SLDconst { 29719 break 29720 } 29721 if s3.AuxInt != 32 { 29722 break 29723 } 29724 x4 := s3.Args[0] 29725 if x4.Op != OpPPC64MOVBZload { 29726 break 29727 } 29728 i4 := x4.AuxInt 29729 if x4.Aux != s { 29730 break 29731 } 29732 _ = x4.Args[1] 29733 if p != x4.Args[0] { 29734 break 29735 } 29736 if mem != x4.Args[1] { 29737 break 29738 } 29739 o2 := o3.Args[1] 29740 if o2.Op != OpPPC64OR { 29741 break 29742 } 29743 if o2.Type != t { 29744 break 29745 } 29746 _ = o2.Args[1] 29747 o1 := o2.Args[0] 29748 if o1.Op != OpPPC64OR { 29749 break 29750 } 29751 if o1.Type != t { 29752 break 29753 } 29754 _ = o1.Args[1] 29755 o0 := o1.Args[0] 29756 if o0.Op != OpPPC64OR { 29757 break 29758 } 29759 if o0.Type != t { 29760 break 29761 } 29762 _ = o0.Args[1] 29763 s0 := o0.Args[0] 29764 if s0.Op != OpPPC64SLDconst { 29765 break 29766 } 29767 if s0.AuxInt != 8 { 29768 break 29769 } 29770 x1 := s0.Args[0] 29771 if x1.Op != OpPPC64MOVBZload { 29772 break 29773 } 29774 i1 := x1.AuxInt 29775 if x1.Aux != s { 29776 break 29777 } 29778 _ = x1.Args[1] 29779 if p != x1.Args[0] { 29780 break 29781 } 29782 if mem != x1.Args[1] { 29783 break 29784 } 29785 x0 := o0.Args[1] 29786 if x0.Op != OpPPC64MOVBZload { 29787 break 29788 } 29789 i0 := x0.AuxInt 29790 if x0.Aux != s { 29791 break 29792 } 29793 _ = x0.Args[1] 29794 if p != x0.Args[0] { 29795 break 29796 } 29797 if mem != x0.Args[1] { 29798 break 29799 } 29800 s1 := o1.Args[1] 29801 if s1.Op != OpPPC64SLDconst { 29802 break 29803 } 29804 if s1.AuxInt != 16 { 29805 break 29806 } 29807 x2 := s1.Args[0] 29808 if x2.Op != OpPPC64MOVBZload { 29809 break 29810 } 29811 i2 := x2.AuxInt 29812 if x2.Aux != s { 29813 break 29814 } 29815 _ = x2.Args[1] 29816 if p != x2.Args[0] { 29817 break 29818 } 29819 if mem != x2.Args[1] { 29820 break 29821 } 29822 s2 := o2.Args[1] 29823 if s2.Op != OpPPC64SLDconst { 29824 break 29825 } 29826 if s2.AuxInt != 24 { 29827 break 29828 } 29829 x3 := s2.Args[0] 29830 if x3.Op != OpPPC64MOVBZload { 29831 break 29832 } 29833 i3 := x3.AuxInt 29834 if x3.Aux != s { 29835 break 29836 } 29837 _ = x3.Args[1] 29838 if p != x3.Args[0] { 29839 break 29840 } 29841 if mem != x3.Args[1] { 29842 break 29843 } 29844 s4 := o4.Args[1] 29845 if s4.Op != OpPPC64SLDconst { 29846 break 29847 } 29848 if s4.AuxInt != 40 { 29849 break 29850 } 29851 x5 := s4.Args[0] 29852 if x5.Op != OpPPC64MOVBZload { 29853 break 29854 } 29855 i5 := x5.AuxInt 29856 if x5.Aux != s { 29857 break 29858 } 29859 _ = x5.Args[1] 29860 if p != x5.Args[0] { 29861 break 29862 } 29863 if mem != x5.Args[1] { 29864 break 29865 } 29866 s6 := v.Args[1] 29867 if s6.Op != OpPPC64SLDconst { 29868 break 29869 } 29870 if s6.AuxInt != 56 { 29871 break 29872 } 29873 x7 := s6.Args[0] 29874 if x7.Op != OpPPC64MOVBZload { 29875 break 29876 } 29877 i7 := x7.AuxInt 29878 if x7.Aux != s { 29879 break 29880 } 29881 _ = x7.Args[1] 29882 if p != x7.Args[0] { 29883 break 29884 } 29885 if mem != x7.Args[1] { 29886 break 29887 } 29888 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)) { 29889 break 29890 } 29891 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 29892 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 29893 v.reset(OpCopy) 29894 v.AddArg(v0) 29895 v0.AuxInt = i0 29896 v0.Aux = s 29897 v0.AddArg(p) 29898 v0.AddArg(mem) 29899 return true 29900 } 29901 // 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])) 29902 // 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) 29903 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 29904 for { 29905 t := v.Type 29906 _ = v.Args[1] 29907 o5 := v.Args[0] 29908 if o5.Op != OpPPC64OR { 29909 break 29910 } 29911 if o5.Type != t { 29912 break 29913 } 29914 _ = o5.Args[1] 29915 s5 := o5.Args[0] 29916 if s5.Op != OpPPC64SLDconst { 29917 break 29918 } 29919 if s5.AuxInt != 48 { 29920 break 29921 } 29922 x6 := s5.Args[0] 29923 if x6.Op != OpPPC64MOVBZload { 29924 break 29925 } 29926 i6 := x6.AuxInt 29927 s := x6.Aux 29928 _ = x6.Args[1] 29929 p := x6.Args[0] 29930 mem := x6.Args[1] 29931 o4 := o5.Args[1] 29932 if o4.Op != OpPPC64OR { 29933 break 29934 } 29935 if o4.Type != t { 29936 break 29937 } 29938 _ = o4.Args[1] 29939 o3 := o4.Args[0] 29940 if o3.Op != OpPPC64OR { 29941 break 29942 } 29943 if o3.Type != t { 29944 break 29945 } 29946 _ = o3.Args[1] 29947 s3 := o3.Args[0] 29948 if s3.Op != OpPPC64SLDconst { 29949 break 29950 } 29951 if s3.AuxInt != 32 { 29952 break 29953 } 29954 x4 := s3.Args[0] 29955 if x4.Op != OpPPC64MOVBZload { 29956 break 29957 } 29958 i4 := x4.AuxInt 29959 if x4.Aux != s { 29960 break 29961 } 29962 _ = x4.Args[1] 29963 if p != x4.Args[0] { 29964 break 29965 } 29966 if mem != x4.Args[1] { 29967 break 29968 } 29969 o2 := o3.Args[1] 29970 if o2.Op != OpPPC64OR { 29971 break 29972 } 29973 if o2.Type != t { 29974 break 29975 } 29976 _ = o2.Args[1] 29977 o1 := o2.Args[0] 29978 if o1.Op != OpPPC64OR { 29979 break 29980 } 29981 if o1.Type != t { 29982 break 29983 } 29984 _ = o1.Args[1] 29985 o0 := o1.Args[0] 29986 if o0.Op != OpPPC64OR { 29987 break 29988 } 29989 if o0.Type != t { 29990 break 29991 } 29992 _ = o0.Args[1] 29993 x0 := o0.Args[0] 29994 if x0.Op != OpPPC64MOVBZload { 29995 break 29996 } 29997 i0 := x0.AuxInt 29998 if x0.Aux != s { 29999 break 30000 } 30001 _ = x0.Args[1] 30002 if p != x0.Args[0] { 30003 break 30004 } 30005 if mem != x0.Args[1] { 30006 break 30007 } 30008 s0 := o0.Args[1] 30009 if s0.Op != OpPPC64SLDconst { 30010 break 30011 } 30012 if s0.AuxInt != 8 { 30013 break 30014 } 30015 x1 := s0.Args[0] 30016 if x1.Op != OpPPC64MOVBZload { 30017 break 30018 } 30019 i1 := x1.AuxInt 30020 if x1.Aux != s { 30021 break 30022 } 30023 _ = x1.Args[1] 30024 if p != x1.Args[0] { 30025 break 30026 } 30027 if mem != x1.Args[1] { 30028 break 30029 } 30030 s1 := o1.Args[1] 30031 if s1.Op != OpPPC64SLDconst { 30032 break 30033 } 30034 if s1.AuxInt != 16 { 30035 break 30036 } 30037 x2 := s1.Args[0] 30038 if x2.Op != OpPPC64MOVBZload { 30039 break 30040 } 30041 i2 := x2.AuxInt 30042 if x2.Aux != s { 30043 break 30044 } 30045 _ = x2.Args[1] 30046 if p != x2.Args[0] { 30047 break 30048 } 30049 if mem != x2.Args[1] { 30050 break 30051 } 30052 s2 := o2.Args[1] 30053 if s2.Op != OpPPC64SLDconst { 30054 break 30055 } 30056 if s2.AuxInt != 24 { 30057 break 30058 } 30059 x3 := s2.Args[0] 30060 if x3.Op != OpPPC64MOVBZload { 30061 break 30062 } 30063 i3 := x3.AuxInt 30064 if x3.Aux != s { 30065 break 30066 } 30067 _ = x3.Args[1] 30068 if p != x3.Args[0] { 30069 break 30070 } 30071 if mem != x3.Args[1] { 30072 break 30073 } 30074 s4 := o4.Args[1] 30075 if s4.Op != OpPPC64SLDconst { 30076 break 30077 } 30078 if s4.AuxInt != 40 { 30079 break 30080 } 30081 x5 := s4.Args[0] 30082 if x5.Op != OpPPC64MOVBZload { 30083 break 30084 } 30085 i5 := x5.AuxInt 30086 if x5.Aux != s { 30087 break 30088 } 30089 _ = x5.Args[1] 30090 if p != x5.Args[0] { 30091 break 30092 } 30093 if mem != x5.Args[1] { 30094 break 30095 } 30096 s6 := v.Args[1] 30097 if s6.Op != OpPPC64SLDconst { 30098 break 30099 } 30100 if s6.AuxInt != 56 { 30101 break 30102 } 30103 x7 := s6.Args[0] 30104 if x7.Op != OpPPC64MOVBZload { 30105 break 30106 } 30107 i7 := x7.AuxInt 30108 if x7.Aux != s { 30109 break 30110 } 30111 _ = x7.Args[1] 30112 if p != x7.Args[0] { 30113 break 30114 } 30115 if mem != x7.Args[1] { 30116 break 30117 } 30118 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)) { 30119 break 30120 } 30121 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 30122 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 30123 v.reset(OpCopy) 30124 v.AddArg(v0) 30125 v0.AuxInt = i0 30126 v0.Aux = s 30127 v0.AddArg(p) 30128 v0.AddArg(mem) 30129 return true 30130 } 30131 // 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])) 30132 // 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) 30133 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 30134 for { 30135 t := v.Type 30136 _ = v.Args[1] 30137 o5 := v.Args[0] 30138 if o5.Op != OpPPC64OR { 30139 break 30140 } 30141 if o5.Type != t { 30142 break 30143 } 30144 _ = o5.Args[1] 30145 s5 := o5.Args[0] 30146 if s5.Op != OpPPC64SLDconst { 30147 break 30148 } 30149 if s5.AuxInt != 48 { 30150 break 30151 } 30152 x6 := s5.Args[0] 30153 if x6.Op != OpPPC64MOVBZload { 30154 break 30155 } 30156 i6 := x6.AuxInt 30157 s := x6.Aux 30158 _ = x6.Args[1] 30159 p := x6.Args[0] 30160 mem := x6.Args[1] 30161 o4 := o5.Args[1] 30162 if o4.Op != OpPPC64OR { 30163 break 30164 } 30165 if o4.Type != t { 30166 break 30167 } 30168 _ = o4.Args[1] 30169 o3 := o4.Args[0] 30170 if o3.Op != OpPPC64OR { 30171 break 30172 } 30173 if o3.Type != t { 30174 break 30175 } 30176 _ = o3.Args[1] 30177 o2 := o3.Args[0] 30178 if o2.Op != OpPPC64OR { 30179 break 30180 } 30181 if o2.Type != t { 30182 break 30183 } 30184 _ = o2.Args[1] 30185 s2 := o2.Args[0] 30186 if s2.Op != OpPPC64SLDconst { 30187 break 30188 } 30189 if s2.AuxInt != 24 { 30190 break 30191 } 30192 x3 := s2.Args[0] 30193 if x3.Op != OpPPC64MOVBZload { 30194 break 30195 } 30196 i3 := x3.AuxInt 30197 if x3.Aux != s { 30198 break 30199 } 30200 _ = x3.Args[1] 30201 if p != x3.Args[0] { 30202 break 30203 } 30204 if mem != x3.Args[1] { 30205 break 30206 } 30207 o1 := o2.Args[1] 30208 if o1.Op != OpPPC64OR { 30209 break 30210 } 30211 if o1.Type != t { 30212 break 30213 } 30214 _ = o1.Args[1] 30215 s1 := o1.Args[0] 30216 if s1.Op != OpPPC64SLDconst { 30217 break 30218 } 30219 if s1.AuxInt != 16 { 30220 break 30221 } 30222 x2 := s1.Args[0] 30223 if x2.Op != OpPPC64MOVBZload { 30224 break 30225 } 30226 i2 := x2.AuxInt 30227 if x2.Aux != s { 30228 break 30229 } 30230 _ = x2.Args[1] 30231 if p != x2.Args[0] { 30232 break 30233 } 30234 if mem != x2.Args[1] { 30235 break 30236 } 30237 o0 := o1.Args[1] 30238 if o0.Op != OpPPC64OR { 30239 break 30240 } 30241 if o0.Type != t { 30242 break 30243 } 30244 _ = o0.Args[1] 30245 s0 := o0.Args[0] 30246 if s0.Op != OpPPC64SLDconst { 30247 break 30248 } 30249 if s0.AuxInt != 8 { 30250 break 30251 } 30252 x1 := s0.Args[0] 30253 if x1.Op != OpPPC64MOVBZload { 30254 break 30255 } 30256 i1 := x1.AuxInt 30257 if x1.Aux != s { 30258 break 30259 } 30260 _ = x1.Args[1] 30261 if p != x1.Args[0] { 30262 break 30263 } 30264 if mem != x1.Args[1] { 30265 break 30266 } 30267 x0 := o0.Args[1] 30268 if x0.Op != OpPPC64MOVBZload { 30269 break 30270 } 30271 i0 := x0.AuxInt 30272 if x0.Aux != s { 30273 break 30274 } 30275 _ = x0.Args[1] 30276 if p != x0.Args[0] { 30277 break 30278 } 30279 if mem != x0.Args[1] { 30280 break 30281 } 30282 s3 := o3.Args[1] 30283 if s3.Op != OpPPC64SLDconst { 30284 break 30285 } 30286 if s3.AuxInt != 32 { 30287 break 30288 } 30289 x4 := s3.Args[0] 30290 if x4.Op != OpPPC64MOVBZload { 30291 break 30292 } 30293 i4 := x4.AuxInt 30294 if x4.Aux != s { 30295 break 30296 } 30297 _ = x4.Args[1] 30298 if p != x4.Args[0] { 30299 break 30300 } 30301 if mem != x4.Args[1] { 30302 break 30303 } 30304 s4 := o4.Args[1] 30305 if s4.Op != OpPPC64SLDconst { 30306 break 30307 } 30308 if s4.AuxInt != 40 { 30309 break 30310 } 30311 x5 := s4.Args[0] 30312 if x5.Op != OpPPC64MOVBZload { 30313 break 30314 } 30315 i5 := x5.AuxInt 30316 if x5.Aux != s { 30317 break 30318 } 30319 _ = x5.Args[1] 30320 if p != x5.Args[0] { 30321 break 30322 } 30323 if mem != x5.Args[1] { 30324 break 30325 } 30326 s6 := v.Args[1] 30327 if s6.Op != OpPPC64SLDconst { 30328 break 30329 } 30330 if s6.AuxInt != 56 { 30331 break 30332 } 30333 x7 := s6.Args[0] 30334 if x7.Op != OpPPC64MOVBZload { 30335 break 30336 } 30337 i7 := x7.AuxInt 30338 if x7.Aux != s { 30339 break 30340 } 30341 _ = x7.Args[1] 30342 if p != x7.Args[0] { 30343 break 30344 } 30345 if mem != x7.Args[1] { 30346 break 30347 } 30348 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)) { 30349 break 30350 } 30351 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 30352 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 30353 v.reset(OpCopy) 30354 v.AddArg(v0) 30355 v0.AuxInt = i0 30356 v0.Aux = s 30357 v0.AddArg(p) 30358 v0.AddArg(mem) 30359 return true 30360 } 30361 // 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])) 30362 // 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) 30363 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 30364 for { 30365 t := v.Type 30366 _ = v.Args[1] 30367 o5 := v.Args[0] 30368 if o5.Op != OpPPC64OR { 30369 break 30370 } 30371 if o5.Type != t { 30372 break 30373 } 30374 _ = o5.Args[1] 30375 s5 := o5.Args[0] 30376 if s5.Op != OpPPC64SLDconst { 30377 break 30378 } 30379 if s5.AuxInt != 48 { 30380 break 30381 } 30382 x6 := s5.Args[0] 30383 if x6.Op != OpPPC64MOVBZload { 30384 break 30385 } 30386 i6 := x6.AuxInt 30387 s := x6.Aux 30388 _ = x6.Args[1] 30389 p := x6.Args[0] 30390 mem := x6.Args[1] 30391 o4 := o5.Args[1] 30392 if o4.Op != OpPPC64OR { 30393 break 30394 } 30395 if o4.Type != t { 30396 break 30397 } 30398 _ = o4.Args[1] 30399 o3 := o4.Args[0] 30400 if o3.Op != OpPPC64OR { 30401 break 30402 } 30403 if o3.Type != t { 30404 break 30405 } 30406 _ = o3.Args[1] 30407 o2 := o3.Args[0] 30408 if o2.Op != OpPPC64OR { 30409 break 30410 } 30411 if o2.Type != t { 30412 break 30413 } 30414 _ = o2.Args[1] 30415 s2 := o2.Args[0] 30416 if s2.Op != OpPPC64SLDconst { 30417 break 30418 } 30419 if s2.AuxInt != 24 { 30420 break 30421 } 30422 x3 := s2.Args[0] 30423 if x3.Op != OpPPC64MOVBZload { 30424 break 30425 } 30426 i3 := x3.AuxInt 30427 if x3.Aux != s { 30428 break 30429 } 30430 _ = x3.Args[1] 30431 if p != x3.Args[0] { 30432 break 30433 } 30434 if mem != x3.Args[1] { 30435 break 30436 } 30437 o1 := o2.Args[1] 30438 if o1.Op != OpPPC64OR { 30439 break 30440 } 30441 if o1.Type != t { 30442 break 30443 } 30444 _ = o1.Args[1] 30445 s1 := o1.Args[0] 30446 if s1.Op != OpPPC64SLDconst { 30447 break 30448 } 30449 if s1.AuxInt != 16 { 30450 break 30451 } 30452 x2 := s1.Args[0] 30453 if x2.Op != OpPPC64MOVBZload { 30454 break 30455 } 30456 i2 := x2.AuxInt 30457 if x2.Aux != s { 30458 break 30459 } 30460 _ = x2.Args[1] 30461 if p != x2.Args[0] { 30462 break 30463 } 30464 if mem != x2.Args[1] { 30465 break 30466 } 30467 o0 := o1.Args[1] 30468 if o0.Op != OpPPC64OR { 30469 break 30470 } 30471 if o0.Type != t { 30472 break 30473 } 30474 _ = o0.Args[1] 30475 x0 := o0.Args[0] 30476 if x0.Op != OpPPC64MOVBZload { 30477 break 30478 } 30479 i0 := x0.AuxInt 30480 if x0.Aux != s { 30481 break 30482 } 30483 _ = x0.Args[1] 30484 if p != x0.Args[0] { 30485 break 30486 } 30487 if mem != x0.Args[1] { 30488 break 30489 } 30490 s0 := o0.Args[1] 30491 if s0.Op != OpPPC64SLDconst { 30492 break 30493 } 30494 if s0.AuxInt != 8 { 30495 break 30496 } 30497 x1 := s0.Args[0] 30498 if x1.Op != OpPPC64MOVBZload { 30499 break 30500 } 30501 i1 := x1.AuxInt 30502 if x1.Aux != s { 30503 break 30504 } 30505 _ = x1.Args[1] 30506 if p != x1.Args[0] { 30507 break 30508 } 30509 if mem != x1.Args[1] { 30510 break 30511 } 30512 s3 := o3.Args[1] 30513 if s3.Op != OpPPC64SLDconst { 30514 break 30515 } 30516 if s3.AuxInt != 32 { 30517 break 30518 } 30519 x4 := s3.Args[0] 30520 if x4.Op != OpPPC64MOVBZload { 30521 break 30522 } 30523 i4 := x4.AuxInt 30524 if x4.Aux != s { 30525 break 30526 } 30527 _ = x4.Args[1] 30528 if p != x4.Args[0] { 30529 break 30530 } 30531 if mem != x4.Args[1] { 30532 break 30533 } 30534 s4 := o4.Args[1] 30535 if s4.Op != OpPPC64SLDconst { 30536 break 30537 } 30538 if s4.AuxInt != 40 { 30539 break 30540 } 30541 x5 := s4.Args[0] 30542 if x5.Op != OpPPC64MOVBZload { 30543 break 30544 } 30545 i5 := x5.AuxInt 30546 if x5.Aux != s { 30547 break 30548 } 30549 _ = x5.Args[1] 30550 if p != x5.Args[0] { 30551 break 30552 } 30553 if mem != x5.Args[1] { 30554 break 30555 } 30556 s6 := v.Args[1] 30557 if s6.Op != OpPPC64SLDconst { 30558 break 30559 } 30560 if s6.AuxInt != 56 { 30561 break 30562 } 30563 x7 := s6.Args[0] 30564 if x7.Op != OpPPC64MOVBZload { 30565 break 30566 } 30567 i7 := x7.AuxInt 30568 if x7.Aux != s { 30569 break 30570 } 30571 _ = x7.Args[1] 30572 if p != x7.Args[0] { 30573 break 30574 } 30575 if mem != x7.Args[1] { 30576 break 30577 } 30578 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)) { 30579 break 30580 } 30581 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 30582 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 30583 v.reset(OpCopy) 30584 v.AddArg(v0) 30585 v0.AuxInt = i0 30586 v0.Aux = s 30587 v0.AddArg(p) 30588 v0.AddArg(mem) 30589 return true 30590 } 30591 // 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])) 30592 // 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) 30593 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 30594 for { 30595 t := v.Type 30596 _ = v.Args[1] 30597 o5 := v.Args[0] 30598 if o5.Op != OpPPC64OR { 30599 break 30600 } 30601 if o5.Type != t { 30602 break 30603 } 30604 _ = o5.Args[1] 30605 s5 := o5.Args[0] 30606 if s5.Op != OpPPC64SLDconst { 30607 break 30608 } 30609 if s5.AuxInt != 48 { 30610 break 30611 } 30612 x6 := s5.Args[0] 30613 if x6.Op != OpPPC64MOVBZload { 30614 break 30615 } 30616 i6 := x6.AuxInt 30617 s := x6.Aux 30618 _ = x6.Args[1] 30619 p := x6.Args[0] 30620 mem := x6.Args[1] 30621 o4 := o5.Args[1] 30622 if o4.Op != OpPPC64OR { 30623 break 30624 } 30625 if o4.Type != t { 30626 break 30627 } 30628 _ = o4.Args[1] 30629 o3 := o4.Args[0] 30630 if o3.Op != OpPPC64OR { 30631 break 30632 } 30633 if o3.Type != t { 30634 break 30635 } 30636 _ = o3.Args[1] 30637 o2 := o3.Args[0] 30638 if o2.Op != OpPPC64OR { 30639 break 30640 } 30641 if o2.Type != t { 30642 break 30643 } 30644 _ = o2.Args[1] 30645 s2 := o2.Args[0] 30646 if s2.Op != OpPPC64SLDconst { 30647 break 30648 } 30649 if s2.AuxInt != 24 { 30650 break 30651 } 30652 x3 := s2.Args[0] 30653 if x3.Op != OpPPC64MOVBZload { 30654 break 30655 } 30656 i3 := x3.AuxInt 30657 if x3.Aux != s { 30658 break 30659 } 30660 _ = x3.Args[1] 30661 if p != x3.Args[0] { 30662 break 30663 } 30664 if mem != x3.Args[1] { 30665 break 30666 } 30667 o1 := o2.Args[1] 30668 if o1.Op != OpPPC64OR { 30669 break 30670 } 30671 if o1.Type != t { 30672 break 30673 } 30674 _ = o1.Args[1] 30675 o0 := o1.Args[0] 30676 if o0.Op != OpPPC64OR { 30677 break 30678 } 30679 if o0.Type != t { 30680 break 30681 } 30682 _ = o0.Args[1] 30683 s0 := o0.Args[0] 30684 if s0.Op != OpPPC64SLDconst { 30685 break 30686 } 30687 if s0.AuxInt != 8 { 30688 break 30689 } 30690 x1 := s0.Args[0] 30691 if x1.Op != OpPPC64MOVBZload { 30692 break 30693 } 30694 i1 := x1.AuxInt 30695 if x1.Aux != s { 30696 break 30697 } 30698 _ = x1.Args[1] 30699 if p != x1.Args[0] { 30700 break 30701 } 30702 if mem != x1.Args[1] { 30703 break 30704 } 30705 x0 := o0.Args[1] 30706 if x0.Op != OpPPC64MOVBZload { 30707 break 30708 } 30709 i0 := x0.AuxInt 30710 if x0.Aux != s { 30711 break 30712 } 30713 _ = x0.Args[1] 30714 if p != x0.Args[0] { 30715 break 30716 } 30717 if mem != x0.Args[1] { 30718 break 30719 } 30720 s1 := o1.Args[1] 30721 if s1.Op != OpPPC64SLDconst { 30722 break 30723 } 30724 if s1.AuxInt != 16 { 30725 break 30726 } 30727 x2 := s1.Args[0] 30728 if x2.Op != OpPPC64MOVBZload { 30729 break 30730 } 30731 i2 := x2.AuxInt 30732 if x2.Aux != s { 30733 break 30734 } 30735 _ = x2.Args[1] 30736 if p != x2.Args[0] { 30737 break 30738 } 30739 if mem != x2.Args[1] { 30740 break 30741 } 30742 s3 := o3.Args[1] 30743 if s3.Op != OpPPC64SLDconst { 30744 break 30745 } 30746 if s3.AuxInt != 32 { 30747 break 30748 } 30749 x4 := s3.Args[0] 30750 if x4.Op != OpPPC64MOVBZload { 30751 break 30752 } 30753 i4 := x4.AuxInt 30754 if x4.Aux != s { 30755 break 30756 } 30757 _ = x4.Args[1] 30758 if p != x4.Args[0] { 30759 break 30760 } 30761 if mem != x4.Args[1] { 30762 break 30763 } 30764 s4 := o4.Args[1] 30765 if s4.Op != OpPPC64SLDconst { 30766 break 30767 } 30768 if s4.AuxInt != 40 { 30769 break 30770 } 30771 x5 := s4.Args[0] 30772 if x5.Op != OpPPC64MOVBZload { 30773 break 30774 } 30775 i5 := x5.AuxInt 30776 if x5.Aux != s { 30777 break 30778 } 30779 _ = x5.Args[1] 30780 if p != x5.Args[0] { 30781 break 30782 } 30783 if mem != x5.Args[1] { 30784 break 30785 } 30786 s6 := v.Args[1] 30787 if s6.Op != OpPPC64SLDconst { 30788 break 30789 } 30790 if s6.AuxInt != 56 { 30791 break 30792 } 30793 x7 := s6.Args[0] 30794 if x7.Op != OpPPC64MOVBZload { 30795 break 30796 } 30797 i7 := x7.AuxInt 30798 if x7.Aux != s { 30799 break 30800 } 30801 _ = x7.Args[1] 30802 if p != x7.Args[0] { 30803 break 30804 } 30805 if mem != x7.Args[1] { 30806 break 30807 } 30808 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)) { 30809 break 30810 } 30811 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 30812 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 30813 v.reset(OpCopy) 30814 v.AddArg(v0) 30815 v0.AuxInt = i0 30816 v0.Aux = s 30817 v0.AddArg(p) 30818 v0.AddArg(mem) 30819 return true 30820 } 30821 // 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])) 30822 // 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) 30823 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 30824 for { 30825 t := v.Type 30826 _ = v.Args[1] 30827 o5 := v.Args[0] 30828 if o5.Op != OpPPC64OR { 30829 break 30830 } 30831 if o5.Type != t { 30832 break 30833 } 30834 _ = o5.Args[1] 30835 s5 := o5.Args[0] 30836 if s5.Op != OpPPC64SLDconst { 30837 break 30838 } 30839 if s5.AuxInt != 48 { 30840 break 30841 } 30842 x6 := s5.Args[0] 30843 if x6.Op != OpPPC64MOVBZload { 30844 break 30845 } 30846 i6 := x6.AuxInt 30847 s := x6.Aux 30848 _ = x6.Args[1] 30849 p := x6.Args[0] 30850 mem := x6.Args[1] 30851 o4 := o5.Args[1] 30852 if o4.Op != OpPPC64OR { 30853 break 30854 } 30855 if o4.Type != t { 30856 break 30857 } 30858 _ = o4.Args[1] 30859 o3 := o4.Args[0] 30860 if o3.Op != OpPPC64OR { 30861 break 30862 } 30863 if o3.Type != t { 30864 break 30865 } 30866 _ = o3.Args[1] 30867 o2 := o3.Args[0] 30868 if o2.Op != OpPPC64OR { 30869 break 30870 } 30871 if o2.Type != t { 30872 break 30873 } 30874 _ = o2.Args[1] 30875 s2 := o2.Args[0] 30876 if s2.Op != OpPPC64SLDconst { 30877 break 30878 } 30879 if s2.AuxInt != 24 { 30880 break 30881 } 30882 x3 := s2.Args[0] 30883 if x3.Op != OpPPC64MOVBZload { 30884 break 30885 } 30886 i3 := x3.AuxInt 30887 if x3.Aux != s { 30888 break 30889 } 30890 _ = x3.Args[1] 30891 if p != x3.Args[0] { 30892 break 30893 } 30894 if mem != x3.Args[1] { 30895 break 30896 } 30897 o1 := o2.Args[1] 30898 if o1.Op != OpPPC64OR { 30899 break 30900 } 30901 if o1.Type != t { 30902 break 30903 } 30904 _ = o1.Args[1] 30905 o0 := o1.Args[0] 30906 if o0.Op != OpPPC64OR { 30907 break 30908 } 30909 if o0.Type != t { 30910 break 30911 } 30912 _ = o0.Args[1] 30913 x0 := o0.Args[0] 30914 if x0.Op != OpPPC64MOVBZload { 30915 break 30916 } 30917 i0 := x0.AuxInt 30918 if x0.Aux != s { 30919 break 30920 } 30921 _ = x0.Args[1] 30922 if p != x0.Args[0] { 30923 break 30924 } 30925 if mem != x0.Args[1] { 30926 break 30927 } 30928 s0 := o0.Args[1] 30929 if s0.Op != OpPPC64SLDconst { 30930 break 30931 } 30932 if s0.AuxInt != 8 { 30933 break 30934 } 30935 x1 := s0.Args[0] 30936 if x1.Op != OpPPC64MOVBZload { 30937 break 30938 } 30939 i1 := x1.AuxInt 30940 if x1.Aux != s { 30941 break 30942 } 30943 _ = x1.Args[1] 30944 if p != x1.Args[0] { 30945 break 30946 } 30947 if mem != x1.Args[1] { 30948 break 30949 } 30950 s1 := o1.Args[1] 30951 if s1.Op != OpPPC64SLDconst { 30952 break 30953 } 30954 if s1.AuxInt != 16 { 30955 break 30956 } 30957 x2 := s1.Args[0] 30958 if x2.Op != OpPPC64MOVBZload { 30959 break 30960 } 30961 i2 := x2.AuxInt 30962 if x2.Aux != s { 30963 break 30964 } 30965 _ = x2.Args[1] 30966 if p != x2.Args[0] { 30967 break 30968 } 30969 if mem != x2.Args[1] { 30970 break 30971 } 30972 s3 := o3.Args[1] 30973 if s3.Op != OpPPC64SLDconst { 30974 break 30975 } 30976 if s3.AuxInt != 32 { 30977 break 30978 } 30979 x4 := s3.Args[0] 30980 if x4.Op != OpPPC64MOVBZload { 30981 break 30982 } 30983 i4 := x4.AuxInt 30984 if x4.Aux != s { 30985 break 30986 } 30987 _ = x4.Args[1] 30988 if p != x4.Args[0] { 30989 break 30990 } 30991 if mem != x4.Args[1] { 30992 break 30993 } 30994 s4 := o4.Args[1] 30995 if s4.Op != OpPPC64SLDconst { 30996 break 30997 } 30998 if s4.AuxInt != 40 { 30999 break 31000 } 31001 x5 := s4.Args[0] 31002 if x5.Op != OpPPC64MOVBZload { 31003 break 31004 } 31005 i5 := x5.AuxInt 31006 if x5.Aux != s { 31007 break 31008 } 31009 _ = x5.Args[1] 31010 if p != x5.Args[0] { 31011 break 31012 } 31013 if mem != x5.Args[1] { 31014 break 31015 } 31016 s6 := v.Args[1] 31017 if s6.Op != OpPPC64SLDconst { 31018 break 31019 } 31020 if s6.AuxInt != 56 { 31021 break 31022 } 31023 x7 := s6.Args[0] 31024 if x7.Op != OpPPC64MOVBZload { 31025 break 31026 } 31027 i7 := x7.AuxInt 31028 if x7.Aux != s { 31029 break 31030 } 31031 _ = x7.Args[1] 31032 if p != x7.Args[0] { 31033 break 31034 } 31035 if mem != x7.Args[1] { 31036 break 31037 } 31038 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)) { 31039 break 31040 } 31041 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 31042 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 31043 v.reset(OpCopy) 31044 v.AddArg(v0) 31045 v0.AuxInt = i0 31046 v0.Aux = s 31047 v0.AddArg(p) 31048 v0.AddArg(mem) 31049 return true 31050 } 31051 return false 31052 } 31053 func rewriteValuePPC64_OpPPC64OR_110(v *Value) bool { 31054 b := v.Block 31055 _ = b 31056 config := b.Func.Config 31057 _ = config 31058 // 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])) 31059 // 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) 31060 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 31061 for { 31062 t := v.Type 31063 _ = v.Args[1] 31064 o5 := v.Args[0] 31065 if o5.Op != OpPPC64OR { 31066 break 31067 } 31068 if o5.Type != t { 31069 break 31070 } 31071 _ = o5.Args[1] 31072 s5 := o5.Args[0] 31073 if s5.Op != OpPPC64SLDconst { 31074 break 31075 } 31076 if s5.AuxInt != 48 { 31077 break 31078 } 31079 x6 := s5.Args[0] 31080 if x6.Op != OpPPC64MOVBZload { 31081 break 31082 } 31083 i6 := x6.AuxInt 31084 s := x6.Aux 31085 _ = x6.Args[1] 31086 p := x6.Args[0] 31087 mem := x6.Args[1] 31088 o4 := o5.Args[1] 31089 if o4.Op != OpPPC64OR { 31090 break 31091 } 31092 if o4.Type != t { 31093 break 31094 } 31095 _ = o4.Args[1] 31096 o3 := o4.Args[0] 31097 if o3.Op != OpPPC64OR { 31098 break 31099 } 31100 if o3.Type != t { 31101 break 31102 } 31103 _ = o3.Args[1] 31104 o2 := o3.Args[0] 31105 if o2.Op != OpPPC64OR { 31106 break 31107 } 31108 if o2.Type != t { 31109 break 31110 } 31111 _ = o2.Args[1] 31112 o1 := o2.Args[0] 31113 if o1.Op != OpPPC64OR { 31114 break 31115 } 31116 if o1.Type != t { 31117 break 31118 } 31119 _ = o1.Args[1] 31120 s1 := o1.Args[0] 31121 if s1.Op != OpPPC64SLDconst { 31122 break 31123 } 31124 if s1.AuxInt != 16 { 31125 break 31126 } 31127 x2 := s1.Args[0] 31128 if x2.Op != OpPPC64MOVBZload { 31129 break 31130 } 31131 i2 := x2.AuxInt 31132 if x2.Aux != s { 31133 break 31134 } 31135 _ = x2.Args[1] 31136 if p != x2.Args[0] { 31137 break 31138 } 31139 if mem != x2.Args[1] { 31140 break 31141 } 31142 o0 := o1.Args[1] 31143 if o0.Op != OpPPC64OR { 31144 break 31145 } 31146 if o0.Type != t { 31147 break 31148 } 31149 _ = o0.Args[1] 31150 s0 := o0.Args[0] 31151 if s0.Op != OpPPC64SLDconst { 31152 break 31153 } 31154 if s0.AuxInt != 8 { 31155 break 31156 } 31157 x1 := s0.Args[0] 31158 if x1.Op != OpPPC64MOVBZload { 31159 break 31160 } 31161 i1 := x1.AuxInt 31162 if x1.Aux != s { 31163 break 31164 } 31165 _ = x1.Args[1] 31166 if p != x1.Args[0] { 31167 break 31168 } 31169 if mem != x1.Args[1] { 31170 break 31171 } 31172 x0 := o0.Args[1] 31173 if x0.Op != OpPPC64MOVBZload { 31174 break 31175 } 31176 i0 := x0.AuxInt 31177 if x0.Aux != s { 31178 break 31179 } 31180 _ = x0.Args[1] 31181 if p != x0.Args[0] { 31182 break 31183 } 31184 if mem != x0.Args[1] { 31185 break 31186 } 31187 s2 := o2.Args[1] 31188 if s2.Op != OpPPC64SLDconst { 31189 break 31190 } 31191 if s2.AuxInt != 24 { 31192 break 31193 } 31194 x3 := s2.Args[0] 31195 if x3.Op != OpPPC64MOVBZload { 31196 break 31197 } 31198 i3 := x3.AuxInt 31199 if x3.Aux != s { 31200 break 31201 } 31202 _ = x3.Args[1] 31203 if p != x3.Args[0] { 31204 break 31205 } 31206 if mem != x3.Args[1] { 31207 break 31208 } 31209 s3 := o3.Args[1] 31210 if s3.Op != OpPPC64SLDconst { 31211 break 31212 } 31213 if s3.AuxInt != 32 { 31214 break 31215 } 31216 x4 := s3.Args[0] 31217 if x4.Op != OpPPC64MOVBZload { 31218 break 31219 } 31220 i4 := x4.AuxInt 31221 if x4.Aux != s { 31222 break 31223 } 31224 _ = x4.Args[1] 31225 if p != x4.Args[0] { 31226 break 31227 } 31228 if mem != x4.Args[1] { 31229 break 31230 } 31231 s4 := o4.Args[1] 31232 if s4.Op != OpPPC64SLDconst { 31233 break 31234 } 31235 if s4.AuxInt != 40 { 31236 break 31237 } 31238 x5 := s4.Args[0] 31239 if x5.Op != OpPPC64MOVBZload { 31240 break 31241 } 31242 i5 := x5.AuxInt 31243 if x5.Aux != s { 31244 break 31245 } 31246 _ = x5.Args[1] 31247 if p != x5.Args[0] { 31248 break 31249 } 31250 if mem != x5.Args[1] { 31251 break 31252 } 31253 s6 := v.Args[1] 31254 if s6.Op != OpPPC64SLDconst { 31255 break 31256 } 31257 if s6.AuxInt != 56 { 31258 break 31259 } 31260 x7 := s6.Args[0] 31261 if x7.Op != OpPPC64MOVBZload { 31262 break 31263 } 31264 i7 := x7.AuxInt 31265 if x7.Aux != s { 31266 break 31267 } 31268 _ = x7.Args[1] 31269 if p != x7.Args[0] { 31270 break 31271 } 31272 if mem != x7.Args[1] { 31273 break 31274 } 31275 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)) { 31276 break 31277 } 31278 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 31279 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 31280 v.reset(OpCopy) 31281 v.AddArg(v0) 31282 v0.AuxInt = i0 31283 v0.Aux = s 31284 v0.AddArg(p) 31285 v0.AddArg(mem) 31286 return true 31287 } 31288 // 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])) 31289 // 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) 31290 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 31291 for { 31292 t := v.Type 31293 _ = v.Args[1] 31294 o5 := v.Args[0] 31295 if o5.Op != OpPPC64OR { 31296 break 31297 } 31298 if o5.Type != t { 31299 break 31300 } 31301 _ = o5.Args[1] 31302 s5 := o5.Args[0] 31303 if s5.Op != OpPPC64SLDconst { 31304 break 31305 } 31306 if s5.AuxInt != 48 { 31307 break 31308 } 31309 x6 := s5.Args[0] 31310 if x6.Op != OpPPC64MOVBZload { 31311 break 31312 } 31313 i6 := x6.AuxInt 31314 s := x6.Aux 31315 _ = x6.Args[1] 31316 p := x6.Args[0] 31317 mem := x6.Args[1] 31318 o4 := o5.Args[1] 31319 if o4.Op != OpPPC64OR { 31320 break 31321 } 31322 if o4.Type != t { 31323 break 31324 } 31325 _ = o4.Args[1] 31326 o3 := o4.Args[0] 31327 if o3.Op != OpPPC64OR { 31328 break 31329 } 31330 if o3.Type != t { 31331 break 31332 } 31333 _ = o3.Args[1] 31334 o2 := o3.Args[0] 31335 if o2.Op != OpPPC64OR { 31336 break 31337 } 31338 if o2.Type != t { 31339 break 31340 } 31341 _ = o2.Args[1] 31342 o1 := o2.Args[0] 31343 if o1.Op != OpPPC64OR { 31344 break 31345 } 31346 if o1.Type != t { 31347 break 31348 } 31349 _ = o1.Args[1] 31350 s1 := o1.Args[0] 31351 if s1.Op != OpPPC64SLDconst { 31352 break 31353 } 31354 if s1.AuxInt != 16 { 31355 break 31356 } 31357 x2 := s1.Args[0] 31358 if x2.Op != OpPPC64MOVBZload { 31359 break 31360 } 31361 i2 := x2.AuxInt 31362 if x2.Aux != s { 31363 break 31364 } 31365 _ = x2.Args[1] 31366 if p != x2.Args[0] { 31367 break 31368 } 31369 if mem != x2.Args[1] { 31370 break 31371 } 31372 o0 := o1.Args[1] 31373 if o0.Op != OpPPC64OR { 31374 break 31375 } 31376 if o0.Type != t { 31377 break 31378 } 31379 _ = o0.Args[1] 31380 x0 := o0.Args[0] 31381 if x0.Op != OpPPC64MOVBZload { 31382 break 31383 } 31384 i0 := x0.AuxInt 31385 if x0.Aux != s { 31386 break 31387 } 31388 _ = x0.Args[1] 31389 if p != x0.Args[0] { 31390 break 31391 } 31392 if mem != x0.Args[1] { 31393 break 31394 } 31395 s0 := o0.Args[1] 31396 if s0.Op != OpPPC64SLDconst { 31397 break 31398 } 31399 if s0.AuxInt != 8 { 31400 break 31401 } 31402 x1 := s0.Args[0] 31403 if x1.Op != OpPPC64MOVBZload { 31404 break 31405 } 31406 i1 := x1.AuxInt 31407 if x1.Aux != s { 31408 break 31409 } 31410 _ = x1.Args[1] 31411 if p != x1.Args[0] { 31412 break 31413 } 31414 if mem != x1.Args[1] { 31415 break 31416 } 31417 s2 := o2.Args[1] 31418 if s2.Op != OpPPC64SLDconst { 31419 break 31420 } 31421 if s2.AuxInt != 24 { 31422 break 31423 } 31424 x3 := s2.Args[0] 31425 if x3.Op != OpPPC64MOVBZload { 31426 break 31427 } 31428 i3 := x3.AuxInt 31429 if x3.Aux != s { 31430 break 31431 } 31432 _ = x3.Args[1] 31433 if p != x3.Args[0] { 31434 break 31435 } 31436 if mem != x3.Args[1] { 31437 break 31438 } 31439 s3 := o3.Args[1] 31440 if s3.Op != OpPPC64SLDconst { 31441 break 31442 } 31443 if s3.AuxInt != 32 { 31444 break 31445 } 31446 x4 := s3.Args[0] 31447 if x4.Op != OpPPC64MOVBZload { 31448 break 31449 } 31450 i4 := x4.AuxInt 31451 if x4.Aux != s { 31452 break 31453 } 31454 _ = x4.Args[1] 31455 if p != x4.Args[0] { 31456 break 31457 } 31458 if mem != x4.Args[1] { 31459 break 31460 } 31461 s4 := o4.Args[1] 31462 if s4.Op != OpPPC64SLDconst { 31463 break 31464 } 31465 if s4.AuxInt != 40 { 31466 break 31467 } 31468 x5 := s4.Args[0] 31469 if x5.Op != OpPPC64MOVBZload { 31470 break 31471 } 31472 i5 := x5.AuxInt 31473 if x5.Aux != s { 31474 break 31475 } 31476 _ = x5.Args[1] 31477 if p != x5.Args[0] { 31478 break 31479 } 31480 if mem != x5.Args[1] { 31481 break 31482 } 31483 s6 := v.Args[1] 31484 if s6.Op != OpPPC64SLDconst { 31485 break 31486 } 31487 if s6.AuxInt != 56 { 31488 break 31489 } 31490 x7 := s6.Args[0] 31491 if x7.Op != OpPPC64MOVBZload { 31492 break 31493 } 31494 i7 := x7.AuxInt 31495 if x7.Aux != s { 31496 break 31497 } 31498 _ = x7.Args[1] 31499 if p != x7.Args[0] { 31500 break 31501 } 31502 if mem != x7.Args[1] { 31503 break 31504 } 31505 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)) { 31506 break 31507 } 31508 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 31509 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 31510 v.reset(OpCopy) 31511 v.AddArg(v0) 31512 v0.AuxInt = i0 31513 v0.Aux = s 31514 v0.AddArg(p) 31515 v0.AddArg(mem) 31516 return true 31517 } 31518 // 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])) 31519 // 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) 31520 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 31521 for { 31522 t := v.Type 31523 _ = v.Args[1] 31524 o5 := v.Args[0] 31525 if o5.Op != OpPPC64OR { 31526 break 31527 } 31528 if o5.Type != t { 31529 break 31530 } 31531 _ = o5.Args[1] 31532 s5 := o5.Args[0] 31533 if s5.Op != OpPPC64SLDconst { 31534 break 31535 } 31536 if s5.AuxInt != 48 { 31537 break 31538 } 31539 x6 := s5.Args[0] 31540 if x6.Op != OpPPC64MOVBZload { 31541 break 31542 } 31543 i6 := x6.AuxInt 31544 s := x6.Aux 31545 _ = x6.Args[1] 31546 p := x6.Args[0] 31547 mem := x6.Args[1] 31548 o4 := o5.Args[1] 31549 if o4.Op != OpPPC64OR { 31550 break 31551 } 31552 if o4.Type != t { 31553 break 31554 } 31555 _ = o4.Args[1] 31556 o3 := o4.Args[0] 31557 if o3.Op != OpPPC64OR { 31558 break 31559 } 31560 if o3.Type != t { 31561 break 31562 } 31563 _ = o3.Args[1] 31564 o2 := o3.Args[0] 31565 if o2.Op != OpPPC64OR { 31566 break 31567 } 31568 if o2.Type != t { 31569 break 31570 } 31571 _ = o2.Args[1] 31572 o1 := o2.Args[0] 31573 if o1.Op != OpPPC64OR { 31574 break 31575 } 31576 if o1.Type != t { 31577 break 31578 } 31579 _ = o1.Args[1] 31580 o0 := o1.Args[0] 31581 if o0.Op != OpPPC64OR { 31582 break 31583 } 31584 if o0.Type != t { 31585 break 31586 } 31587 _ = o0.Args[1] 31588 s0 := o0.Args[0] 31589 if s0.Op != OpPPC64SLDconst { 31590 break 31591 } 31592 if s0.AuxInt != 8 { 31593 break 31594 } 31595 x1 := s0.Args[0] 31596 if x1.Op != OpPPC64MOVBZload { 31597 break 31598 } 31599 i1 := x1.AuxInt 31600 if x1.Aux != s { 31601 break 31602 } 31603 _ = x1.Args[1] 31604 if p != x1.Args[0] { 31605 break 31606 } 31607 if mem != x1.Args[1] { 31608 break 31609 } 31610 x0 := o0.Args[1] 31611 if x0.Op != OpPPC64MOVBZload { 31612 break 31613 } 31614 i0 := x0.AuxInt 31615 if x0.Aux != s { 31616 break 31617 } 31618 _ = x0.Args[1] 31619 if p != x0.Args[0] { 31620 break 31621 } 31622 if mem != x0.Args[1] { 31623 break 31624 } 31625 s1 := o1.Args[1] 31626 if s1.Op != OpPPC64SLDconst { 31627 break 31628 } 31629 if s1.AuxInt != 16 { 31630 break 31631 } 31632 x2 := s1.Args[0] 31633 if x2.Op != OpPPC64MOVBZload { 31634 break 31635 } 31636 i2 := x2.AuxInt 31637 if x2.Aux != s { 31638 break 31639 } 31640 _ = x2.Args[1] 31641 if p != x2.Args[0] { 31642 break 31643 } 31644 if mem != x2.Args[1] { 31645 break 31646 } 31647 s2 := o2.Args[1] 31648 if s2.Op != OpPPC64SLDconst { 31649 break 31650 } 31651 if s2.AuxInt != 24 { 31652 break 31653 } 31654 x3 := s2.Args[0] 31655 if x3.Op != OpPPC64MOVBZload { 31656 break 31657 } 31658 i3 := x3.AuxInt 31659 if x3.Aux != s { 31660 break 31661 } 31662 _ = x3.Args[1] 31663 if p != x3.Args[0] { 31664 break 31665 } 31666 if mem != x3.Args[1] { 31667 break 31668 } 31669 s3 := o3.Args[1] 31670 if s3.Op != OpPPC64SLDconst { 31671 break 31672 } 31673 if s3.AuxInt != 32 { 31674 break 31675 } 31676 x4 := s3.Args[0] 31677 if x4.Op != OpPPC64MOVBZload { 31678 break 31679 } 31680 i4 := x4.AuxInt 31681 if x4.Aux != s { 31682 break 31683 } 31684 _ = x4.Args[1] 31685 if p != x4.Args[0] { 31686 break 31687 } 31688 if mem != x4.Args[1] { 31689 break 31690 } 31691 s4 := o4.Args[1] 31692 if s4.Op != OpPPC64SLDconst { 31693 break 31694 } 31695 if s4.AuxInt != 40 { 31696 break 31697 } 31698 x5 := s4.Args[0] 31699 if x5.Op != OpPPC64MOVBZload { 31700 break 31701 } 31702 i5 := x5.AuxInt 31703 if x5.Aux != s { 31704 break 31705 } 31706 _ = x5.Args[1] 31707 if p != x5.Args[0] { 31708 break 31709 } 31710 if mem != x5.Args[1] { 31711 break 31712 } 31713 s6 := v.Args[1] 31714 if s6.Op != OpPPC64SLDconst { 31715 break 31716 } 31717 if s6.AuxInt != 56 { 31718 break 31719 } 31720 x7 := s6.Args[0] 31721 if x7.Op != OpPPC64MOVBZload { 31722 break 31723 } 31724 i7 := x7.AuxInt 31725 if x7.Aux != s { 31726 break 31727 } 31728 _ = x7.Args[1] 31729 if p != x7.Args[0] { 31730 break 31731 } 31732 if mem != x7.Args[1] { 31733 break 31734 } 31735 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)) { 31736 break 31737 } 31738 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 31739 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 31740 v.reset(OpCopy) 31741 v.AddArg(v0) 31742 v0.AuxInt = i0 31743 v0.Aux = s 31744 v0.AddArg(p) 31745 v0.AddArg(mem) 31746 return true 31747 } 31748 // 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])) 31749 // 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) 31750 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 31751 for { 31752 t := v.Type 31753 _ = v.Args[1] 31754 o5 := v.Args[0] 31755 if o5.Op != OpPPC64OR { 31756 break 31757 } 31758 if o5.Type != t { 31759 break 31760 } 31761 _ = o5.Args[1] 31762 s5 := o5.Args[0] 31763 if s5.Op != OpPPC64SLDconst { 31764 break 31765 } 31766 if s5.AuxInt != 48 { 31767 break 31768 } 31769 x6 := s5.Args[0] 31770 if x6.Op != OpPPC64MOVBZload { 31771 break 31772 } 31773 i6 := x6.AuxInt 31774 s := x6.Aux 31775 _ = x6.Args[1] 31776 p := x6.Args[0] 31777 mem := x6.Args[1] 31778 o4 := o5.Args[1] 31779 if o4.Op != OpPPC64OR { 31780 break 31781 } 31782 if o4.Type != t { 31783 break 31784 } 31785 _ = o4.Args[1] 31786 o3 := o4.Args[0] 31787 if o3.Op != OpPPC64OR { 31788 break 31789 } 31790 if o3.Type != t { 31791 break 31792 } 31793 _ = o3.Args[1] 31794 o2 := o3.Args[0] 31795 if o2.Op != OpPPC64OR { 31796 break 31797 } 31798 if o2.Type != t { 31799 break 31800 } 31801 _ = o2.Args[1] 31802 o1 := o2.Args[0] 31803 if o1.Op != OpPPC64OR { 31804 break 31805 } 31806 if o1.Type != t { 31807 break 31808 } 31809 _ = o1.Args[1] 31810 o0 := o1.Args[0] 31811 if o0.Op != OpPPC64OR { 31812 break 31813 } 31814 if o0.Type != t { 31815 break 31816 } 31817 _ = o0.Args[1] 31818 x0 := o0.Args[0] 31819 if x0.Op != OpPPC64MOVBZload { 31820 break 31821 } 31822 i0 := x0.AuxInt 31823 if x0.Aux != s { 31824 break 31825 } 31826 _ = x0.Args[1] 31827 if p != x0.Args[0] { 31828 break 31829 } 31830 if mem != x0.Args[1] { 31831 break 31832 } 31833 s0 := o0.Args[1] 31834 if s0.Op != OpPPC64SLDconst { 31835 break 31836 } 31837 if s0.AuxInt != 8 { 31838 break 31839 } 31840 x1 := s0.Args[0] 31841 if x1.Op != OpPPC64MOVBZload { 31842 break 31843 } 31844 i1 := x1.AuxInt 31845 if x1.Aux != s { 31846 break 31847 } 31848 _ = x1.Args[1] 31849 if p != x1.Args[0] { 31850 break 31851 } 31852 if mem != x1.Args[1] { 31853 break 31854 } 31855 s1 := o1.Args[1] 31856 if s1.Op != OpPPC64SLDconst { 31857 break 31858 } 31859 if s1.AuxInt != 16 { 31860 break 31861 } 31862 x2 := s1.Args[0] 31863 if x2.Op != OpPPC64MOVBZload { 31864 break 31865 } 31866 i2 := x2.AuxInt 31867 if x2.Aux != s { 31868 break 31869 } 31870 _ = x2.Args[1] 31871 if p != x2.Args[0] { 31872 break 31873 } 31874 if mem != x2.Args[1] { 31875 break 31876 } 31877 s2 := o2.Args[1] 31878 if s2.Op != OpPPC64SLDconst { 31879 break 31880 } 31881 if s2.AuxInt != 24 { 31882 break 31883 } 31884 x3 := s2.Args[0] 31885 if x3.Op != OpPPC64MOVBZload { 31886 break 31887 } 31888 i3 := x3.AuxInt 31889 if x3.Aux != s { 31890 break 31891 } 31892 _ = x3.Args[1] 31893 if p != x3.Args[0] { 31894 break 31895 } 31896 if mem != x3.Args[1] { 31897 break 31898 } 31899 s3 := o3.Args[1] 31900 if s3.Op != OpPPC64SLDconst { 31901 break 31902 } 31903 if s3.AuxInt != 32 { 31904 break 31905 } 31906 x4 := s3.Args[0] 31907 if x4.Op != OpPPC64MOVBZload { 31908 break 31909 } 31910 i4 := x4.AuxInt 31911 if x4.Aux != s { 31912 break 31913 } 31914 _ = x4.Args[1] 31915 if p != x4.Args[0] { 31916 break 31917 } 31918 if mem != x4.Args[1] { 31919 break 31920 } 31921 s4 := o4.Args[1] 31922 if s4.Op != OpPPC64SLDconst { 31923 break 31924 } 31925 if s4.AuxInt != 40 { 31926 break 31927 } 31928 x5 := s4.Args[0] 31929 if x5.Op != OpPPC64MOVBZload { 31930 break 31931 } 31932 i5 := x5.AuxInt 31933 if x5.Aux != s { 31934 break 31935 } 31936 _ = x5.Args[1] 31937 if p != x5.Args[0] { 31938 break 31939 } 31940 if mem != x5.Args[1] { 31941 break 31942 } 31943 s6 := v.Args[1] 31944 if s6.Op != OpPPC64SLDconst { 31945 break 31946 } 31947 if s6.AuxInt != 56 { 31948 break 31949 } 31950 x7 := s6.Args[0] 31951 if x7.Op != OpPPC64MOVBZload { 31952 break 31953 } 31954 i7 := x7.AuxInt 31955 if x7.Aux != s { 31956 break 31957 } 31958 _ = x7.Args[1] 31959 if p != x7.Args[0] { 31960 break 31961 } 31962 if mem != x7.Args[1] { 31963 break 31964 } 31965 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)) { 31966 break 31967 } 31968 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 31969 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 31970 v.reset(OpCopy) 31971 v.AddArg(v0) 31972 v0.AuxInt = i0 31973 v0.Aux = s 31974 v0.AddArg(p) 31975 v0.AddArg(mem) 31976 return true 31977 } 31978 // 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])) 31979 // 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) 31980 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 31981 for { 31982 t := v.Type 31983 _ = v.Args[1] 31984 o5 := v.Args[0] 31985 if o5.Op != OpPPC64OR { 31986 break 31987 } 31988 if o5.Type != t { 31989 break 31990 } 31991 _ = o5.Args[1] 31992 o4 := o5.Args[0] 31993 if o4.Op != OpPPC64OR { 31994 break 31995 } 31996 if o4.Type != t { 31997 break 31998 } 31999 _ = o4.Args[1] 32000 s4 := o4.Args[0] 32001 if s4.Op != OpPPC64SLDconst { 32002 break 32003 } 32004 if s4.AuxInt != 40 { 32005 break 32006 } 32007 x5 := s4.Args[0] 32008 if x5.Op != OpPPC64MOVBZload { 32009 break 32010 } 32011 i5 := x5.AuxInt 32012 s := x5.Aux 32013 _ = x5.Args[1] 32014 p := x5.Args[0] 32015 mem := x5.Args[1] 32016 o3 := o4.Args[1] 32017 if o3.Op != OpPPC64OR { 32018 break 32019 } 32020 if o3.Type != t { 32021 break 32022 } 32023 _ = o3.Args[1] 32024 s3 := o3.Args[0] 32025 if s3.Op != OpPPC64SLDconst { 32026 break 32027 } 32028 if s3.AuxInt != 32 { 32029 break 32030 } 32031 x4 := s3.Args[0] 32032 if x4.Op != OpPPC64MOVBZload { 32033 break 32034 } 32035 i4 := x4.AuxInt 32036 if x4.Aux != s { 32037 break 32038 } 32039 _ = x4.Args[1] 32040 if p != x4.Args[0] { 32041 break 32042 } 32043 if mem != x4.Args[1] { 32044 break 32045 } 32046 o2 := o3.Args[1] 32047 if o2.Op != OpPPC64OR { 32048 break 32049 } 32050 if o2.Type != t { 32051 break 32052 } 32053 _ = o2.Args[1] 32054 s2 := o2.Args[0] 32055 if s2.Op != OpPPC64SLDconst { 32056 break 32057 } 32058 if s2.AuxInt != 24 { 32059 break 32060 } 32061 x3 := s2.Args[0] 32062 if x3.Op != OpPPC64MOVBZload { 32063 break 32064 } 32065 i3 := x3.AuxInt 32066 if x3.Aux != s { 32067 break 32068 } 32069 _ = x3.Args[1] 32070 if p != x3.Args[0] { 32071 break 32072 } 32073 if mem != x3.Args[1] { 32074 break 32075 } 32076 o1 := o2.Args[1] 32077 if o1.Op != OpPPC64OR { 32078 break 32079 } 32080 if o1.Type != t { 32081 break 32082 } 32083 _ = o1.Args[1] 32084 s1 := o1.Args[0] 32085 if s1.Op != OpPPC64SLDconst { 32086 break 32087 } 32088 if s1.AuxInt != 16 { 32089 break 32090 } 32091 x2 := s1.Args[0] 32092 if x2.Op != OpPPC64MOVBZload { 32093 break 32094 } 32095 i2 := x2.AuxInt 32096 if x2.Aux != s { 32097 break 32098 } 32099 _ = x2.Args[1] 32100 if p != x2.Args[0] { 32101 break 32102 } 32103 if mem != x2.Args[1] { 32104 break 32105 } 32106 o0 := o1.Args[1] 32107 if o0.Op != OpPPC64OR { 32108 break 32109 } 32110 if o0.Type != t { 32111 break 32112 } 32113 _ = o0.Args[1] 32114 s0 := o0.Args[0] 32115 if s0.Op != OpPPC64SLDconst { 32116 break 32117 } 32118 if s0.AuxInt != 8 { 32119 break 32120 } 32121 x1 := s0.Args[0] 32122 if x1.Op != OpPPC64MOVBZload { 32123 break 32124 } 32125 i1 := x1.AuxInt 32126 if x1.Aux != s { 32127 break 32128 } 32129 _ = x1.Args[1] 32130 if p != x1.Args[0] { 32131 break 32132 } 32133 if mem != x1.Args[1] { 32134 break 32135 } 32136 x0 := o0.Args[1] 32137 if x0.Op != OpPPC64MOVBZload { 32138 break 32139 } 32140 i0 := x0.AuxInt 32141 if x0.Aux != s { 32142 break 32143 } 32144 _ = x0.Args[1] 32145 if p != x0.Args[0] { 32146 break 32147 } 32148 if mem != x0.Args[1] { 32149 break 32150 } 32151 s5 := o5.Args[1] 32152 if s5.Op != OpPPC64SLDconst { 32153 break 32154 } 32155 if s5.AuxInt != 48 { 32156 break 32157 } 32158 x6 := s5.Args[0] 32159 if x6.Op != OpPPC64MOVBZload { 32160 break 32161 } 32162 i6 := x6.AuxInt 32163 if x6.Aux != s { 32164 break 32165 } 32166 _ = x6.Args[1] 32167 if p != x6.Args[0] { 32168 break 32169 } 32170 if mem != x6.Args[1] { 32171 break 32172 } 32173 s6 := v.Args[1] 32174 if s6.Op != OpPPC64SLDconst { 32175 break 32176 } 32177 if s6.AuxInt != 56 { 32178 break 32179 } 32180 x7 := s6.Args[0] 32181 if x7.Op != OpPPC64MOVBZload { 32182 break 32183 } 32184 i7 := x7.AuxInt 32185 if x7.Aux != s { 32186 break 32187 } 32188 _ = x7.Args[1] 32189 if p != x7.Args[0] { 32190 break 32191 } 32192 if mem != x7.Args[1] { 32193 break 32194 } 32195 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)) { 32196 break 32197 } 32198 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 32199 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 32200 v.reset(OpCopy) 32201 v.AddArg(v0) 32202 v0.AuxInt = i0 32203 v0.Aux = s 32204 v0.AddArg(p) 32205 v0.AddArg(mem) 32206 return true 32207 } 32208 // 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])) 32209 // 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) 32210 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 32211 for { 32212 t := v.Type 32213 _ = v.Args[1] 32214 o5 := v.Args[0] 32215 if o5.Op != OpPPC64OR { 32216 break 32217 } 32218 if o5.Type != t { 32219 break 32220 } 32221 _ = o5.Args[1] 32222 o4 := o5.Args[0] 32223 if o4.Op != OpPPC64OR { 32224 break 32225 } 32226 if o4.Type != t { 32227 break 32228 } 32229 _ = o4.Args[1] 32230 s4 := o4.Args[0] 32231 if s4.Op != OpPPC64SLDconst { 32232 break 32233 } 32234 if s4.AuxInt != 40 { 32235 break 32236 } 32237 x5 := s4.Args[0] 32238 if x5.Op != OpPPC64MOVBZload { 32239 break 32240 } 32241 i5 := x5.AuxInt 32242 s := x5.Aux 32243 _ = x5.Args[1] 32244 p := x5.Args[0] 32245 mem := x5.Args[1] 32246 o3 := o4.Args[1] 32247 if o3.Op != OpPPC64OR { 32248 break 32249 } 32250 if o3.Type != t { 32251 break 32252 } 32253 _ = o3.Args[1] 32254 s3 := o3.Args[0] 32255 if s3.Op != OpPPC64SLDconst { 32256 break 32257 } 32258 if s3.AuxInt != 32 { 32259 break 32260 } 32261 x4 := s3.Args[0] 32262 if x4.Op != OpPPC64MOVBZload { 32263 break 32264 } 32265 i4 := x4.AuxInt 32266 if x4.Aux != s { 32267 break 32268 } 32269 _ = x4.Args[1] 32270 if p != x4.Args[0] { 32271 break 32272 } 32273 if mem != x4.Args[1] { 32274 break 32275 } 32276 o2 := o3.Args[1] 32277 if o2.Op != OpPPC64OR { 32278 break 32279 } 32280 if o2.Type != t { 32281 break 32282 } 32283 _ = o2.Args[1] 32284 s2 := o2.Args[0] 32285 if s2.Op != OpPPC64SLDconst { 32286 break 32287 } 32288 if s2.AuxInt != 24 { 32289 break 32290 } 32291 x3 := s2.Args[0] 32292 if x3.Op != OpPPC64MOVBZload { 32293 break 32294 } 32295 i3 := x3.AuxInt 32296 if x3.Aux != s { 32297 break 32298 } 32299 _ = x3.Args[1] 32300 if p != x3.Args[0] { 32301 break 32302 } 32303 if mem != x3.Args[1] { 32304 break 32305 } 32306 o1 := o2.Args[1] 32307 if o1.Op != OpPPC64OR { 32308 break 32309 } 32310 if o1.Type != t { 32311 break 32312 } 32313 _ = o1.Args[1] 32314 s1 := o1.Args[0] 32315 if s1.Op != OpPPC64SLDconst { 32316 break 32317 } 32318 if s1.AuxInt != 16 { 32319 break 32320 } 32321 x2 := s1.Args[0] 32322 if x2.Op != OpPPC64MOVBZload { 32323 break 32324 } 32325 i2 := x2.AuxInt 32326 if x2.Aux != s { 32327 break 32328 } 32329 _ = x2.Args[1] 32330 if p != x2.Args[0] { 32331 break 32332 } 32333 if mem != x2.Args[1] { 32334 break 32335 } 32336 o0 := o1.Args[1] 32337 if o0.Op != OpPPC64OR { 32338 break 32339 } 32340 if o0.Type != t { 32341 break 32342 } 32343 _ = o0.Args[1] 32344 x0 := o0.Args[0] 32345 if x0.Op != OpPPC64MOVBZload { 32346 break 32347 } 32348 i0 := x0.AuxInt 32349 if x0.Aux != s { 32350 break 32351 } 32352 _ = x0.Args[1] 32353 if p != x0.Args[0] { 32354 break 32355 } 32356 if mem != x0.Args[1] { 32357 break 32358 } 32359 s0 := o0.Args[1] 32360 if s0.Op != OpPPC64SLDconst { 32361 break 32362 } 32363 if s0.AuxInt != 8 { 32364 break 32365 } 32366 x1 := s0.Args[0] 32367 if x1.Op != OpPPC64MOVBZload { 32368 break 32369 } 32370 i1 := x1.AuxInt 32371 if x1.Aux != s { 32372 break 32373 } 32374 _ = x1.Args[1] 32375 if p != x1.Args[0] { 32376 break 32377 } 32378 if mem != x1.Args[1] { 32379 break 32380 } 32381 s5 := o5.Args[1] 32382 if s5.Op != OpPPC64SLDconst { 32383 break 32384 } 32385 if s5.AuxInt != 48 { 32386 break 32387 } 32388 x6 := s5.Args[0] 32389 if x6.Op != OpPPC64MOVBZload { 32390 break 32391 } 32392 i6 := x6.AuxInt 32393 if x6.Aux != s { 32394 break 32395 } 32396 _ = x6.Args[1] 32397 if p != x6.Args[0] { 32398 break 32399 } 32400 if mem != x6.Args[1] { 32401 break 32402 } 32403 s6 := v.Args[1] 32404 if s6.Op != OpPPC64SLDconst { 32405 break 32406 } 32407 if s6.AuxInt != 56 { 32408 break 32409 } 32410 x7 := s6.Args[0] 32411 if x7.Op != OpPPC64MOVBZload { 32412 break 32413 } 32414 i7 := x7.AuxInt 32415 if x7.Aux != s { 32416 break 32417 } 32418 _ = x7.Args[1] 32419 if p != x7.Args[0] { 32420 break 32421 } 32422 if mem != x7.Args[1] { 32423 break 32424 } 32425 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)) { 32426 break 32427 } 32428 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 32429 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 32430 v.reset(OpCopy) 32431 v.AddArg(v0) 32432 v0.AuxInt = i0 32433 v0.Aux = s 32434 v0.AddArg(p) 32435 v0.AddArg(mem) 32436 return true 32437 } 32438 // 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])) 32439 // 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) 32440 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 32441 for { 32442 t := v.Type 32443 _ = v.Args[1] 32444 o5 := v.Args[0] 32445 if o5.Op != OpPPC64OR { 32446 break 32447 } 32448 if o5.Type != t { 32449 break 32450 } 32451 _ = o5.Args[1] 32452 o4 := o5.Args[0] 32453 if o4.Op != OpPPC64OR { 32454 break 32455 } 32456 if o4.Type != t { 32457 break 32458 } 32459 _ = o4.Args[1] 32460 s4 := o4.Args[0] 32461 if s4.Op != OpPPC64SLDconst { 32462 break 32463 } 32464 if s4.AuxInt != 40 { 32465 break 32466 } 32467 x5 := s4.Args[0] 32468 if x5.Op != OpPPC64MOVBZload { 32469 break 32470 } 32471 i5 := x5.AuxInt 32472 s := x5.Aux 32473 _ = x5.Args[1] 32474 p := x5.Args[0] 32475 mem := x5.Args[1] 32476 o3 := o4.Args[1] 32477 if o3.Op != OpPPC64OR { 32478 break 32479 } 32480 if o3.Type != t { 32481 break 32482 } 32483 _ = o3.Args[1] 32484 s3 := o3.Args[0] 32485 if s3.Op != OpPPC64SLDconst { 32486 break 32487 } 32488 if s3.AuxInt != 32 { 32489 break 32490 } 32491 x4 := s3.Args[0] 32492 if x4.Op != OpPPC64MOVBZload { 32493 break 32494 } 32495 i4 := x4.AuxInt 32496 if x4.Aux != s { 32497 break 32498 } 32499 _ = x4.Args[1] 32500 if p != x4.Args[0] { 32501 break 32502 } 32503 if mem != x4.Args[1] { 32504 break 32505 } 32506 o2 := o3.Args[1] 32507 if o2.Op != OpPPC64OR { 32508 break 32509 } 32510 if o2.Type != t { 32511 break 32512 } 32513 _ = o2.Args[1] 32514 s2 := o2.Args[0] 32515 if s2.Op != OpPPC64SLDconst { 32516 break 32517 } 32518 if s2.AuxInt != 24 { 32519 break 32520 } 32521 x3 := s2.Args[0] 32522 if x3.Op != OpPPC64MOVBZload { 32523 break 32524 } 32525 i3 := x3.AuxInt 32526 if x3.Aux != s { 32527 break 32528 } 32529 _ = x3.Args[1] 32530 if p != x3.Args[0] { 32531 break 32532 } 32533 if mem != x3.Args[1] { 32534 break 32535 } 32536 o1 := o2.Args[1] 32537 if o1.Op != OpPPC64OR { 32538 break 32539 } 32540 if o1.Type != t { 32541 break 32542 } 32543 _ = o1.Args[1] 32544 o0 := o1.Args[0] 32545 if o0.Op != OpPPC64OR { 32546 break 32547 } 32548 if o0.Type != t { 32549 break 32550 } 32551 _ = o0.Args[1] 32552 s0 := o0.Args[0] 32553 if s0.Op != OpPPC64SLDconst { 32554 break 32555 } 32556 if s0.AuxInt != 8 { 32557 break 32558 } 32559 x1 := s0.Args[0] 32560 if x1.Op != OpPPC64MOVBZload { 32561 break 32562 } 32563 i1 := x1.AuxInt 32564 if x1.Aux != s { 32565 break 32566 } 32567 _ = x1.Args[1] 32568 if p != x1.Args[0] { 32569 break 32570 } 32571 if mem != x1.Args[1] { 32572 break 32573 } 32574 x0 := o0.Args[1] 32575 if x0.Op != OpPPC64MOVBZload { 32576 break 32577 } 32578 i0 := x0.AuxInt 32579 if x0.Aux != s { 32580 break 32581 } 32582 _ = x0.Args[1] 32583 if p != x0.Args[0] { 32584 break 32585 } 32586 if mem != x0.Args[1] { 32587 break 32588 } 32589 s1 := o1.Args[1] 32590 if s1.Op != OpPPC64SLDconst { 32591 break 32592 } 32593 if s1.AuxInt != 16 { 32594 break 32595 } 32596 x2 := s1.Args[0] 32597 if x2.Op != OpPPC64MOVBZload { 32598 break 32599 } 32600 i2 := x2.AuxInt 32601 if x2.Aux != s { 32602 break 32603 } 32604 _ = x2.Args[1] 32605 if p != x2.Args[0] { 32606 break 32607 } 32608 if mem != x2.Args[1] { 32609 break 32610 } 32611 s5 := o5.Args[1] 32612 if s5.Op != OpPPC64SLDconst { 32613 break 32614 } 32615 if s5.AuxInt != 48 { 32616 break 32617 } 32618 x6 := s5.Args[0] 32619 if x6.Op != OpPPC64MOVBZload { 32620 break 32621 } 32622 i6 := x6.AuxInt 32623 if x6.Aux != s { 32624 break 32625 } 32626 _ = x6.Args[1] 32627 if p != x6.Args[0] { 32628 break 32629 } 32630 if mem != x6.Args[1] { 32631 break 32632 } 32633 s6 := v.Args[1] 32634 if s6.Op != OpPPC64SLDconst { 32635 break 32636 } 32637 if s6.AuxInt != 56 { 32638 break 32639 } 32640 x7 := s6.Args[0] 32641 if x7.Op != OpPPC64MOVBZload { 32642 break 32643 } 32644 i7 := x7.AuxInt 32645 if x7.Aux != s { 32646 break 32647 } 32648 _ = x7.Args[1] 32649 if p != x7.Args[0] { 32650 break 32651 } 32652 if mem != x7.Args[1] { 32653 break 32654 } 32655 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)) { 32656 break 32657 } 32658 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 32659 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 32660 v.reset(OpCopy) 32661 v.AddArg(v0) 32662 v0.AuxInt = i0 32663 v0.Aux = s 32664 v0.AddArg(p) 32665 v0.AddArg(mem) 32666 return true 32667 } 32668 // 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])) 32669 // 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) 32670 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 32671 for { 32672 t := v.Type 32673 _ = v.Args[1] 32674 o5 := v.Args[0] 32675 if o5.Op != OpPPC64OR { 32676 break 32677 } 32678 if o5.Type != t { 32679 break 32680 } 32681 _ = o5.Args[1] 32682 o4 := o5.Args[0] 32683 if o4.Op != OpPPC64OR { 32684 break 32685 } 32686 if o4.Type != t { 32687 break 32688 } 32689 _ = o4.Args[1] 32690 s4 := o4.Args[0] 32691 if s4.Op != OpPPC64SLDconst { 32692 break 32693 } 32694 if s4.AuxInt != 40 { 32695 break 32696 } 32697 x5 := s4.Args[0] 32698 if x5.Op != OpPPC64MOVBZload { 32699 break 32700 } 32701 i5 := x5.AuxInt 32702 s := x5.Aux 32703 _ = x5.Args[1] 32704 p := x5.Args[0] 32705 mem := x5.Args[1] 32706 o3 := o4.Args[1] 32707 if o3.Op != OpPPC64OR { 32708 break 32709 } 32710 if o3.Type != t { 32711 break 32712 } 32713 _ = o3.Args[1] 32714 s3 := o3.Args[0] 32715 if s3.Op != OpPPC64SLDconst { 32716 break 32717 } 32718 if s3.AuxInt != 32 { 32719 break 32720 } 32721 x4 := s3.Args[0] 32722 if x4.Op != OpPPC64MOVBZload { 32723 break 32724 } 32725 i4 := x4.AuxInt 32726 if x4.Aux != s { 32727 break 32728 } 32729 _ = x4.Args[1] 32730 if p != x4.Args[0] { 32731 break 32732 } 32733 if mem != x4.Args[1] { 32734 break 32735 } 32736 o2 := o3.Args[1] 32737 if o2.Op != OpPPC64OR { 32738 break 32739 } 32740 if o2.Type != t { 32741 break 32742 } 32743 _ = o2.Args[1] 32744 s2 := o2.Args[0] 32745 if s2.Op != OpPPC64SLDconst { 32746 break 32747 } 32748 if s2.AuxInt != 24 { 32749 break 32750 } 32751 x3 := s2.Args[0] 32752 if x3.Op != OpPPC64MOVBZload { 32753 break 32754 } 32755 i3 := x3.AuxInt 32756 if x3.Aux != s { 32757 break 32758 } 32759 _ = x3.Args[1] 32760 if p != x3.Args[0] { 32761 break 32762 } 32763 if mem != x3.Args[1] { 32764 break 32765 } 32766 o1 := o2.Args[1] 32767 if o1.Op != OpPPC64OR { 32768 break 32769 } 32770 if o1.Type != t { 32771 break 32772 } 32773 _ = o1.Args[1] 32774 o0 := o1.Args[0] 32775 if o0.Op != OpPPC64OR { 32776 break 32777 } 32778 if o0.Type != t { 32779 break 32780 } 32781 _ = o0.Args[1] 32782 x0 := o0.Args[0] 32783 if x0.Op != OpPPC64MOVBZload { 32784 break 32785 } 32786 i0 := x0.AuxInt 32787 if x0.Aux != s { 32788 break 32789 } 32790 _ = x0.Args[1] 32791 if p != x0.Args[0] { 32792 break 32793 } 32794 if mem != x0.Args[1] { 32795 break 32796 } 32797 s0 := o0.Args[1] 32798 if s0.Op != OpPPC64SLDconst { 32799 break 32800 } 32801 if s0.AuxInt != 8 { 32802 break 32803 } 32804 x1 := s0.Args[0] 32805 if x1.Op != OpPPC64MOVBZload { 32806 break 32807 } 32808 i1 := x1.AuxInt 32809 if x1.Aux != s { 32810 break 32811 } 32812 _ = x1.Args[1] 32813 if p != x1.Args[0] { 32814 break 32815 } 32816 if mem != x1.Args[1] { 32817 break 32818 } 32819 s1 := o1.Args[1] 32820 if s1.Op != OpPPC64SLDconst { 32821 break 32822 } 32823 if s1.AuxInt != 16 { 32824 break 32825 } 32826 x2 := s1.Args[0] 32827 if x2.Op != OpPPC64MOVBZload { 32828 break 32829 } 32830 i2 := x2.AuxInt 32831 if x2.Aux != s { 32832 break 32833 } 32834 _ = x2.Args[1] 32835 if p != x2.Args[0] { 32836 break 32837 } 32838 if mem != x2.Args[1] { 32839 break 32840 } 32841 s5 := o5.Args[1] 32842 if s5.Op != OpPPC64SLDconst { 32843 break 32844 } 32845 if s5.AuxInt != 48 { 32846 break 32847 } 32848 x6 := s5.Args[0] 32849 if x6.Op != OpPPC64MOVBZload { 32850 break 32851 } 32852 i6 := x6.AuxInt 32853 if x6.Aux != s { 32854 break 32855 } 32856 _ = x6.Args[1] 32857 if p != x6.Args[0] { 32858 break 32859 } 32860 if mem != x6.Args[1] { 32861 break 32862 } 32863 s6 := v.Args[1] 32864 if s6.Op != OpPPC64SLDconst { 32865 break 32866 } 32867 if s6.AuxInt != 56 { 32868 break 32869 } 32870 x7 := s6.Args[0] 32871 if x7.Op != OpPPC64MOVBZload { 32872 break 32873 } 32874 i7 := x7.AuxInt 32875 if x7.Aux != s { 32876 break 32877 } 32878 _ = x7.Args[1] 32879 if p != x7.Args[0] { 32880 break 32881 } 32882 if mem != x7.Args[1] { 32883 break 32884 } 32885 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)) { 32886 break 32887 } 32888 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 32889 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 32890 v.reset(OpCopy) 32891 v.AddArg(v0) 32892 v0.AuxInt = i0 32893 v0.Aux = s 32894 v0.AddArg(p) 32895 v0.AddArg(mem) 32896 return true 32897 } 32898 // 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])) 32899 // 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) 32900 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 32901 for { 32902 t := v.Type 32903 _ = v.Args[1] 32904 o5 := v.Args[0] 32905 if o5.Op != OpPPC64OR { 32906 break 32907 } 32908 if o5.Type != t { 32909 break 32910 } 32911 _ = o5.Args[1] 32912 o4 := o5.Args[0] 32913 if o4.Op != OpPPC64OR { 32914 break 32915 } 32916 if o4.Type != t { 32917 break 32918 } 32919 _ = o4.Args[1] 32920 s4 := o4.Args[0] 32921 if s4.Op != OpPPC64SLDconst { 32922 break 32923 } 32924 if s4.AuxInt != 40 { 32925 break 32926 } 32927 x5 := s4.Args[0] 32928 if x5.Op != OpPPC64MOVBZload { 32929 break 32930 } 32931 i5 := x5.AuxInt 32932 s := x5.Aux 32933 _ = x5.Args[1] 32934 p := x5.Args[0] 32935 mem := x5.Args[1] 32936 o3 := o4.Args[1] 32937 if o3.Op != OpPPC64OR { 32938 break 32939 } 32940 if o3.Type != t { 32941 break 32942 } 32943 _ = o3.Args[1] 32944 s3 := o3.Args[0] 32945 if s3.Op != OpPPC64SLDconst { 32946 break 32947 } 32948 if s3.AuxInt != 32 { 32949 break 32950 } 32951 x4 := s3.Args[0] 32952 if x4.Op != OpPPC64MOVBZload { 32953 break 32954 } 32955 i4 := x4.AuxInt 32956 if x4.Aux != s { 32957 break 32958 } 32959 _ = x4.Args[1] 32960 if p != x4.Args[0] { 32961 break 32962 } 32963 if mem != x4.Args[1] { 32964 break 32965 } 32966 o2 := o3.Args[1] 32967 if o2.Op != OpPPC64OR { 32968 break 32969 } 32970 if o2.Type != t { 32971 break 32972 } 32973 _ = o2.Args[1] 32974 o1 := o2.Args[0] 32975 if o1.Op != OpPPC64OR { 32976 break 32977 } 32978 if o1.Type != t { 32979 break 32980 } 32981 _ = o1.Args[1] 32982 s1 := o1.Args[0] 32983 if s1.Op != OpPPC64SLDconst { 32984 break 32985 } 32986 if s1.AuxInt != 16 { 32987 break 32988 } 32989 x2 := s1.Args[0] 32990 if x2.Op != OpPPC64MOVBZload { 32991 break 32992 } 32993 i2 := x2.AuxInt 32994 if x2.Aux != s { 32995 break 32996 } 32997 _ = x2.Args[1] 32998 if p != x2.Args[0] { 32999 break 33000 } 33001 if mem != x2.Args[1] { 33002 break 33003 } 33004 o0 := o1.Args[1] 33005 if o0.Op != OpPPC64OR { 33006 break 33007 } 33008 if o0.Type != t { 33009 break 33010 } 33011 _ = o0.Args[1] 33012 s0 := o0.Args[0] 33013 if s0.Op != OpPPC64SLDconst { 33014 break 33015 } 33016 if s0.AuxInt != 8 { 33017 break 33018 } 33019 x1 := s0.Args[0] 33020 if x1.Op != OpPPC64MOVBZload { 33021 break 33022 } 33023 i1 := x1.AuxInt 33024 if x1.Aux != s { 33025 break 33026 } 33027 _ = x1.Args[1] 33028 if p != x1.Args[0] { 33029 break 33030 } 33031 if mem != x1.Args[1] { 33032 break 33033 } 33034 x0 := o0.Args[1] 33035 if x0.Op != OpPPC64MOVBZload { 33036 break 33037 } 33038 i0 := x0.AuxInt 33039 if x0.Aux != s { 33040 break 33041 } 33042 _ = x0.Args[1] 33043 if p != x0.Args[0] { 33044 break 33045 } 33046 if mem != x0.Args[1] { 33047 break 33048 } 33049 s2 := o2.Args[1] 33050 if s2.Op != OpPPC64SLDconst { 33051 break 33052 } 33053 if s2.AuxInt != 24 { 33054 break 33055 } 33056 x3 := s2.Args[0] 33057 if x3.Op != OpPPC64MOVBZload { 33058 break 33059 } 33060 i3 := x3.AuxInt 33061 if x3.Aux != s { 33062 break 33063 } 33064 _ = x3.Args[1] 33065 if p != x3.Args[0] { 33066 break 33067 } 33068 if mem != x3.Args[1] { 33069 break 33070 } 33071 s5 := o5.Args[1] 33072 if s5.Op != OpPPC64SLDconst { 33073 break 33074 } 33075 if s5.AuxInt != 48 { 33076 break 33077 } 33078 x6 := s5.Args[0] 33079 if x6.Op != OpPPC64MOVBZload { 33080 break 33081 } 33082 i6 := x6.AuxInt 33083 if x6.Aux != s { 33084 break 33085 } 33086 _ = x6.Args[1] 33087 if p != x6.Args[0] { 33088 break 33089 } 33090 if mem != x6.Args[1] { 33091 break 33092 } 33093 s6 := v.Args[1] 33094 if s6.Op != OpPPC64SLDconst { 33095 break 33096 } 33097 if s6.AuxInt != 56 { 33098 break 33099 } 33100 x7 := s6.Args[0] 33101 if x7.Op != OpPPC64MOVBZload { 33102 break 33103 } 33104 i7 := x7.AuxInt 33105 if x7.Aux != s { 33106 break 33107 } 33108 _ = x7.Args[1] 33109 if p != x7.Args[0] { 33110 break 33111 } 33112 if mem != x7.Args[1] { 33113 break 33114 } 33115 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)) { 33116 break 33117 } 33118 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 33119 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 33120 v.reset(OpCopy) 33121 v.AddArg(v0) 33122 v0.AuxInt = i0 33123 v0.Aux = s 33124 v0.AddArg(p) 33125 v0.AddArg(mem) 33126 return true 33127 } 33128 // 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])) 33129 // 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) 33130 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 33131 for { 33132 t := v.Type 33133 _ = v.Args[1] 33134 o5 := v.Args[0] 33135 if o5.Op != OpPPC64OR { 33136 break 33137 } 33138 if o5.Type != t { 33139 break 33140 } 33141 _ = o5.Args[1] 33142 o4 := o5.Args[0] 33143 if o4.Op != OpPPC64OR { 33144 break 33145 } 33146 if o4.Type != t { 33147 break 33148 } 33149 _ = o4.Args[1] 33150 s4 := o4.Args[0] 33151 if s4.Op != OpPPC64SLDconst { 33152 break 33153 } 33154 if s4.AuxInt != 40 { 33155 break 33156 } 33157 x5 := s4.Args[0] 33158 if x5.Op != OpPPC64MOVBZload { 33159 break 33160 } 33161 i5 := x5.AuxInt 33162 s := x5.Aux 33163 _ = x5.Args[1] 33164 p := x5.Args[0] 33165 mem := x5.Args[1] 33166 o3 := o4.Args[1] 33167 if o3.Op != OpPPC64OR { 33168 break 33169 } 33170 if o3.Type != t { 33171 break 33172 } 33173 _ = o3.Args[1] 33174 s3 := o3.Args[0] 33175 if s3.Op != OpPPC64SLDconst { 33176 break 33177 } 33178 if s3.AuxInt != 32 { 33179 break 33180 } 33181 x4 := s3.Args[0] 33182 if x4.Op != OpPPC64MOVBZload { 33183 break 33184 } 33185 i4 := x4.AuxInt 33186 if x4.Aux != s { 33187 break 33188 } 33189 _ = x4.Args[1] 33190 if p != x4.Args[0] { 33191 break 33192 } 33193 if mem != x4.Args[1] { 33194 break 33195 } 33196 o2 := o3.Args[1] 33197 if o2.Op != OpPPC64OR { 33198 break 33199 } 33200 if o2.Type != t { 33201 break 33202 } 33203 _ = o2.Args[1] 33204 o1 := o2.Args[0] 33205 if o1.Op != OpPPC64OR { 33206 break 33207 } 33208 if o1.Type != t { 33209 break 33210 } 33211 _ = o1.Args[1] 33212 s1 := o1.Args[0] 33213 if s1.Op != OpPPC64SLDconst { 33214 break 33215 } 33216 if s1.AuxInt != 16 { 33217 break 33218 } 33219 x2 := s1.Args[0] 33220 if x2.Op != OpPPC64MOVBZload { 33221 break 33222 } 33223 i2 := x2.AuxInt 33224 if x2.Aux != s { 33225 break 33226 } 33227 _ = x2.Args[1] 33228 if p != x2.Args[0] { 33229 break 33230 } 33231 if mem != x2.Args[1] { 33232 break 33233 } 33234 o0 := o1.Args[1] 33235 if o0.Op != OpPPC64OR { 33236 break 33237 } 33238 if o0.Type != t { 33239 break 33240 } 33241 _ = o0.Args[1] 33242 x0 := o0.Args[0] 33243 if x0.Op != OpPPC64MOVBZload { 33244 break 33245 } 33246 i0 := x0.AuxInt 33247 if x0.Aux != s { 33248 break 33249 } 33250 _ = x0.Args[1] 33251 if p != x0.Args[0] { 33252 break 33253 } 33254 if mem != x0.Args[1] { 33255 break 33256 } 33257 s0 := o0.Args[1] 33258 if s0.Op != OpPPC64SLDconst { 33259 break 33260 } 33261 if s0.AuxInt != 8 { 33262 break 33263 } 33264 x1 := s0.Args[0] 33265 if x1.Op != OpPPC64MOVBZload { 33266 break 33267 } 33268 i1 := x1.AuxInt 33269 if x1.Aux != s { 33270 break 33271 } 33272 _ = x1.Args[1] 33273 if p != x1.Args[0] { 33274 break 33275 } 33276 if mem != x1.Args[1] { 33277 break 33278 } 33279 s2 := o2.Args[1] 33280 if s2.Op != OpPPC64SLDconst { 33281 break 33282 } 33283 if s2.AuxInt != 24 { 33284 break 33285 } 33286 x3 := s2.Args[0] 33287 if x3.Op != OpPPC64MOVBZload { 33288 break 33289 } 33290 i3 := x3.AuxInt 33291 if x3.Aux != s { 33292 break 33293 } 33294 _ = x3.Args[1] 33295 if p != x3.Args[0] { 33296 break 33297 } 33298 if mem != x3.Args[1] { 33299 break 33300 } 33301 s5 := o5.Args[1] 33302 if s5.Op != OpPPC64SLDconst { 33303 break 33304 } 33305 if s5.AuxInt != 48 { 33306 break 33307 } 33308 x6 := s5.Args[0] 33309 if x6.Op != OpPPC64MOVBZload { 33310 break 33311 } 33312 i6 := x6.AuxInt 33313 if x6.Aux != s { 33314 break 33315 } 33316 _ = x6.Args[1] 33317 if p != x6.Args[0] { 33318 break 33319 } 33320 if mem != x6.Args[1] { 33321 break 33322 } 33323 s6 := v.Args[1] 33324 if s6.Op != OpPPC64SLDconst { 33325 break 33326 } 33327 if s6.AuxInt != 56 { 33328 break 33329 } 33330 x7 := s6.Args[0] 33331 if x7.Op != OpPPC64MOVBZload { 33332 break 33333 } 33334 i7 := x7.AuxInt 33335 if x7.Aux != s { 33336 break 33337 } 33338 _ = x7.Args[1] 33339 if p != x7.Args[0] { 33340 break 33341 } 33342 if mem != x7.Args[1] { 33343 break 33344 } 33345 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)) { 33346 break 33347 } 33348 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 33349 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 33350 v.reset(OpCopy) 33351 v.AddArg(v0) 33352 v0.AuxInt = i0 33353 v0.Aux = s 33354 v0.AddArg(p) 33355 v0.AddArg(mem) 33356 return true 33357 } 33358 return false 33359 } 33360 func rewriteValuePPC64_OpPPC64OR_120(v *Value) bool { 33361 b := v.Block 33362 _ = b 33363 config := b.Func.Config 33364 _ = config 33365 // 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])) 33366 // 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) 33367 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 33368 for { 33369 t := v.Type 33370 _ = v.Args[1] 33371 o5 := v.Args[0] 33372 if o5.Op != OpPPC64OR { 33373 break 33374 } 33375 if o5.Type != t { 33376 break 33377 } 33378 _ = o5.Args[1] 33379 o4 := o5.Args[0] 33380 if o4.Op != OpPPC64OR { 33381 break 33382 } 33383 if o4.Type != t { 33384 break 33385 } 33386 _ = o4.Args[1] 33387 s4 := o4.Args[0] 33388 if s4.Op != OpPPC64SLDconst { 33389 break 33390 } 33391 if s4.AuxInt != 40 { 33392 break 33393 } 33394 x5 := s4.Args[0] 33395 if x5.Op != OpPPC64MOVBZload { 33396 break 33397 } 33398 i5 := x5.AuxInt 33399 s := x5.Aux 33400 _ = x5.Args[1] 33401 p := x5.Args[0] 33402 mem := x5.Args[1] 33403 o3 := o4.Args[1] 33404 if o3.Op != OpPPC64OR { 33405 break 33406 } 33407 if o3.Type != t { 33408 break 33409 } 33410 _ = o3.Args[1] 33411 s3 := o3.Args[0] 33412 if s3.Op != OpPPC64SLDconst { 33413 break 33414 } 33415 if s3.AuxInt != 32 { 33416 break 33417 } 33418 x4 := s3.Args[0] 33419 if x4.Op != OpPPC64MOVBZload { 33420 break 33421 } 33422 i4 := x4.AuxInt 33423 if x4.Aux != s { 33424 break 33425 } 33426 _ = x4.Args[1] 33427 if p != x4.Args[0] { 33428 break 33429 } 33430 if mem != x4.Args[1] { 33431 break 33432 } 33433 o2 := o3.Args[1] 33434 if o2.Op != OpPPC64OR { 33435 break 33436 } 33437 if o2.Type != t { 33438 break 33439 } 33440 _ = o2.Args[1] 33441 o1 := o2.Args[0] 33442 if o1.Op != OpPPC64OR { 33443 break 33444 } 33445 if o1.Type != t { 33446 break 33447 } 33448 _ = o1.Args[1] 33449 o0 := o1.Args[0] 33450 if o0.Op != OpPPC64OR { 33451 break 33452 } 33453 if o0.Type != t { 33454 break 33455 } 33456 _ = o0.Args[1] 33457 s0 := o0.Args[0] 33458 if s0.Op != OpPPC64SLDconst { 33459 break 33460 } 33461 if s0.AuxInt != 8 { 33462 break 33463 } 33464 x1 := s0.Args[0] 33465 if x1.Op != OpPPC64MOVBZload { 33466 break 33467 } 33468 i1 := x1.AuxInt 33469 if x1.Aux != s { 33470 break 33471 } 33472 _ = x1.Args[1] 33473 if p != x1.Args[0] { 33474 break 33475 } 33476 if mem != x1.Args[1] { 33477 break 33478 } 33479 x0 := o0.Args[1] 33480 if x0.Op != OpPPC64MOVBZload { 33481 break 33482 } 33483 i0 := x0.AuxInt 33484 if x0.Aux != s { 33485 break 33486 } 33487 _ = x0.Args[1] 33488 if p != x0.Args[0] { 33489 break 33490 } 33491 if mem != x0.Args[1] { 33492 break 33493 } 33494 s1 := o1.Args[1] 33495 if s1.Op != OpPPC64SLDconst { 33496 break 33497 } 33498 if s1.AuxInt != 16 { 33499 break 33500 } 33501 x2 := s1.Args[0] 33502 if x2.Op != OpPPC64MOVBZload { 33503 break 33504 } 33505 i2 := x2.AuxInt 33506 if x2.Aux != s { 33507 break 33508 } 33509 _ = x2.Args[1] 33510 if p != x2.Args[0] { 33511 break 33512 } 33513 if mem != x2.Args[1] { 33514 break 33515 } 33516 s2 := o2.Args[1] 33517 if s2.Op != OpPPC64SLDconst { 33518 break 33519 } 33520 if s2.AuxInt != 24 { 33521 break 33522 } 33523 x3 := s2.Args[0] 33524 if x3.Op != OpPPC64MOVBZload { 33525 break 33526 } 33527 i3 := x3.AuxInt 33528 if x3.Aux != s { 33529 break 33530 } 33531 _ = x3.Args[1] 33532 if p != x3.Args[0] { 33533 break 33534 } 33535 if mem != x3.Args[1] { 33536 break 33537 } 33538 s5 := o5.Args[1] 33539 if s5.Op != OpPPC64SLDconst { 33540 break 33541 } 33542 if s5.AuxInt != 48 { 33543 break 33544 } 33545 x6 := s5.Args[0] 33546 if x6.Op != OpPPC64MOVBZload { 33547 break 33548 } 33549 i6 := x6.AuxInt 33550 if x6.Aux != s { 33551 break 33552 } 33553 _ = x6.Args[1] 33554 if p != x6.Args[0] { 33555 break 33556 } 33557 if mem != x6.Args[1] { 33558 break 33559 } 33560 s6 := v.Args[1] 33561 if s6.Op != OpPPC64SLDconst { 33562 break 33563 } 33564 if s6.AuxInt != 56 { 33565 break 33566 } 33567 x7 := s6.Args[0] 33568 if x7.Op != OpPPC64MOVBZload { 33569 break 33570 } 33571 i7 := x7.AuxInt 33572 if x7.Aux != s { 33573 break 33574 } 33575 _ = x7.Args[1] 33576 if p != x7.Args[0] { 33577 break 33578 } 33579 if mem != x7.Args[1] { 33580 break 33581 } 33582 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)) { 33583 break 33584 } 33585 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 33586 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 33587 v.reset(OpCopy) 33588 v.AddArg(v0) 33589 v0.AuxInt = i0 33590 v0.Aux = s 33591 v0.AddArg(p) 33592 v0.AddArg(mem) 33593 return true 33594 } 33595 // 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])) 33596 // 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) 33597 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 33598 for { 33599 t := v.Type 33600 _ = v.Args[1] 33601 o5 := v.Args[0] 33602 if o5.Op != OpPPC64OR { 33603 break 33604 } 33605 if o5.Type != t { 33606 break 33607 } 33608 _ = o5.Args[1] 33609 o4 := o5.Args[0] 33610 if o4.Op != OpPPC64OR { 33611 break 33612 } 33613 if o4.Type != t { 33614 break 33615 } 33616 _ = o4.Args[1] 33617 s4 := o4.Args[0] 33618 if s4.Op != OpPPC64SLDconst { 33619 break 33620 } 33621 if s4.AuxInt != 40 { 33622 break 33623 } 33624 x5 := s4.Args[0] 33625 if x5.Op != OpPPC64MOVBZload { 33626 break 33627 } 33628 i5 := x5.AuxInt 33629 s := x5.Aux 33630 _ = x5.Args[1] 33631 p := x5.Args[0] 33632 mem := x5.Args[1] 33633 o3 := o4.Args[1] 33634 if o3.Op != OpPPC64OR { 33635 break 33636 } 33637 if o3.Type != t { 33638 break 33639 } 33640 _ = o3.Args[1] 33641 s3 := o3.Args[0] 33642 if s3.Op != OpPPC64SLDconst { 33643 break 33644 } 33645 if s3.AuxInt != 32 { 33646 break 33647 } 33648 x4 := s3.Args[0] 33649 if x4.Op != OpPPC64MOVBZload { 33650 break 33651 } 33652 i4 := x4.AuxInt 33653 if x4.Aux != s { 33654 break 33655 } 33656 _ = x4.Args[1] 33657 if p != x4.Args[0] { 33658 break 33659 } 33660 if mem != x4.Args[1] { 33661 break 33662 } 33663 o2 := o3.Args[1] 33664 if o2.Op != OpPPC64OR { 33665 break 33666 } 33667 if o2.Type != t { 33668 break 33669 } 33670 _ = o2.Args[1] 33671 o1 := o2.Args[0] 33672 if o1.Op != OpPPC64OR { 33673 break 33674 } 33675 if o1.Type != t { 33676 break 33677 } 33678 _ = o1.Args[1] 33679 o0 := o1.Args[0] 33680 if o0.Op != OpPPC64OR { 33681 break 33682 } 33683 if o0.Type != t { 33684 break 33685 } 33686 _ = o0.Args[1] 33687 x0 := o0.Args[0] 33688 if x0.Op != OpPPC64MOVBZload { 33689 break 33690 } 33691 i0 := x0.AuxInt 33692 if x0.Aux != s { 33693 break 33694 } 33695 _ = x0.Args[1] 33696 if p != x0.Args[0] { 33697 break 33698 } 33699 if mem != x0.Args[1] { 33700 break 33701 } 33702 s0 := o0.Args[1] 33703 if s0.Op != OpPPC64SLDconst { 33704 break 33705 } 33706 if s0.AuxInt != 8 { 33707 break 33708 } 33709 x1 := s0.Args[0] 33710 if x1.Op != OpPPC64MOVBZload { 33711 break 33712 } 33713 i1 := x1.AuxInt 33714 if x1.Aux != s { 33715 break 33716 } 33717 _ = x1.Args[1] 33718 if p != x1.Args[0] { 33719 break 33720 } 33721 if mem != x1.Args[1] { 33722 break 33723 } 33724 s1 := o1.Args[1] 33725 if s1.Op != OpPPC64SLDconst { 33726 break 33727 } 33728 if s1.AuxInt != 16 { 33729 break 33730 } 33731 x2 := s1.Args[0] 33732 if x2.Op != OpPPC64MOVBZload { 33733 break 33734 } 33735 i2 := x2.AuxInt 33736 if x2.Aux != s { 33737 break 33738 } 33739 _ = x2.Args[1] 33740 if p != x2.Args[0] { 33741 break 33742 } 33743 if mem != x2.Args[1] { 33744 break 33745 } 33746 s2 := o2.Args[1] 33747 if s2.Op != OpPPC64SLDconst { 33748 break 33749 } 33750 if s2.AuxInt != 24 { 33751 break 33752 } 33753 x3 := s2.Args[0] 33754 if x3.Op != OpPPC64MOVBZload { 33755 break 33756 } 33757 i3 := x3.AuxInt 33758 if x3.Aux != s { 33759 break 33760 } 33761 _ = x3.Args[1] 33762 if p != x3.Args[0] { 33763 break 33764 } 33765 if mem != x3.Args[1] { 33766 break 33767 } 33768 s5 := o5.Args[1] 33769 if s5.Op != OpPPC64SLDconst { 33770 break 33771 } 33772 if s5.AuxInt != 48 { 33773 break 33774 } 33775 x6 := s5.Args[0] 33776 if x6.Op != OpPPC64MOVBZload { 33777 break 33778 } 33779 i6 := x6.AuxInt 33780 if x6.Aux != s { 33781 break 33782 } 33783 _ = x6.Args[1] 33784 if p != x6.Args[0] { 33785 break 33786 } 33787 if mem != x6.Args[1] { 33788 break 33789 } 33790 s6 := v.Args[1] 33791 if s6.Op != OpPPC64SLDconst { 33792 break 33793 } 33794 if s6.AuxInt != 56 { 33795 break 33796 } 33797 x7 := s6.Args[0] 33798 if x7.Op != OpPPC64MOVBZload { 33799 break 33800 } 33801 i7 := x7.AuxInt 33802 if x7.Aux != s { 33803 break 33804 } 33805 _ = x7.Args[1] 33806 if p != x7.Args[0] { 33807 break 33808 } 33809 if mem != x7.Args[1] { 33810 break 33811 } 33812 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)) { 33813 break 33814 } 33815 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 33816 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 33817 v.reset(OpCopy) 33818 v.AddArg(v0) 33819 v0.AuxInt = i0 33820 v0.Aux = s 33821 v0.AddArg(p) 33822 v0.AddArg(mem) 33823 return true 33824 } 33825 // 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])) 33826 // 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) 33827 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 33828 for { 33829 t := v.Type 33830 _ = v.Args[1] 33831 o5 := v.Args[0] 33832 if o5.Op != OpPPC64OR { 33833 break 33834 } 33835 if o5.Type != t { 33836 break 33837 } 33838 _ = o5.Args[1] 33839 o4 := o5.Args[0] 33840 if o4.Op != OpPPC64OR { 33841 break 33842 } 33843 if o4.Type != t { 33844 break 33845 } 33846 _ = o4.Args[1] 33847 s4 := o4.Args[0] 33848 if s4.Op != OpPPC64SLDconst { 33849 break 33850 } 33851 if s4.AuxInt != 40 { 33852 break 33853 } 33854 x5 := s4.Args[0] 33855 if x5.Op != OpPPC64MOVBZload { 33856 break 33857 } 33858 i5 := x5.AuxInt 33859 s := x5.Aux 33860 _ = x5.Args[1] 33861 p := x5.Args[0] 33862 mem := x5.Args[1] 33863 o3 := o4.Args[1] 33864 if o3.Op != OpPPC64OR { 33865 break 33866 } 33867 if o3.Type != t { 33868 break 33869 } 33870 _ = o3.Args[1] 33871 o2 := o3.Args[0] 33872 if o2.Op != OpPPC64OR { 33873 break 33874 } 33875 if o2.Type != t { 33876 break 33877 } 33878 _ = o2.Args[1] 33879 s2 := o2.Args[0] 33880 if s2.Op != OpPPC64SLDconst { 33881 break 33882 } 33883 if s2.AuxInt != 24 { 33884 break 33885 } 33886 x3 := s2.Args[0] 33887 if x3.Op != OpPPC64MOVBZload { 33888 break 33889 } 33890 i3 := x3.AuxInt 33891 if x3.Aux != s { 33892 break 33893 } 33894 _ = x3.Args[1] 33895 if p != x3.Args[0] { 33896 break 33897 } 33898 if mem != x3.Args[1] { 33899 break 33900 } 33901 o1 := o2.Args[1] 33902 if o1.Op != OpPPC64OR { 33903 break 33904 } 33905 if o1.Type != t { 33906 break 33907 } 33908 _ = o1.Args[1] 33909 s1 := o1.Args[0] 33910 if s1.Op != OpPPC64SLDconst { 33911 break 33912 } 33913 if s1.AuxInt != 16 { 33914 break 33915 } 33916 x2 := s1.Args[0] 33917 if x2.Op != OpPPC64MOVBZload { 33918 break 33919 } 33920 i2 := x2.AuxInt 33921 if x2.Aux != s { 33922 break 33923 } 33924 _ = x2.Args[1] 33925 if p != x2.Args[0] { 33926 break 33927 } 33928 if mem != x2.Args[1] { 33929 break 33930 } 33931 o0 := o1.Args[1] 33932 if o0.Op != OpPPC64OR { 33933 break 33934 } 33935 if o0.Type != t { 33936 break 33937 } 33938 _ = o0.Args[1] 33939 s0 := o0.Args[0] 33940 if s0.Op != OpPPC64SLDconst { 33941 break 33942 } 33943 if s0.AuxInt != 8 { 33944 break 33945 } 33946 x1 := s0.Args[0] 33947 if x1.Op != OpPPC64MOVBZload { 33948 break 33949 } 33950 i1 := x1.AuxInt 33951 if x1.Aux != s { 33952 break 33953 } 33954 _ = x1.Args[1] 33955 if p != x1.Args[0] { 33956 break 33957 } 33958 if mem != x1.Args[1] { 33959 break 33960 } 33961 x0 := o0.Args[1] 33962 if x0.Op != OpPPC64MOVBZload { 33963 break 33964 } 33965 i0 := x0.AuxInt 33966 if x0.Aux != s { 33967 break 33968 } 33969 _ = x0.Args[1] 33970 if p != x0.Args[0] { 33971 break 33972 } 33973 if mem != x0.Args[1] { 33974 break 33975 } 33976 s3 := o3.Args[1] 33977 if s3.Op != OpPPC64SLDconst { 33978 break 33979 } 33980 if s3.AuxInt != 32 { 33981 break 33982 } 33983 x4 := s3.Args[0] 33984 if x4.Op != OpPPC64MOVBZload { 33985 break 33986 } 33987 i4 := x4.AuxInt 33988 if x4.Aux != s { 33989 break 33990 } 33991 _ = x4.Args[1] 33992 if p != x4.Args[0] { 33993 break 33994 } 33995 if mem != x4.Args[1] { 33996 break 33997 } 33998 s5 := o5.Args[1] 33999 if s5.Op != OpPPC64SLDconst { 34000 break 34001 } 34002 if s5.AuxInt != 48 { 34003 break 34004 } 34005 x6 := s5.Args[0] 34006 if x6.Op != OpPPC64MOVBZload { 34007 break 34008 } 34009 i6 := x6.AuxInt 34010 if x6.Aux != s { 34011 break 34012 } 34013 _ = x6.Args[1] 34014 if p != x6.Args[0] { 34015 break 34016 } 34017 if mem != x6.Args[1] { 34018 break 34019 } 34020 s6 := v.Args[1] 34021 if s6.Op != OpPPC64SLDconst { 34022 break 34023 } 34024 if s6.AuxInt != 56 { 34025 break 34026 } 34027 x7 := s6.Args[0] 34028 if x7.Op != OpPPC64MOVBZload { 34029 break 34030 } 34031 i7 := x7.AuxInt 34032 if x7.Aux != s { 34033 break 34034 } 34035 _ = x7.Args[1] 34036 if p != x7.Args[0] { 34037 break 34038 } 34039 if mem != x7.Args[1] { 34040 break 34041 } 34042 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)) { 34043 break 34044 } 34045 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 34046 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 34047 v.reset(OpCopy) 34048 v.AddArg(v0) 34049 v0.AuxInt = i0 34050 v0.Aux = s 34051 v0.AddArg(p) 34052 v0.AddArg(mem) 34053 return true 34054 } 34055 // 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])) 34056 // 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) 34057 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 34058 for { 34059 t := v.Type 34060 _ = v.Args[1] 34061 o5 := v.Args[0] 34062 if o5.Op != OpPPC64OR { 34063 break 34064 } 34065 if o5.Type != t { 34066 break 34067 } 34068 _ = o5.Args[1] 34069 o4 := o5.Args[0] 34070 if o4.Op != OpPPC64OR { 34071 break 34072 } 34073 if o4.Type != t { 34074 break 34075 } 34076 _ = o4.Args[1] 34077 s4 := o4.Args[0] 34078 if s4.Op != OpPPC64SLDconst { 34079 break 34080 } 34081 if s4.AuxInt != 40 { 34082 break 34083 } 34084 x5 := s4.Args[0] 34085 if x5.Op != OpPPC64MOVBZload { 34086 break 34087 } 34088 i5 := x5.AuxInt 34089 s := x5.Aux 34090 _ = x5.Args[1] 34091 p := x5.Args[0] 34092 mem := x5.Args[1] 34093 o3 := o4.Args[1] 34094 if o3.Op != OpPPC64OR { 34095 break 34096 } 34097 if o3.Type != t { 34098 break 34099 } 34100 _ = o3.Args[1] 34101 o2 := o3.Args[0] 34102 if o2.Op != OpPPC64OR { 34103 break 34104 } 34105 if o2.Type != t { 34106 break 34107 } 34108 _ = o2.Args[1] 34109 s2 := o2.Args[0] 34110 if s2.Op != OpPPC64SLDconst { 34111 break 34112 } 34113 if s2.AuxInt != 24 { 34114 break 34115 } 34116 x3 := s2.Args[0] 34117 if x3.Op != OpPPC64MOVBZload { 34118 break 34119 } 34120 i3 := x3.AuxInt 34121 if x3.Aux != s { 34122 break 34123 } 34124 _ = x3.Args[1] 34125 if p != x3.Args[0] { 34126 break 34127 } 34128 if mem != x3.Args[1] { 34129 break 34130 } 34131 o1 := o2.Args[1] 34132 if o1.Op != OpPPC64OR { 34133 break 34134 } 34135 if o1.Type != t { 34136 break 34137 } 34138 _ = o1.Args[1] 34139 s1 := o1.Args[0] 34140 if s1.Op != OpPPC64SLDconst { 34141 break 34142 } 34143 if s1.AuxInt != 16 { 34144 break 34145 } 34146 x2 := s1.Args[0] 34147 if x2.Op != OpPPC64MOVBZload { 34148 break 34149 } 34150 i2 := x2.AuxInt 34151 if x2.Aux != s { 34152 break 34153 } 34154 _ = x2.Args[1] 34155 if p != x2.Args[0] { 34156 break 34157 } 34158 if mem != x2.Args[1] { 34159 break 34160 } 34161 o0 := o1.Args[1] 34162 if o0.Op != OpPPC64OR { 34163 break 34164 } 34165 if o0.Type != t { 34166 break 34167 } 34168 _ = o0.Args[1] 34169 x0 := o0.Args[0] 34170 if x0.Op != OpPPC64MOVBZload { 34171 break 34172 } 34173 i0 := x0.AuxInt 34174 if x0.Aux != s { 34175 break 34176 } 34177 _ = x0.Args[1] 34178 if p != x0.Args[0] { 34179 break 34180 } 34181 if mem != x0.Args[1] { 34182 break 34183 } 34184 s0 := o0.Args[1] 34185 if s0.Op != OpPPC64SLDconst { 34186 break 34187 } 34188 if s0.AuxInt != 8 { 34189 break 34190 } 34191 x1 := s0.Args[0] 34192 if x1.Op != OpPPC64MOVBZload { 34193 break 34194 } 34195 i1 := x1.AuxInt 34196 if x1.Aux != s { 34197 break 34198 } 34199 _ = x1.Args[1] 34200 if p != x1.Args[0] { 34201 break 34202 } 34203 if mem != x1.Args[1] { 34204 break 34205 } 34206 s3 := o3.Args[1] 34207 if s3.Op != OpPPC64SLDconst { 34208 break 34209 } 34210 if s3.AuxInt != 32 { 34211 break 34212 } 34213 x4 := s3.Args[0] 34214 if x4.Op != OpPPC64MOVBZload { 34215 break 34216 } 34217 i4 := x4.AuxInt 34218 if x4.Aux != s { 34219 break 34220 } 34221 _ = x4.Args[1] 34222 if p != x4.Args[0] { 34223 break 34224 } 34225 if mem != x4.Args[1] { 34226 break 34227 } 34228 s5 := o5.Args[1] 34229 if s5.Op != OpPPC64SLDconst { 34230 break 34231 } 34232 if s5.AuxInt != 48 { 34233 break 34234 } 34235 x6 := s5.Args[0] 34236 if x6.Op != OpPPC64MOVBZload { 34237 break 34238 } 34239 i6 := x6.AuxInt 34240 if x6.Aux != s { 34241 break 34242 } 34243 _ = x6.Args[1] 34244 if p != x6.Args[0] { 34245 break 34246 } 34247 if mem != x6.Args[1] { 34248 break 34249 } 34250 s6 := v.Args[1] 34251 if s6.Op != OpPPC64SLDconst { 34252 break 34253 } 34254 if s6.AuxInt != 56 { 34255 break 34256 } 34257 x7 := s6.Args[0] 34258 if x7.Op != OpPPC64MOVBZload { 34259 break 34260 } 34261 i7 := x7.AuxInt 34262 if x7.Aux != s { 34263 break 34264 } 34265 _ = x7.Args[1] 34266 if p != x7.Args[0] { 34267 break 34268 } 34269 if mem != x7.Args[1] { 34270 break 34271 } 34272 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)) { 34273 break 34274 } 34275 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 34276 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 34277 v.reset(OpCopy) 34278 v.AddArg(v0) 34279 v0.AuxInt = i0 34280 v0.Aux = s 34281 v0.AddArg(p) 34282 v0.AddArg(mem) 34283 return true 34284 } 34285 // 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])) 34286 // 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) 34287 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 34288 for { 34289 t := v.Type 34290 _ = v.Args[1] 34291 o5 := v.Args[0] 34292 if o5.Op != OpPPC64OR { 34293 break 34294 } 34295 if o5.Type != t { 34296 break 34297 } 34298 _ = o5.Args[1] 34299 o4 := o5.Args[0] 34300 if o4.Op != OpPPC64OR { 34301 break 34302 } 34303 if o4.Type != t { 34304 break 34305 } 34306 _ = o4.Args[1] 34307 s4 := o4.Args[0] 34308 if s4.Op != OpPPC64SLDconst { 34309 break 34310 } 34311 if s4.AuxInt != 40 { 34312 break 34313 } 34314 x5 := s4.Args[0] 34315 if x5.Op != OpPPC64MOVBZload { 34316 break 34317 } 34318 i5 := x5.AuxInt 34319 s := x5.Aux 34320 _ = x5.Args[1] 34321 p := x5.Args[0] 34322 mem := x5.Args[1] 34323 o3 := o4.Args[1] 34324 if o3.Op != OpPPC64OR { 34325 break 34326 } 34327 if o3.Type != t { 34328 break 34329 } 34330 _ = o3.Args[1] 34331 o2 := o3.Args[0] 34332 if o2.Op != OpPPC64OR { 34333 break 34334 } 34335 if o2.Type != t { 34336 break 34337 } 34338 _ = o2.Args[1] 34339 s2 := o2.Args[0] 34340 if s2.Op != OpPPC64SLDconst { 34341 break 34342 } 34343 if s2.AuxInt != 24 { 34344 break 34345 } 34346 x3 := s2.Args[0] 34347 if x3.Op != OpPPC64MOVBZload { 34348 break 34349 } 34350 i3 := x3.AuxInt 34351 if x3.Aux != s { 34352 break 34353 } 34354 _ = x3.Args[1] 34355 if p != x3.Args[0] { 34356 break 34357 } 34358 if mem != x3.Args[1] { 34359 break 34360 } 34361 o1 := o2.Args[1] 34362 if o1.Op != OpPPC64OR { 34363 break 34364 } 34365 if o1.Type != t { 34366 break 34367 } 34368 _ = o1.Args[1] 34369 o0 := o1.Args[0] 34370 if o0.Op != OpPPC64OR { 34371 break 34372 } 34373 if o0.Type != t { 34374 break 34375 } 34376 _ = o0.Args[1] 34377 s0 := o0.Args[0] 34378 if s0.Op != OpPPC64SLDconst { 34379 break 34380 } 34381 if s0.AuxInt != 8 { 34382 break 34383 } 34384 x1 := s0.Args[0] 34385 if x1.Op != OpPPC64MOVBZload { 34386 break 34387 } 34388 i1 := x1.AuxInt 34389 if x1.Aux != s { 34390 break 34391 } 34392 _ = x1.Args[1] 34393 if p != x1.Args[0] { 34394 break 34395 } 34396 if mem != x1.Args[1] { 34397 break 34398 } 34399 x0 := o0.Args[1] 34400 if x0.Op != OpPPC64MOVBZload { 34401 break 34402 } 34403 i0 := x0.AuxInt 34404 if x0.Aux != s { 34405 break 34406 } 34407 _ = x0.Args[1] 34408 if p != x0.Args[0] { 34409 break 34410 } 34411 if mem != x0.Args[1] { 34412 break 34413 } 34414 s1 := o1.Args[1] 34415 if s1.Op != OpPPC64SLDconst { 34416 break 34417 } 34418 if s1.AuxInt != 16 { 34419 break 34420 } 34421 x2 := s1.Args[0] 34422 if x2.Op != OpPPC64MOVBZload { 34423 break 34424 } 34425 i2 := x2.AuxInt 34426 if x2.Aux != s { 34427 break 34428 } 34429 _ = x2.Args[1] 34430 if p != x2.Args[0] { 34431 break 34432 } 34433 if mem != x2.Args[1] { 34434 break 34435 } 34436 s3 := o3.Args[1] 34437 if s3.Op != OpPPC64SLDconst { 34438 break 34439 } 34440 if s3.AuxInt != 32 { 34441 break 34442 } 34443 x4 := s3.Args[0] 34444 if x4.Op != OpPPC64MOVBZload { 34445 break 34446 } 34447 i4 := x4.AuxInt 34448 if x4.Aux != s { 34449 break 34450 } 34451 _ = x4.Args[1] 34452 if p != x4.Args[0] { 34453 break 34454 } 34455 if mem != x4.Args[1] { 34456 break 34457 } 34458 s5 := o5.Args[1] 34459 if s5.Op != OpPPC64SLDconst { 34460 break 34461 } 34462 if s5.AuxInt != 48 { 34463 break 34464 } 34465 x6 := s5.Args[0] 34466 if x6.Op != OpPPC64MOVBZload { 34467 break 34468 } 34469 i6 := x6.AuxInt 34470 if x6.Aux != s { 34471 break 34472 } 34473 _ = x6.Args[1] 34474 if p != x6.Args[0] { 34475 break 34476 } 34477 if mem != x6.Args[1] { 34478 break 34479 } 34480 s6 := v.Args[1] 34481 if s6.Op != OpPPC64SLDconst { 34482 break 34483 } 34484 if s6.AuxInt != 56 { 34485 break 34486 } 34487 x7 := s6.Args[0] 34488 if x7.Op != OpPPC64MOVBZload { 34489 break 34490 } 34491 i7 := x7.AuxInt 34492 if x7.Aux != s { 34493 break 34494 } 34495 _ = x7.Args[1] 34496 if p != x7.Args[0] { 34497 break 34498 } 34499 if mem != x7.Args[1] { 34500 break 34501 } 34502 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)) { 34503 break 34504 } 34505 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 34506 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 34507 v.reset(OpCopy) 34508 v.AddArg(v0) 34509 v0.AuxInt = i0 34510 v0.Aux = s 34511 v0.AddArg(p) 34512 v0.AddArg(mem) 34513 return true 34514 } 34515 // 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])) 34516 // 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) 34517 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 34518 for { 34519 t := v.Type 34520 _ = v.Args[1] 34521 o5 := v.Args[0] 34522 if o5.Op != OpPPC64OR { 34523 break 34524 } 34525 if o5.Type != t { 34526 break 34527 } 34528 _ = o5.Args[1] 34529 o4 := o5.Args[0] 34530 if o4.Op != OpPPC64OR { 34531 break 34532 } 34533 if o4.Type != t { 34534 break 34535 } 34536 _ = o4.Args[1] 34537 s4 := o4.Args[0] 34538 if s4.Op != OpPPC64SLDconst { 34539 break 34540 } 34541 if s4.AuxInt != 40 { 34542 break 34543 } 34544 x5 := s4.Args[0] 34545 if x5.Op != OpPPC64MOVBZload { 34546 break 34547 } 34548 i5 := x5.AuxInt 34549 s := x5.Aux 34550 _ = x5.Args[1] 34551 p := x5.Args[0] 34552 mem := x5.Args[1] 34553 o3 := o4.Args[1] 34554 if o3.Op != OpPPC64OR { 34555 break 34556 } 34557 if o3.Type != t { 34558 break 34559 } 34560 _ = o3.Args[1] 34561 o2 := o3.Args[0] 34562 if o2.Op != OpPPC64OR { 34563 break 34564 } 34565 if o2.Type != t { 34566 break 34567 } 34568 _ = o2.Args[1] 34569 s2 := o2.Args[0] 34570 if s2.Op != OpPPC64SLDconst { 34571 break 34572 } 34573 if s2.AuxInt != 24 { 34574 break 34575 } 34576 x3 := s2.Args[0] 34577 if x3.Op != OpPPC64MOVBZload { 34578 break 34579 } 34580 i3 := x3.AuxInt 34581 if x3.Aux != s { 34582 break 34583 } 34584 _ = x3.Args[1] 34585 if p != x3.Args[0] { 34586 break 34587 } 34588 if mem != x3.Args[1] { 34589 break 34590 } 34591 o1 := o2.Args[1] 34592 if o1.Op != OpPPC64OR { 34593 break 34594 } 34595 if o1.Type != t { 34596 break 34597 } 34598 _ = o1.Args[1] 34599 o0 := o1.Args[0] 34600 if o0.Op != OpPPC64OR { 34601 break 34602 } 34603 if o0.Type != t { 34604 break 34605 } 34606 _ = o0.Args[1] 34607 x0 := o0.Args[0] 34608 if x0.Op != OpPPC64MOVBZload { 34609 break 34610 } 34611 i0 := x0.AuxInt 34612 if x0.Aux != s { 34613 break 34614 } 34615 _ = x0.Args[1] 34616 if p != x0.Args[0] { 34617 break 34618 } 34619 if mem != x0.Args[1] { 34620 break 34621 } 34622 s0 := o0.Args[1] 34623 if s0.Op != OpPPC64SLDconst { 34624 break 34625 } 34626 if s0.AuxInt != 8 { 34627 break 34628 } 34629 x1 := s0.Args[0] 34630 if x1.Op != OpPPC64MOVBZload { 34631 break 34632 } 34633 i1 := x1.AuxInt 34634 if x1.Aux != s { 34635 break 34636 } 34637 _ = x1.Args[1] 34638 if p != x1.Args[0] { 34639 break 34640 } 34641 if mem != x1.Args[1] { 34642 break 34643 } 34644 s1 := o1.Args[1] 34645 if s1.Op != OpPPC64SLDconst { 34646 break 34647 } 34648 if s1.AuxInt != 16 { 34649 break 34650 } 34651 x2 := s1.Args[0] 34652 if x2.Op != OpPPC64MOVBZload { 34653 break 34654 } 34655 i2 := x2.AuxInt 34656 if x2.Aux != s { 34657 break 34658 } 34659 _ = x2.Args[1] 34660 if p != x2.Args[0] { 34661 break 34662 } 34663 if mem != x2.Args[1] { 34664 break 34665 } 34666 s3 := o3.Args[1] 34667 if s3.Op != OpPPC64SLDconst { 34668 break 34669 } 34670 if s3.AuxInt != 32 { 34671 break 34672 } 34673 x4 := s3.Args[0] 34674 if x4.Op != OpPPC64MOVBZload { 34675 break 34676 } 34677 i4 := x4.AuxInt 34678 if x4.Aux != s { 34679 break 34680 } 34681 _ = x4.Args[1] 34682 if p != x4.Args[0] { 34683 break 34684 } 34685 if mem != x4.Args[1] { 34686 break 34687 } 34688 s5 := o5.Args[1] 34689 if s5.Op != OpPPC64SLDconst { 34690 break 34691 } 34692 if s5.AuxInt != 48 { 34693 break 34694 } 34695 x6 := s5.Args[0] 34696 if x6.Op != OpPPC64MOVBZload { 34697 break 34698 } 34699 i6 := x6.AuxInt 34700 if x6.Aux != s { 34701 break 34702 } 34703 _ = x6.Args[1] 34704 if p != x6.Args[0] { 34705 break 34706 } 34707 if mem != x6.Args[1] { 34708 break 34709 } 34710 s6 := v.Args[1] 34711 if s6.Op != OpPPC64SLDconst { 34712 break 34713 } 34714 if s6.AuxInt != 56 { 34715 break 34716 } 34717 x7 := s6.Args[0] 34718 if x7.Op != OpPPC64MOVBZload { 34719 break 34720 } 34721 i7 := x7.AuxInt 34722 if x7.Aux != s { 34723 break 34724 } 34725 _ = x7.Args[1] 34726 if p != x7.Args[0] { 34727 break 34728 } 34729 if mem != x7.Args[1] { 34730 break 34731 } 34732 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)) { 34733 break 34734 } 34735 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 34736 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 34737 v.reset(OpCopy) 34738 v.AddArg(v0) 34739 v0.AuxInt = i0 34740 v0.Aux = s 34741 v0.AddArg(p) 34742 v0.AddArg(mem) 34743 return true 34744 } 34745 // 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])) 34746 // 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) 34747 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 34748 for { 34749 t := v.Type 34750 _ = v.Args[1] 34751 o5 := v.Args[0] 34752 if o5.Op != OpPPC64OR { 34753 break 34754 } 34755 if o5.Type != t { 34756 break 34757 } 34758 _ = o5.Args[1] 34759 o4 := o5.Args[0] 34760 if o4.Op != OpPPC64OR { 34761 break 34762 } 34763 if o4.Type != t { 34764 break 34765 } 34766 _ = o4.Args[1] 34767 s4 := o4.Args[0] 34768 if s4.Op != OpPPC64SLDconst { 34769 break 34770 } 34771 if s4.AuxInt != 40 { 34772 break 34773 } 34774 x5 := s4.Args[0] 34775 if x5.Op != OpPPC64MOVBZload { 34776 break 34777 } 34778 i5 := x5.AuxInt 34779 s := x5.Aux 34780 _ = x5.Args[1] 34781 p := x5.Args[0] 34782 mem := x5.Args[1] 34783 o3 := o4.Args[1] 34784 if o3.Op != OpPPC64OR { 34785 break 34786 } 34787 if o3.Type != t { 34788 break 34789 } 34790 _ = o3.Args[1] 34791 o2 := o3.Args[0] 34792 if o2.Op != OpPPC64OR { 34793 break 34794 } 34795 if o2.Type != t { 34796 break 34797 } 34798 _ = o2.Args[1] 34799 o1 := o2.Args[0] 34800 if o1.Op != OpPPC64OR { 34801 break 34802 } 34803 if o1.Type != t { 34804 break 34805 } 34806 _ = o1.Args[1] 34807 s1 := o1.Args[0] 34808 if s1.Op != OpPPC64SLDconst { 34809 break 34810 } 34811 if s1.AuxInt != 16 { 34812 break 34813 } 34814 x2 := s1.Args[0] 34815 if x2.Op != OpPPC64MOVBZload { 34816 break 34817 } 34818 i2 := x2.AuxInt 34819 if x2.Aux != s { 34820 break 34821 } 34822 _ = x2.Args[1] 34823 if p != x2.Args[0] { 34824 break 34825 } 34826 if mem != x2.Args[1] { 34827 break 34828 } 34829 o0 := o1.Args[1] 34830 if o0.Op != OpPPC64OR { 34831 break 34832 } 34833 if o0.Type != t { 34834 break 34835 } 34836 _ = o0.Args[1] 34837 s0 := o0.Args[0] 34838 if s0.Op != OpPPC64SLDconst { 34839 break 34840 } 34841 if s0.AuxInt != 8 { 34842 break 34843 } 34844 x1 := s0.Args[0] 34845 if x1.Op != OpPPC64MOVBZload { 34846 break 34847 } 34848 i1 := x1.AuxInt 34849 if x1.Aux != s { 34850 break 34851 } 34852 _ = x1.Args[1] 34853 if p != x1.Args[0] { 34854 break 34855 } 34856 if mem != x1.Args[1] { 34857 break 34858 } 34859 x0 := o0.Args[1] 34860 if x0.Op != OpPPC64MOVBZload { 34861 break 34862 } 34863 i0 := x0.AuxInt 34864 if x0.Aux != s { 34865 break 34866 } 34867 _ = x0.Args[1] 34868 if p != x0.Args[0] { 34869 break 34870 } 34871 if mem != x0.Args[1] { 34872 break 34873 } 34874 s2 := o2.Args[1] 34875 if s2.Op != OpPPC64SLDconst { 34876 break 34877 } 34878 if s2.AuxInt != 24 { 34879 break 34880 } 34881 x3 := s2.Args[0] 34882 if x3.Op != OpPPC64MOVBZload { 34883 break 34884 } 34885 i3 := x3.AuxInt 34886 if x3.Aux != s { 34887 break 34888 } 34889 _ = x3.Args[1] 34890 if p != x3.Args[0] { 34891 break 34892 } 34893 if mem != x3.Args[1] { 34894 break 34895 } 34896 s3 := o3.Args[1] 34897 if s3.Op != OpPPC64SLDconst { 34898 break 34899 } 34900 if s3.AuxInt != 32 { 34901 break 34902 } 34903 x4 := s3.Args[0] 34904 if x4.Op != OpPPC64MOVBZload { 34905 break 34906 } 34907 i4 := x4.AuxInt 34908 if x4.Aux != s { 34909 break 34910 } 34911 _ = x4.Args[1] 34912 if p != x4.Args[0] { 34913 break 34914 } 34915 if mem != x4.Args[1] { 34916 break 34917 } 34918 s5 := o5.Args[1] 34919 if s5.Op != OpPPC64SLDconst { 34920 break 34921 } 34922 if s5.AuxInt != 48 { 34923 break 34924 } 34925 x6 := s5.Args[0] 34926 if x6.Op != OpPPC64MOVBZload { 34927 break 34928 } 34929 i6 := x6.AuxInt 34930 if x6.Aux != s { 34931 break 34932 } 34933 _ = x6.Args[1] 34934 if p != x6.Args[0] { 34935 break 34936 } 34937 if mem != x6.Args[1] { 34938 break 34939 } 34940 s6 := v.Args[1] 34941 if s6.Op != OpPPC64SLDconst { 34942 break 34943 } 34944 if s6.AuxInt != 56 { 34945 break 34946 } 34947 x7 := s6.Args[0] 34948 if x7.Op != OpPPC64MOVBZload { 34949 break 34950 } 34951 i7 := x7.AuxInt 34952 if x7.Aux != s { 34953 break 34954 } 34955 _ = x7.Args[1] 34956 if p != x7.Args[0] { 34957 break 34958 } 34959 if mem != x7.Args[1] { 34960 break 34961 } 34962 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)) { 34963 break 34964 } 34965 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 34966 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 34967 v.reset(OpCopy) 34968 v.AddArg(v0) 34969 v0.AuxInt = i0 34970 v0.Aux = s 34971 v0.AddArg(p) 34972 v0.AddArg(mem) 34973 return true 34974 } 34975 // 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])) 34976 // 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) 34977 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 34978 for { 34979 t := v.Type 34980 _ = v.Args[1] 34981 o5 := v.Args[0] 34982 if o5.Op != OpPPC64OR { 34983 break 34984 } 34985 if o5.Type != t { 34986 break 34987 } 34988 _ = o5.Args[1] 34989 o4 := o5.Args[0] 34990 if o4.Op != OpPPC64OR { 34991 break 34992 } 34993 if o4.Type != t { 34994 break 34995 } 34996 _ = o4.Args[1] 34997 s4 := o4.Args[0] 34998 if s4.Op != OpPPC64SLDconst { 34999 break 35000 } 35001 if s4.AuxInt != 40 { 35002 break 35003 } 35004 x5 := s4.Args[0] 35005 if x5.Op != OpPPC64MOVBZload { 35006 break 35007 } 35008 i5 := x5.AuxInt 35009 s := x5.Aux 35010 _ = x5.Args[1] 35011 p := x5.Args[0] 35012 mem := x5.Args[1] 35013 o3 := o4.Args[1] 35014 if o3.Op != OpPPC64OR { 35015 break 35016 } 35017 if o3.Type != t { 35018 break 35019 } 35020 _ = o3.Args[1] 35021 o2 := o3.Args[0] 35022 if o2.Op != OpPPC64OR { 35023 break 35024 } 35025 if o2.Type != t { 35026 break 35027 } 35028 _ = o2.Args[1] 35029 o1 := o2.Args[0] 35030 if o1.Op != OpPPC64OR { 35031 break 35032 } 35033 if o1.Type != t { 35034 break 35035 } 35036 _ = o1.Args[1] 35037 s1 := o1.Args[0] 35038 if s1.Op != OpPPC64SLDconst { 35039 break 35040 } 35041 if s1.AuxInt != 16 { 35042 break 35043 } 35044 x2 := s1.Args[0] 35045 if x2.Op != OpPPC64MOVBZload { 35046 break 35047 } 35048 i2 := x2.AuxInt 35049 if x2.Aux != s { 35050 break 35051 } 35052 _ = x2.Args[1] 35053 if p != x2.Args[0] { 35054 break 35055 } 35056 if mem != x2.Args[1] { 35057 break 35058 } 35059 o0 := o1.Args[1] 35060 if o0.Op != OpPPC64OR { 35061 break 35062 } 35063 if o0.Type != t { 35064 break 35065 } 35066 _ = o0.Args[1] 35067 x0 := o0.Args[0] 35068 if x0.Op != OpPPC64MOVBZload { 35069 break 35070 } 35071 i0 := x0.AuxInt 35072 if x0.Aux != s { 35073 break 35074 } 35075 _ = x0.Args[1] 35076 if p != x0.Args[0] { 35077 break 35078 } 35079 if mem != x0.Args[1] { 35080 break 35081 } 35082 s0 := o0.Args[1] 35083 if s0.Op != OpPPC64SLDconst { 35084 break 35085 } 35086 if s0.AuxInt != 8 { 35087 break 35088 } 35089 x1 := s0.Args[0] 35090 if x1.Op != OpPPC64MOVBZload { 35091 break 35092 } 35093 i1 := x1.AuxInt 35094 if x1.Aux != s { 35095 break 35096 } 35097 _ = x1.Args[1] 35098 if p != x1.Args[0] { 35099 break 35100 } 35101 if mem != x1.Args[1] { 35102 break 35103 } 35104 s2 := o2.Args[1] 35105 if s2.Op != OpPPC64SLDconst { 35106 break 35107 } 35108 if s2.AuxInt != 24 { 35109 break 35110 } 35111 x3 := s2.Args[0] 35112 if x3.Op != OpPPC64MOVBZload { 35113 break 35114 } 35115 i3 := x3.AuxInt 35116 if x3.Aux != s { 35117 break 35118 } 35119 _ = x3.Args[1] 35120 if p != x3.Args[0] { 35121 break 35122 } 35123 if mem != x3.Args[1] { 35124 break 35125 } 35126 s3 := o3.Args[1] 35127 if s3.Op != OpPPC64SLDconst { 35128 break 35129 } 35130 if s3.AuxInt != 32 { 35131 break 35132 } 35133 x4 := s3.Args[0] 35134 if x4.Op != OpPPC64MOVBZload { 35135 break 35136 } 35137 i4 := x4.AuxInt 35138 if x4.Aux != s { 35139 break 35140 } 35141 _ = x4.Args[1] 35142 if p != x4.Args[0] { 35143 break 35144 } 35145 if mem != x4.Args[1] { 35146 break 35147 } 35148 s5 := o5.Args[1] 35149 if s5.Op != OpPPC64SLDconst { 35150 break 35151 } 35152 if s5.AuxInt != 48 { 35153 break 35154 } 35155 x6 := s5.Args[0] 35156 if x6.Op != OpPPC64MOVBZload { 35157 break 35158 } 35159 i6 := x6.AuxInt 35160 if x6.Aux != s { 35161 break 35162 } 35163 _ = x6.Args[1] 35164 if p != x6.Args[0] { 35165 break 35166 } 35167 if mem != x6.Args[1] { 35168 break 35169 } 35170 s6 := v.Args[1] 35171 if s6.Op != OpPPC64SLDconst { 35172 break 35173 } 35174 if s6.AuxInt != 56 { 35175 break 35176 } 35177 x7 := s6.Args[0] 35178 if x7.Op != OpPPC64MOVBZload { 35179 break 35180 } 35181 i7 := x7.AuxInt 35182 if x7.Aux != s { 35183 break 35184 } 35185 _ = x7.Args[1] 35186 if p != x7.Args[0] { 35187 break 35188 } 35189 if mem != x7.Args[1] { 35190 break 35191 } 35192 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)) { 35193 break 35194 } 35195 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 35196 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 35197 v.reset(OpCopy) 35198 v.AddArg(v0) 35199 v0.AuxInt = i0 35200 v0.Aux = s 35201 v0.AddArg(p) 35202 v0.AddArg(mem) 35203 return true 35204 } 35205 // 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])) 35206 // 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) 35207 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 35208 for { 35209 t := v.Type 35210 _ = v.Args[1] 35211 o5 := v.Args[0] 35212 if o5.Op != OpPPC64OR { 35213 break 35214 } 35215 if o5.Type != t { 35216 break 35217 } 35218 _ = o5.Args[1] 35219 o4 := o5.Args[0] 35220 if o4.Op != OpPPC64OR { 35221 break 35222 } 35223 if o4.Type != t { 35224 break 35225 } 35226 _ = o4.Args[1] 35227 s4 := o4.Args[0] 35228 if s4.Op != OpPPC64SLDconst { 35229 break 35230 } 35231 if s4.AuxInt != 40 { 35232 break 35233 } 35234 x5 := s4.Args[0] 35235 if x5.Op != OpPPC64MOVBZload { 35236 break 35237 } 35238 i5 := x5.AuxInt 35239 s := x5.Aux 35240 _ = x5.Args[1] 35241 p := x5.Args[0] 35242 mem := x5.Args[1] 35243 o3 := o4.Args[1] 35244 if o3.Op != OpPPC64OR { 35245 break 35246 } 35247 if o3.Type != t { 35248 break 35249 } 35250 _ = o3.Args[1] 35251 o2 := o3.Args[0] 35252 if o2.Op != OpPPC64OR { 35253 break 35254 } 35255 if o2.Type != t { 35256 break 35257 } 35258 _ = o2.Args[1] 35259 o1 := o2.Args[0] 35260 if o1.Op != OpPPC64OR { 35261 break 35262 } 35263 if o1.Type != t { 35264 break 35265 } 35266 _ = o1.Args[1] 35267 o0 := o1.Args[0] 35268 if o0.Op != OpPPC64OR { 35269 break 35270 } 35271 if o0.Type != t { 35272 break 35273 } 35274 _ = o0.Args[1] 35275 s0 := o0.Args[0] 35276 if s0.Op != OpPPC64SLDconst { 35277 break 35278 } 35279 if s0.AuxInt != 8 { 35280 break 35281 } 35282 x1 := s0.Args[0] 35283 if x1.Op != OpPPC64MOVBZload { 35284 break 35285 } 35286 i1 := x1.AuxInt 35287 if x1.Aux != s { 35288 break 35289 } 35290 _ = x1.Args[1] 35291 if p != x1.Args[0] { 35292 break 35293 } 35294 if mem != x1.Args[1] { 35295 break 35296 } 35297 x0 := o0.Args[1] 35298 if x0.Op != OpPPC64MOVBZload { 35299 break 35300 } 35301 i0 := x0.AuxInt 35302 if x0.Aux != s { 35303 break 35304 } 35305 _ = x0.Args[1] 35306 if p != x0.Args[0] { 35307 break 35308 } 35309 if mem != x0.Args[1] { 35310 break 35311 } 35312 s1 := o1.Args[1] 35313 if s1.Op != OpPPC64SLDconst { 35314 break 35315 } 35316 if s1.AuxInt != 16 { 35317 break 35318 } 35319 x2 := s1.Args[0] 35320 if x2.Op != OpPPC64MOVBZload { 35321 break 35322 } 35323 i2 := x2.AuxInt 35324 if x2.Aux != s { 35325 break 35326 } 35327 _ = x2.Args[1] 35328 if p != x2.Args[0] { 35329 break 35330 } 35331 if mem != x2.Args[1] { 35332 break 35333 } 35334 s2 := o2.Args[1] 35335 if s2.Op != OpPPC64SLDconst { 35336 break 35337 } 35338 if s2.AuxInt != 24 { 35339 break 35340 } 35341 x3 := s2.Args[0] 35342 if x3.Op != OpPPC64MOVBZload { 35343 break 35344 } 35345 i3 := x3.AuxInt 35346 if x3.Aux != s { 35347 break 35348 } 35349 _ = x3.Args[1] 35350 if p != x3.Args[0] { 35351 break 35352 } 35353 if mem != x3.Args[1] { 35354 break 35355 } 35356 s3 := o3.Args[1] 35357 if s3.Op != OpPPC64SLDconst { 35358 break 35359 } 35360 if s3.AuxInt != 32 { 35361 break 35362 } 35363 x4 := s3.Args[0] 35364 if x4.Op != OpPPC64MOVBZload { 35365 break 35366 } 35367 i4 := x4.AuxInt 35368 if x4.Aux != s { 35369 break 35370 } 35371 _ = x4.Args[1] 35372 if p != x4.Args[0] { 35373 break 35374 } 35375 if mem != x4.Args[1] { 35376 break 35377 } 35378 s5 := o5.Args[1] 35379 if s5.Op != OpPPC64SLDconst { 35380 break 35381 } 35382 if s5.AuxInt != 48 { 35383 break 35384 } 35385 x6 := s5.Args[0] 35386 if x6.Op != OpPPC64MOVBZload { 35387 break 35388 } 35389 i6 := x6.AuxInt 35390 if x6.Aux != s { 35391 break 35392 } 35393 _ = x6.Args[1] 35394 if p != x6.Args[0] { 35395 break 35396 } 35397 if mem != x6.Args[1] { 35398 break 35399 } 35400 s6 := v.Args[1] 35401 if s6.Op != OpPPC64SLDconst { 35402 break 35403 } 35404 if s6.AuxInt != 56 { 35405 break 35406 } 35407 x7 := s6.Args[0] 35408 if x7.Op != OpPPC64MOVBZload { 35409 break 35410 } 35411 i7 := x7.AuxInt 35412 if x7.Aux != s { 35413 break 35414 } 35415 _ = x7.Args[1] 35416 if p != x7.Args[0] { 35417 break 35418 } 35419 if mem != x7.Args[1] { 35420 break 35421 } 35422 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)) { 35423 break 35424 } 35425 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 35426 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 35427 v.reset(OpCopy) 35428 v.AddArg(v0) 35429 v0.AuxInt = i0 35430 v0.Aux = s 35431 v0.AddArg(p) 35432 v0.AddArg(mem) 35433 return true 35434 } 35435 // 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])) 35436 // 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) 35437 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 35438 for { 35439 t := v.Type 35440 _ = v.Args[1] 35441 o5 := v.Args[0] 35442 if o5.Op != OpPPC64OR { 35443 break 35444 } 35445 if o5.Type != t { 35446 break 35447 } 35448 _ = o5.Args[1] 35449 o4 := o5.Args[0] 35450 if o4.Op != OpPPC64OR { 35451 break 35452 } 35453 if o4.Type != t { 35454 break 35455 } 35456 _ = o4.Args[1] 35457 s4 := o4.Args[0] 35458 if s4.Op != OpPPC64SLDconst { 35459 break 35460 } 35461 if s4.AuxInt != 40 { 35462 break 35463 } 35464 x5 := s4.Args[0] 35465 if x5.Op != OpPPC64MOVBZload { 35466 break 35467 } 35468 i5 := x5.AuxInt 35469 s := x5.Aux 35470 _ = x5.Args[1] 35471 p := x5.Args[0] 35472 mem := x5.Args[1] 35473 o3 := o4.Args[1] 35474 if o3.Op != OpPPC64OR { 35475 break 35476 } 35477 if o3.Type != t { 35478 break 35479 } 35480 _ = o3.Args[1] 35481 o2 := o3.Args[0] 35482 if o2.Op != OpPPC64OR { 35483 break 35484 } 35485 if o2.Type != t { 35486 break 35487 } 35488 _ = o2.Args[1] 35489 o1 := o2.Args[0] 35490 if o1.Op != OpPPC64OR { 35491 break 35492 } 35493 if o1.Type != t { 35494 break 35495 } 35496 _ = o1.Args[1] 35497 o0 := o1.Args[0] 35498 if o0.Op != OpPPC64OR { 35499 break 35500 } 35501 if o0.Type != t { 35502 break 35503 } 35504 _ = o0.Args[1] 35505 x0 := o0.Args[0] 35506 if x0.Op != OpPPC64MOVBZload { 35507 break 35508 } 35509 i0 := x0.AuxInt 35510 if x0.Aux != s { 35511 break 35512 } 35513 _ = x0.Args[1] 35514 if p != x0.Args[0] { 35515 break 35516 } 35517 if mem != x0.Args[1] { 35518 break 35519 } 35520 s0 := o0.Args[1] 35521 if s0.Op != OpPPC64SLDconst { 35522 break 35523 } 35524 if s0.AuxInt != 8 { 35525 break 35526 } 35527 x1 := s0.Args[0] 35528 if x1.Op != OpPPC64MOVBZload { 35529 break 35530 } 35531 i1 := x1.AuxInt 35532 if x1.Aux != s { 35533 break 35534 } 35535 _ = x1.Args[1] 35536 if p != x1.Args[0] { 35537 break 35538 } 35539 if mem != x1.Args[1] { 35540 break 35541 } 35542 s1 := o1.Args[1] 35543 if s1.Op != OpPPC64SLDconst { 35544 break 35545 } 35546 if s1.AuxInt != 16 { 35547 break 35548 } 35549 x2 := s1.Args[0] 35550 if x2.Op != OpPPC64MOVBZload { 35551 break 35552 } 35553 i2 := x2.AuxInt 35554 if x2.Aux != s { 35555 break 35556 } 35557 _ = x2.Args[1] 35558 if p != x2.Args[0] { 35559 break 35560 } 35561 if mem != x2.Args[1] { 35562 break 35563 } 35564 s2 := o2.Args[1] 35565 if s2.Op != OpPPC64SLDconst { 35566 break 35567 } 35568 if s2.AuxInt != 24 { 35569 break 35570 } 35571 x3 := s2.Args[0] 35572 if x3.Op != OpPPC64MOVBZload { 35573 break 35574 } 35575 i3 := x3.AuxInt 35576 if x3.Aux != s { 35577 break 35578 } 35579 _ = x3.Args[1] 35580 if p != x3.Args[0] { 35581 break 35582 } 35583 if mem != x3.Args[1] { 35584 break 35585 } 35586 s3 := o3.Args[1] 35587 if s3.Op != OpPPC64SLDconst { 35588 break 35589 } 35590 if s3.AuxInt != 32 { 35591 break 35592 } 35593 x4 := s3.Args[0] 35594 if x4.Op != OpPPC64MOVBZload { 35595 break 35596 } 35597 i4 := x4.AuxInt 35598 if x4.Aux != s { 35599 break 35600 } 35601 _ = x4.Args[1] 35602 if p != x4.Args[0] { 35603 break 35604 } 35605 if mem != x4.Args[1] { 35606 break 35607 } 35608 s5 := o5.Args[1] 35609 if s5.Op != OpPPC64SLDconst { 35610 break 35611 } 35612 if s5.AuxInt != 48 { 35613 break 35614 } 35615 x6 := s5.Args[0] 35616 if x6.Op != OpPPC64MOVBZload { 35617 break 35618 } 35619 i6 := x6.AuxInt 35620 if x6.Aux != s { 35621 break 35622 } 35623 _ = x6.Args[1] 35624 if p != x6.Args[0] { 35625 break 35626 } 35627 if mem != x6.Args[1] { 35628 break 35629 } 35630 s6 := v.Args[1] 35631 if s6.Op != OpPPC64SLDconst { 35632 break 35633 } 35634 if s6.AuxInt != 56 { 35635 break 35636 } 35637 x7 := s6.Args[0] 35638 if x7.Op != OpPPC64MOVBZload { 35639 break 35640 } 35641 i7 := x7.AuxInt 35642 if x7.Aux != s { 35643 break 35644 } 35645 _ = x7.Args[1] 35646 if p != x7.Args[0] { 35647 break 35648 } 35649 if mem != x7.Args[1] { 35650 break 35651 } 35652 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)) { 35653 break 35654 } 35655 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 35656 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 35657 v.reset(OpCopy) 35658 v.AddArg(v0) 35659 v0.AuxInt = i0 35660 v0.Aux = s 35661 v0.AddArg(p) 35662 v0.AddArg(mem) 35663 return true 35664 } 35665 return false 35666 } 35667 func rewriteValuePPC64_OpPPC64OR_130(v *Value) bool { 35668 b := v.Block 35669 _ = b 35670 config := b.Func.Config 35671 _ = config 35672 // 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])) 35673 // 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) 35674 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 35675 for { 35676 t := v.Type 35677 _ = v.Args[1] 35678 o5 := v.Args[0] 35679 if o5.Op != OpPPC64OR { 35680 break 35681 } 35682 if o5.Type != t { 35683 break 35684 } 35685 _ = o5.Args[1] 35686 o4 := o5.Args[0] 35687 if o4.Op != OpPPC64OR { 35688 break 35689 } 35690 if o4.Type != t { 35691 break 35692 } 35693 _ = o4.Args[1] 35694 o3 := o4.Args[0] 35695 if o3.Op != OpPPC64OR { 35696 break 35697 } 35698 if o3.Type != t { 35699 break 35700 } 35701 _ = o3.Args[1] 35702 s3 := o3.Args[0] 35703 if s3.Op != OpPPC64SLDconst { 35704 break 35705 } 35706 if s3.AuxInt != 32 { 35707 break 35708 } 35709 x4 := s3.Args[0] 35710 if x4.Op != OpPPC64MOVBZload { 35711 break 35712 } 35713 i4 := x4.AuxInt 35714 s := x4.Aux 35715 _ = x4.Args[1] 35716 p := x4.Args[0] 35717 mem := x4.Args[1] 35718 o2 := o3.Args[1] 35719 if o2.Op != OpPPC64OR { 35720 break 35721 } 35722 if o2.Type != t { 35723 break 35724 } 35725 _ = o2.Args[1] 35726 s2 := o2.Args[0] 35727 if s2.Op != OpPPC64SLDconst { 35728 break 35729 } 35730 if s2.AuxInt != 24 { 35731 break 35732 } 35733 x3 := s2.Args[0] 35734 if x3.Op != OpPPC64MOVBZload { 35735 break 35736 } 35737 i3 := x3.AuxInt 35738 if x3.Aux != s { 35739 break 35740 } 35741 _ = x3.Args[1] 35742 if p != x3.Args[0] { 35743 break 35744 } 35745 if mem != x3.Args[1] { 35746 break 35747 } 35748 o1 := o2.Args[1] 35749 if o1.Op != OpPPC64OR { 35750 break 35751 } 35752 if o1.Type != t { 35753 break 35754 } 35755 _ = o1.Args[1] 35756 s1 := o1.Args[0] 35757 if s1.Op != OpPPC64SLDconst { 35758 break 35759 } 35760 if s1.AuxInt != 16 { 35761 break 35762 } 35763 x2 := s1.Args[0] 35764 if x2.Op != OpPPC64MOVBZload { 35765 break 35766 } 35767 i2 := x2.AuxInt 35768 if x2.Aux != s { 35769 break 35770 } 35771 _ = x2.Args[1] 35772 if p != x2.Args[0] { 35773 break 35774 } 35775 if mem != x2.Args[1] { 35776 break 35777 } 35778 o0 := o1.Args[1] 35779 if o0.Op != OpPPC64OR { 35780 break 35781 } 35782 if o0.Type != t { 35783 break 35784 } 35785 _ = o0.Args[1] 35786 s0 := o0.Args[0] 35787 if s0.Op != OpPPC64SLDconst { 35788 break 35789 } 35790 if s0.AuxInt != 8 { 35791 break 35792 } 35793 x1 := s0.Args[0] 35794 if x1.Op != OpPPC64MOVBZload { 35795 break 35796 } 35797 i1 := x1.AuxInt 35798 if x1.Aux != s { 35799 break 35800 } 35801 _ = x1.Args[1] 35802 if p != x1.Args[0] { 35803 break 35804 } 35805 if mem != x1.Args[1] { 35806 break 35807 } 35808 x0 := o0.Args[1] 35809 if x0.Op != OpPPC64MOVBZload { 35810 break 35811 } 35812 i0 := x0.AuxInt 35813 if x0.Aux != s { 35814 break 35815 } 35816 _ = x0.Args[1] 35817 if p != x0.Args[0] { 35818 break 35819 } 35820 if mem != x0.Args[1] { 35821 break 35822 } 35823 s4 := o4.Args[1] 35824 if s4.Op != OpPPC64SLDconst { 35825 break 35826 } 35827 if s4.AuxInt != 40 { 35828 break 35829 } 35830 x5 := s4.Args[0] 35831 if x5.Op != OpPPC64MOVBZload { 35832 break 35833 } 35834 i5 := x5.AuxInt 35835 if x5.Aux != s { 35836 break 35837 } 35838 _ = x5.Args[1] 35839 if p != x5.Args[0] { 35840 break 35841 } 35842 if mem != x5.Args[1] { 35843 break 35844 } 35845 s5 := o5.Args[1] 35846 if s5.Op != OpPPC64SLDconst { 35847 break 35848 } 35849 if s5.AuxInt != 48 { 35850 break 35851 } 35852 x6 := s5.Args[0] 35853 if x6.Op != OpPPC64MOVBZload { 35854 break 35855 } 35856 i6 := x6.AuxInt 35857 if x6.Aux != s { 35858 break 35859 } 35860 _ = x6.Args[1] 35861 if p != x6.Args[0] { 35862 break 35863 } 35864 if mem != x6.Args[1] { 35865 break 35866 } 35867 s6 := v.Args[1] 35868 if s6.Op != OpPPC64SLDconst { 35869 break 35870 } 35871 if s6.AuxInt != 56 { 35872 break 35873 } 35874 x7 := s6.Args[0] 35875 if x7.Op != OpPPC64MOVBZload { 35876 break 35877 } 35878 i7 := x7.AuxInt 35879 if x7.Aux != s { 35880 break 35881 } 35882 _ = x7.Args[1] 35883 if p != x7.Args[0] { 35884 break 35885 } 35886 if mem != x7.Args[1] { 35887 break 35888 } 35889 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)) { 35890 break 35891 } 35892 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 35893 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 35894 v.reset(OpCopy) 35895 v.AddArg(v0) 35896 v0.AuxInt = i0 35897 v0.Aux = s 35898 v0.AddArg(p) 35899 v0.AddArg(mem) 35900 return true 35901 } 35902 // 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])) 35903 // 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) 35904 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 35905 for { 35906 t := v.Type 35907 _ = v.Args[1] 35908 o5 := v.Args[0] 35909 if o5.Op != OpPPC64OR { 35910 break 35911 } 35912 if o5.Type != t { 35913 break 35914 } 35915 _ = o5.Args[1] 35916 o4 := o5.Args[0] 35917 if o4.Op != OpPPC64OR { 35918 break 35919 } 35920 if o4.Type != t { 35921 break 35922 } 35923 _ = o4.Args[1] 35924 o3 := o4.Args[0] 35925 if o3.Op != OpPPC64OR { 35926 break 35927 } 35928 if o3.Type != t { 35929 break 35930 } 35931 _ = o3.Args[1] 35932 s3 := o3.Args[0] 35933 if s3.Op != OpPPC64SLDconst { 35934 break 35935 } 35936 if s3.AuxInt != 32 { 35937 break 35938 } 35939 x4 := s3.Args[0] 35940 if x4.Op != OpPPC64MOVBZload { 35941 break 35942 } 35943 i4 := x4.AuxInt 35944 s := x4.Aux 35945 _ = x4.Args[1] 35946 p := x4.Args[0] 35947 mem := x4.Args[1] 35948 o2 := o3.Args[1] 35949 if o2.Op != OpPPC64OR { 35950 break 35951 } 35952 if o2.Type != t { 35953 break 35954 } 35955 _ = o2.Args[1] 35956 s2 := o2.Args[0] 35957 if s2.Op != OpPPC64SLDconst { 35958 break 35959 } 35960 if s2.AuxInt != 24 { 35961 break 35962 } 35963 x3 := s2.Args[0] 35964 if x3.Op != OpPPC64MOVBZload { 35965 break 35966 } 35967 i3 := x3.AuxInt 35968 if x3.Aux != s { 35969 break 35970 } 35971 _ = x3.Args[1] 35972 if p != x3.Args[0] { 35973 break 35974 } 35975 if mem != x3.Args[1] { 35976 break 35977 } 35978 o1 := o2.Args[1] 35979 if o1.Op != OpPPC64OR { 35980 break 35981 } 35982 if o1.Type != t { 35983 break 35984 } 35985 _ = o1.Args[1] 35986 s1 := o1.Args[0] 35987 if s1.Op != OpPPC64SLDconst { 35988 break 35989 } 35990 if s1.AuxInt != 16 { 35991 break 35992 } 35993 x2 := s1.Args[0] 35994 if x2.Op != OpPPC64MOVBZload { 35995 break 35996 } 35997 i2 := x2.AuxInt 35998 if x2.Aux != s { 35999 break 36000 } 36001 _ = x2.Args[1] 36002 if p != x2.Args[0] { 36003 break 36004 } 36005 if mem != x2.Args[1] { 36006 break 36007 } 36008 o0 := o1.Args[1] 36009 if o0.Op != OpPPC64OR { 36010 break 36011 } 36012 if o0.Type != t { 36013 break 36014 } 36015 _ = o0.Args[1] 36016 x0 := o0.Args[0] 36017 if x0.Op != OpPPC64MOVBZload { 36018 break 36019 } 36020 i0 := x0.AuxInt 36021 if x0.Aux != s { 36022 break 36023 } 36024 _ = x0.Args[1] 36025 if p != x0.Args[0] { 36026 break 36027 } 36028 if mem != x0.Args[1] { 36029 break 36030 } 36031 s0 := o0.Args[1] 36032 if s0.Op != OpPPC64SLDconst { 36033 break 36034 } 36035 if s0.AuxInt != 8 { 36036 break 36037 } 36038 x1 := s0.Args[0] 36039 if x1.Op != OpPPC64MOVBZload { 36040 break 36041 } 36042 i1 := x1.AuxInt 36043 if x1.Aux != s { 36044 break 36045 } 36046 _ = x1.Args[1] 36047 if p != x1.Args[0] { 36048 break 36049 } 36050 if mem != x1.Args[1] { 36051 break 36052 } 36053 s4 := o4.Args[1] 36054 if s4.Op != OpPPC64SLDconst { 36055 break 36056 } 36057 if s4.AuxInt != 40 { 36058 break 36059 } 36060 x5 := s4.Args[0] 36061 if x5.Op != OpPPC64MOVBZload { 36062 break 36063 } 36064 i5 := x5.AuxInt 36065 if x5.Aux != s { 36066 break 36067 } 36068 _ = x5.Args[1] 36069 if p != x5.Args[0] { 36070 break 36071 } 36072 if mem != x5.Args[1] { 36073 break 36074 } 36075 s5 := o5.Args[1] 36076 if s5.Op != OpPPC64SLDconst { 36077 break 36078 } 36079 if s5.AuxInt != 48 { 36080 break 36081 } 36082 x6 := s5.Args[0] 36083 if x6.Op != OpPPC64MOVBZload { 36084 break 36085 } 36086 i6 := x6.AuxInt 36087 if x6.Aux != s { 36088 break 36089 } 36090 _ = x6.Args[1] 36091 if p != x6.Args[0] { 36092 break 36093 } 36094 if mem != x6.Args[1] { 36095 break 36096 } 36097 s6 := v.Args[1] 36098 if s6.Op != OpPPC64SLDconst { 36099 break 36100 } 36101 if s6.AuxInt != 56 { 36102 break 36103 } 36104 x7 := s6.Args[0] 36105 if x7.Op != OpPPC64MOVBZload { 36106 break 36107 } 36108 i7 := x7.AuxInt 36109 if x7.Aux != s { 36110 break 36111 } 36112 _ = x7.Args[1] 36113 if p != x7.Args[0] { 36114 break 36115 } 36116 if mem != x7.Args[1] { 36117 break 36118 } 36119 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)) { 36120 break 36121 } 36122 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 36123 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 36124 v.reset(OpCopy) 36125 v.AddArg(v0) 36126 v0.AuxInt = i0 36127 v0.Aux = s 36128 v0.AddArg(p) 36129 v0.AddArg(mem) 36130 return true 36131 } 36132 // 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])) 36133 // 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) 36134 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 36135 for { 36136 t := v.Type 36137 _ = v.Args[1] 36138 o5 := v.Args[0] 36139 if o5.Op != OpPPC64OR { 36140 break 36141 } 36142 if o5.Type != t { 36143 break 36144 } 36145 _ = o5.Args[1] 36146 o4 := o5.Args[0] 36147 if o4.Op != OpPPC64OR { 36148 break 36149 } 36150 if o4.Type != t { 36151 break 36152 } 36153 _ = o4.Args[1] 36154 o3 := o4.Args[0] 36155 if o3.Op != OpPPC64OR { 36156 break 36157 } 36158 if o3.Type != t { 36159 break 36160 } 36161 _ = o3.Args[1] 36162 s3 := o3.Args[0] 36163 if s3.Op != OpPPC64SLDconst { 36164 break 36165 } 36166 if s3.AuxInt != 32 { 36167 break 36168 } 36169 x4 := s3.Args[0] 36170 if x4.Op != OpPPC64MOVBZload { 36171 break 36172 } 36173 i4 := x4.AuxInt 36174 s := x4.Aux 36175 _ = x4.Args[1] 36176 p := x4.Args[0] 36177 mem := x4.Args[1] 36178 o2 := o3.Args[1] 36179 if o2.Op != OpPPC64OR { 36180 break 36181 } 36182 if o2.Type != t { 36183 break 36184 } 36185 _ = o2.Args[1] 36186 s2 := o2.Args[0] 36187 if s2.Op != OpPPC64SLDconst { 36188 break 36189 } 36190 if s2.AuxInt != 24 { 36191 break 36192 } 36193 x3 := s2.Args[0] 36194 if x3.Op != OpPPC64MOVBZload { 36195 break 36196 } 36197 i3 := x3.AuxInt 36198 if x3.Aux != s { 36199 break 36200 } 36201 _ = x3.Args[1] 36202 if p != x3.Args[0] { 36203 break 36204 } 36205 if mem != x3.Args[1] { 36206 break 36207 } 36208 o1 := o2.Args[1] 36209 if o1.Op != OpPPC64OR { 36210 break 36211 } 36212 if o1.Type != t { 36213 break 36214 } 36215 _ = o1.Args[1] 36216 o0 := o1.Args[0] 36217 if o0.Op != OpPPC64OR { 36218 break 36219 } 36220 if o0.Type != t { 36221 break 36222 } 36223 _ = o0.Args[1] 36224 s0 := o0.Args[0] 36225 if s0.Op != OpPPC64SLDconst { 36226 break 36227 } 36228 if s0.AuxInt != 8 { 36229 break 36230 } 36231 x1 := s0.Args[0] 36232 if x1.Op != OpPPC64MOVBZload { 36233 break 36234 } 36235 i1 := x1.AuxInt 36236 if x1.Aux != s { 36237 break 36238 } 36239 _ = x1.Args[1] 36240 if p != x1.Args[0] { 36241 break 36242 } 36243 if mem != x1.Args[1] { 36244 break 36245 } 36246 x0 := o0.Args[1] 36247 if x0.Op != OpPPC64MOVBZload { 36248 break 36249 } 36250 i0 := x0.AuxInt 36251 if x0.Aux != s { 36252 break 36253 } 36254 _ = x0.Args[1] 36255 if p != x0.Args[0] { 36256 break 36257 } 36258 if mem != x0.Args[1] { 36259 break 36260 } 36261 s1 := o1.Args[1] 36262 if s1.Op != OpPPC64SLDconst { 36263 break 36264 } 36265 if s1.AuxInt != 16 { 36266 break 36267 } 36268 x2 := s1.Args[0] 36269 if x2.Op != OpPPC64MOVBZload { 36270 break 36271 } 36272 i2 := x2.AuxInt 36273 if x2.Aux != s { 36274 break 36275 } 36276 _ = x2.Args[1] 36277 if p != x2.Args[0] { 36278 break 36279 } 36280 if mem != x2.Args[1] { 36281 break 36282 } 36283 s4 := o4.Args[1] 36284 if s4.Op != OpPPC64SLDconst { 36285 break 36286 } 36287 if s4.AuxInt != 40 { 36288 break 36289 } 36290 x5 := s4.Args[0] 36291 if x5.Op != OpPPC64MOVBZload { 36292 break 36293 } 36294 i5 := x5.AuxInt 36295 if x5.Aux != s { 36296 break 36297 } 36298 _ = x5.Args[1] 36299 if p != x5.Args[0] { 36300 break 36301 } 36302 if mem != x5.Args[1] { 36303 break 36304 } 36305 s5 := o5.Args[1] 36306 if s5.Op != OpPPC64SLDconst { 36307 break 36308 } 36309 if s5.AuxInt != 48 { 36310 break 36311 } 36312 x6 := s5.Args[0] 36313 if x6.Op != OpPPC64MOVBZload { 36314 break 36315 } 36316 i6 := x6.AuxInt 36317 if x6.Aux != s { 36318 break 36319 } 36320 _ = x6.Args[1] 36321 if p != x6.Args[0] { 36322 break 36323 } 36324 if mem != x6.Args[1] { 36325 break 36326 } 36327 s6 := v.Args[1] 36328 if s6.Op != OpPPC64SLDconst { 36329 break 36330 } 36331 if s6.AuxInt != 56 { 36332 break 36333 } 36334 x7 := s6.Args[0] 36335 if x7.Op != OpPPC64MOVBZload { 36336 break 36337 } 36338 i7 := x7.AuxInt 36339 if x7.Aux != s { 36340 break 36341 } 36342 _ = x7.Args[1] 36343 if p != x7.Args[0] { 36344 break 36345 } 36346 if mem != x7.Args[1] { 36347 break 36348 } 36349 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)) { 36350 break 36351 } 36352 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 36353 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 36354 v.reset(OpCopy) 36355 v.AddArg(v0) 36356 v0.AuxInt = i0 36357 v0.Aux = s 36358 v0.AddArg(p) 36359 v0.AddArg(mem) 36360 return true 36361 } 36362 // 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])) 36363 // 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) 36364 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 36365 for { 36366 t := v.Type 36367 _ = v.Args[1] 36368 o5 := v.Args[0] 36369 if o5.Op != OpPPC64OR { 36370 break 36371 } 36372 if o5.Type != t { 36373 break 36374 } 36375 _ = o5.Args[1] 36376 o4 := o5.Args[0] 36377 if o4.Op != OpPPC64OR { 36378 break 36379 } 36380 if o4.Type != t { 36381 break 36382 } 36383 _ = o4.Args[1] 36384 o3 := o4.Args[0] 36385 if o3.Op != OpPPC64OR { 36386 break 36387 } 36388 if o3.Type != t { 36389 break 36390 } 36391 _ = o3.Args[1] 36392 s3 := o3.Args[0] 36393 if s3.Op != OpPPC64SLDconst { 36394 break 36395 } 36396 if s3.AuxInt != 32 { 36397 break 36398 } 36399 x4 := s3.Args[0] 36400 if x4.Op != OpPPC64MOVBZload { 36401 break 36402 } 36403 i4 := x4.AuxInt 36404 s := x4.Aux 36405 _ = x4.Args[1] 36406 p := x4.Args[0] 36407 mem := x4.Args[1] 36408 o2 := o3.Args[1] 36409 if o2.Op != OpPPC64OR { 36410 break 36411 } 36412 if o2.Type != t { 36413 break 36414 } 36415 _ = o2.Args[1] 36416 s2 := o2.Args[0] 36417 if s2.Op != OpPPC64SLDconst { 36418 break 36419 } 36420 if s2.AuxInt != 24 { 36421 break 36422 } 36423 x3 := s2.Args[0] 36424 if x3.Op != OpPPC64MOVBZload { 36425 break 36426 } 36427 i3 := x3.AuxInt 36428 if x3.Aux != s { 36429 break 36430 } 36431 _ = x3.Args[1] 36432 if p != x3.Args[0] { 36433 break 36434 } 36435 if mem != x3.Args[1] { 36436 break 36437 } 36438 o1 := o2.Args[1] 36439 if o1.Op != OpPPC64OR { 36440 break 36441 } 36442 if o1.Type != t { 36443 break 36444 } 36445 _ = o1.Args[1] 36446 o0 := o1.Args[0] 36447 if o0.Op != OpPPC64OR { 36448 break 36449 } 36450 if o0.Type != t { 36451 break 36452 } 36453 _ = o0.Args[1] 36454 x0 := o0.Args[0] 36455 if x0.Op != OpPPC64MOVBZload { 36456 break 36457 } 36458 i0 := x0.AuxInt 36459 if x0.Aux != s { 36460 break 36461 } 36462 _ = x0.Args[1] 36463 if p != x0.Args[0] { 36464 break 36465 } 36466 if mem != x0.Args[1] { 36467 break 36468 } 36469 s0 := o0.Args[1] 36470 if s0.Op != OpPPC64SLDconst { 36471 break 36472 } 36473 if s0.AuxInt != 8 { 36474 break 36475 } 36476 x1 := s0.Args[0] 36477 if x1.Op != OpPPC64MOVBZload { 36478 break 36479 } 36480 i1 := x1.AuxInt 36481 if x1.Aux != s { 36482 break 36483 } 36484 _ = x1.Args[1] 36485 if p != x1.Args[0] { 36486 break 36487 } 36488 if mem != x1.Args[1] { 36489 break 36490 } 36491 s1 := o1.Args[1] 36492 if s1.Op != OpPPC64SLDconst { 36493 break 36494 } 36495 if s1.AuxInt != 16 { 36496 break 36497 } 36498 x2 := s1.Args[0] 36499 if x2.Op != OpPPC64MOVBZload { 36500 break 36501 } 36502 i2 := x2.AuxInt 36503 if x2.Aux != s { 36504 break 36505 } 36506 _ = x2.Args[1] 36507 if p != x2.Args[0] { 36508 break 36509 } 36510 if mem != x2.Args[1] { 36511 break 36512 } 36513 s4 := o4.Args[1] 36514 if s4.Op != OpPPC64SLDconst { 36515 break 36516 } 36517 if s4.AuxInt != 40 { 36518 break 36519 } 36520 x5 := s4.Args[0] 36521 if x5.Op != OpPPC64MOVBZload { 36522 break 36523 } 36524 i5 := x5.AuxInt 36525 if x5.Aux != s { 36526 break 36527 } 36528 _ = x5.Args[1] 36529 if p != x5.Args[0] { 36530 break 36531 } 36532 if mem != x5.Args[1] { 36533 break 36534 } 36535 s5 := o5.Args[1] 36536 if s5.Op != OpPPC64SLDconst { 36537 break 36538 } 36539 if s5.AuxInt != 48 { 36540 break 36541 } 36542 x6 := s5.Args[0] 36543 if x6.Op != OpPPC64MOVBZload { 36544 break 36545 } 36546 i6 := x6.AuxInt 36547 if x6.Aux != s { 36548 break 36549 } 36550 _ = x6.Args[1] 36551 if p != x6.Args[0] { 36552 break 36553 } 36554 if mem != x6.Args[1] { 36555 break 36556 } 36557 s6 := v.Args[1] 36558 if s6.Op != OpPPC64SLDconst { 36559 break 36560 } 36561 if s6.AuxInt != 56 { 36562 break 36563 } 36564 x7 := s6.Args[0] 36565 if x7.Op != OpPPC64MOVBZload { 36566 break 36567 } 36568 i7 := x7.AuxInt 36569 if x7.Aux != s { 36570 break 36571 } 36572 _ = x7.Args[1] 36573 if p != x7.Args[0] { 36574 break 36575 } 36576 if mem != x7.Args[1] { 36577 break 36578 } 36579 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)) { 36580 break 36581 } 36582 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 36583 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 36584 v.reset(OpCopy) 36585 v.AddArg(v0) 36586 v0.AuxInt = i0 36587 v0.Aux = s 36588 v0.AddArg(p) 36589 v0.AddArg(mem) 36590 return true 36591 } 36592 // 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])) 36593 // 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) 36594 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 36595 for { 36596 t := v.Type 36597 _ = v.Args[1] 36598 o5 := v.Args[0] 36599 if o5.Op != OpPPC64OR { 36600 break 36601 } 36602 if o5.Type != t { 36603 break 36604 } 36605 _ = o5.Args[1] 36606 o4 := o5.Args[0] 36607 if o4.Op != OpPPC64OR { 36608 break 36609 } 36610 if o4.Type != t { 36611 break 36612 } 36613 _ = o4.Args[1] 36614 o3 := o4.Args[0] 36615 if o3.Op != OpPPC64OR { 36616 break 36617 } 36618 if o3.Type != t { 36619 break 36620 } 36621 _ = o3.Args[1] 36622 s3 := o3.Args[0] 36623 if s3.Op != OpPPC64SLDconst { 36624 break 36625 } 36626 if s3.AuxInt != 32 { 36627 break 36628 } 36629 x4 := s3.Args[0] 36630 if x4.Op != OpPPC64MOVBZload { 36631 break 36632 } 36633 i4 := x4.AuxInt 36634 s := x4.Aux 36635 _ = x4.Args[1] 36636 p := x4.Args[0] 36637 mem := x4.Args[1] 36638 o2 := o3.Args[1] 36639 if o2.Op != OpPPC64OR { 36640 break 36641 } 36642 if o2.Type != t { 36643 break 36644 } 36645 _ = o2.Args[1] 36646 o1 := o2.Args[0] 36647 if o1.Op != OpPPC64OR { 36648 break 36649 } 36650 if o1.Type != t { 36651 break 36652 } 36653 _ = o1.Args[1] 36654 s1 := o1.Args[0] 36655 if s1.Op != OpPPC64SLDconst { 36656 break 36657 } 36658 if s1.AuxInt != 16 { 36659 break 36660 } 36661 x2 := s1.Args[0] 36662 if x2.Op != OpPPC64MOVBZload { 36663 break 36664 } 36665 i2 := x2.AuxInt 36666 if x2.Aux != s { 36667 break 36668 } 36669 _ = x2.Args[1] 36670 if p != x2.Args[0] { 36671 break 36672 } 36673 if mem != x2.Args[1] { 36674 break 36675 } 36676 o0 := o1.Args[1] 36677 if o0.Op != OpPPC64OR { 36678 break 36679 } 36680 if o0.Type != t { 36681 break 36682 } 36683 _ = o0.Args[1] 36684 s0 := o0.Args[0] 36685 if s0.Op != OpPPC64SLDconst { 36686 break 36687 } 36688 if s0.AuxInt != 8 { 36689 break 36690 } 36691 x1 := s0.Args[0] 36692 if x1.Op != OpPPC64MOVBZload { 36693 break 36694 } 36695 i1 := x1.AuxInt 36696 if x1.Aux != s { 36697 break 36698 } 36699 _ = x1.Args[1] 36700 if p != x1.Args[0] { 36701 break 36702 } 36703 if mem != x1.Args[1] { 36704 break 36705 } 36706 x0 := o0.Args[1] 36707 if x0.Op != OpPPC64MOVBZload { 36708 break 36709 } 36710 i0 := x0.AuxInt 36711 if x0.Aux != s { 36712 break 36713 } 36714 _ = x0.Args[1] 36715 if p != x0.Args[0] { 36716 break 36717 } 36718 if mem != x0.Args[1] { 36719 break 36720 } 36721 s2 := o2.Args[1] 36722 if s2.Op != OpPPC64SLDconst { 36723 break 36724 } 36725 if s2.AuxInt != 24 { 36726 break 36727 } 36728 x3 := s2.Args[0] 36729 if x3.Op != OpPPC64MOVBZload { 36730 break 36731 } 36732 i3 := x3.AuxInt 36733 if x3.Aux != s { 36734 break 36735 } 36736 _ = x3.Args[1] 36737 if p != x3.Args[0] { 36738 break 36739 } 36740 if mem != x3.Args[1] { 36741 break 36742 } 36743 s4 := o4.Args[1] 36744 if s4.Op != OpPPC64SLDconst { 36745 break 36746 } 36747 if s4.AuxInt != 40 { 36748 break 36749 } 36750 x5 := s4.Args[0] 36751 if x5.Op != OpPPC64MOVBZload { 36752 break 36753 } 36754 i5 := x5.AuxInt 36755 if x5.Aux != s { 36756 break 36757 } 36758 _ = x5.Args[1] 36759 if p != x5.Args[0] { 36760 break 36761 } 36762 if mem != x5.Args[1] { 36763 break 36764 } 36765 s5 := o5.Args[1] 36766 if s5.Op != OpPPC64SLDconst { 36767 break 36768 } 36769 if s5.AuxInt != 48 { 36770 break 36771 } 36772 x6 := s5.Args[0] 36773 if x6.Op != OpPPC64MOVBZload { 36774 break 36775 } 36776 i6 := x6.AuxInt 36777 if x6.Aux != s { 36778 break 36779 } 36780 _ = x6.Args[1] 36781 if p != x6.Args[0] { 36782 break 36783 } 36784 if mem != x6.Args[1] { 36785 break 36786 } 36787 s6 := v.Args[1] 36788 if s6.Op != OpPPC64SLDconst { 36789 break 36790 } 36791 if s6.AuxInt != 56 { 36792 break 36793 } 36794 x7 := s6.Args[0] 36795 if x7.Op != OpPPC64MOVBZload { 36796 break 36797 } 36798 i7 := x7.AuxInt 36799 if x7.Aux != s { 36800 break 36801 } 36802 _ = x7.Args[1] 36803 if p != x7.Args[0] { 36804 break 36805 } 36806 if mem != x7.Args[1] { 36807 break 36808 } 36809 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)) { 36810 break 36811 } 36812 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 36813 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 36814 v.reset(OpCopy) 36815 v.AddArg(v0) 36816 v0.AuxInt = i0 36817 v0.Aux = s 36818 v0.AddArg(p) 36819 v0.AddArg(mem) 36820 return true 36821 } 36822 // 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])) 36823 // 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) 36824 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 36825 for { 36826 t := v.Type 36827 _ = v.Args[1] 36828 o5 := v.Args[0] 36829 if o5.Op != OpPPC64OR { 36830 break 36831 } 36832 if o5.Type != t { 36833 break 36834 } 36835 _ = o5.Args[1] 36836 o4 := o5.Args[0] 36837 if o4.Op != OpPPC64OR { 36838 break 36839 } 36840 if o4.Type != t { 36841 break 36842 } 36843 _ = o4.Args[1] 36844 o3 := o4.Args[0] 36845 if o3.Op != OpPPC64OR { 36846 break 36847 } 36848 if o3.Type != t { 36849 break 36850 } 36851 _ = o3.Args[1] 36852 s3 := o3.Args[0] 36853 if s3.Op != OpPPC64SLDconst { 36854 break 36855 } 36856 if s3.AuxInt != 32 { 36857 break 36858 } 36859 x4 := s3.Args[0] 36860 if x4.Op != OpPPC64MOVBZload { 36861 break 36862 } 36863 i4 := x4.AuxInt 36864 s := x4.Aux 36865 _ = x4.Args[1] 36866 p := x4.Args[0] 36867 mem := x4.Args[1] 36868 o2 := o3.Args[1] 36869 if o2.Op != OpPPC64OR { 36870 break 36871 } 36872 if o2.Type != t { 36873 break 36874 } 36875 _ = o2.Args[1] 36876 o1 := o2.Args[0] 36877 if o1.Op != OpPPC64OR { 36878 break 36879 } 36880 if o1.Type != t { 36881 break 36882 } 36883 _ = o1.Args[1] 36884 s1 := o1.Args[0] 36885 if s1.Op != OpPPC64SLDconst { 36886 break 36887 } 36888 if s1.AuxInt != 16 { 36889 break 36890 } 36891 x2 := s1.Args[0] 36892 if x2.Op != OpPPC64MOVBZload { 36893 break 36894 } 36895 i2 := x2.AuxInt 36896 if x2.Aux != s { 36897 break 36898 } 36899 _ = x2.Args[1] 36900 if p != x2.Args[0] { 36901 break 36902 } 36903 if mem != x2.Args[1] { 36904 break 36905 } 36906 o0 := o1.Args[1] 36907 if o0.Op != OpPPC64OR { 36908 break 36909 } 36910 if o0.Type != t { 36911 break 36912 } 36913 _ = o0.Args[1] 36914 x0 := o0.Args[0] 36915 if x0.Op != OpPPC64MOVBZload { 36916 break 36917 } 36918 i0 := x0.AuxInt 36919 if x0.Aux != s { 36920 break 36921 } 36922 _ = x0.Args[1] 36923 if p != x0.Args[0] { 36924 break 36925 } 36926 if mem != x0.Args[1] { 36927 break 36928 } 36929 s0 := o0.Args[1] 36930 if s0.Op != OpPPC64SLDconst { 36931 break 36932 } 36933 if s0.AuxInt != 8 { 36934 break 36935 } 36936 x1 := s0.Args[0] 36937 if x1.Op != OpPPC64MOVBZload { 36938 break 36939 } 36940 i1 := x1.AuxInt 36941 if x1.Aux != s { 36942 break 36943 } 36944 _ = x1.Args[1] 36945 if p != x1.Args[0] { 36946 break 36947 } 36948 if mem != x1.Args[1] { 36949 break 36950 } 36951 s2 := o2.Args[1] 36952 if s2.Op != OpPPC64SLDconst { 36953 break 36954 } 36955 if s2.AuxInt != 24 { 36956 break 36957 } 36958 x3 := s2.Args[0] 36959 if x3.Op != OpPPC64MOVBZload { 36960 break 36961 } 36962 i3 := x3.AuxInt 36963 if x3.Aux != s { 36964 break 36965 } 36966 _ = x3.Args[1] 36967 if p != x3.Args[0] { 36968 break 36969 } 36970 if mem != x3.Args[1] { 36971 break 36972 } 36973 s4 := o4.Args[1] 36974 if s4.Op != OpPPC64SLDconst { 36975 break 36976 } 36977 if s4.AuxInt != 40 { 36978 break 36979 } 36980 x5 := s4.Args[0] 36981 if x5.Op != OpPPC64MOVBZload { 36982 break 36983 } 36984 i5 := x5.AuxInt 36985 if x5.Aux != s { 36986 break 36987 } 36988 _ = x5.Args[1] 36989 if p != x5.Args[0] { 36990 break 36991 } 36992 if mem != x5.Args[1] { 36993 break 36994 } 36995 s5 := o5.Args[1] 36996 if s5.Op != OpPPC64SLDconst { 36997 break 36998 } 36999 if s5.AuxInt != 48 { 37000 break 37001 } 37002 x6 := s5.Args[0] 37003 if x6.Op != OpPPC64MOVBZload { 37004 break 37005 } 37006 i6 := x6.AuxInt 37007 if x6.Aux != s { 37008 break 37009 } 37010 _ = x6.Args[1] 37011 if p != x6.Args[0] { 37012 break 37013 } 37014 if mem != x6.Args[1] { 37015 break 37016 } 37017 s6 := v.Args[1] 37018 if s6.Op != OpPPC64SLDconst { 37019 break 37020 } 37021 if s6.AuxInt != 56 { 37022 break 37023 } 37024 x7 := s6.Args[0] 37025 if x7.Op != OpPPC64MOVBZload { 37026 break 37027 } 37028 i7 := x7.AuxInt 37029 if x7.Aux != s { 37030 break 37031 } 37032 _ = x7.Args[1] 37033 if p != x7.Args[0] { 37034 break 37035 } 37036 if mem != x7.Args[1] { 37037 break 37038 } 37039 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)) { 37040 break 37041 } 37042 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 37043 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 37044 v.reset(OpCopy) 37045 v.AddArg(v0) 37046 v0.AuxInt = i0 37047 v0.Aux = s 37048 v0.AddArg(p) 37049 v0.AddArg(mem) 37050 return true 37051 } 37052 // 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])) 37053 // 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) 37054 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 37055 for { 37056 t := v.Type 37057 _ = v.Args[1] 37058 o5 := v.Args[0] 37059 if o5.Op != OpPPC64OR { 37060 break 37061 } 37062 if o5.Type != t { 37063 break 37064 } 37065 _ = o5.Args[1] 37066 o4 := o5.Args[0] 37067 if o4.Op != OpPPC64OR { 37068 break 37069 } 37070 if o4.Type != t { 37071 break 37072 } 37073 _ = o4.Args[1] 37074 o3 := o4.Args[0] 37075 if o3.Op != OpPPC64OR { 37076 break 37077 } 37078 if o3.Type != t { 37079 break 37080 } 37081 _ = o3.Args[1] 37082 s3 := o3.Args[0] 37083 if s3.Op != OpPPC64SLDconst { 37084 break 37085 } 37086 if s3.AuxInt != 32 { 37087 break 37088 } 37089 x4 := s3.Args[0] 37090 if x4.Op != OpPPC64MOVBZload { 37091 break 37092 } 37093 i4 := x4.AuxInt 37094 s := x4.Aux 37095 _ = x4.Args[1] 37096 p := x4.Args[0] 37097 mem := x4.Args[1] 37098 o2 := o3.Args[1] 37099 if o2.Op != OpPPC64OR { 37100 break 37101 } 37102 if o2.Type != t { 37103 break 37104 } 37105 _ = o2.Args[1] 37106 o1 := o2.Args[0] 37107 if o1.Op != OpPPC64OR { 37108 break 37109 } 37110 if o1.Type != t { 37111 break 37112 } 37113 _ = o1.Args[1] 37114 o0 := o1.Args[0] 37115 if o0.Op != OpPPC64OR { 37116 break 37117 } 37118 if o0.Type != t { 37119 break 37120 } 37121 _ = o0.Args[1] 37122 s0 := o0.Args[0] 37123 if s0.Op != OpPPC64SLDconst { 37124 break 37125 } 37126 if s0.AuxInt != 8 { 37127 break 37128 } 37129 x1 := s0.Args[0] 37130 if x1.Op != OpPPC64MOVBZload { 37131 break 37132 } 37133 i1 := x1.AuxInt 37134 if x1.Aux != s { 37135 break 37136 } 37137 _ = x1.Args[1] 37138 if p != x1.Args[0] { 37139 break 37140 } 37141 if mem != x1.Args[1] { 37142 break 37143 } 37144 x0 := o0.Args[1] 37145 if x0.Op != OpPPC64MOVBZload { 37146 break 37147 } 37148 i0 := x0.AuxInt 37149 if x0.Aux != s { 37150 break 37151 } 37152 _ = x0.Args[1] 37153 if p != x0.Args[0] { 37154 break 37155 } 37156 if mem != x0.Args[1] { 37157 break 37158 } 37159 s1 := o1.Args[1] 37160 if s1.Op != OpPPC64SLDconst { 37161 break 37162 } 37163 if s1.AuxInt != 16 { 37164 break 37165 } 37166 x2 := s1.Args[0] 37167 if x2.Op != OpPPC64MOVBZload { 37168 break 37169 } 37170 i2 := x2.AuxInt 37171 if x2.Aux != s { 37172 break 37173 } 37174 _ = x2.Args[1] 37175 if p != x2.Args[0] { 37176 break 37177 } 37178 if mem != x2.Args[1] { 37179 break 37180 } 37181 s2 := o2.Args[1] 37182 if s2.Op != OpPPC64SLDconst { 37183 break 37184 } 37185 if s2.AuxInt != 24 { 37186 break 37187 } 37188 x3 := s2.Args[0] 37189 if x3.Op != OpPPC64MOVBZload { 37190 break 37191 } 37192 i3 := x3.AuxInt 37193 if x3.Aux != s { 37194 break 37195 } 37196 _ = x3.Args[1] 37197 if p != x3.Args[0] { 37198 break 37199 } 37200 if mem != x3.Args[1] { 37201 break 37202 } 37203 s4 := o4.Args[1] 37204 if s4.Op != OpPPC64SLDconst { 37205 break 37206 } 37207 if s4.AuxInt != 40 { 37208 break 37209 } 37210 x5 := s4.Args[0] 37211 if x5.Op != OpPPC64MOVBZload { 37212 break 37213 } 37214 i5 := x5.AuxInt 37215 if x5.Aux != s { 37216 break 37217 } 37218 _ = x5.Args[1] 37219 if p != x5.Args[0] { 37220 break 37221 } 37222 if mem != x5.Args[1] { 37223 break 37224 } 37225 s5 := o5.Args[1] 37226 if s5.Op != OpPPC64SLDconst { 37227 break 37228 } 37229 if s5.AuxInt != 48 { 37230 break 37231 } 37232 x6 := s5.Args[0] 37233 if x6.Op != OpPPC64MOVBZload { 37234 break 37235 } 37236 i6 := x6.AuxInt 37237 if x6.Aux != s { 37238 break 37239 } 37240 _ = x6.Args[1] 37241 if p != x6.Args[0] { 37242 break 37243 } 37244 if mem != x6.Args[1] { 37245 break 37246 } 37247 s6 := v.Args[1] 37248 if s6.Op != OpPPC64SLDconst { 37249 break 37250 } 37251 if s6.AuxInt != 56 { 37252 break 37253 } 37254 x7 := s6.Args[0] 37255 if x7.Op != OpPPC64MOVBZload { 37256 break 37257 } 37258 i7 := x7.AuxInt 37259 if x7.Aux != s { 37260 break 37261 } 37262 _ = x7.Args[1] 37263 if p != x7.Args[0] { 37264 break 37265 } 37266 if mem != x7.Args[1] { 37267 break 37268 } 37269 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)) { 37270 break 37271 } 37272 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 37273 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 37274 v.reset(OpCopy) 37275 v.AddArg(v0) 37276 v0.AuxInt = i0 37277 v0.Aux = s 37278 v0.AddArg(p) 37279 v0.AddArg(mem) 37280 return true 37281 } 37282 // 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])) 37283 // 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) 37284 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 37285 for { 37286 t := v.Type 37287 _ = v.Args[1] 37288 o5 := v.Args[0] 37289 if o5.Op != OpPPC64OR { 37290 break 37291 } 37292 if o5.Type != t { 37293 break 37294 } 37295 _ = o5.Args[1] 37296 o4 := o5.Args[0] 37297 if o4.Op != OpPPC64OR { 37298 break 37299 } 37300 if o4.Type != t { 37301 break 37302 } 37303 _ = o4.Args[1] 37304 o3 := o4.Args[0] 37305 if o3.Op != OpPPC64OR { 37306 break 37307 } 37308 if o3.Type != t { 37309 break 37310 } 37311 _ = o3.Args[1] 37312 s3 := o3.Args[0] 37313 if s3.Op != OpPPC64SLDconst { 37314 break 37315 } 37316 if s3.AuxInt != 32 { 37317 break 37318 } 37319 x4 := s3.Args[0] 37320 if x4.Op != OpPPC64MOVBZload { 37321 break 37322 } 37323 i4 := x4.AuxInt 37324 s := x4.Aux 37325 _ = x4.Args[1] 37326 p := x4.Args[0] 37327 mem := x4.Args[1] 37328 o2 := o3.Args[1] 37329 if o2.Op != OpPPC64OR { 37330 break 37331 } 37332 if o2.Type != t { 37333 break 37334 } 37335 _ = o2.Args[1] 37336 o1 := o2.Args[0] 37337 if o1.Op != OpPPC64OR { 37338 break 37339 } 37340 if o1.Type != t { 37341 break 37342 } 37343 _ = o1.Args[1] 37344 o0 := o1.Args[0] 37345 if o0.Op != OpPPC64OR { 37346 break 37347 } 37348 if o0.Type != t { 37349 break 37350 } 37351 _ = o0.Args[1] 37352 x0 := o0.Args[0] 37353 if x0.Op != OpPPC64MOVBZload { 37354 break 37355 } 37356 i0 := x0.AuxInt 37357 if x0.Aux != s { 37358 break 37359 } 37360 _ = x0.Args[1] 37361 if p != x0.Args[0] { 37362 break 37363 } 37364 if mem != x0.Args[1] { 37365 break 37366 } 37367 s0 := o0.Args[1] 37368 if s0.Op != OpPPC64SLDconst { 37369 break 37370 } 37371 if s0.AuxInt != 8 { 37372 break 37373 } 37374 x1 := s0.Args[0] 37375 if x1.Op != OpPPC64MOVBZload { 37376 break 37377 } 37378 i1 := x1.AuxInt 37379 if x1.Aux != s { 37380 break 37381 } 37382 _ = x1.Args[1] 37383 if p != x1.Args[0] { 37384 break 37385 } 37386 if mem != x1.Args[1] { 37387 break 37388 } 37389 s1 := o1.Args[1] 37390 if s1.Op != OpPPC64SLDconst { 37391 break 37392 } 37393 if s1.AuxInt != 16 { 37394 break 37395 } 37396 x2 := s1.Args[0] 37397 if x2.Op != OpPPC64MOVBZload { 37398 break 37399 } 37400 i2 := x2.AuxInt 37401 if x2.Aux != s { 37402 break 37403 } 37404 _ = x2.Args[1] 37405 if p != x2.Args[0] { 37406 break 37407 } 37408 if mem != x2.Args[1] { 37409 break 37410 } 37411 s2 := o2.Args[1] 37412 if s2.Op != OpPPC64SLDconst { 37413 break 37414 } 37415 if s2.AuxInt != 24 { 37416 break 37417 } 37418 x3 := s2.Args[0] 37419 if x3.Op != OpPPC64MOVBZload { 37420 break 37421 } 37422 i3 := x3.AuxInt 37423 if x3.Aux != s { 37424 break 37425 } 37426 _ = x3.Args[1] 37427 if p != x3.Args[0] { 37428 break 37429 } 37430 if mem != x3.Args[1] { 37431 break 37432 } 37433 s4 := o4.Args[1] 37434 if s4.Op != OpPPC64SLDconst { 37435 break 37436 } 37437 if s4.AuxInt != 40 { 37438 break 37439 } 37440 x5 := s4.Args[0] 37441 if x5.Op != OpPPC64MOVBZload { 37442 break 37443 } 37444 i5 := x5.AuxInt 37445 if x5.Aux != s { 37446 break 37447 } 37448 _ = x5.Args[1] 37449 if p != x5.Args[0] { 37450 break 37451 } 37452 if mem != x5.Args[1] { 37453 break 37454 } 37455 s5 := o5.Args[1] 37456 if s5.Op != OpPPC64SLDconst { 37457 break 37458 } 37459 if s5.AuxInt != 48 { 37460 break 37461 } 37462 x6 := s5.Args[0] 37463 if x6.Op != OpPPC64MOVBZload { 37464 break 37465 } 37466 i6 := x6.AuxInt 37467 if x6.Aux != s { 37468 break 37469 } 37470 _ = x6.Args[1] 37471 if p != x6.Args[0] { 37472 break 37473 } 37474 if mem != x6.Args[1] { 37475 break 37476 } 37477 s6 := v.Args[1] 37478 if s6.Op != OpPPC64SLDconst { 37479 break 37480 } 37481 if s6.AuxInt != 56 { 37482 break 37483 } 37484 x7 := s6.Args[0] 37485 if x7.Op != OpPPC64MOVBZload { 37486 break 37487 } 37488 i7 := x7.AuxInt 37489 if x7.Aux != s { 37490 break 37491 } 37492 _ = x7.Args[1] 37493 if p != x7.Args[0] { 37494 break 37495 } 37496 if mem != x7.Args[1] { 37497 break 37498 } 37499 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)) { 37500 break 37501 } 37502 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 37503 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 37504 v.reset(OpCopy) 37505 v.AddArg(v0) 37506 v0.AuxInt = i0 37507 v0.Aux = s 37508 v0.AddArg(p) 37509 v0.AddArg(mem) 37510 return true 37511 } 37512 // 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])) 37513 // 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) 37514 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 37515 for { 37516 t := v.Type 37517 _ = v.Args[1] 37518 o5 := v.Args[0] 37519 if o5.Op != OpPPC64OR { 37520 break 37521 } 37522 if o5.Type != t { 37523 break 37524 } 37525 _ = o5.Args[1] 37526 o4 := o5.Args[0] 37527 if o4.Op != OpPPC64OR { 37528 break 37529 } 37530 if o4.Type != t { 37531 break 37532 } 37533 _ = o4.Args[1] 37534 o3 := o4.Args[0] 37535 if o3.Op != OpPPC64OR { 37536 break 37537 } 37538 if o3.Type != t { 37539 break 37540 } 37541 _ = o3.Args[1] 37542 o2 := o3.Args[0] 37543 if o2.Op != OpPPC64OR { 37544 break 37545 } 37546 if o2.Type != t { 37547 break 37548 } 37549 _ = o2.Args[1] 37550 s2 := o2.Args[0] 37551 if s2.Op != OpPPC64SLDconst { 37552 break 37553 } 37554 if s2.AuxInt != 24 { 37555 break 37556 } 37557 x3 := s2.Args[0] 37558 if x3.Op != OpPPC64MOVBZload { 37559 break 37560 } 37561 i3 := x3.AuxInt 37562 s := x3.Aux 37563 _ = x3.Args[1] 37564 p := x3.Args[0] 37565 mem := x3.Args[1] 37566 o1 := o2.Args[1] 37567 if o1.Op != OpPPC64OR { 37568 break 37569 } 37570 if o1.Type != t { 37571 break 37572 } 37573 _ = o1.Args[1] 37574 s1 := o1.Args[0] 37575 if s1.Op != OpPPC64SLDconst { 37576 break 37577 } 37578 if s1.AuxInt != 16 { 37579 break 37580 } 37581 x2 := s1.Args[0] 37582 if x2.Op != OpPPC64MOVBZload { 37583 break 37584 } 37585 i2 := x2.AuxInt 37586 if x2.Aux != s { 37587 break 37588 } 37589 _ = x2.Args[1] 37590 if p != x2.Args[0] { 37591 break 37592 } 37593 if mem != x2.Args[1] { 37594 break 37595 } 37596 o0 := o1.Args[1] 37597 if o0.Op != OpPPC64OR { 37598 break 37599 } 37600 if o0.Type != t { 37601 break 37602 } 37603 _ = o0.Args[1] 37604 s0 := o0.Args[0] 37605 if s0.Op != OpPPC64SLDconst { 37606 break 37607 } 37608 if s0.AuxInt != 8 { 37609 break 37610 } 37611 x1 := s0.Args[0] 37612 if x1.Op != OpPPC64MOVBZload { 37613 break 37614 } 37615 i1 := x1.AuxInt 37616 if x1.Aux != s { 37617 break 37618 } 37619 _ = x1.Args[1] 37620 if p != x1.Args[0] { 37621 break 37622 } 37623 if mem != x1.Args[1] { 37624 break 37625 } 37626 x0 := o0.Args[1] 37627 if x0.Op != OpPPC64MOVBZload { 37628 break 37629 } 37630 i0 := x0.AuxInt 37631 if x0.Aux != s { 37632 break 37633 } 37634 _ = x0.Args[1] 37635 if p != x0.Args[0] { 37636 break 37637 } 37638 if mem != x0.Args[1] { 37639 break 37640 } 37641 s3 := o3.Args[1] 37642 if s3.Op != OpPPC64SLDconst { 37643 break 37644 } 37645 if s3.AuxInt != 32 { 37646 break 37647 } 37648 x4 := s3.Args[0] 37649 if x4.Op != OpPPC64MOVBZload { 37650 break 37651 } 37652 i4 := x4.AuxInt 37653 if x4.Aux != s { 37654 break 37655 } 37656 _ = x4.Args[1] 37657 if p != x4.Args[0] { 37658 break 37659 } 37660 if mem != x4.Args[1] { 37661 break 37662 } 37663 s4 := o4.Args[1] 37664 if s4.Op != OpPPC64SLDconst { 37665 break 37666 } 37667 if s4.AuxInt != 40 { 37668 break 37669 } 37670 x5 := s4.Args[0] 37671 if x5.Op != OpPPC64MOVBZload { 37672 break 37673 } 37674 i5 := x5.AuxInt 37675 if x5.Aux != s { 37676 break 37677 } 37678 _ = x5.Args[1] 37679 if p != x5.Args[0] { 37680 break 37681 } 37682 if mem != x5.Args[1] { 37683 break 37684 } 37685 s5 := o5.Args[1] 37686 if s5.Op != OpPPC64SLDconst { 37687 break 37688 } 37689 if s5.AuxInt != 48 { 37690 break 37691 } 37692 x6 := s5.Args[0] 37693 if x6.Op != OpPPC64MOVBZload { 37694 break 37695 } 37696 i6 := x6.AuxInt 37697 if x6.Aux != s { 37698 break 37699 } 37700 _ = x6.Args[1] 37701 if p != x6.Args[0] { 37702 break 37703 } 37704 if mem != x6.Args[1] { 37705 break 37706 } 37707 s6 := v.Args[1] 37708 if s6.Op != OpPPC64SLDconst { 37709 break 37710 } 37711 if s6.AuxInt != 56 { 37712 break 37713 } 37714 x7 := s6.Args[0] 37715 if x7.Op != OpPPC64MOVBZload { 37716 break 37717 } 37718 i7 := x7.AuxInt 37719 if x7.Aux != s { 37720 break 37721 } 37722 _ = x7.Args[1] 37723 if p != x7.Args[0] { 37724 break 37725 } 37726 if mem != x7.Args[1] { 37727 break 37728 } 37729 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)) { 37730 break 37731 } 37732 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 37733 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 37734 v.reset(OpCopy) 37735 v.AddArg(v0) 37736 v0.AuxInt = i0 37737 v0.Aux = s 37738 v0.AddArg(p) 37739 v0.AddArg(mem) 37740 return true 37741 } 37742 // 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])) 37743 // 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) 37744 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 37745 for { 37746 t := v.Type 37747 _ = v.Args[1] 37748 o5 := v.Args[0] 37749 if o5.Op != OpPPC64OR { 37750 break 37751 } 37752 if o5.Type != t { 37753 break 37754 } 37755 _ = o5.Args[1] 37756 o4 := o5.Args[0] 37757 if o4.Op != OpPPC64OR { 37758 break 37759 } 37760 if o4.Type != t { 37761 break 37762 } 37763 _ = o4.Args[1] 37764 o3 := o4.Args[0] 37765 if o3.Op != OpPPC64OR { 37766 break 37767 } 37768 if o3.Type != t { 37769 break 37770 } 37771 _ = o3.Args[1] 37772 o2 := o3.Args[0] 37773 if o2.Op != OpPPC64OR { 37774 break 37775 } 37776 if o2.Type != t { 37777 break 37778 } 37779 _ = o2.Args[1] 37780 s2 := o2.Args[0] 37781 if s2.Op != OpPPC64SLDconst { 37782 break 37783 } 37784 if s2.AuxInt != 24 { 37785 break 37786 } 37787 x3 := s2.Args[0] 37788 if x3.Op != OpPPC64MOVBZload { 37789 break 37790 } 37791 i3 := x3.AuxInt 37792 s := x3.Aux 37793 _ = x3.Args[1] 37794 p := x3.Args[0] 37795 mem := x3.Args[1] 37796 o1 := o2.Args[1] 37797 if o1.Op != OpPPC64OR { 37798 break 37799 } 37800 if o1.Type != t { 37801 break 37802 } 37803 _ = o1.Args[1] 37804 s1 := o1.Args[0] 37805 if s1.Op != OpPPC64SLDconst { 37806 break 37807 } 37808 if s1.AuxInt != 16 { 37809 break 37810 } 37811 x2 := s1.Args[0] 37812 if x2.Op != OpPPC64MOVBZload { 37813 break 37814 } 37815 i2 := x2.AuxInt 37816 if x2.Aux != s { 37817 break 37818 } 37819 _ = x2.Args[1] 37820 if p != x2.Args[0] { 37821 break 37822 } 37823 if mem != x2.Args[1] { 37824 break 37825 } 37826 o0 := o1.Args[1] 37827 if o0.Op != OpPPC64OR { 37828 break 37829 } 37830 if o0.Type != t { 37831 break 37832 } 37833 _ = o0.Args[1] 37834 x0 := o0.Args[0] 37835 if x0.Op != OpPPC64MOVBZload { 37836 break 37837 } 37838 i0 := x0.AuxInt 37839 if x0.Aux != s { 37840 break 37841 } 37842 _ = x0.Args[1] 37843 if p != x0.Args[0] { 37844 break 37845 } 37846 if mem != x0.Args[1] { 37847 break 37848 } 37849 s0 := o0.Args[1] 37850 if s0.Op != OpPPC64SLDconst { 37851 break 37852 } 37853 if s0.AuxInt != 8 { 37854 break 37855 } 37856 x1 := s0.Args[0] 37857 if x1.Op != OpPPC64MOVBZload { 37858 break 37859 } 37860 i1 := x1.AuxInt 37861 if x1.Aux != s { 37862 break 37863 } 37864 _ = x1.Args[1] 37865 if p != x1.Args[0] { 37866 break 37867 } 37868 if mem != x1.Args[1] { 37869 break 37870 } 37871 s3 := o3.Args[1] 37872 if s3.Op != OpPPC64SLDconst { 37873 break 37874 } 37875 if s3.AuxInt != 32 { 37876 break 37877 } 37878 x4 := s3.Args[0] 37879 if x4.Op != OpPPC64MOVBZload { 37880 break 37881 } 37882 i4 := x4.AuxInt 37883 if x4.Aux != s { 37884 break 37885 } 37886 _ = x4.Args[1] 37887 if p != x4.Args[0] { 37888 break 37889 } 37890 if mem != x4.Args[1] { 37891 break 37892 } 37893 s4 := o4.Args[1] 37894 if s4.Op != OpPPC64SLDconst { 37895 break 37896 } 37897 if s4.AuxInt != 40 { 37898 break 37899 } 37900 x5 := s4.Args[0] 37901 if x5.Op != OpPPC64MOVBZload { 37902 break 37903 } 37904 i5 := x5.AuxInt 37905 if x5.Aux != s { 37906 break 37907 } 37908 _ = x5.Args[1] 37909 if p != x5.Args[0] { 37910 break 37911 } 37912 if mem != x5.Args[1] { 37913 break 37914 } 37915 s5 := o5.Args[1] 37916 if s5.Op != OpPPC64SLDconst { 37917 break 37918 } 37919 if s5.AuxInt != 48 { 37920 break 37921 } 37922 x6 := s5.Args[0] 37923 if x6.Op != OpPPC64MOVBZload { 37924 break 37925 } 37926 i6 := x6.AuxInt 37927 if x6.Aux != s { 37928 break 37929 } 37930 _ = x6.Args[1] 37931 if p != x6.Args[0] { 37932 break 37933 } 37934 if mem != x6.Args[1] { 37935 break 37936 } 37937 s6 := v.Args[1] 37938 if s6.Op != OpPPC64SLDconst { 37939 break 37940 } 37941 if s6.AuxInt != 56 { 37942 break 37943 } 37944 x7 := s6.Args[0] 37945 if x7.Op != OpPPC64MOVBZload { 37946 break 37947 } 37948 i7 := x7.AuxInt 37949 if x7.Aux != s { 37950 break 37951 } 37952 _ = x7.Args[1] 37953 if p != x7.Args[0] { 37954 break 37955 } 37956 if mem != x7.Args[1] { 37957 break 37958 } 37959 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)) { 37960 break 37961 } 37962 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 37963 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 37964 v.reset(OpCopy) 37965 v.AddArg(v0) 37966 v0.AuxInt = i0 37967 v0.Aux = s 37968 v0.AddArg(p) 37969 v0.AddArg(mem) 37970 return true 37971 } 37972 return false 37973 } 37974 func rewriteValuePPC64_OpPPC64OR_140(v *Value) bool { 37975 b := v.Block 37976 _ = b 37977 config := b.Func.Config 37978 _ = config 37979 // 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])) 37980 // 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) 37981 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 37982 for { 37983 t := v.Type 37984 _ = v.Args[1] 37985 o5 := v.Args[0] 37986 if o5.Op != OpPPC64OR { 37987 break 37988 } 37989 if o5.Type != t { 37990 break 37991 } 37992 _ = o5.Args[1] 37993 o4 := o5.Args[0] 37994 if o4.Op != OpPPC64OR { 37995 break 37996 } 37997 if o4.Type != t { 37998 break 37999 } 38000 _ = o4.Args[1] 38001 o3 := o4.Args[0] 38002 if o3.Op != OpPPC64OR { 38003 break 38004 } 38005 if o3.Type != t { 38006 break 38007 } 38008 _ = o3.Args[1] 38009 o2 := o3.Args[0] 38010 if o2.Op != OpPPC64OR { 38011 break 38012 } 38013 if o2.Type != t { 38014 break 38015 } 38016 _ = o2.Args[1] 38017 s2 := o2.Args[0] 38018 if s2.Op != OpPPC64SLDconst { 38019 break 38020 } 38021 if s2.AuxInt != 24 { 38022 break 38023 } 38024 x3 := s2.Args[0] 38025 if x3.Op != OpPPC64MOVBZload { 38026 break 38027 } 38028 i3 := x3.AuxInt 38029 s := x3.Aux 38030 _ = x3.Args[1] 38031 p := x3.Args[0] 38032 mem := x3.Args[1] 38033 o1 := o2.Args[1] 38034 if o1.Op != OpPPC64OR { 38035 break 38036 } 38037 if o1.Type != t { 38038 break 38039 } 38040 _ = o1.Args[1] 38041 o0 := o1.Args[0] 38042 if o0.Op != OpPPC64OR { 38043 break 38044 } 38045 if o0.Type != t { 38046 break 38047 } 38048 _ = o0.Args[1] 38049 s0 := o0.Args[0] 38050 if s0.Op != OpPPC64SLDconst { 38051 break 38052 } 38053 if s0.AuxInt != 8 { 38054 break 38055 } 38056 x1 := s0.Args[0] 38057 if x1.Op != OpPPC64MOVBZload { 38058 break 38059 } 38060 i1 := x1.AuxInt 38061 if x1.Aux != s { 38062 break 38063 } 38064 _ = x1.Args[1] 38065 if p != x1.Args[0] { 38066 break 38067 } 38068 if mem != x1.Args[1] { 38069 break 38070 } 38071 x0 := o0.Args[1] 38072 if x0.Op != OpPPC64MOVBZload { 38073 break 38074 } 38075 i0 := x0.AuxInt 38076 if x0.Aux != s { 38077 break 38078 } 38079 _ = x0.Args[1] 38080 if p != x0.Args[0] { 38081 break 38082 } 38083 if mem != x0.Args[1] { 38084 break 38085 } 38086 s1 := o1.Args[1] 38087 if s1.Op != OpPPC64SLDconst { 38088 break 38089 } 38090 if s1.AuxInt != 16 { 38091 break 38092 } 38093 x2 := s1.Args[0] 38094 if x2.Op != OpPPC64MOVBZload { 38095 break 38096 } 38097 i2 := x2.AuxInt 38098 if x2.Aux != s { 38099 break 38100 } 38101 _ = x2.Args[1] 38102 if p != x2.Args[0] { 38103 break 38104 } 38105 if mem != x2.Args[1] { 38106 break 38107 } 38108 s3 := o3.Args[1] 38109 if s3.Op != OpPPC64SLDconst { 38110 break 38111 } 38112 if s3.AuxInt != 32 { 38113 break 38114 } 38115 x4 := s3.Args[0] 38116 if x4.Op != OpPPC64MOVBZload { 38117 break 38118 } 38119 i4 := x4.AuxInt 38120 if x4.Aux != s { 38121 break 38122 } 38123 _ = x4.Args[1] 38124 if p != x4.Args[0] { 38125 break 38126 } 38127 if mem != x4.Args[1] { 38128 break 38129 } 38130 s4 := o4.Args[1] 38131 if s4.Op != OpPPC64SLDconst { 38132 break 38133 } 38134 if s4.AuxInt != 40 { 38135 break 38136 } 38137 x5 := s4.Args[0] 38138 if x5.Op != OpPPC64MOVBZload { 38139 break 38140 } 38141 i5 := x5.AuxInt 38142 if x5.Aux != s { 38143 break 38144 } 38145 _ = x5.Args[1] 38146 if p != x5.Args[0] { 38147 break 38148 } 38149 if mem != x5.Args[1] { 38150 break 38151 } 38152 s5 := o5.Args[1] 38153 if s5.Op != OpPPC64SLDconst { 38154 break 38155 } 38156 if s5.AuxInt != 48 { 38157 break 38158 } 38159 x6 := s5.Args[0] 38160 if x6.Op != OpPPC64MOVBZload { 38161 break 38162 } 38163 i6 := x6.AuxInt 38164 if x6.Aux != s { 38165 break 38166 } 38167 _ = x6.Args[1] 38168 if p != x6.Args[0] { 38169 break 38170 } 38171 if mem != x6.Args[1] { 38172 break 38173 } 38174 s6 := v.Args[1] 38175 if s6.Op != OpPPC64SLDconst { 38176 break 38177 } 38178 if s6.AuxInt != 56 { 38179 break 38180 } 38181 x7 := s6.Args[0] 38182 if x7.Op != OpPPC64MOVBZload { 38183 break 38184 } 38185 i7 := x7.AuxInt 38186 if x7.Aux != s { 38187 break 38188 } 38189 _ = x7.Args[1] 38190 if p != x7.Args[0] { 38191 break 38192 } 38193 if mem != x7.Args[1] { 38194 break 38195 } 38196 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)) { 38197 break 38198 } 38199 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 38200 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 38201 v.reset(OpCopy) 38202 v.AddArg(v0) 38203 v0.AuxInt = i0 38204 v0.Aux = s 38205 v0.AddArg(p) 38206 v0.AddArg(mem) 38207 return true 38208 } 38209 // 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])) 38210 // 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) 38211 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 38212 for { 38213 t := v.Type 38214 _ = v.Args[1] 38215 o5 := v.Args[0] 38216 if o5.Op != OpPPC64OR { 38217 break 38218 } 38219 if o5.Type != t { 38220 break 38221 } 38222 _ = o5.Args[1] 38223 o4 := o5.Args[0] 38224 if o4.Op != OpPPC64OR { 38225 break 38226 } 38227 if o4.Type != t { 38228 break 38229 } 38230 _ = o4.Args[1] 38231 o3 := o4.Args[0] 38232 if o3.Op != OpPPC64OR { 38233 break 38234 } 38235 if o3.Type != t { 38236 break 38237 } 38238 _ = o3.Args[1] 38239 o2 := o3.Args[0] 38240 if o2.Op != OpPPC64OR { 38241 break 38242 } 38243 if o2.Type != t { 38244 break 38245 } 38246 _ = o2.Args[1] 38247 s2 := o2.Args[0] 38248 if s2.Op != OpPPC64SLDconst { 38249 break 38250 } 38251 if s2.AuxInt != 24 { 38252 break 38253 } 38254 x3 := s2.Args[0] 38255 if x3.Op != OpPPC64MOVBZload { 38256 break 38257 } 38258 i3 := x3.AuxInt 38259 s := x3.Aux 38260 _ = x3.Args[1] 38261 p := x3.Args[0] 38262 mem := x3.Args[1] 38263 o1 := o2.Args[1] 38264 if o1.Op != OpPPC64OR { 38265 break 38266 } 38267 if o1.Type != t { 38268 break 38269 } 38270 _ = o1.Args[1] 38271 o0 := o1.Args[0] 38272 if o0.Op != OpPPC64OR { 38273 break 38274 } 38275 if o0.Type != t { 38276 break 38277 } 38278 _ = o0.Args[1] 38279 x0 := o0.Args[0] 38280 if x0.Op != OpPPC64MOVBZload { 38281 break 38282 } 38283 i0 := x0.AuxInt 38284 if x0.Aux != s { 38285 break 38286 } 38287 _ = x0.Args[1] 38288 if p != x0.Args[0] { 38289 break 38290 } 38291 if mem != x0.Args[1] { 38292 break 38293 } 38294 s0 := o0.Args[1] 38295 if s0.Op != OpPPC64SLDconst { 38296 break 38297 } 38298 if s0.AuxInt != 8 { 38299 break 38300 } 38301 x1 := s0.Args[0] 38302 if x1.Op != OpPPC64MOVBZload { 38303 break 38304 } 38305 i1 := x1.AuxInt 38306 if x1.Aux != s { 38307 break 38308 } 38309 _ = x1.Args[1] 38310 if p != x1.Args[0] { 38311 break 38312 } 38313 if mem != x1.Args[1] { 38314 break 38315 } 38316 s1 := o1.Args[1] 38317 if s1.Op != OpPPC64SLDconst { 38318 break 38319 } 38320 if s1.AuxInt != 16 { 38321 break 38322 } 38323 x2 := s1.Args[0] 38324 if x2.Op != OpPPC64MOVBZload { 38325 break 38326 } 38327 i2 := x2.AuxInt 38328 if x2.Aux != s { 38329 break 38330 } 38331 _ = x2.Args[1] 38332 if p != x2.Args[0] { 38333 break 38334 } 38335 if mem != x2.Args[1] { 38336 break 38337 } 38338 s3 := o3.Args[1] 38339 if s3.Op != OpPPC64SLDconst { 38340 break 38341 } 38342 if s3.AuxInt != 32 { 38343 break 38344 } 38345 x4 := s3.Args[0] 38346 if x4.Op != OpPPC64MOVBZload { 38347 break 38348 } 38349 i4 := x4.AuxInt 38350 if x4.Aux != s { 38351 break 38352 } 38353 _ = x4.Args[1] 38354 if p != x4.Args[0] { 38355 break 38356 } 38357 if mem != x4.Args[1] { 38358 break 38359 } 38360 s4 := o4.Args[1] 38361 if s4.Op != OpPPC64SLDconst { 38362 break 38363 } 38364 if s4.AuxInt != 40 { 38365 break 38366 } 38367 x5 := s4.Args[0] 38368 if x5.Op != OpPPC64MOVBZload { 38369 break 38370 } 38371 i5 := x5.AuxInt 38372 if x5.Aux != s { 38373 break 38374 } 38375 _ = x5.Args[1] 38376 if p != x5.Args[0] { 38377 break 38378 } 38379 if mem != x5.Args[1] { 38380 break 38381 } 38382 s5 := o5.Args[1] 38383 if s5.Op != OpPPC64SLDconst { 38384 break 38385 } 38386 if s5.AuxInt != 48 { 38387 break 38388 } 38389 x6 := s5.Args[0] 38390 if x6.Op != OpPPC64MOVBZload { 38391 break 38392 } 38393 i6 := x6.AuxInt 38394 if x6.Aux != s { 38395 break 38396 } 38397 _ = x6.Args[1] 38398 if p != x6.Args[0] { 38399 break 38400 } 38401 if mem != x6.Args[1] { 38402 break 38403 } 38404 s6 := v.Args[1] 38405 if s6.Op != OpPPC64SLDconst { 38406 break 38407 } 38408 if s6.AuxInt != 56 { 38409 break 38410 } 38411 x7 := s6.Args[0] 38412 if x7.Op != OpPPC64MOVBZload { 38413 break 38414 } 38415 i7 := x7.AuxInt 38416 if x7.Aux != s { 38417 break 38418 } 38419 _ = x7.Args[1] 38420 if p != x7.Args[0] { 38421 break 38422 } 38423 if mem != x7.Args[1] { 38424 break 38425 } 38426 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)) { 38427 break 38428 } 38429 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 38430 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 38431 v.reset(OpCopy) 38432 v.AddArg(v0) 38433 v0.AuxInt = i0 38434 v0.Aux = s 38435 v0.AddArg(p) 38436 v0.AddArg(mem) 38437 return true 38438 } 38439 // 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])) 38440 // 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) 38441 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 38442 for { 38443 t := v.Type 38444 _ = v.Args[1] 38445 o5 := v.Args[0] 38446 if o5.Op != OpPPC64OR { 38447 break 38448 } 38449 if o5.Type != t { 38450 break 38451 } 38452 _ = o5.Args[1] 38453 o4 := o5.Args[0] 38454 if o4.Op != OpPPC64OR { 38455 break 38456 } 38457 if o4.Type != t { 38458 break 38459 } 38460 _ = o4.Args[1] 38461 o3 := o4.Args[0] 38462 if o3.Op != OpPPC64OR { 38463 break 38464 } 38465 if o3.Type != t { 38466 break 38467 } 38468 _ = o3.Args[1] 38469 o2 := o3.Args[0] 38470 if o2.Op != OpPPC64OR { 38471 break 38472 } 38473 if o2.Type != t { 38474 break 38475 } 38476 _ = o2.Args[1] 38477 o1 := o2.Args[0] 38478 if o1.Op != OpPPC64OR { 38479 break 38480 } 38481 if o1.Type != t { 38482 break 38483 } 38484 _ = o1.Args[1] 38485 s1 := o1.Args[0] 38486 if s1.Op != OpPPC64SLDconst { 38487 break 38488 } 38489 if s1.AuxInt != 16 { 38490 break 38491 } 38492 x2 := s1.Args[0] 38493 if x2.Op != OpPPC64MOVBZload { 38494 break 38495 } 38496 i2 := x2.AuxInt 38497 s := x2.Aux 38498 _ = x2.Args[1] 38499 p := x2.Args[0] 38500 mem := x2.Args[1] 38501 o0 := o1.Args[1] 38502 if o0.Op != OpPPC64OR { 38503 break 38504 } 38505 if o0.Type != t { 38506 break 38507 } 38508 _ = o0.Args[1] 38509 s0 := o0.Args[0] 38510 if s0.Op != OpPPC64SLDconst { 38511 break 38512 } 38513 if s0.AuxInt != 8 { 38514 break 38515 } 38516 x1 := s0.Args[0] 38517 if x1.Op != OpPPC64MOVBZload { 38518 break 38519 } 38520 i1 := x1.AuxInt 38521 if x1.Aux != s { 38522 break 38523 } 38524 _ = x1.Args[1] 38525 if p != x1.Args[0] { 38526 break 38527 } 38528 if mem != x1.Args[1] { 38529 break 38530 } 38531 x0 := o0.Args[1] 38532 if x0.Op != OpPPC64MOVBZload { 38533 break 38534 } 38535 i0 := x0.AuxInt 38536 if x0.Aux != s { 38537 break 38538 } 38539 _ = x0.Args[1] 38540 if p != x0.Args[0] { 38541 break 38542 } 38543 if mem != x0.Args[1] { 38544 break 38545 } 38546 s2 := o2.Args[1] 38547 if s2.Op != OpPPC64SLDconst { 38548 break 38549 } 38550 if s2.AuxInt != 24 { 38551 break 38552 } 38553 x3 := s2.Args[0] 38554 if x3.Op != OpPPC64MOVBZload { 38555 break 38556 } 38557 i3 := x3.AuxInt 38558 if x3.Aux != s { 38559 break 38560 } 38561 _ = x3.Args[1] 38562 if p != x3.Args[0] { 38563 break 38564 } 38565 if mem != x3.Args[1] { 38566 break 38567 } 38568 s3 := o3.Args[1] 38569 if s3.Op != OpPPC64SLDconst { 38570 break 38571 } 38572 if s3.AuxInt != 32 { 38573 break 38574 } 38575 x4 := s3.Args[0] 38576 if x4.Op != OpPPC64MOVBZload { 38577 break 38578 } 38579 i4 := x4.AuxInt 38580 if x4.Aux != s { 38581 break 38582 } 38583 _ = x4.Args[1] 38584 if p != x4.Args[0] { 38585 break 38586 } 38587 if mem != x4.Args[1] { 38588 break 38589 } 38590 s4 := o4.Args[1] 38591 if s4.Op != OpPPC64SLDconst { 38592 break 38593 } 38594 if s4.AuxInt != 40 { 38595 break 38596 } 38597 x5 := s4.Args[0] 38598 if x5.Op != OpPPC64MOVBZload { 38599 break 38600 } 38601 i5 := x5.AuxInt 38602 if x5.Aux != s { 38603 break 38604 } 38605 _ = x5.Args[1] 38606 if p != x5.Args[0] { 38607 break 38608 } 38609 if mem != x5.Args[1] { 38610 break 38611 } 38612 s5 := o5.Args[1] 38613 if s5.Op != OpPPC64SLDconst { 38614 break 38615 } 38616 if s5.AuxInt != 48 { 38617 break 38618 } 38619 x6 := s5.Args[0] 38620 if x6.Op != OpPPC64MOVBZload { 38621 break 38622 } 38623 i6 := x6.AuxInt 38624 if x6.Aux != s { 38625 break 38626 } 38627 _ = x6.Args[1] 38628 if p != x6.Args[0] { 38629 break 38630 } 38631 if mem != x6.Args[1] { 38632 break 38633 } 38634 s6 := v.Args[1] 38635 if s6.Op != OpPPC64SLDconst { 38636 break 38637 } 38638 if s6.AuxInt != 56 { 38639 break 38640 } 38641 x7 := s6.Args[0] 38642 if x7.Op != OpPPC64MOVBZload { 38643 break 38644 } 38645 i7 := x7.AuxInt 38646 if x7.Aux != s { 38647 break 38648 } 38649 _ = x7.Args[1] 38650 if p != x7.Args[0] { 38651 break 38652 } 38653 if mem != x7.Args[1] { 38654 break 38655 } 38656 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)) { 38657 break 38658 } 38659 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 38660 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 38661 v.reset(OpCopy) 38662 v.AddArg(v0) 38663 v0.AuxInt = i0 38664 v0.Aux = s 38665 v0.AddArg(p) 38666 v0.AddArg(mem) 38667 return true 38668 } 38669 // 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])) 38670 // 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) 38671 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 38672 for { 38673 t := v.Type 38674 _ = v.Args[1] 38675 o5 := v.Args[0] 38676 if o5.Op != OpPPC64OR { 38677 break 38678 } 38679 if o5.Type != t { 38680 break 38681 } 38682 _ = o5.Args[1] 38683 o4 := o5.Args[0] 38684 if o4.Op != OpPPC64OR { 38685 break 38686 } 38687 if o4.Type != t { 38688 break 38689 } 38690 _ = o4.Args[1] 38691 o3 := o4.Args[0] 38692 if o3.Op != OpPPC64OR { 38693 break 38694 } 38695 if o3.Type != t { 38696 break 38697 } 38698 _ = o3.Args[1] 38699 o2 := o3.Args[0] 38700 if o2.Op != OpPPC64OR { 38701 break 38702 } 38703 if o2.Type != t { 38704 break 38705 } 38706 _ = o2.Args[1] 38707 o1 := o2.Args[0] 38708 if o1.Op != OpPPC64OR { 38709 break 38710 } 38711 if o1.Type != t { 38712 break 38713 } 38714 _ = o1.Args[1] 38715 s1 := o1.Args[0] 38716 if s1.Op != OpPPC64SLDconst { 38717 break 38718 } 38719 if s1.AuxInt != 16 { 38720 break 38721 } 38722 x2 := s1.Args[0] 38723 if x2.Op != OpPPC64MOVBZload { 38724 break 38725 } 38726 i2 := x2.AuxInt 38727 s := x2.Aux 38728 _ = x2.Args[1] 38729 p := x2.Args[0] 38730 mem := x2.Args[1] 38731 o0 := o1.Args[1] 38732 if o0.Op != OpPPC64OR { 38733 break 38734 } 38735 if o0.Type != t { 38736 break 38737 } 38738 _ = o0.Args[1] 38739 x0 := o0.Args[0] 38740 if x0.Op != OpPPC64MOVBZload { 38741 break 38742 } 38743 i0 := x0.AuxInt 38744 if x0.Aux != s { 38745 break 38746 } 38747 _ = x0.Args[1] 38748 if p != x0.Args[0] { 38749 break 38750 } 38751 if mem != x0.Args[1] { 38752 break 38753 } 38754 s0 := o0.Args[1] 38755 if s0.Op != OpPPC64SLDconst { 38756 break 38757 } 38758 if s0.AuxInt != 8 { 38759 break 38760 } 38761 x1 := s0.Args[0] 38762 if x1.Op != OpPPC64MOVBZload { 38763 break 38764 } 38765 i1 := x1.AuxInt 38766 if x1.Aux != s { 38767 break 38768 } 38769 _ = x1.Args[1] 38770 if p != x1.Args[0] { 38771 break 38772 } 38773 if mem != x1.Args[1] { 38774 break 38775 } 38776 s2 := o2.Args[1] 38777 if s2.Op != OpPPC64SLDconst { 38778 break 38779 } 38780 if s2.AuxInt != 24 { 38781 break 38782 } 38783 x3 := s2.Args[0] 38784 if x3.Op != OpPPC64MOVBZload { 38785 break 38786 } 38787 i3 := x3.AuxInt 38788 if x3.Aux != s { 38789 break 38790 } 38791 _ = x3.Args[1] 38792 if p != x3.Args[0] { 38793 break 38794 } 38795 if mem != x3.Args[1] { 38796 break 38797 } 38798 s3 := o3.Args[1] 38799 if s3.Op != OpPPC64SLDconst { 38800 break 38801 } 38802 if s3.AuxInt != 32 { 38803 break 38804 } 38805 x4 := s3.Args[0] 38806 if x4.Op != OpPPC64MOVBZload { 38807 break 38808 } 38809 i4 := x4.AuxInt 38810 if x4.Aux != s { 38811 break 38812 } 38813 _ = x4.Args[1] 38814 if p != x4.Args[0] { 38815 break 38816 } 38817 if mem != x4.Args[1] { 38818 break 38819 } 38820 s4 := o4.Args[1] 38821 if s4.Op != OpPPC64SLDconst { 38822 break 38823 } 38824 if s4.AuxInt != 40 { 38825 break 38826 } 38827 x5 := s4.Args[0] 38828 if x5.Op != OpPPC64MOVBZload { 38829 break 38830 } 38831 i5 := x5.AuxInt 38832 if x5.Aux != s { 38833 break 38834 } 38835 _ = x5.Args[1] 38836 if p != x5.Args[0] { 38837 break 38838 } 38839 if mem != x5.Args[1] { 38840 break 38841 } 38842 s5 := o5.Args[1] 38843 if s5.Op != OpPPC64SLDconst { 38844 break 38845 } 38846 if s5.AuxInt != 48 { 38847 break 38848 } 38849 x6 := s5.Args[0] 38850 if x6.Op != OpPPC64MOVBZload { 38851 break 38852 } 38853 i6 := x6.AuxInt 38854 if x6.Aux != s { 38855 break 38856 } 38857 _ = x6.Args[1] 38858 if p != x6.Args[0] { 38859 break 38860 } 38861 if mem != x6.Args[1] { 38862 break 38863 } 38864 s6 := v.Args[1] 38865 if s6.Op != OpPPC64SLDconst { 38866 break 38867 } 38868 if s6.AuxInt != 56 { 38869 break 38870 } 38871 x7 := s6.Args[0] 38872 if x7.Op != OpPPC64MOVBZload { 38873 break 38874 } 38875 i7 := x7.AuxInt 38876 if x7.Aux != s { 38877 break 38878 } 38879 _ = x7.Args[1] 38880 if p != x7.Args[0] { 38881 break 38882 } 38883 if mem != x7.Args[1] { 38884 break 38885 } 38886 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)) { 38887 break 38888 } 38889 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 38890 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 38891 v.reset(OpCopy) 38892 v.AddArg(v0) 38893 v0.AuxInt = i0 38894 v0.Aux = s 38895 v0.AddArg(p) 38896 v0.AddArg(mem) 38897 return true 38898 } 38899 // 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])) 38900 // 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) 38901 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 38902 for { 38903 t := v.Type 38904 _ = v.Args[1] 38905 o5 := v.Args[0] 38906 if o5.Op != OpPPC64OR { 38907 break 38908 } 38909 if o5.Type != t { 38910 break 38911 } 38912 _ = o5.Args[1] 38913 o4 := o5.Args[0] 38914 if o4.Op != OpPPC64OR { 38915 break 38916 } 38917 if o4.Type != t { 38918 break 38919 } 38920 _ = o4.Args[1] 38921 o3 := o4.Args[0] 38922 if o3.Op != OpPPC64OR { 38923 break 38924 } 38925 if o3.Type != t { 38926 break 38927 } 38928 _ = o3.Args[1] 38929 o2 := o3.Args[0] 38930 if o2.Op != OpPPC64OR { 38931 break 38932 } 38933 if o2.Type != t { 38934 break 38935 } 38936 _ = o2.Args[1] 38937 o1 := o2.Args[0] 38938 if o1.Op != OpPPC64OR { 38939 break 38940 } 38941 if o1.Type != t { 38942 break 38943 } 38944 _ = o1.Args[1] 38945 o0 := o1.Args[0] 38946 if o0.Op != OpPPC64OR { 38947 break 38948 } 38949 if o0.Type != t { 38950 break 38951 } 38952 _ = o0.Args[1] 38953 s0 := o0.Args[0] 38954 if s0.Op != OpPPC64SLDconst { 38955 break 38956 } 38957 if s0.AuxInt != 8 { 38958 break 38959 } 38960 x1 := s0.Args[0] 38961 if x1.Op != OpPPC64MOVBZload { 38962 break 38963 } 38964 i1 := x1.AuxInt 38965 s := x1.Aux 38966 _ = x1.Args[1] 38967 p := x1.Args[0] 38968 mem := x1.Args[1] 38969 x0 := o0.Args[1] 38970 if x0.Op != OpPPC64MOVBZload { 38971 break 38972 } 38973 i0 := x0.AuxInt 38974 if x0.Aux != s { 38975 break 38976 } 38977 _ = x0.Args[1] 38978 if p != x0.Args[0] { 38979 break 38980 } 38981 if mem != x0.Args[1] { 38982 break 38983 } 38984 s1 := o1.Args[1] 38985 if s1.Op != OpPPC64SLDconst { 38986 break 38987 } 38988 if s1.AuxInt != 16 { 38989 break 38990 } 38991 x2 := s1.Args[0] 38992 if x2.Op != OpPPC64MOVBZload { 38993 break 38994 } 38995 i2 := x2.AuxInt 38996 if x2.Aux != s { 38997 break 38998 } 38999 _ = x2.Args[1] 39000 if p != x2.Args[0] { 39001 break 39002 } 39003 if mem != x2.Args[1] { 39004 break 39005 } 39006 s2 := o2.Args[1] 39007 if s2.Op != OpPPC64SLDconst { 39008 break 39009 } 39010 if s2.AuxInt != 24 { 39011 break 39012 } 39013 x3 := s2.Args[0] 39014 if x3.Op != OpPPC64MOVBZload { 39015 break 39016 } 39017 i3 := x3.AuxInt 39018 if x3.Aux != s { 39019 break 39020 } 39021 _ = x3.Args[1] 39022 if p != x3.Args[0] { 39023 break 39024 } 39025 if mem != x3.Args[1] { 39026 break 39027 } 39028 s3 := o3.Args[1] 39029 if s3.Op != OpPPC64SLDconst { 39030 break 39031 } 39032 if s3.AuxInt != 32 { 39033 break 39034 } 39035 x4 := s3.Args[0] 39036 if x4.Op != OpPPC64MOVBZload { 39037 break 39038 } 39039 i4 := x4.AuxInt 39040 if x4.Aux != s { 39041 break 39042 } 39043 _ = x4.Args[1] 39044 if p != x4.Args[0] { 39045 break 39046 } 39047 if mem != x4.Args[1] { 39048 break 39049 } 39050 s4 := o4.Args[1] 39051 if s4.Op != OpPPC64SLDconst { 39052 break 39053 } 39054 if s4.AuxInt != 40 { 39055 break 39056 } 39057 x5 := s4.Args[0] 39058 if x5.Op != OpPPC64MOVBZload { 39059 break 39060 } 39061 i5 := x5.AuxInt 39062 if x5.Aux != s { 39063 break 39064 } 39065 _ = x5.Args[1] 39066 if p != x5.Args[0] { 39067 break 39068 } 39069 if mem != x5.Args[1] { 39070 break 39071 } 39072 s5 := o5.Args[1] 39073 if s5.Op != OpPPC64SLDconst { 39074 break 39075 } 39076 if s5.AuxInt != 48 { 39077 break 39078 } 39079 x6 := s5.Args[0] 39080 if x6.Op != OpPPC64MOVBZload { 39081 break 39082 } 39083 i6 := x6.AuxInt 39084 if x6.Aux != s { 39085 break 39086 } 39087 _ = x6.Args[1] 39088 if p != x6.Args[0] { 39089 break 39090 } 39091 if mem != x6.Args[1] { 39092 break 39093 } 39094 s6 := v.Args[1] 39095 if s6.Op != OpPPC64SLDconst { 39096 break 39097 } 39098 if s6.AuxInt != 56 { 39099 break 39100 } 39101 x7 := s6.Args[0] 39102 if x7.Op != OpPPC64MOVBZload { 39103 break 39104 } 39105 i7 := x7.AuxInt 39106 if x7.Aux != s { 39107 break 39108 } 39109 _ = x7.Args[1] 39110 if p != x7.Args[0] { 39111 break 39112 } 39113 if mem != x7.Args[1] { 39114 break 39115 } 39116 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)) { 39117 break 39118 } 39119 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 39120 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 39121 v.reset(OpCopy) 39122 v.AddArg(v0) 39123 v0.AuxInt = i0 39124 v0.Aux = s 39125 v0.AddArg(p) 39126 v0.AddArg(mem) 39127 return true 39128 } 39129 // 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])) 39130 // 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) 39131 // result: @mergePoint(b,x0,x1,x2,x3,x4,x5,x6,x7) (MOVDload <t> {s} [i0] p mem) 39132 for { 39133 t := v.Type 39134 _ = v.Args[1] 39135 o5 := v.Args[0] 39136 if o5.Op != OpPPC64OR { 39137 break 39138 } 39139 if o5.Type != t { 39140 break 39141 } 39142 _ = o5.Args[1] 39143 o4 := o5.Args[0] 39144 if o4.Op != OpPPC64OR { 39145 break 39146 } 39147 if o4.Type != t { 39148 break 39149 } 39150 _ = o4.Args[1] 39151 o3 := o4.Args[0] 39152 if o3.Op != OpPPC64OR { 39153 break 39154 } 39155 if o3.Type != t { 39156 break 39157 } 39158 _ = o3.Args[1] 39159 o2 := o3.Args[0] 39160 if o2.Op != OpPPC64OR { 39161 break 39162 } 39163 if o2.Type != t { 39164 break 39165 } 39166 _ = o2.Args[1] 39167 o1 := o2.Args[0] 39168 if o1.Op != OpPPC64OR { 39169 break 39170 } 39171 if o1.Type != t { 39172 break 39173 } 39174 _ = o1.Args[1] 39175 o0 := o1.Args[0] 39176 if o0.Op != OpPPC64OR { 39177 break 39178 } 39179 if o0.Type != t { 39180 break 39181 } 39182 _ = o0.Args[1] 39183 x0 := o0.Args[0] 39184 if x0.Op != OpPPC64MOVBZload { 39185 break 39186 } 39187 i0 := x0.AuxInt 39188 s := x0.Aux 39189 _ = x0.Args[1] 39190 p := x0.Args[0] 39191 mem := x0.Args[1] 39192 s0 := o0.Args[1] 39193 if s0.Op != OpPPC64SLDconst { 39194 break 39195 } 39196 if s0.AuxInt != 8 { 39197 break 39198 } 39199 x1 := s0.Args[0] 39200 if x1.Op != OpPPC64MOVBZload { 39201 break 39202 } 39203 i1 := x1.AuxInt 39204 if x1.Aux != s { 39205 break 39206 } 39207 _ = x1.Args[1] 39208 if p != x1.Args[0] { 39209 break 39210 } 39211 if mem != x1.Args[1] { 39212 break 39213 } 39214 s1 := o1.Args[1] 39215 if s1.Op != OpPPC64SLDconst { 39216 break 39217 } 39218 if s1.AuxInt != 16 { 39219 break 39220 } 39221 x2 := s1.Args[0] 39222 if x2.Op != OpPPC64MOVBZload { 39223 break 39224 } 39225 i2 := x2.AuxInt 39226 if x2.Aux != s { 39227 break 39228 } 39229 _ = x2.Args[1] 39230 if p != x2.Args[0] { 39231 break 39232 } 39233 if mem != x2.Args[1] { 39234 break 39235 } 39236 s2 := o2.Args[1] 39237 if s2.Op != OpPPC64SLDconst { 39238 break 39239 } 39240 if s2.AuxInt != 24 { 39241 break 39242 } 39243 x3 := s2.Args[0] 39244 if x3.Op != OpPPC64MOVBZload { 39245 break 39246 } 39247 i3 := x3.AuxInt 39248 if x3.Aux != s { 39249 break 39250 } 39251 _ = x3.Args[1] 39252 if p != x3.Args[0] { 39253 break 39254 } 39255 if mem != x3.Args[1] { 39256 break 39257 } 39258 s3 := o3.Args[1] 39259 if s3.Op != OpPPC64SLDconst { 39260 break 39261 } 39262 if s3.AuxInt != 32 { 39263 break 39264 } 39265 x4 := s3.Args[0] 39266 if x4.Op != OpPPC64MOVBZload { 39267 break 39268 } 39269 i4 := x4.AuxInt 39270 if x4.Aux != s { 39271 break 39272 } 39273 _ = x4.Args[1] 39274 if p != x4.Args[0] { 39275 break 39276 } 39277 if mem != x4.Args[1] { 39278 break 39279 } 39280 s4 := o4.Args[1] 39281 if s4.Op != OpPPC64SLDconst { 39282 break 39283 } 39284 if s4.AuxInt != 40 { 39285 break 39286 } 39287 x5 := s4.Args[0] 39288 if x5.Op != OpPPC64MOVBZload { 39289 break 39290 } 39291 i5 := x5.AuxInt 39292 if x5.Aux != s { 39293 break 39294 } 39295 _ = x5.Args[1] 39296 if p != x5.Args[0] { 39297 break 39298 } 39299 if mem != x5.Args[1] { 39300 break 39301 } 39302 s5 := o5.Args[1] 39303 if s5.Op != OpPPC64SLDconst { 39304 break 39305 } 39306 if s5.AuxInt != 48 { 39307 break 39308 } 39309 x6 := s5.Args[0] 39310 if x6.Op != OpPPC64MOVBZload { 39311 break 39312 } 39313 i6 := x6.AuxInt 39314 if x6.Aux != s { 39315 break 39316 } 39317 _ = x6.Args[1] 39318 if p != x6.Args[0] { 39319 break 39320 } 39321 if mem != x6.Args[1] { 39322 break 39323 } 39324 s6 := v.Args[1] 39325 if s6.Op != OpPPC64SLDconst { 39326 break 39327 } 39328 if s6.AuxInt != 56 { 39329 break 39330 } 39331 x7 := s6.Args[0] 39332 if x7.Op != OpPPC64MOVBZload { 39333 break 39334 } 39335 i7 := x7.AuxInt 39336 if x7.Aux != s { 39337 break 39338 } 39339 _ = x7.Args[1] 39340 if p != x7.Args[0] { 39341 break 39342 } 39343 if mem != x7.Args[1] { 39344 break 39345 } 39346 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)) { 39347 break 39348 } 39349 b = mergePoint(b, x0, x1, x2, x3, x4, x5, x6, x7) 39350 v0 := b.NewValue0(v.Pos, OpPPC64MOVDload, t) 39351 v.reset(OpCopy) 39352 v.AddArg(v0) 39353 v0.AuxInt = i0 39354 v0.Aux = s 39355 v0.AddArg(p) 39356 v0.AddArg(mem) 39357 return true 39358 } 39359 return false 39360 } 39361 func rewriteValuePPC64_OpPPC64ORN_0(v *Value) bool { 39362 // match: (ORN x (MOVDconst [-1])) 39363 // cond: 39364 // result: x 39365 for { 39366 _ = v.Args[1] 39367 x := v.Args[0] 39368 v_1 := v.Args[1] 39369 if v_1.Op != OpPPC64MOVDconst { 39370 break 39371 } 39372 if v_1.AuxInt != -1 { 39373 break 39374 } 39375 v.reset(OpCopy) 39376 v.Type = x.Type 39377 v.AddArg(x) 39378 return true 39379 } 39380 return false 39381 } 39382 func rewriteValuePPC64_OpPPC64ORconst_0(v *Value) bool { 39383 // match: (ORconst [c] (ORconst [d] x)) 39384 // cond: 39385 // result: (ORconst [c|d] x) 39386 for { 39387 c := v.AuxInt 39388 v_0 := v.Args[0] 39389 if v_0.Op != OpPPC64ORconst { 39390 break 39391 } 39392 d := v_0.AuxInt 39393 x := v_0.Args[0] 39394 v.reset(OpPPC64ORconst) 39395 v.AuxInt = c | d 39396 v.AddArg(x) 39397 return true 39398 } 39399 // match: (ORconst [-1] _) 39400 // cond: 39401 // result: (MOVDconst [-1]) 39402 for { 39403 if v.AuxInt != -1 { 39404 break 39405 } 39406 v.reset(OpPPC64MOVDconst) 39407 v.AuxInt = -1 39408 return true 39409 } 39410 // match: (ORconst [0] x) 39411 // cond: 39412 // result: x 39413 for { 39414 if v.AuxInt != 0 { 39415 break 39416 } 39417 x := v.Args[0] 39418 v.reset(OpCopy) 39419 v.Type = x.Type 39420 v.AddArg(x) 39421 return true 39422 } 39423 return false 39424 } 39425 func rewriteValuePPC64_OpPPC64SUB_0(v *Value) bool { 39426 // match: (SUB x (MOVDconst [c])) 39427 // cond: is32Bit(-c) 39428 // result: (ADDconst [-c] x) 39429 for { 39430 _ = v.Args[1] 39431 x := v.Args[0] 39432 v_1 := v.Args[1] 39433 if v_1.Op != OpPPC64MOVDconst { 39434 break 39435 } 39436 c := v_1.AuxInt 39437 if !(is32Bit(-c)) { 39438 break 39439 } 39440 v.reset(OpPPC64ADDconst) 39441 v.AuxInt = -c 39442 v.AddArg(x) 39443 return true 39444 } 39445 return false 39446 } 39447 func rewriteValuePPC64_OpPPC64XOR_0(v *Value) bool { 39448 b := v.Block 39449 _ = b 39450 typ := &b.Func.Config.Types 39451 _ = typ 39452 // match: (XOR (SLDconst x [c]) (SRDconst x [d])) 39453 // cond: d == 64-c 39454 // result: (ROTLconst [c] x) 39455 for { 39456 _ = v.Args[1] 39457 v_0 := v.Args[0] 39458 if v_0.Op != OpPPC64SLDconst { 39459 break 39460 } 39461 c := v_0.AuxInt 39462 x := v_0.Args[0] 39463 v_1 := v.Args[1] 39464 if v_1.Op != OpPPC64SRDconst { 39465 break 39466 } 39467 d := v_1.AuxInt 39468 if x != v_1.Args[0] { 39469 break 39470 } 39471 if !(d == 64-c) { 39472 break 39473 } 39474 v.reset(OpPPC64ROTLconst) 39475 v.AuxInt = c 39476 v.AddArg(x) 39477 return true 39478 } 39479 // match: (XOR (SRDconst x [d]) (SLDconst x [c])) 39480 // cond: d == 64-c 39481 // result: (ROTLconst [c] x) 39482 for { 39483 _ = v.Args[1] 39484 v_0 := v.Args[0] 39485 if v_0.Op != OpPPC64SRDconst { 39486 break 39487 } 39488 d := v_0.AuxInt 39489 x := v_0.Args[0] 39490 v_1 := v.Args[1] 39491 if v_1.Op != OpPPC64SLDconst { 39492 break 39493 } 39494 c := v_1.AuxInt 39495 if x != v_1.Args[0] { 39496 break 39497 } 39498 if !(d == 64-c) { 39499 break 39500 } 39501 v.reset(OpPPC64ROTLconst) 39502 v.AuxInt = c 39503 v.AddArg(x) 39504 return true 39505 } 39506 // match: (XOR (SLWconst x [c]) (SRWconst x [d])) 39507 // cond: d == 32-c 39508 // result: (ROTLWconst [c] x) 39509 for { 39510 _ = v.Args[1] 39511 v_0 := v.Args[0] 39512 if v_0.Op != OpPPC64SLWconst { 39513 break 39514 } 39515 c := v_0.AuxInt 39516 x := v_0.Args[0] 39517 v_1 := v.Args[1] 39518 if v_1.Op != OpPPC64SRWconst { 39519 break 39520 } 39521 d := v_1.AuxInt 39522 if x != v_1.Args[0] { 39523 break 39524 } 39525 if !(d == 32-c) { 39526 break 39527 } 39528 v.reset(OpPPC64ROTLWconst) 39529 v.AuxInt = c 39530 v.AddArg(x) 39531 return true 39532 } 39533 // match: (XOR (SRWconst x [d]) (SLWconst x [c])) 39534 // cond: d == 32-c 39535 // result: (ROTLWconst [c] x) 39536 for { 39537 _ = v.Args[1] 39538 v_0 := v.Args[0] 39539 if v_0.Op != OpPPC64SRWconst { 39540 break 39541 } 39542 d := v_0.AuxInt 39543 x := v_0.Args[0] 39544 v_1 := v.Args[1] 39545 if v_1.Op != OpPPC64SLWconst { 39546 break 39547 } 39548 c := v_1.AuxInt 39549 if x != v_1.Args[0] { 39550 break 39551 } 39552 if !(d == 32-c) { 39553 break 39554 } 39555 v.reset(OpPPC64ROTLWconst) 39556 v.AuxInt = c 39557 v.AddArg(x) 39558 return true 39559 } 39560 // match: (XOR (SLD x (ANDconst <typ.Int64> [63] y)) (SRD x (SUB <typ.UInt> (MOVDconst [64]) (ANDconst <typ.UInt> [63] y)))) 39561 // cond: 39562 // result: (ROTL x y) 39563 for { 39564 _ = v.Args[1] 39565 v_0 := v.Args[0] 39566 if v_0.Op != OpPPC64SLD { 39567 break 39568 } 39569 _ = v_0.Args[1] 39570 x := v_0.Args[0] 39571 v_0_1 := v_0.Args[1] 39572 if v_0_1.Op != OpPPC64ANDconst { 39573 break 39574 } 39575 if v_0_1.Type != typ.Int64 { 39576 break 39577 } 39578 if v_0_1.AuxInt != 63 { 39579 break 39580 } 39581 y := v_0_1.Args[0] 39582 v_1 := v.Args[1] 39583 if v_1.Op != OpPPC64SRD { 39584 break 39585 } 39586 _ = v_1.Args[1] 39587 if x != v_1.Args[0] { 39588 break 39589 } 39590 v_1_1 := v_1.Args[1] 39591 if v_1_1.Op != OpPPC64SUB { 39592 break 39593 } 39594 if v_1_1.Type != typ.UInt { 39595 break 39596 } 39597 _ = v_1_1.Args[1] 39598 v_1_1_0 := v_1_1.Args[0] 39599 if v_1_1_0.Op != OpPPC64MOVDconst { 39600 break 39601 } 39602 if v_1_1_0.AuxInt != 64 { 39603 break 39604 } 39605 v_1_1_1 := v_1_1.Args[1] 39606 if v_1_1_1.Op != OpPPC64ANDconst { 39607 break 39608 } 39609 if v_1_1_1.Type != typ.UInt { 39610 break 39611 } 39612 if v_1_1_1.AuxInt != 63 { 39613 break 39614 } 39615 if y != v_1_1_1.Args[0] { 39616 break 39617 } 39618 v.reset(OpPPC64ROTL) 39619 v.AddArg(x) 39620 v.AddArg(y) 39621 return true 39622 } 39623 // match: (XOR (SRD x (SUB <typ.UInt> (MOVDconst [64]) (ANDconst <typ.UInt> [63] y))) (SLD x (ANDconst <typ.Int64> [63] y))) 39624 // cond: 39625 // result: (ROTL x y) 39626 for { 39627 _ = v.Args[1] 39628 v_0 := v.Args[0] 39629 if v_0.Op != OpPPC64SRD { 39630 break 39631 } 39632 _ = v_0.Args[1] 39633 x := v_0.Args[0] 39634 v_0_1 := v_0.Args[1] 39635 if v_0_1.Op != OpPPC64SUB { 39636 break 39637 } 39638 if v_0_1.Type != typ.UInt { 39639 break 39640 } 39641 _ = v_0_1.Args[1] 39642 v_0_1_0 := v_0_1.Args[0] 39643 if v_0_1_0.Op != OpPPC64MOVDconst { 39644 break 39645 } 39646 if v_0_1_0.AuxInt != 64 { 39647 break 39648 } 39649 v_0_1_1 := v_0_1.Args[1] 39650 if v_0_1_1.Op != OpPPC64ANDconst { 39651 break 39652 } 39653 if v_0_1_1.Type != typ.UInt { 39654 break 39655 } 39656 if v_0_1_1.AuxInt != 63 { 39657 break 39658 } 39659 y := v_0_1_1.Args[0] 39660 v_1 := v.Args[1] 39661 if v_1.Op != OpPPC64SLD { 39662 break 39663 } 39664 _ = v_1.Args[1] 39665 if x != v_1.Args[0] { 39666 break 39667 } 39668 v_1_1 := v_1.Args[1] 39669 if v_1_1.Op != OpPPC64ANDconst { 39670 break 39671 } 39672 if v_1_1.Type != typ.Int64 { 39673 break 39674 } 39675 if v_1_1.AuxInt != 63 { 39676 break 39677 } 39678 if y != v_1_1.Args[0] { 39679 break 39680 } 39681 v.reset(OpPPC64ROTL) 39682 v.AddArg(x) 39683 v.AddArg(y) 39684 return true 39685 } 39686 // match: (XOR (SLW x (ANDconst <typ.Int32> [31] y)) (SRW x (SUB <typ.UInt> (MOVDconst [32]) (ANDconst <typ.UInt> [31] y)))) 39687 // cond: 39688 // result: (ROTLW x y) 39689 for { 39690 _ = v.Args[1] 39691 v_0 := v.Args[0] 39692 if v_0.Op != OpPPC64SLW { 39693 break 39694 } 39695 _ = v_0.Args[1] 39696 x := v_0.Args[0] 39697 v_0_1 := v_0.Args[1] 39698 if v_0_1.Op != OpPPC64ANDconst { 39699 break 39700 } 39701 if v_0_1.Type != typ.Int32 { 39702 break 39703 } 39704 if v_0_1.AuxInt != 31 { 39705 break 39706 } 39707 y := v_0_1.Args[0] 39708 v_1 := v.Args[1] 39709 if v_1.Op != OpPPC64SRW { 39710 break 39711 } 39712 _ = v_1.Args[1] 39713 if x != v_1.Args[0] { 39714 break 39715 } 39716 v_1_1 := v_1.Args[1] 39717 if v_1_1.Op != OpPPC64SUB { 39718 break 39719 } 39720 if v_1_1.Type != typ.UInt { 39721 break 39722 } 39723 _ = v_1_1.Args[1] 39724 v_1_1_0 := v_1_1.Args[0] 39725 if v_1_1_0.Op != OpPPC64MOVDconst { 39726 break 39727 } 39728 if v_1_1_0.AuxInt != 32 { 39729 break 39730 } 39731 v_1_1_1 := v_1_1.Args[1] 39732 if v_1_1_1.Op != OpPPC64ANDconst { 39733 break 39734 } 39735 if v_1_1_1.Type != typ.UInt { 39736 break 39737 } 39738 if v_1_1_1.AuxInt != 31 { 39739 break 39740 } 39741 if y != v_1_1_1.Args[0] { 39742 break 39743 } 39744 v.reset(OpPPC64ROTLW) 39745 v.AddArg(x) 39746 v.AddArg(y) 39747 return true 39748 } 39749 // match: (XOR (SRW x (SUB <typ.UInt> (MOVDconst [32]) (ANDconst <typ.UInt> [31] y))) (SLW x (ANDconst <typ.Int32> [31] y))) 39750 // cond: 39751 // result: (ROTLW x y) 39752 for { 39753 _ = v.Args[1] 39754 v_0 := v.Args[0] 39755 if v_0.Op != OpPPC64SRW { 39756 break 39757 } 39758 _ = v_0.Args[1] 39759 x := v_0.Args[0] 39760 v_0_1 := v_0.Args[1] 39761 if v_0_1.Op != OpPPC64SUB { 39762 break 39763 } 39764 if v_0_1.Type != typ.UInt { 39765 break 39766 } 39767 _ = v_0_1.Args[1] 39768 v_0_1_0 := v_0_1.Args[0] 39769 if v_0_1_0.Op != OpPPC64MOVDconst { 39770 break 39771 } 39772 if v_0_1_0.AuxInt != 32 { 39773 break 39774 } 39775 v_0_1_1 := v_0_1.Args[1] 39776 if v_0_1_1.Op != OpPPC64ANDconst { 39777 break 39778 } 39779 if v_0_1_1.Type != typ.UInt { 39780 break 39781 } 39782 if v_0_1_1.AuxInt != 31 { 39783 break 39784 } 39785 y := v_0_1_1.Args[0] 39786 v_1 := v.Args[1] 39787 if v_1.Op != OpPPC64SLW { 39788 break 39789 } 39790 _ = v_1.Args[1] 39791 if x != v_1.Args[0] { 39792 break 39793 } 39794 v_1_1 := v_1.Args[1] 39795 if v_1_1.Op != OpPPC64ANDconst { 39796 break 39797 } 39798 if v_1_1.Type != typ.Int32 { 39799 break 39800 } 39801 if v_1_1.AuxInt != 31 { 39802 break 39803 } 39804 if y != v_1_1.Args[0] { 39805 break 39806 } 39807 v.reset(OpPPC64ROTLW) 39808 v.AddArg(x) 39809 v.AddArg(y) 39810 return true 39811 } 39812 // match: (XOR (MOVDconst [c]) (MOVDconst [d])) 39813 // cond: 39814 // result: (MOVDconst [c^d]) 39815 for { 39816 _ = v.Args[1] 39817 v_0 := v.Args[0] 39818 if v_0.Op != OpPPC64MOVDconst { 39819 break 39820 } 39821 c := v_0.AuxInt 39822 v_1 := v.Args[1] 39823 if v_1.Op != OpPPC64MOVDconst { 39824 break 39825 } 39826 d := v_1.AuxInt 39827 v.reset(OpPPC64MOVDconst) 39828 v.AuxInt = c ^ d 39829 return true 39830 } 39831 // match: (XOR (MOVDconst [d]) (MOVDconst [c])) 39832 // cond: 39833 // result: (MOVDconst [c^d]) 39834 for { 39835 _ = v.Args[1] 39836 v_0 := v.Args[0] 39837 if v_0.Op != OpPPC64MOVDconst { 39838 break 39839 } 39840 d := v_0.AuxInt 39841 v_1 := v.Args[1] 39842 if v_1.Op != OpPPC64MOVDconst { 39843 break 39844 } 39845 c := v_1.AuxInt 39846 v.reset(OpPPC64MOVDconst) 39847 v.AuxInt = c ^ d 39848 return true 39849 } 39850 return false 39851 } 39852 func rewriteValuePPC64_OpPPC64XOR_10(v *Value) bool { 39853 // match: (XOR x (MOVDconst [c])) 39854 // cond: isU32Bit(c) 39855 // result: (XORconst [c] x) 39856 for { 39857 _ = v.Args[1] 39858 x := v.Args[0] 39859 v_1 := v.Args[1] 39860 if v_1.Op != OpPPC64MOVDconst { 39861 break 39862 } 39863 c := v_1.AuxInt 39864 if !(isU32Bit(c)) { 39865 break 39866 } 39867 v.reset(OpPPC64XORconst) 39868 v.AuxInt = c 39869 v.AddArg(x) 39870 return true 39871 } 39872 // match: (XOR (MOVDconst [c]) x) 39873 // cond: isU32Bit(c) 39874 // result: (XORconst [c] x) 39875 for { 39876 _ = v.Args[1] 39877 v_0 := v.Args[0] 39878 if v_0.Op != OpPPC64MOVDconst { 39879 break 39880 } 39881 c := v_0.AuxInt 39882 x := v.Args[1] 39883 if !(isU32Bit(c)) { 39884 break 39885 } 39886 v.reset(OpPPC64XORconst) 39887 v.AuxInt = c 39888 v.AddArg(x) 39889 return true 39890 } 39891 return false 39892 } 39893 func rewriteValuePPC64_OpPPC64XORconst_0(v *Value) bool { 39894 // match: (XORconst [c] (XORconst [d] x)) 39895 // cond: 39896 // result: (XORconst [c^d] x) 39897 for { 39898 c := v.AuxInt 39899 v_0 := v.Args[0] 39900 if v_0.Op != OpPPC64XORconst { 39901 break 39902 } 39903 d := v_0.AuxInt 39904 x := v_0.Args[0] 39905 v.reset(OpPPC64XORconst) 39906 v.AuxInt = c ^ d 39907 v.AddArg(x) 39908 return true 39909 } 39910 // match: (XORconst [0] x) 39911 // cond: 39912 // result: x 39913 for { 39914 if v.AuxInt != 0 { 39915 break 39916 } 39917 x := v.Args[0] 39918 v.reset(OpCopy) 39919 v.Type = x.Type 39920 v.AddArg(x) 39921 return true 39922 } 39923 return false 39924 } 39925 func rewriteValuePPC64_OpPopCount16_0(v *Value) bool { 39926 b := v.Block 39927 _ = b 39928 typ := &b.Func.Config.Types 39929 _ = typ 39930 // match: (PopCount16 x) 39931 // cond: 39932 // result: (POPCNTW (MOVHZreg x)) 39933 for { 39934 x := v.Args[0] 39935 v.reset(OpPPC64POPCNTW) 39936 v0 := b.NewValue0(v.Pos, OpPPC64MOVHZreg, typ.Int64) 39937 v0.AddArg(x) 39938 v.AddArg(v0) 39939 return true 39940 } 39941 } 39942 func rewriteValuePPC64_OpPopCount32_0(v *Value) bool { 39943 b := v.Block 39944 _ = b 39945 typ := &b.Func.Config.Types 39946 _ = typ 39947 // match: (PopCount32 x) 39948 // cond: 39949 // result: (POPCNTW (MOVWZreg x)) 39950 for { 39951 x := v.Args[0] 39952 v.reset(OpPPC64POPCNTW) 39953 v0 := b.NewValue0(v.Pos, OpPPC64MOVWZreg, typ.Int64) 39954 v0.AddArg(x) 39955 v.AddArg(v0) 39956 return true 39957 } 39958 } 39959 func rewriteValuePPC64_OpPopCount64_0(v *Value) bool { 39960 // match: (PopCount64 x) 39961 // cond: 39962 // result: (POPCNTD x) 39963 for { 39964 x := v.Args[0] 39965 v.reset(OpPPC64POPCNTD) 39966 v.AddArg(x) 39967 return true 39968 } 39969 } 39970 func rewriteValuePPC64_OpPopCount8_0(v *Value) bool { 39971 b := v.Block 39972 _ = b 39973 typ := &b.Func.Config.Types 39974 _ = typ 39975 // match: (PopCount8 x) 39976 // cond: 39977 // result: (POPCNTB (MOVBreg x)) 39978 for { 39979 x := v.Args[0] 39980 v.reset(OpPPC64POPCNTB) 39981 v0 := b.NewValue0(v.Pos, OpPPC64MOVBreg, typ.Int64) 39982 v0.AddArg(x) 39983 v.AddArg(v0) 39984 return true 39985 } 39986 } 39987 func rewriteValuePPC64_OpRound32F_0(v *Value) bool { 39988 // match: (Round32F x) 39989 // cond: 39990 // result: (LoweredRound32F x) 39991 for { 39992 x := v.Args[0] 39993 v.reset(OpPPC64LoweredRound32F) 39994 v.AddArg(x) 39995 return true 39996 } 39997 } 39998 func rewriteValuePPC64_OpRound64F_0(v *Value) bool { 39999 // match: (Round64F x) 40000 // cond: 40001 // result: (LoweredRound64F x) 40002 for { 40003 x := v.Args[0] 40004 v.reset(OpPPC64LoweredRound64F) 40005 v.AddArg(x) 40006 return true 40007 } 40008 } 40009 func rewriteValuePPC64_OpRsh16Ux16_0(v *Value) bool { 40010 b := v.Block 40011 _ = b 40012 typ := &b.Func.Config.Types 40013 _ = typ 40014 // match: (Rsh16Ux16 x y) 40015 // cond: 40016 // result: (SRW (ZeroExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt16to64 y))))) 40017 for { 40018 _ = v.Args[1] 40019 x := v.Args[0] 40020 y := v.Args[1] 40021 v.reset(OpPPC64SRW) 40022 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 40023 v0.AddArg(x) 40024 v.AddArg(v0) 40025 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 40026 v1.AddArg(y) 40027 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 40028 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 40029 v3.AuxInt = -16 40030 v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 40031 v4.AddArg(y) 40032 v3.AddArg(v4) 40033 v2.AddArg(v3) 40034 v1.AddArg(v2) 40035 v.AddArg(v1) 40036 return true 40037 } 40038 } 40039 func rewriteValuePPC64_OpRsh16Ux32_0(v *Value) bool { 40040 b := v.Block 40041 _ = b 40042 typ := &b.Func.Config.Types 40043 _ = typ 40044 // match: (Rsh16Ux32 x (Const64 [c])) 40045 // cond: uint32(c) < 16 40046 // result: (SRWconst (ZeroExt16to32 x) [c]) 40047 for { 40048 _ = v.Args[1] 40049 x := v.Args[0] 40050 v_1 := v.Args[1] 40051 if v_1.Op != OpConst64 { 40052 break 40053 } 40054 c := v_1.AuxInt 40055 if !(uint32(c) < 16) { 40056 break 40057 } 40058 v.reset(OpPPC64SRWconst) 40059 v.AuxInt = c 40060 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 40061 v0.AddArg(x) 40062 v.AddArg(v0) 40063 return true 40064 } 40065 // match: (Rsh16Ux32 x (MOVDconst [c])) 40066 // cond: uint32(c) < 16 40067 // result: (SRWconst (ZeroExt16to32 x) [c]) 40068 for { 40069 _ = v.Args[1] 40070 x := v.Args[0] 40071 v_1 := v.Args[1] 40072 if v_1.Op != OpPPC64MOVDconst { 40073 break 40074 } 40075 c := v_1.AuxInt 40076 if !(uint32(c) < 16) { 40077 break 40078 } 40079 v.reset(OpPPC64SRWconst) 40080 v.AuxInt = c 40081 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 40082 v0.AddArg(x) 40083 v.AddArg(v0) 40084 return true 40085 } 40086 // match: (Rsh16Ux32 x y) 40087 // cond: 40088 // result: (SRW (ZeroExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt32to64 y))))) 40089 for { 40090 _ = v.Args[1] 40091 x := v.Args[0] 40092 y := v.Args[1] 40093 v.reset(OpPPC64SRW) 40094 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 40095 v0.AddArg(x) 40096 v.AddArg(v0) 40097 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 40098 v1.AddArg(y) 40099 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 40100 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 40101 v3.AuxInt = -16 40102 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 40103 v4.AddArg(y) 40104 v3.AddArg(v4) 40105 v2.AddArg(v3) 40106 v1.AddArg(v2) 40107 v.AddArg(v1) 40108 return true 40109 } 40110 } 40111 func rewriteValuePPC64_OpRsh16Ux64_0(v *Value) bool { 40112 b := v.Block 40113 _ = b 40114 typ := &b.Func.Config.Types 40115 _ = typ 40116 // match: (Rsh16Ux64 x (Const64 [c])) 40117 // cond: uint64(c) < 16 40118 // result: (SRWconst (ZeroExt16to32 x) [c]) 40119 for { 40120 _ = v.Args[1] 40121 x := v.Args[0] 40122 v_1 := v.Args[1] 40123 if v_1.Op != OpConst64 { 40124 break 40125 } 40126 c := v_1.AuxInt 40127 if !(uint64(c) < 16) { 40128 break 40129 } 40130 v.reset(OpPPC64SRWconst) 40131 v.AuxInt = c 40132 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 40133 v0.AddArg(x) 40134 v.AddArg(v0) 40135 return true 40136 } 40137 // match: (Rsh16Ux64 _ (Const64 [c])) 40138 // cond: uint64(c) >= 16 40139 // result: (MOVDconst [0]) 40140 for { 40141 _ = v.Args[1] 40142 v_1 := v.Args[1] 40143 if v_1.Op != OpConst64 { 40144 break 40145 } 40146 c := v_1.AuxInt 40147 if !(uint64(c) >= 16) { 40148 break 40149 } 40150 v.reset(OpPPC64MOVDconst) 40151 v.AuxInt = 0 40152 return true 40153 } 40154 // match: (Rsh16Ux64 x (MOVDconst [c])) 40155 // cond: uint64(c) < 16 40156 // result: (SRWconst (ZeroExt16to32 x) [c]) 40157 for { 40158 _ = v.Args[1] 40159 x := v.Args[0] 40160 v_1 := v.Args[1] 40161 if v_1.Op != OpPPC64MOVDconst { 40162 break 40163 } 40164 c := v_1.AuxInt 40165 if !(uint64(c) < 16) { 40166 break 40167 } 40168 v.reset(OpPPC64SRWconst) 40169 v.AuxInt = c 40170 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 40171 v0.AddArg(x) 40172 v.AddArg(v0) 40173 return true 40174 } 40175 // match: (Rsh16Ux64 x y) 40176 // cond: 40177 // result: (SRW (ZeroExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] y)))) 40178 for { 40179 _ = v.Args[1] 40180 x := v.Args[0] 40181 y := v.Args[1] 40182 v.reset(OpPPC64SRW) 40183 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 40184 v0.AddArg(x) 40185 v.AddArg(v0) 40186 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 40187 v1.AddArg(y) 40188 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 40189 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 40190 v3.AuxInt = -16 40191 v3.AddArg(y) 40192 v2.AddArg(v3) 40193 v1.AddArg(v2) 40194 v.AddArg(v1) 40195 return true 40196 } 40197 } 40198 func rewriteValuePPC64_OpRsh16Ux8_0(v *Value) bool { 40199 b := v.Block 40200 _ = b 40201 typ := &b.Func.Config.Types 40202 _ = typ 40203 // match: (Rsh16Ux8 x y) 40204 // cond: 40205 // result: (SRW (ZeroExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt8to64 y))))) 40206 for { 40207 _ = v.Args[1] 40208 x := v.Args[0] 40209 y := v.Args[1] 40210 v.reset(OpPPC64SRW) 40211 v0 := b.NewValue0(v.Pos, OpZeroExt16to32, typ.UInt32) 40212 v0.AddArg(x) 40213 v.AddArg(v0) 40214 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 40215 v1.AddArg(y) 40216 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 40217 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 40218 v3.AuxInt = -16 40219 v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 40220 v4.AddArg(y) 40221 v3.AddArg(v4) 40222 v2.AddArg(v3) 40223 v1.AddArg(v2) 40224 v.AddArg(v1) 40225 return true 40226 } 40227 } 40228 func rewriteValuePPC64_OpRsh16x16_0(v *Value) bool { 40229 b := v.Block 40230 _ = b 40231 typ := &b.Func.Config.Types 40232 _ = typ 40233 // match: (Rsh16x16 x y) 40234 // cond: 40235 // result: (SRAW (SignExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt16to64 y))))) 40236 for { 40237 _ = v.Args[1] 40238 x := v.Args[0] 40239 y := v.Args[1] 40240 v.reset(OpPPC64SRAW) 40241 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 40242 v0.AddArg(x) 40243 v.AddArg(v0) 40244 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 40245 v1.AddArg(y) 40246 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 40247 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 40248 v3.AuxInt = -16 40249 v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 40250 v4.AddArg(y) 40251 v3.AddArg(v4) 40252 v2.AddArg(v3) 40253 v1.AddArg(v2) 40254 v.AddArg(v1) 40255 return true 40256 } 40257 } 40258 func rewriteValuePPC64_OpRsh16x32_0(v *Value) bool { 40259 b := v.Block 40260 _ = b 40261 typ := &b.Func.Config.Types 40262 _ = typ 40263 // match: (Rsh16x32 x (Const64 [c])) 40264 // cond: uint32(c) < 16 40265 // result: (SRAWconst (SignExt16to32 x) [c]) 40266 for { 40267 _ = v.Args[1] 40268 x := v.Args[0] 40269 v_1 := v.Args[1] 40270 if v_1.Op != OpConst64 { 40271 break 40272 } 40273 c := v_1.AuxInt 40274 if !(uint32(c) < 16) { 40275 break 40276 } 40277 v.reset(OpPPC64SRAWconst) 40278 v.AuxInt = c 40279 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 40280 v0.AddArg(x) 40281 v.AddArg(v0) 40282 return true 40283 } 40284 // match: (Rsh16x32 x (MOVDconst [c])) 40285 // cond: uint32(c) < 16 40286 // result: (SRAWconst (SignExt16to32 x) [c]) 40287 for { 40288 _ = v.Args[1] 40289 x := v.Args[0] 40290 v_1 := v.Args[1] 40291 if v_1.Op != OpPPC64MOVDconst { 40292 break 40293 } 40294 c := v_1.AuxInt 40295 if !(uint32(c) < 16) { 40296 break 40297 } 40298 v.reset(OpPPC64SRAWconst) 40299 v.AuxInt = c 40300 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 40301 v0.AddArg(x) 40302 v.AddArg(v0) 40303 return true 40304 } 40305 // match: (Rsh16x32 x y) 40306 // cond: 40307 // result: (SRAW (SignExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt32to64 y))))) 40308 for { 40309 _ = v.Args[1] 40310 x := v.Args[0] 40311 y := v.Args[1] 40312 v.reset(OpPPC64SRAW) 40313 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 40314 v0.AddArg(x) 40315 v.AddArg(v0) 40316 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 40317 v1.AddArg(y) 40318 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 40319 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 40320 v3.AuxInt = -16 40321 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 40322 v4.AddArg(y) 40323 v3.AddArg(v4) 40324 v2.AddArg(v3) 40325 v1.AddArg(v2) 40326 v.AddArg(v1) 40327 return true 40328 } 40329 } 40330 func rewriteValuePPC64_OpRsh16x64_0(v *Value) bool { 40331 b := v.Block 40332 _ = b 40333 typ := &b.Func.Config.Types 40334 _ = typ 40335 // match: (Rsh16x64 x (Const64 [c])) 40336 // cond: uint64(c) < 16 40337 // result: (SRAWconst (SignExt16to32 x) [c]) 40338 for { 40339 _ = v.Args[1] 40340 x := v.Args[0] 40341 v_1 := v.Args[1] 40342 if v_1.Op != OpConst64 { 40343 break 40344 } 40345 c := v_1.AuxInt 40346 if !(uint64(c) < 16) { 40347 break 40348 } 40349 v.reset(OpPPC64SRAWconst) 40350 v.AuxInt = c 40351 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 40352 v0.AddArg(x) 40353 v.AddArg(v0) 40354 return true 40355 } 40356 // match: (Rsh16x64 x (Const64 [c])) 40357 // cond: uint64(c) >= 16 40358 // result: (SRAWconst (SignExt16to32 x) [63]) 40359 for { 40360 _ = v.Args[1] 40361 x := v.Args[0] 40362 v_1 := v.Args[1] 40363 if v_1.Op != OpConst64 { 40364 break 40365 } 40366 c := v_1.AuxInt 40367 if !(uint64(c) >= 16) { 40368 break 40369 } 40370 v.reset(OpPPC64SRAWconst) 40371 v.AuxInt = 63 40372 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 40373 v0.AddArg(x) 40374 v.AddArg(v0) 40375 return true 40376 } 40377 // match: (Rsh16x64 x (MOVDconst [c])) 40378 // cond: uint64(c) < 16 40379 // result: (SRAWconst (SignExt16to32 x) [c]) 40380 for { 40381 _ = v.Args[1] 40382 x := v.Args[0] 40383 v_1 := v.Args[1] 40384 if v_1.Op != OpPPC64MOVDconst { 40385 break 40386 } 40387 c := v_1.AuxInt 40388 if !(uint64(c) < 16) { 40389 break 40390 } 40391 v.reset(OpPPC64SRAWconst) 40392 v.AuxInt = c 40393 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 40394 v0.AddArg(x) 40395 v.AddArg(v0) 40396 return true 40397 } 40398 // match: (Rsh16x64 x y) 40399 // cond: 40400 // result: (SRAW (SignExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] y)))) 40401 for { 40402 _ = v.Args[1] 40403 x := v.Args[0] 40404 y := v.Args[1] 40405 v.reset(OpPPC64SRAW) 40406 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 40407 v0.AddArg(x) 40408 v.AddArg(v0) 40409 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 40410 v1.AddArg(y) 40411 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 40412 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 40413 v3.AuxInt = -16 40414 v3.AddArg(y) 40415 v2.AddArg(v3) 40416 v1.AddArg(v2) 40417 v.AddArg(v1) 40418 return true 40419 } 40420 } 40421 func rewriteValuePPC64_OpRsh16x8_0(v *Value) bool { 40422 b := v.Block 40423 _ = b 40424 typ := &b.Func.Config.Types 40425 _ = typ 40426 // match: (Rsh16x8 x y) 40427 // cond: 40428 // result: (SRAW (SignExt16to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-16] (ZeroExt8to64 y))))) 40429 for { 40430 _ = v.Args[1] 40431 x := v.Args[0] 40432 y := v.Args[1] 40433 v.reset(OpPPC64SRAW) 40434 v0 := b.NewValue0(v.Pos, OpSignExt16to32, typ.Int32) 40435 v0.AddArg(x) 40436 v.AddArg(v0) 40437 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 40438 v1.AddArg(y) 40439 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 40440 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 40441 v3.AuxInt = -16 40442 v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 40443 v4.AddArg(y) 40444 v3.AddArg(v4) 40445 v2.AddArg(v3) 40446 v1.AddArg(v2) 40447 v.AddArg(v1) 40448 return true 40449 } 40450 } 40451 func rewriteValuePPC64_OpRsh32Ux16_0(v *Value) bool { 40452 b := v.Block 40453 _ = b 40454 typ := &b.Func.Config.Types 40455 _ = typ 40456 // match: (Rsh32Ux16 x y) 40457 // cond: 40458 // result: (SRW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt16to64 y))))) 40459 for { 40460 _ = v.Args[1] 40461 x := v.Args[0] 40462 y := v.Args[1] 40463 v.reset(OpPPC64SRW) 40464 v.AddArg(x) 40465 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 40466 v0.AddArg(y) 40467 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 40468 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 40469 v2.AuxInt = -32 40470 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 40471 v3.AddArg(y) 40472 v2.AddArg(v3) 40473 v1.AddArg(v2) 40474 v0.AddArg(v1) 40475 v.AddArg(v0) 40476 return true 40477 } 40478 } 40479 func rewriteValuePPC64_OpRsh32Ux32_0(v *Value) bool { 40480 b := v.Block 40481 _ = b 40482 typ := &b.Func.Config.Types 40483 _ = typ 40484 // match: (Rsh32Ux32 x (Const64 [c])) 40485 // cond: uint32(c) < 32 40486 // result: (SRWconst x [c]) 40487 for { 40488 _ = v.Args[1] 40489 x := v.Args[0] 40490 v_1 := v.Args[1] 40491 if v_1.Op != OpConst64 { 40492 break 40493 } 40494 c := v_1.AuxInt 40495 if !(uint32(c) < 32) { 40496 break 40497 } 40498 v.reset(OpPPC64SRWconst) 40499 v.AuxInt = c 40500 v.AddArg(x) 40501 return true 40502 } 40503 // match: (Rsh32Ux32 x (MOVDconst [c])) 40504 // cond: uint32(c) < 32 40505 // result: (SRWconst x [c]) 40506 for { 40507 _ = v.Args[1] 40508 x := v.Args[0] 40509 v_1 := v.Args[1] 40510 if v_1.Op != OpPPC64MOVDconst { 40511 break 40512 } 40513 c := v_1.AuxInt 40514 if !(uint32(c) < 32) { 40515 break 40516 } 40517 v.reset(OpPPC64SRWconst) 40518 v.AuxInt = c 40519 v.AddArg(x) 40520 return true 40521 } 40522 // match: (Rsh32Ux32 x y) 40523 // cond: 40524 // result: (SRW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt32to64 y))))) 40525 for { 40526 _ = v.Args[1] 40527 x := v.Args[0] 40528 y := v.Args[1] 40529 v.reset(OpPPC64SRW) 40530 v.AddArg(x) 40531 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 40532 v0.AddArg(y) 40533 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 40534 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 40535 v2.AuxInt = -32 40536 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 40537 v3.AddArg(y) 40538 v2.AddArg(v3) 40539 v1.AddArg(v2) 40540 v0.AddArg(v1) 40541 v.AddArg(v0) 40542 return true 40543 } 40544 } 40545 func rewriteValuePPC64_OpRsh32Ux64_0(v *Value) bool { 40546 b := v.Block 40547 _ = b 40548 typ := &b.Func.Config.Types 40549 _ = typ 40550 // match: (Rsh32Ux64 x (Const64 [c])) 40551 // cond: uint64(c) < 32 40552 // result: (SRWconst x [c]) 40553 for { 40554 _ = v.Args[1] 40555 x := v.Args[0] 40556 v_1 := v.Args[1] 40557 if v_1.Op != OpConst64 { 40558 break 40559 } 40560 c := v_1.AuxInt 40561 if !(uint64(c) < 32) { 40562 break 40563 } 40564 v.reset(OpPPC64SRWconst) 40565 v.AuxInt = c 40566 v.AddArg(x) 40567 return true 40568 } 40569 // match: (Rsh32Ux64 _ (Const64 [c])) 40570 // cond: uint64(c) >= 32 40571 // result: (MOVDconst [0]) 40572 for { 40573 _ = v.Args[1] 40574 v_1 := v.Args[1] 40575 if v_1.Op != OpConst64 { 40576 break 40577 } 40578 c := v_1.AuxInt 40579 if !(uint64(c) >= 32) { 40580 break 40581 } 40582 v.reset(OpPPC64MOVDconst) 40583 v.AuxInt = 0 40584 return true 40585 } 40586 // match: (Rsh32Ux64 x (MOVDconst [c])) 40587 // cond: uint64(c) < 32 40588 // result: (SRWconst x [c]) 40589 for { 40590 _ = v.Args[1] 40591 x := v.Args[0] 40592 v_1 := v.Args[1] 40593 if v_1.Op != OpPPC64MOVDconst { 40594 break 40595 } 40596 c := v_1.AuxInt 40597 if !(uint64(c) < 32) { 40598 break 40599 } 40600 v.reset(OpPPC64SRWconst) 40601 v.AuxInt = c 40602 v.AddArg(x) 40603 return true 40604 } 40605 // match: (Rsh32Ux64 x (AND y (MOVDconst [31]))) 40606 // cond: 40607 // result: (SRW x (ANDconst <typ.Int32> [31] y)) 40608 for { 40609 _ = v.Args[1] 40610 x := v.Args[0] 40611 v_1 := v.Args[1] 40612 if v_1.Op != OpPPC64AND { 40613 break 40614 } 40615 _ = v_1.Args[1] 40616 y := v_1.Args[0] 40617 v_1_1 := v_1.Args[1] 40618 if v_1_1.Op != OpPPC64MOVDconst { 40619 break 40620 } 40621 if v_1_1.AuxInt != 31 { 40622 break 40623 } 40624 v.reset(OpPPC64SRW) 40625 v.AddArg(x) 40626 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32) 40627 v0.AuxInt = 31 40628 v0.AddArg(y) 40629 v.AddArg(v0) 40630 return true 40631 } 40632 // match: (Rsh32Ux64 x (AND (MOVDconst [31]) y)) 40633 // cond: 40634 // result: (SRW x (ANDconst <typ.Int32> [31] y)) 40635 for { 40636 _ = v.Args[1] 40637 x := v.Args[0] 40638 v_1 := v.Args[1] 40639 if v_1.Op != OpPPC64AND { 40640 break 40641 } 40642 _ = v_1.Args[1] 40643 v_1_0 := v_1.Args[0] 40644 if v_1_0.Op != OpPPC64MOVDconst { 40645 break 40646 } 40647 if v_1_0.AuxInt != 31 { 40648 break 40649 } 40650 y := v_1.Args[1] 40651 v.reset(OpPPC64SRW) 40652 v.AddArg(x) 40653 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32) 40654 v0.AuxInt = 31 40655 v0.AddArg(y) 40656 v.AddArg(v0) 40657 return true 40658 } 40659 // match: (Rsh32Ux64 x (ANDconst <typ.UInt> [31] y)) 40660 // cond: 40661 // result: (SRW x (ANDconst <typ.UInt> [31] y)) 40662 for { 40663 _ = v.Args[1] 40664 x := v.Args[0] 40665 v_1 := v.Args[1] 40666 if v_1.Op != OpPPC64ANDconst { 40667 break 40668 } 40669 if v_1.Type != typ.UInt { 40670 break 40671 } 40672 if v_1.AuxInt != 31 { 40673 break 40674 } 40675 y := v_1.Args[0] 40676 v.reset(OpPPC64SRW) 40677 v.AddArg(x) 40678 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 40679 v0.AuxInt = 31 40680 v0.AddArg(y) 40681 v.AddArg(v0) 40682 return true 40683 } 40684 // match: (Rsh32Ux64 x (SUB <typ.UInt> (MOVDconst [32]) (ANDconst <typ.UInt> [31] y))) 40685 // cond: 40686 // result: (SRW x (SUB <typ.UInt> (MOVDconst [32]) (ANDconst <typ.UInt> [31] y))) 40687 for { 40688 _ = v.Args[1] 40689 x := v.Args[0] 40690 v_1 := v.Args[1] 40691 if v_1.Op != OpPPC64SUB { 40692 break 40693 } 40694 if v_1.Type != typ.UInt { 40695 break 40696 } 40697 _ = v_1.Args[1] 40698 v_1_0 := v_1.Args[0] 40699 if v_1_0.Op != OpPPC64MOVDconst { 40700 break 40701 } 40702 if v_1_0.AuxInt != 32 { 40703 break 40704 } 40705 v_1_1 := v_1.Args[1] 40706 if v_1_1.Op != OpPPC64ANDconst { 40707 break 40708 } 40709 if v_1_1.Type != typ.UInt { 40710 break 40711 } 40712 if v_1_1.AuxInt != 31 { 40713 break 40714 } 40715 y := v_1_1.Args[0] 40716 v.reset(OpPPC64SRW) 40717 v.AddArg(x) 40718 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) 40719 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 40720 v1.AuxInt = 32 40721 v0.AddArg(v1) 40722 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 40723 v2.AuxInt = 31 40724 v2.AddArg(y) 40725 v0.AddArg(v2) 40726 v.AddArg(v0) 40727 return true 40728 } 40729 // match: (Rsh32Ux64 x (SUB <typ.UInt> (MOVDconst [32]) (AND <typ.UInt> y (MOVDconst [31])))) 40730 // cond: 40731 // result: (SRW x (SUB <typ.UInt> (MOVDconst [32]) (ANDconst <typ.UInt> [31] y))) 40732 for { 40733 _ = v.Args[1] 40734 x := v.Args[0] 40735 v_1 := v.Args[1] 40736 if v_1.Op != OpPPC64SUB { 40737 break 40738 } 40739 if v_1.Type != typ.UInt { 40740 break 40741 } 40742 _ = v_1.Args[1] 40743 v_1_0 := v_1.Args[0] 40744 if v_1_0.Op != OpPPC64MOVDconst { 40745 break 40746 } 40747 if v_1_0.AuxInt != 32 { 40748 break 40749 } 40750 v_1_1 := v_1.Args[1] 40751 if v_1_1.Op != OpPPC64AND { 40752 break 40753 } 40754 if v_1_1.Type != typ.UInt { 40755 break 40756 } 40757 _ = v_1_1.Args[1] 40758 y := v_1_1.Args[0] 40759 v_1_1_1 := v_1_1.Args[1] 40760 if v_1_1_1.Op != OpPPC64MOVDconst { 40761 break 40762 } 40763 if v_1_1_1.AuxInt != 31 { 40764 break 40765 } 40766 v.reset(OpPPC64SRW) 40767 v.AddArg(x) 40768 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) 40769 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 40770 v1.AuxInt = 32 40771 v0.AddArg(v1) 40772 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 40773 v2.AuxInt = 31 40774 v2.AddArg(y) 40775 v0.AddArg(v2) 40776 v.AddArg(v0) 40777 return true 40778 } 40779 // match: (Rsh32Ux64 x (SUB <typ.UInt> (MOVDconst [32]) (AND <typ.UInt> (MOVDconst [31]) y))) 40780 // cond: 40781 // result: (SRW x (SUB <typ.UInt> (MOVDconst [32]) (ANDconst <typ.UInt> [31] y))) 40782 for { 40783 _ = v.Args[1] 40784 x := v.Args[0] 40785 v_1 := v.Args[1] 40786 if v_1.Op != OpPPC64SUB { 40787 break 40788 } 40789 if v_1.Type != typ.UInt { 40790 break 40791 } 40792 _ = v_1.Args[1] 40793 v_1_0 := v_1.Args[0] 40794 if v_1_0.Op != OpPPC64MOVDconst { 40795 break 40796 } 40797 if v_1_0.AuxInt != 32 { 40798 break 40799 } 40800 v_1_1 := v_1.Args[1] 40801 if v_1_1.Op != OpPPC64AND { 40802 break 40803 } 40804 if v_1_1.Type != typ.UInt { 40805 break 40806 } 40807 _ = v_1_1.Args[1] 40808 v_1_1_0 := v_1_1.Args[0] 40809 if v_1_1_0.Op != OpPPC64MOVDconst { 40810 break 40811 } 40812 if v_1_1_0.AuxInt != 31 { 40813 break 40814 } 40815 y := v_1_1.Args[1] 40816 v.reset(OpPPC64SRW) 40817 v.AddArg(x) 40818 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) 40819 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 40820 v1.AuxInt = 32 40821 v0.AddArg(v1) 40822 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 40823 v2.AuxInt = 31 40824 v2.AddArg(y) 40825 v0.AddArg(v2) 40826 v.AddArg(v0) 40827 return true 40828 } 40829 // match: (Rsh32Ux64 x y) 40830 // cond: 40831 // result: (SRW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] y)))) 40832 for { 40833 _ = v.Args[1] 40834 x := v.Args[0] 40835 y := v.Args[1] 40836 v.reset(OpPPC64SRW) 40837 v.AddArg(x) 40838 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 40839 v0.AddArg(y) 40840 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 40841 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 40842 v2.AuxInt = -32 40843 v2.AddArg(y) 40844 v1.AddArg(v2) 40845 v0.AddArg(v1) 40846 v.AddArg(v0) 40847 return true 40848 } 40849 } 40850 func rewriteValuePPC64_OpRsh32Ux8_0(v *Value) bool { 40851 b := v.Block 40852 _ = b 40853 typ := &b.Func.Config.Types 40854 _ = typ 40855 // match: (Rsh32Ux8 x y) 40856 // cond: 40857 // result: (SRW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt8to64 y))))) 40858 for { 40859 _ = v.Args[1] 40860 x := v.Args[0] 40861 y := v.Args[1] 40862 v.reset(OpPPC64SRW) 40863 v.AddArg(x) 40864 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 40865 v0.AddArg(y) 40866 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 40867 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 40868 v2.AuxInt = -32 40869 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 40870 v3.AddArg(y) 40871 v2.AddArg(v3) 40872 v1.AddArg(v2) 40873 v0.AddArg(v1) 40874 v.AddArg(v0) 40875 return true 40876 } 40877 } 40878 func rewriteValuePPC64_OpRsh32x16_0(v *Value) bool { 40879 b := v.Block 40880 _ = b 40881 typ := &b.Func.Config.Types 40882 _ = typ 40883 // match: (Rsh32x16 x y) 40884 // cond: 40885 // result: (SRAW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt16to64 y))))) 40886 for { 40887 _ = v.Args[1] 40888 x := v.Args[0] 40889 y := v.Args[1] 40890 v.reset(OpPPC64SRAW) 40891 v.AddArg(x) 40892 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 40893 v0.AddArg(y) 40894 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 40895 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 40896 v2.AuxInt = -32 40897 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 40898 v3.AddArg(y) 40899 v2.AddArg(v3) 40900 v1.AddArg(v2) 40901 v0.AddArg(v1) 40902 v.AddArg(v0) 40903 return true 40904 } 40905 } 40906 func rewriteValuePPC64_OpRsh32x32_0(v *Value) bool { 40907 b := v.Block 40908 _ = b 40909 typ := &b.Func.Config.Types 40910 _ = typ 40911 // match: (Rsh32x32 x (Const64 [c])) 40912 // cond: uint32(c) < 32 40913 // result: (SRAWconst x [c]) 40914 for { 40915 _ = v.Args[1] 40916 x := v.Args[0] 40917 v_1 := v.Args[1] 40918 if v_1.Op != OpConst64 { 40919 break 40920 } 40921 c := v_1.AuxInt 40922 if !(uint32(c) < 32) { 40923 break 40924 } 40925 v.reset(OpPPC64SRAWconst) 40926 v.AuxInt = c 40927 v.AddArg(x) 40928 return true 40929 } 40930 // match: (Rsh32x32 x (MOVDconst [c])) 40931 // cond: uint32(c) < 32 40932 // result: (SRAWconst x [c]) 40933 for { 40934 _ = v.Args[1] 40935 x := v.Args[0] 40936 v_1 := v.Args[1] 40937 if v_1.Op != OpPPC64MOVDconst { 40938 break 40939 } 40940 c := v_1.AuxInt 40941 if !(uint32(c) < 32) { 40942 break 40943 } 40944 v.reset(OpPPC64SRAWconst) 40945 v.AuxInt = c 40946 v.AddArg(x) 40947 return true 40948 } 40949 // match: (Rsh32x32 x y) 40950 // cond: 40951 // result: (SRAW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt32to64 y))))) 40952 for { 40953 _ = v.Args[1] 40954 x := v.Args[0] 40955 y := v.Args[1] 40956 v.reset(OpPPC64SRAW) 40957 v.AddArg(x) 40958 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 40959 v0.AddArg(y) 40960 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 40961 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 40962 v2.AuxInt = -32 40963 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 40964 v3.AddArg(y) 40965 v2.AddArg(v3) 40966 v1.AddArg(v2) 40967 v0.AddArg(v1) 40968 v.AddArg(v0) 40969 return true 40970 } 40971 } 40972 func rewriteValuePPC64_OpRsh32x64_0(v *Value) bool { 40973 b := v.Block 40974 _ = b 40975 typ := &b.Func.Config.Types 40976 _ = typ 40977 // match: (Rsh32x64 x (Const64 [c])) 40978 // cond: uint64(c) < 32 40979 // result: (SRAWconst x [c]) 40980 for { 40981 _ = v.Args[1] 40982 x := v.Args[0] 40983 v_1 := v.Args[1] 40984 if v_1.Op != OpConst64 { 40985 break 40986 } 40987 c := v_1.AuxInt 40988 if !(uint64(c) < 32) { 40989 break 40990 } 40991 v.reset(OpPPC64SRAWconst) 40992 v.AuxInt = c 40993 v.AddArg(x) 40994 return true 40995 } 40996 // match: (Rsh32x64 x (Const64 [c])) 40997 // cond: uint64(c) >= 32 40998 // result: (SRAWconst x [63]) 40999 for { 41000 _ = v.Args[1] 41001 x := v.Args[0] 41002 v_1 := v.Args[1] 41003 if v_1.Op != OpConst64 { 41004 break 41005 } 41006 c := v_1.AuxInt 41007 if !(uint64(c) >= 32) { 41008 break 41009 } 41010 v.reset(OpPPC64SRAWconst) 41011 v.AuxInt = 63 41012 v.AddArg(x) 41013 return true 41014 } 41015 // match: (Rsh32x64 x (MOVDconst [c])) 41016 // cond: uint64(c) < 32 41017 // result: (SRAWconst x [c]) 41018 for { 41019 _ = v.Args[1] 41020 x := v.Args[0] 41021 v_1 := v.Args[1] 41022 if v_1.Op != OpPPC64MOVDconst { 41023 break 41024 } 41025 c := v_1.AuxInt 41026 if !(uint64(c) < 32) { 41027 break 41028 } 41029 v.reset(OpPPC64SRAWconst) 41030 v.AuxInt = c 41031 v.AddArg(x) 41032 return true 41033 } 41034 // match: (Rsh32x64 x (AND y (MOVDconst [31]))) 41035 // cond: 41036 // result: (SRAW x (ANDconst <typ.Int32> [31] y)) 41037 for { 41038 _ = v.Args[1] 41039 x := v.Args[0] 41040 v_1 := v.Args[1] 41041 if v_1.Op != OpPPC64AND { 41042 break 41043 } 41044 _ = v_1.Args[1] 41045 y := v_1.Args[0] 41046 v_1_1 := v_1.Args[1] 41047 if v_1_1.Op != OpPPC64MOVDconst { 41048 break 41049 } 41050 if v_1_1.AuxInt != 31 { 41051 break 41052 } 41053 v.reset(OpPPC64SRAW) 41054 v.AddArg(x) 41055 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32) 41056 v0.AuxInt = 31 41057 v0.AddArg(y) 41058 v.AddArg(v0) 41059 return true 41060 } 41061 // match: (Rsh32x64 x (AND (MOVDconst [31]) y)) 41062 // cond: 41063 // result: (SRAW x (ANDconst <typ.Int32> [31] y)) 41064 for { 41065 _ = v.Args[1] 41066 x := v.Args[0] 41067 v_1 := v.Args[1] 41068 if v_1.Op != OpPPC64AND { 41069 break 41070 } 41071 _ = v_1.Args[1] 41072 v_1_0 := v_1.Args[0] 41073 if v_1_0.Op != OpPPC64MOVDconst { 41074 break 41075 } 41076 if v_1_0.AuxInt != 31 { 41077 break 41078 } 41079 y := v_1.Args[1] 41080 v.reset(OpPPC64SRAW) 41081 v.AddArg(x) 41082 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int32) 41083 v0.AuxInt = 31 41084 v0.AddArg(y) 41085 v.AddArg(v0) 41086 return true 41087 } 41088 // match: (Rsh32x64 x (ANDconst <typ.UInt> [31] y)) 41089 // cond: 41090 // result: (SRAW x (ANDconst <typ.UInt> [31] y)) 41091 for { 41092 _ = v.Args[1] 41093 x := v.Args[0] 41094 v_1 := v.Args[1] 41095 if v_1.Op != OpPPC64ANDconst { 41096 break 41097 } 41098 if v_1.Type != typ.UInt { 41099 break 41100 } 41101 if v_1.AuxInt != 31 { 41102 break 41103 } 41104 y := v_1.Args[0] 41105 v.reset(OpPPC64SRAW) 41106 v.AddArg(x) 41107 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 41108 v0.AuxInt = 31 41109 v0.AddArg(y) 41110 v.AddArg(v0) 41111 return true 41112 } 41113 // match: (Rsh32x64 x (SUB <typ.UInt> (MOVDconst [32]) (ANDconst <typ.UInt> [31] y))) 41114 // cond: 41115 // result: (SRAW x (SUB <typ.UInt> (MOVDconst [32]) (ANDconst <typ.UInt> [31] y))) 41116 for { 41117 _ = v.Args[1] 41118 x := v.Args[0] 41119 v_1 := v.Args[1] 41120 if v_1.Op != OpPPC64SUB { 41121 break 41122 } 41123 if v_1.Type != typ.UInt { 41124 break 41125 } 41126 _ = v_1.Args[1] 41127 v_1_0 := v_1.Args[0] 41128 if v_1_0.Op != OpPPC64MOVDconst { 41129 break 41130 } 41131 if v_1_0.AuxInt != 32 { 41132 break 41133 } 41134 v_1_1 := v_1.Args[1] 41135 if v_1_1.Op != OpPPC64ANDconst { 41136 break 41137 } 41138 if v_1_1.Type != typ.UInt { 41139 break 41140 } 41141 if v_1_1.AuxInt != 31 { 41142 break 41143 } 41144 y := v_1_1.Args[0] 41145 v.reset(OpPPC64SRAW) 41146 v.AddArg(x) 41147 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) 41148 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 41149 v1.AuxInt = 32 41150 v0.AddArg(v1) 41151 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 41152 v2.AuxInt = 31 41153 v2.AddArg(y) 41154 v0.AddArg(v2) 41155 v.AddArg(v0) 41156 return true 41157 } 41158 // match: (Rsh32x64 x (SUB <typ.UInt> (MOVDconst [32]) (AND <typ.UInt> y (MOVDconst [31])))) 41159 // cond: 41160 // result: (SRAW x (SUB <typ.UInt> (MOVDconst [32]) (ANDconst <typ.UInt> [31] y))) 41161 for { 41162 _ = v.Args[1] 41163 x := v.Args[0] 41164 v_1 := v.Args[1] 41165 if v_1.Op != OpPPC64SUB { 41166 break 41167 } 41168 if v_1.Type != typ.UInt { 41169 break 41170 } 41171 _ = v_1.Args[1] 41172 v_1_0 := v_1.Args[0] 41173 if v_1_0.Op != OpPPC64MOVDconst { 41174 break 41175 } 41176 if v_1_0.AuxInt != 32 { 41177 break 41178 } 41179 v_1_1 := v_1.Args[1] 41180 if v_1_1.Op != OpPPC64AND { 41181 break 41182 } 41183 if v_1_1.Type != typ.UInt { 41184 break 41185 } 41186 _ = v_1_1.Args[1] 41187 y := v_1_1.Args[0] 41188 v_1_1_1 := v_1_1.Args[1] 41189 if v_1_1_1.Op != OpPPC64MOVDconst { 41190 break 41191 } 41192 if v_1_1_1.AuxInt != 31 { 41193 break 41194 } 41195 v.reset(OpPPC64SRAW) 41196 v.AddArg(x) 41197 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) 41198 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 41199 v1.AuxInt = 32 41200 v0.AddArg(v1) 41201 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 41202 v2.AuxInt = 31 41203 v2.AddArg(y) 41204 v0.AddArg(v2) 41205 v.AddArg(v0) 41206 return true 41207 } 41208 // match: (Rsh32x64 x (SUB <typ.UInt> (MOVDconst [32]) (AND <typ.UInt> (MOVDconst [31]) y))) 41209 // cond: 41210 // result: (SRAW x (SUB <typ.UInt> (MOVDconst [32]) (ANDconst <typ.UInt> [31] y))) 41211 for { 41212 _ = v.Args[1] 41213 x := v.Args[0] 41214 v_1 := v.Args[1] 41215 if v_1.Op != OpPPC64SUB { 41216 break 41217 } 41218 if v_1.Type != typ.UInt { 41219 break 41220 } 41221 _ = v_1.Args[1] 41222 v_1_0 := v_1.Args[0] 41223 if v_1_0.Op != OpPPC64MOVDconst { 41224 break 41225 } 41226 if v_1_0.AuxInt != 32 { 41227 break 41228 } 41229 v_1_1 := v_1.Args[1] 41230 if v_1_1.Op != OpPPC64AND { 41231 break 41232 } 41233 if v_1_1.Type != typ.UInt { 41234 break 41235 } 41236 _ = v_1_1.Args[1] 41237 v_1_1_0 := v_1_1.Args[0] 41238 if v_1_1_0.Op != OpPPC64MOVDconst { 41239 break 41240 } 41241 if v_1_1_0.AuxInt != 31 { 41242 break 41243 } 41244 y := v_1_1.Args[1] 41245 v.reset(OpPPC64SRAW) 41246 v.AddArg(x) 41247 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) 41248 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 41249 v1.AuxInt = 32 41250 v0.AddArg(v1) 41251 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 41252 v2.AuxInt = 31 41253 v2.AddArg(y) 41254 v0.AddArg(v2) 41255 v.AddArg(v0) 41256 return true 41257 } 41258 // match: (Rsh32x64 x y) 41259 // cond: 41260 // result: (SRAW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] y)))) 41261 for { 41262 _ = v.Args[1] 41263 x := v.Args[0] 41264 y := v.Args[1] 41265 v.reset(OpPPC64SRAW) 41266 v.AddArg(x) 41267 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 41268 v0.AddArg(y) 41269 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 41270 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 41271 v2.AuxInt = -32 41272 v2.AddArg(y) 41273 v1.AddArg(v2) 41274 v0.AddArg(v1) 41275 v.AddArg(v0) 41276 return true 41277 } 41278 } 41279 func rewriteValuePPC64_OpRsh32x8_0(v *Value) bool { 41280 b := v.Block 41281 _ = b 41282 typ := &b.Func.Config.Types 41283 _ = typ 41284 // match: (Rsh32x8 x y) 41285 // cond: 41286 // result: (SRAW x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-32] (ZeroExt8to64 y))))) 41287 for { 41288 _ = v.Args[1] 41289 x := v.Args[0] 41290 y := v.Args[1] 41291 v.reset(OpPPC64SRAW) 41292 v.AddArg(x) 41293 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 41294 v0.AddArg(y) 41295 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 41296 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 41297 v2.AuxInt = -32 41298 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 41299 v3.AddArg(y) 41300 v2.AddArg(v3) 41301 v1.AddArg(v2) 41302 v0.AddArg(v1) 41303 v.AddArg(v0) 41304 return true 41305 } 41306 } 41307 func rewriteValuePPC64_OpRsh64Ux16_0(v *Value) bool { 41308 b := v.Block 41309 _ = b 41310 typ := &b.Func.Config.Types 41311 _ = typ 41312 // match: (Rsh64Ux16 x y) 41313 // cond: 41314 // result: (SRD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt16to64 y))))) 41315 for { 41316 _ = v.Args[1] 41317 x := v.Args[0] 41318 y := v.Args[1] 41319 v.reset(OpPPC64SRD) 41320 v.AddArg(x) 41321 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 41322 v0.AddArg(y) 41323 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 41324 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 41325 v2.AuxInt = -64 41326 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 41327 v3.AddArg(y) 41328 v2.AddArg(v3) 41329 v1.AddArg(v2) 41330 v0.AddArg(v1) 41331 v.AddArg(v0) 41332 return true 41333 } 41334 } 41335 func rewriteValuePPC64_OpRsh64Ux32_0(v *Value) bool { 41336 b := v.Block 41337 _ = b 41338 typ := &b.Func.Config.Types 41339 _ = typ 41340 // match: (Rsh64Ux32 x (Const64 [c])) 41341 // cond: uint32(c) < 64 41342 // result: (SRDconst x [c]) 41343 for { 41344 _ = v.Args[1] 41345 x := v.Args[0] 41346 v_1 := v.Args[1] 41347 if v_1.Op != OpConst64 { 41348 break 41349 } 41350 c := v_1.AuxInt 41351 if !(uint32(c) < 64) { 41352 break 41353 } 41354 v.reset(OpPPC64SRDconst) 41355 v.AuxInt = c 41356 v.AddArg(x) 41357 return true 41358 } 41359 // match: (Rsh64Ux32 x (MOVDconst [c])) 41360 // cond: uint32(c) < 64 41361 // result: (SRDconst x [c]) 41362 for { 41363 _ = v.Args[1] 41364 x := v.Args[0] 41365 v_1 := v.Args[1] 41366 if v_1.Op != OpPPC64MOVDconst { 41367 break 41368 } 41369 c := v_1.AuxInt 41370 if !(uint32(c) < 64) { 41371 break 41372 } 41373 v.reset(OpPPC64SRDconst) 41374 v.AuxInt = c 41375 v.AddArg(x) 41376 return true 41377 } 41378 // match: (Rsh64Ux32 x y) 41379 // cond: 41380 // result: (SRD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt32to64 y))))) 41381 for { 41382 _ = v.Args[1] 41383 x := v.Args[0] 41384 y := v.Args[1] 41385 v.reset(OpPPC64SRD) 41386 v.AddArg(x) 41387 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 41388 v0.AddArg(y) 41389 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 41390 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 41391 v2.AuxInt = -64 41392 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 41393 v3.AddArg(y) 41394 v2.AddArg(v3) 41395 v1.AddArg(v2) 41396 v0.AddArg(v1) 41397 v.AddArg(v0) 41398 return true 41399 } 41400 } 41401 func rewriteValuePPC64_OpRsh64Ux64_0(v *Value) bool { 41402 b := v.Block 41403 _ = b 41404 typ := &b.Func.Config.Types 41405 _ = typ 41406 // match: (Rsh64Ux64 x (Const64 [c])) 41407 // cond: uint64(c) < 64 41408 // result: (SRDconst x [c]) 41409 for { 41410 _ = v.Args[1] 41411 x := v.Args[0] 41412 v_1 := v.Args[1] 41413 if v_1.Op != OpConst64 { 41414 break 41415 } 41416 c := v_1.AuxInt 41417 if !(uint64(c) < 64) { 41418 break 41419 } 41420 v.reset(OpPPC64SRDconst) 41421 v.AuxInt = c 41422 v.AddArg(x) 41423 return true 41424 } 41425 // match: (Rsh64Ux64 _ (Const64 [c])) 41426 // cond: uint64(c) >= 64 41427 // result: (MOVDconst [0]) 41428 for { 41429 _ = v.Args[1] 41430 v_1 := v.Args[1] 41431 if v_1.Op != OpConst64 { 41432 break 41433 } 41434 c := v_1.AuxInt 41435 if !(uint64(c) >= 64) { 41436 break 41437 } 41438 v.reset(OpPPC64MOVDconst) 41439 v.AuxInt = 0 41440 return true 41441 } 41442 // match: (Rsh64Ux64 x (MOVDconst [c])) 41443 // cond: uint64(c) < 64 41444 // result: (SRDconst x [c]) 41445 for { 41446 _ = v.Args[1] 41447 x := v.Args[0] 41448 v_1 := v.Args[1] 41449 if v_1.Op != OpPPC64MOVDconst { 41450 break 41451 } 41452 c := v_1.AuxInt 41453 if !(uint64(c) < 64) { 41454 break 41455 } 41456 v.reset(OpPPC64SRDconst) 41457 v.AuxInt = c 41458 v.AddArg(x) 41459 return true 41460 } 41461 // match: (Rsh64Ux64 x (AND y (MOVDconst [63]))) 41462 // cond: 41463 // result: (SRD x (ANDconst <typ.Int64> [63] y)) 41464 for { 41465 _ = v.Args[1] 41466 x := v.Args[0] 41467 v_1 := v.Args[1] 41468 if v_1.Op != OpPPC64AND { 41469 break 41470 } 41471 _ = v_1.Args[1] 41472 y := v_1.Args[0] 41473 v_1_1 := v_1.Args[1] 41474 if v_1_1.Op != OpPPC64MOVDconst { 41475 break 41476 } 41477 if v_1_1.AuxInt != 63 { 41478 break 41479 } 41480 v.reset(OpPPC64SRD) 41481 v.AddArg(x) 41482 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64) 41483 v0.AuxInt = 63 41484 v0.AddArg(y) 41485 v.AddArg(v0) 41486 return true 41487 } 41488 // match: (Rsh64Ux64 x (AND (MOVDconst [63]) y)) 41489 // cond: 41490 // result: (SRD x (ANDconst <typ.Int64> [63] y)) 41491 for { 41492 _ = v.Args[1] 41493 x := v.Args[0] 41494 v_1 := v.Args[1] 41495 if v_1.Op != OpPPC64AND { 41496 break 41497 } 41498 _ = v_1.Args[1] 41499 v_1_0 := v_1.Args[0] 41500 if v_1_0.Op != OpPPC64MOVDconst { 41501 break 41502 } 41503 if v_1_0.AuxInt != 63 { 41504 break 41505 } 41506 y := v_1.Args[1] 41507 v.reset(OpPPC64SRD) 41508 v.AddArg(x) 41509 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64) 41510 v0.AuxInt = 63 41511 v0.AddArg(y) 41512 v.AddArg(v0) 41513 return true 41514 } 41515 // match: (Rsh64Ux64 x (ANDconst <typ.UInt> [63] y)) 41516 // cond: 41517 // result: (SRD x (ANDconst <typ.UInt> [63] y)) 41518 for { 41519 _ = v.Args[1] 41520 x := v.Args[0] 41521 v_1 := v.Args[1] 41522 if v_1.Op != OpPPC64ANDconst { 41523 break 41524 } 41525 if v_1.Type != typ.UInt { 41526 break 41527 } 41528 if v_1.AuxInt != 63 { 41529 break 41530 } 41531 y := v_1.Args[0] 41532 v.reset(OpPPC64SRD) 41533 v.AddArg(x) 41534 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 41535 v0.AuxInt = 63 41536 v0.AddArg(y) 41537 v.AddArg(v0) 41538 return true 41539 } 41540 // match: (Rsh64Ux64 x (SUB <typ.UInt> (MOVDconst [64]) (ANDconst <typ.UInt> [63] y))) 41541 // cond: 41542 // result: (SRD x (SUB <typ.UInt> (MOVDconst [64]) (ANDconst <typ.UInt> [63] y))) 41543 for { 41544 _ = v.Args[1] 41545 x := v.Args[0] 41546 v_1 := v.Args[1] 41547 if v_1.Op != OpPPC64SUB { 41548 break 41549 } 41550 if v_1.Type != typ.UInt { 41551 break 41552 } 41553 _ = v_1.Args[1] 41554 v_1_0 := v_1.Args[0] 41555 if v_1_0.Op != OpPPC64MOVDconst { 41556 break 41557 } 41558 if v_1_0.AuxInt != 64 { 41559 break 41560 } 41561 v_1_1 := v_1.Args[1] 41562 if v_1_1.Op != OpPPC64ANDconst { 41563 break 41564 } 41565 if v_1_1.Type != typ.UInt { 41566 break 41567 } 41568 if v_1_1.AuxInt != 63 { 41569 break 41570 } 41571 y := v_1_1.Args[0] 41572 v.reset(OpPPC64SRD) 41573 v.AddArg(x) 41574 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) 41575 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 41576 v1.AuxInt = 64 41577 v0.AddArg(v1) 41578 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 41579 v2.AuxInt = 63 41580 v2.AddArg(y) 41581 v0.AddArg(v2) 41582 v.AddArg(v0) 41583 return true 41584 } 41585 // match: (Rsh64Ux64 x (SUB <typ.UInt> (MOVDconst [64]) (AND <typ.UInt> y (MOVDconst [63])))) 41586 // cond: 41587 // result: (SRD x (SUB <typ.UInt> (MOVDconst [64]) (ANDconst <typ.UInt> [63] y))) 41588 for { 41589 _ = v.Args[1] 41590 x := v.Args[0] 41591 v_1 := v.Args[1] 41592 if v_1.Op != OpPPC64SUB { 41593 break 41594 } 41595 if v_1.Type != typ.UInt { 41596 break 41597 } 41598 _ = v_1.Args[1] 41599 v_1_0 := v_1.Args[0] 41600 if v_1_0.Op != OpPPC64MOVDconst { 41601 break 41602 } 41603 if v_1_0.AuxInt != 64 { 41604 break 41605 } 41606 v_1_1 := v_1.Args[1] 41607 if v_1_1.Op != OpPPC64AND { 41608 break 41609 } 41610 if v_1_1.Type != typ.UInt { 41611 break 41612 } 41613 _ = v_1_1.Args[1] 41614 y := v_1_1.Args[0] 41615 v_1_1_1 := v_1_1.Args[1] 41616 if v_1_1_1.Op != OpPPC64MOVDconst { 41617 break 41618 } 41619 if v_1_1_1.AuxInt != 63 { 41620 break 41621 } 41622 v.reset(OpPPC64SRD) 41623 v.AddArg(x) 41624 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) 41625 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 41626 v1.AuxInt = 64 41627 v0.AddArg(v1) 41628 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 41629 v2.AuxInt = 63 41630 v2.AddArg(y) 41631 v0.AddArg(v2) 41632 v.AddArg(v0) 41633 return true 41634 } 41635 // match: (Rsh64Ux64 x (SUB <typ.UInt> (MOVDconst [64]) (AND <typ.UInt> (MOVDconst [63]) y))) 41636 // cond: 41637 // result: (SRD x (SUB <typ.UInt> (MOVDconst [64]) (ANDconst <typ.UInt> [63] y))) 41638 for { 41639 _ = v.Args[1] 41640 x := v.Args[0] 41641 v_1 := v.Args[1] 41642 if v_1.Op != OpPPC64SUB { 41643 break 41644 } 41645 if v_1.Type != typ.UInt { 41646 break 41647 } 41648 _ = v_1.Args[1] 41649 v_1_0 := v_1.Args[0] 41650 if v_1_0.Op != OpPPC64MOVDconst { 41651 break 41652 } 41653 if v_1_0.AuxInt != 64 { 41654 break 41655 } 41656 v_1_1 := v_1.Args[1] 41657 if v_1_1.Op != OpPPC64AND { 41658 break 41659 } 41660 if v_1_1.Type != typ.UInt { 41661 break 41662 } 41663 _ = v_1_1.Args[1] 41664 v_1_1_0 := v_1_1.Args[0] 41665 if v_1_1_0.Op != OpPPC64MOVDconst { 41666 break 41667 } 41668 if v_1_1_0.AuxInt != 63 { 41669 break 41670 } 41671 y := v_1_1.Args[1] 41672 v.reset(OpPPC64SRD) 41673 v.AddArg(x) 41674 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) 41675 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 41676 v1.AuxInt = 64 41677 v0.AddArg(v1) 41678 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 41679 v2.AuxInt = 63 41680 v2.AddArg(y) 41681 v0.AddArg(v2) 41682 v.AddArg(v0) 41683 return true 41684 } 41685 // match: (Rsh64Ux64 x y) 41686 // cond: 41687 // result: (SRD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] y)))) 41688 for { 41689 _ = v.Args[1] 41690 x := v.Args[0] 41691 y := v.Args[1] 41692 v.reset(OpPPC64SRD) 41693 v.AddArg(x) 41694 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 41695 v0.AddArg(y) 41696 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 41697 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 41698 v2.AuxInt = -64 41699 v2.AddArg(y) 41700 v1.AddArg(v2) 41701 v0.AddArg(v1) 41702 v.AddArg(v0) 41703 return true 41704 } 41705 } 41706 func rewriteValuePPC64_OpRsh64Ux8_0(v *Value) bool { 41707 b := v.Block 41708 _ = b 41709 typ := &b.Func.Config.Types 41710 _ = typ 41711 // match: (Rsh64Ux8 x y) 41712 // cond: 41713 // result: (SRD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt8to64 y))))) 41714 for { 41715 _ = v.Args[1] 41716 x := v.Args[0] 41717 y := v.Args[1] 41718 v.reset(OpPPC64SRD) 41719 v.AddArg(x) 41720 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 41721 v0.AddArg(y) 41722 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 41723 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 41724 v2.AuxInt = -64 41725 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 41726 v3.AddArg(y) 41727 v2.AddArg(v3) 41728 v1.AddArg(v2) 41729 v0.AddArg(v1) 41730 v.AddArg(v0) 41731 return true 41732 } 41733 } 41734 func rewriteValuePPC64_OpRsh64x16_0(v *Value) bool { 41735 b := v.Block 41736 _ = b 41737 typ := &b.Func.Config.Types 41738 _ = typ 41739 // match: (Rsh64x16 x y) 41740 // cond: 41741 // result: (SRAD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt16to64 y))))) 41742 for { 41743 _ = v.Args[1] 41744 x := v.Args[0] 41745 y := v.Args[1] 41746 v.reset(OpPPC64SRAD) 41747 v.AddArg(x) 41748 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 41749 v0.AddArg(y) 41750 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 41751 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 41752 v2.AuxInt = -64 41753 v3 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 41754 v3.AddArg(y) 41755 v2.AddArg(v3) 41756 v1.AddArg(v2) 41757 v0.AddArg(v1) 41758 v.AddArg(v0) 41759 return true 41760 } 41761 } 41762 func rewriteValuePPC64_OpRsh64x32_0(v *Value) bool { 41763 b := v.Block 41764 _ = b 41765 typ := &b.Func.Config.Types 41766 _ = typ 41767 // match: (Rsh64x32 x (Const64 [c])) 41768 // cond: uint32(c) < 64 41769 // result: (SRADconst x [c]) 41770 for { 41771 _ = v.Args[1] 41772 x := v.Args[0] 41773 v_1 := v.Args[1] 41774 if v_1.Op != OpConst64 { 41775 break 41776 } 41777 c := v_1.AuxInt 41778 if !(uint32(c) < 64) { 41779 break 41780 } 41781 v.reset(OpPPC64SRADconst) 41782 v.AuxInt = c 41783 v.AddArg(x) 41784 return true 41785 } 41786 // match: (Rsh64x32 x (MOVDconst [c])) 41787 // cond: uint32(c) < 64 41788 // result: (SRADconst x [c]) 41789 for { 41790 _ = v.Args[1] 41791 x := v.Args[0] 41792 v_1 := v.Args[1] 41793 if v_1.Op != OpPPC64MOVDconst { 41794 break 41795 } 41796 c := v_1.AuxInt 41797 if !(uint32(c) < 64) { 41798 break 41799 } 41800 v.reset(OpPPC64SRADconst) 41801 v.AuxInt = c 41802 v.AddArg(x) 41803 return true 41804 } 41805 // match: (Rsh64x32 x y) 41806 // cond: 41807 // result: (SRAD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt32to64 y))))) 41808 for { 41809 _ = v.Args[1] 41810 x := v.Args[0] 41811 y := v.Args[1] 41812 v.reset(OpPPC64SRAD) 41813 v.AddArg(x) 41814 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 41815 v0.AddArg(y) 41816 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 41817 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 41818 v2.AuxInt = -64 41819 v3 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 41820 v3.AddArg(y) 41821 v2.AddArg(v3) 41822 v1.AddArg(v2) 41823 v0.AddArg(v1) 41824 v.AddArg(v0) 41825 return true 41826 } 41827 } 41828 func rewriteValuePPC64_OpRsh64x64_0(v *Value) bool { 41829 b := v.Block 41830 _ = b 41831 typ := &b.Func.Config.Types 41832 _ = typ 41833 // match: (Rsh64x64 x (Const64 [c])) 41834 // cond: uint64(c) < 64 41835 // result: (SRADconst x [c]) 41836 for { 41837 _ = v.Args[1] 41838 x := v.Args[0] 41839 v_1 := v.Args[1] 41840 if v_1.Op != OpConst64 { 41841 break 41842 } 41843 c := v_1.AuxInt 41844 if !(uint64(c) < 64) { 41845 break 41846 } 41847 v.reset(OpPPC64SRADconst) 41848 v.AuxInt = c 41849 v.AddArg(x) 41850 return true 41851 } 41852 // match: (Rsh64x64 x (Const64 [c])) 41853 // cond: uint64(c) >= 64 41854 // result: (SRADconst x [63]) 41855 for { 41856 _ = v.Args[1] 41857 x := v.Args[0] 41858 v_1 := v.Args[1] 41859 if v_1.Op != OpConst64 { 41860 break 41861 } 41862 c := v_1.AuxInt 41863 if !(uint64(c) >= 64) { 41864 break 41865 } 41866 v.reset(OpPPC64SRADconst) 41867 v.AuxInt = 63 41868 v.AddArg(x) 41869 return true 41870 } 41871 // match: (Rsh64x64 x (MOVDconst [c])) 41872 // cond: uint64(c) < 64 41873 // result: (SRADconst x [c]) 41874 for { 41875 _ = v.Args[1] 41876 x := v.Args[0] 41877 v_1 := v.Args[1] 41878 if v_1.Op != OpPPC64MOVDconst { 41879 break 41880 } 41881 c := v_1.AuxInt 41882 if !(uint64(c) < 64) { 41883 break 41884 } 41885 v.reset(OpPPC64SRADconst) 41886 v.AuxInt = c 41887 v.AddArg(x) 41888 return true 41889 } 41890 // match: (Rsh64x64 x (AND y (MOVDconst [63]))) 41891 // cond: 41892 // result: (SRAD x (ANDconst <typ.Int64> [63] y)) 41893 for { 41894 _ = v.Args[1] 41895 x := v.Args[0] 41896 v_1 := v.Args[1] 41897 if v_1.Op != OpPPC64AND { 41898 break 41899 } 41900 _ = v_1.Args[1] 41901 y := v_1.Args[0] 41902 v_1_1 := v_1.Args[1] 41903 if v_1_1.Op != OpPPC64MOVDconst { 41904 break 41905 } 41906 if v_1_1.AuxInt != 63 { 41907 break 41908 } 41909 v.reset(OpPPC64SRAD) 41910 v.AddArg(x) 41911 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64) 41912 v0.AuxInt = 63 41913 v0.AddArg(y) 41914 v.AddArg(v0) 41915 return true 41916 } 41917 // match: (Rsh64x64 x (AND (MOVDconst [63]) y)) 41918 // cond: 41919 // result: (SRAD x (ANDconst <typ.Int64> [63] y)) 41920 for { 41921 _ = v.Args[1] 41922 x := v.Args[0] 41923 v_1 := v.Args[1] 41924 if v_1.Op != OpPPC64AND { 41925 break 41926 } 41927 _ = v_1.Args[1] 41928 v_1_0 := v_1.Args[0] 41929 if v_1_0.Op != OpPPC64MOVDconst { 41930 break 41931 } 41932 if v_1_0.AuxInt != 63 { 41933 break 41934 } 41935 y := v_1.Args[1] 41936 v.reset(OpPPC64SRAD) 41937 v.AddArg(x) 41938 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.Int64) 41939 v0.AuxInt = 63 41940 v0.AddArg(y) 41941 v.AddArg(v0) 41942 return true 41943 } 41944 // match: (Rsh64x64 x (ANDconst <typ.UInt> [63] y)) 41945 // cond: 41946 // result: (SRAD x (ANDconst <typ.UInt> [63] y)) 41947 for { 41948 _ = v.Args[1] 41949 x := v.Args[0] 41950 v_1 := v.Args[1] 41951 if v_1.Op != OpPPC64ANDconst { 41952 break 41953 } 41954 if v_1.Type != typ.UInt { 41955 break 41956 } 41957 if v_1.AuxInt != 63 { 41958 break 41959 } 41960 y := v_1.Args[0] 41961 v.reset(OpPPC64SRAD) 41962 v.AddArg(x) 41963 v0 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 41964 v0.AuxInt = 63 41965 v0.AddArg(y) 41966 v.AddArg(v0) 41967 return true 41968 } 41969 // match: (Rsh64x64 x (SUB <typ.UInt> (MOVDconst [64]) (ANDconst <typ.UInt> [63] y))) 41970 // cond: 41971 // result: (SRAD x (SUB <typ.UInt> (MOVDconst [64]) (ANDconst <typ.UInt> [63] y))) 41972 for { 41973 _ = v.Args[1] 41974 x := v.Args[0] 41975 v_1 := v.Args[1] 41976 if v_1.Op != OpPPC64SUB { 41977 break 41978 } 41979 if v_1.Type != typ.UInt { 41980 break 41981 } 41982 _ = v_1.Args[1] 41983 v_1_0 := v_1.Args[0] 41984 if v_1_0.Op != OpPPC64MOVDconst { 41985 break 41986 } 41987 if v_1_0.AuxInt != 64 { 41988 break 41989 } 41990 v_1_1 := v_1.Args[1] 41991 if v_1_1.Op != OpPPC64ANDconst { 41992 break 41993 } 41994 if v_1_1.Type != typ.UInt { 41995 break 41996 } 41997 if v_1_1.AuxInt != 63 { 41998 break 41999 } 42000 y := v_1_1.Args[0] 42001 v.reset(OpPPC64SRAD) 42002 v.AddArg(x) 42003 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) 42004 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 42005 v1.AuxInt = 64 42006 v0.AddArg(v1) 42007 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 42008 v2.AuxInt = 63 42009 v2.AddArg(y) 42010 v0.AddArg(v2) 42011 v.AddArg(v0) 42012 return true 42013 } 42014 // match: (Rsh64x64 x (SUB <typ.UInt> (MOVDconst [64]) (AND <typ.UInt> y (MOVDconst [63])))) 42015 // cond: 42016 // result: (SRAD x (SUB <typ.UInt> (MOVDconst [64]) (ANDconst <typ.UInt> [63] y))) 42017 for { 42018 _ = v.Args[1] 42019 x := v.Args[0] 42020 v_1 := v.Args[1] 42021 if v_1.Op != OpPPC64SUB { 42022 break 42023 } 42024 if v_1.Type != typ.UInt { 42025 break 42026 } 42027 _ = v_1.Args[1] 42028 v_1_0 := v_1.Args[0] 42029 if v_1_0.Op != OpPPC64MOVDconst { 42030 break 42031 } 42032 if v_1_0.AuxInt != 64 { 42033 break 42034 } 42035 v_1_1 := v_1.Args[1] 42036 if v_1_1.Op != OpPPC64AND { 42037 break 42038 } 42039 if v_1_1.Type != typ.UInt { 42040 break 42041 } 42042 _ = v_1_1.Args[1] 42043 y := v_1_1.Args[0] 42044 v_1_1_1 := v_1_1.Args[1] 42045 if v_1_1_1.Op != OpPPC64MOVDconst { 42046 break 42047 } 42048 if v_1_1_1.AuxInt != 63 { 42049 break 42050 } 42051 v.reset(OpPPC64SRAD) 42052 v.AddArg(x) 42053 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) 42054 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 42055 v1.AuxInt = 64 42056 v0.AddArg(v1) 42057 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 42058 v2.AuxInt = 63 42059 v2.AddArg(y) 42060 v0.AddArg(v2) 42061 v.AddArg(v0) 42062 return true 42063 } 42064 // match: (Rsh64x64 x (SUB <typ.UInt> (MOVDconst [64]) (AND <typ.UInt> (MOVDconst [63]) y))) 42065 // cond: 42066 // result: (SRAD x (SUB <typ.UInt> (MOVDconst [64]) (ANDconst <typ.UInt> [63] y))) 42067 for { 42068 _ = v.Args[1] 42069 x := v.Args[0] 42070 v_1 := v.Args[1] 42071 if v_1.Op != OpPPC64SUB { 42072 break 42073 } 42074 if v_1.Type != typ.UInt { 42075 break 42076 } 42077 _ = v_1.Args[1] 42078 v_1_0 := v_1.Args[0] 42079 if v_1_0.Op != OpPPC64MOVDconst { 42080 break 42081 } 42082 if v_1_0.AuxInt != 64 { 42083 break 42084 } 42085 v_1_1 := v_1.Args[1] 42086 if v_1_1.Op != OpPPC64AND { 42087 break 42088 } 42089 if v_1_1.Type != typ.UInt { 42090 break 42091 } 42092 _ = v_1_1.Args[1] 42093 v_1_1_0 := v_1_1.Args[0] 42094 if v_1_1_0.Op != OpPPC64MOVDconst { 42095 break 42096 } 42097 if v_1_1_0.AuxInt != 63 { 42098 break 42099 } 42100 y := v_1_1.Args[1] 42101 v.reset(OpPPC64SRAD) 42102 v.AddArg(x) 42103 v0 := b.NewValue0(v.Pos, OpPPC64SUB, typ.UInt) 42104 v1 := b.NewValue0(v.Pos, OpPPC64MOVDconst, typ.Int64) 42105 v1.AuxInt = 64 42106 v0.AddArg(v1) 42107 v2 := b.NewValue0(v.Pos, OpPPC64ANDconst, typ.UInt) 42108 v2.AuxInt = 63 42109 v2.AddArg(y) 42110 v0.AddArg(v2) 42111 v.AddArg(v0) 42112 return true 42113 } 42114 // match: (Rsh64x64 x y) 42115 // cond: 42116 // result: (SRAD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] y)))) 42117 for { 42118 _ = v.Args[1] 42119 x := v.Args[0] 42120 y := v.Args[1] 42121 v.reset(OpPPC64SRAD) 42122 v.AddArg(x) 42123 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 42124 v0.AddArg(y) 42125 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 42126 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 42127 v2.AuxInt = -64 42128 v2.AddArg(y) 42129 v1.AddArg(v2) 42130 v0.AddArg(v1) 42131 v.AddArg(v0) 42132 return true 42133 } 42134 } 42135 func rewriteValuePPC64_OpRsh64x8_0(v *Value) bool { 42136 b := v.Block 42137 _ = b 42138 typ := &b.Func.Config.Types 42139 _ = typ 42140 // match: (Rsh64x8 x y) 42141 // cond: 42142 // result: (SRAD x (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-64] (ZeroExt8to64 y))))) 42143 for { 42144 _ = v.Args[1] 42145 x := v.Args[0] 42146 y := v.Args[1] 42147 v.reset(OpPPC64SRAD) 42148 v.AddArg(x) 42149 v0 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 42150 v0.AddArg(y) 42151 v1 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 42152 v2 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 42153 v2.AuxInt = -64 42154 v3 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 42155 v3.AddArg(y) 42156 v2.AddArg(v3) 42157 v1.AddArg(v2) 42158 v0.AddArg(v1) 42159 v.AddArg(v0) 42160 return true 42161 } 42162 } 42163 func rewriteValuePPC64_OpRsh8Ux16_0(v *Value) bool { 42164 b := v.Block 42165 _ = b 42166 typ := &b.Func.Config.Types 42167 _ = typ 42168 // match: (Rsh8Ux16 x y) 42169 // cond: 42170 // result: (SRW (ZeroExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt16to64 y))))) 42171 for { 42172 _ = v.Args[1] 42173 x := v.Args[0] 42174 y := v.Args[1] 42175 v.reset(OpPPC64SRW) 42176 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 42177 v0.AddArg(x) 42178 v.AddArg(v0) 42179 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 42180 v1.AddArg(y) 42181 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 42182 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 42183 v3.AuxInt = -8 42184 v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 42185 v4.AddArg(y) 42186 v3.AddArg(v4) 42187 v2.AddArg(v3) 42188 v1.AddArg(v2) 42189 v.AddArg(v1) 42190 return true 42191 } 42192 } 42193 func rewriteValuePPC64_OpRsh8Ux32_0(v *Value) bool { 42194 b := v.Block 42195 _ = b 42196 typ := &b.Func.Config.Types 42197 _ = typ 42198 // match: (Rsh8Ux32 x (Const64 [c])) 42199 // cond: uint32(c) < 8 42200 // result: (SRWconst (ZeroExt8to32 x) [c]) 42201 for { 42202 _ = v.Args[1] 42203 x := v.Args[0] 42204 v_1 := v.Args[1] 42205 if v_1.Op != OpConst64 { 42206 break 42207 } 42208 c := v_1.AuxInt 42209 if !(uint32(c) < 8) { 42210 break 42211 } 42212 v.reset(OpPPC64SRWconst) 42213 v.AuxInt = c 42214 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 42215 v0.AddArg(x) 42216 v.AddArg(v0) 42217 return true 42218 } 42219 // match: (Rsh8Ux32 x (MOVDconst [c])) 42220 // cond: uint32(c) < 8 42221 // result: (SRWconst (ZeroExt8to32 x) [c]) 42222 for { 42223 _ = v.Args[1] 42224 x := v.Args[0] 42225 v_1 := v.Args[1] 42226 if v_1.Op != OpPPC64MOVDconst { 42227 break 42228 } 42229 c := v_1.AuxInt 42230 if !(uint32(c) < 8) { 42231 break 42232 } 42233 v.reset(OpPPC64SRWconst) 42234 v.AuxInt = c 42235 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 42236 v0.AddArg(x) 42237 v.AddArg(v0) 42238 return true 42239 } 42240 // match: (Rsh8Ux32 x y) 42241 // cond: 42242 // result: (SRW (ZeroExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt32to64 y))))) 42243 for { 42244 _ = v.Args[1] 42245 x := v.Args[0] 42246 y := v.Args[1] 42247 v.reset(OpPPC64SRW) 42248 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 42249 v0.AddArg(x) 42250 v.AddArg(v0) 42251 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 42252 v1.AddArg(y) 42253 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 42254 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 42255 v3.AuxInt = -8 42256 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 42257 v4.AddArg(y) 42258 v3.AddArg(v4) 42259 v2.AddArg(v3) 42260 v1.AddArg(v2) 42261 v.AddArg(v1) 42262 return true 42263 } 42264 } 42265 func rewriteValuePPC64_OpRsh8Ux64_0(v *Value) bool { 42266 b := v.Block 42267 _ = b 42268 typ := &b.Func.Config.Types 42269 _ = typ 42270 // match: (Rsh8Ux64 x (Const64 [c])) 42271 // cond: uint64(c) < 8 42272 // result: (SRWconst (ZeroExt8to32 x) [c]) 42273 for { 42274 _ = v.Args[1] 42275 x := v.Args[0] 42276 v_1 := v.Args[1] 42277 if v_1.Op != OpConst64 { 42278 break 42279 } 42280 c := v_1.AuxInt 42281 if !(uint64(c) < 8) { 42282 break 42283 } 42284 v.reset(OpPPC64SRWconst) 42285 v.AuxInt = c 42286 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 42287 v0.AddArg(x) 42288 v.AddArg(v0) 42289 return true 42290 } 42291 // match: (Rsh8Ux64 _ (Const64 [c])) 42292 // cond: uint64(c) >= 8 42293 // result: (MOVDconst [0]) 42294 for { 42295 _ = v.Args[1] 42296 v_1 := v.Args[1] 42297 if v_1.Op != OpConst64 { 42298 break 42299 } 42300 c := v_1.AuxInt 42301 if !(uint64(c) >= 8) { 42302 break 42303 } 42304 v.reset(OpPPC64MOVDconst) 42305 v.AuxInt = 0 42306 return true 42307 } 42308 // match: (Rsh8Ux64 x (MOVDconst [c])) 42309 // cond: uint64(c) < 8 42310 // result: (SRWconst (ZeroExt8to32 x) [c]) 42311 for { 42312 _ = v.Args[1] 42313 x := v.Args[0] 42314 v_1 := v.Args[1] 42315 if v_1.Op != OpPPC64MOVDconst { 42316 break 42317 } 42318 c := v_1.AuxInt 42319 if !(uint64(c) < 8) { 42320 break 42321 } 42322 v.reset(OpPPC64SRWconst) 42323 v.AuxInt = c 42324 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 42325 v0.AddArg(x) 42326 v.AddArg(v0) 42327 return true 42328 } 42329 // match: (Rsh8Ux64 x y) 42330 // cond: 42331 // result: (SRW (ZeroExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] y)))) 42332 for { 42333 _ = v.Args[1] 42334 x := v.Args[0] 42335 y := v.Args[1] 42336 v.reset(OpPPC64SRW) 42337 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 42338 v0.AddArg(x) 42339 v.AddArg(v0) 42340 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 42341 v1.AddArg(y) 42342 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 42343 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 42344 v3.AuxInt = -8 42345 v3.AddArg(y) 42346 v2.AddArg(v3) 42347 v1.AddArg(v2) 42348 v.AddArg(v1) 42349 return true 42350 } 42351 } 42352 func rewriteValuePPC64_OpRsh8Ux8_0(v *Value) bool { 42353 b := v.Block 42354 _ = b 42355 typ := &b.Func.Config.Types 42356 _ = typ 42357 // match: (Rsh8Ux8 x y) 42358 // cond: 42359 // result: (SRW (ZeroExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt8to64 y))))) 42360 for { 42361 _ = v.Args[1] 42362 x := v.Args[0] 42363 y := v.Args[1] 42364 v.reset(OpPPC64SRW) 42365 v0 := b.NewValue0(v.Pos, OpZeroExt8to32, typ.UInt32) 42366 v0.AddArg(x) 42367 v.AddArg(v0) 42368 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 42369 v1.AddArg(y) 42370 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 42371 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 42372 v3.AuxInt = -8 42373 v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 42374 v4.AddArg(y) 42375 v3.AddArg(v4) 42376 v2.AddArg(v3) 42377 v1.AddArg(v2) 42378 v.AddArg(v1) 42379 return true 42380 } 42381 } 42382 func rewriteValuePPC64_OpRsh8x16_0(v *Value) bool { 42383 b := v.Block 42384 _ = b 42385 typ := &b.Func.Config.Types 42386 _ = typ 42387 // match: (Rsh8x16 x y) 42388 // cond: 42389 // result: (SRAW (SignExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt16to64 y))))) 42390 for { 42391 _ = v.Args[1] 42392 x := v.Args[0] 42393 y := v.Args[1] 42394 v.reset(OpPPC64SRAW) 42395 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 42396 v0.AddArg(x) 42397 v.AddArg(v0) 42398 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 42399 v1.AddArg(y) 42400 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 42401 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 42402 v3.AuxInt = -8 42403 v4 := b.NewValue0(v.Pos, OpZeroExt16to64, typ.UInt64) 42404 v4.AddArg(y) 42405 v3.AddArg(v4) 42406 v2.AddArg(v3) 42407 v1.AddArg(v2) 42408 v.AddArg(v1) 42409 return true 42410 } 42411 } 42412 func rewriteValuePPC64_OpRsh8x32_0(v *Value) bool { 42413 b := v.Block 42414 _ = b 42415 typ := &b.Func.Config.Types 42416 _ = typ 42417 // match: (Rsh8x32 x (Const64 [c])) 42418 // cond: uint32(c) < 8 42419 // result: (SRAWconst (SignExt8to32 x) [c]) 42420 for { 42421 _ = v.Args[1] 42422 x := v.Args[0] 42423 v_1 := v.Args[1] 42424 if v_1.Op != OpConst64 { 42425 break 42426 } 42427 c := v_1.AuxInt 42428 if !(uint32(c) < 8) { 42429 break 42430 } 42431 v.reset(OpPPC64SRAWconst) 42432 v.AuxInt = c 42433 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 42434 v0.AddArg(x) 42435 v.AddArg(v0) 42436 return true 42437 } 42438 // match: (Rsh8x32 x (MOVDconst [c])) 42439 // cond: uint32(c) < 8 42440 // result: (SRAWconst (SignExt8to32 x) [c]) 42441 for { 42442 _ = v.Args[1] 42443 x := v.Args[0] 42444 v_1 := v.Args[1] 42445 if v_1.Op != OpPPC64MOVDconst { 42446 break 42447 } 42448 c := v_1.AuxInt 42449 if !(uint32(c) < 8) { 42450 break 42451 } 42452 v.reset(OpPPC64SRAWconst) 42453 v.AuxInt = c 42454 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 42455 v0.AddArg(x) 42456 v.AddArg(v0) 42457 return true 42458 } 42459 // match: (Rsh8x32 x y) 42460 // cond: 42461 // result: (SRAW (SignExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt32to64 y))))) 42462 for { 42463 _ = v.Args[1] 42464 x := v.Args[0] 42465 y := v.Args[1] 42466 v.reset(OpPPC64SRAW) 42467 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 42468 v0.AddArg(x) 42469 v.AddArg(v0) 42470 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 42471 v1.AddArg(y) 42472 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 42473 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 42474 v3.AuxInt = -8 42475 v4 := b.NewValue0(v.Pos, OpZeroExt32to64, typ.UInt64) 42476 v4.AddArg(y) 42477 v3.AddArg(v4) 42478 v2.AddArg(v3) 42479 v1.AddArg(v2) 42480 v.AddArg(v1) 42481 return true 42482 } 42483 } 42484 func rewriteValuePPC64_OpRsh8x64_0(v *Value) bool { 42485 b := v.Block 42486 _ = b 42487 typ := &b.Func.Config.Types 42488 _ = typ 42489 // match: (Rsh8x64 x (Const64 [c])) 42490 // cond: uint64(c) < 8 42491 // result: (SRAWconst (SignExt8to32 x) [c]) 42492 for { 42493 _ = v.Args[1] 42494 x := v.Args[0] 42495 v_1 := v.Args[1] 42496 if v_1.Op != OpConst64 { 42497 break 42498 } 42499 c := v_1.AuxInt 42500 if !(uint64(c) < 8) { 42501 break 42502 } 42503 v.reset(OpPPC64SRAWconst) 42504 v.AuxInt = c 42505 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 42506 v0.AddArg(x) 42507 v.AddArg(v0) 42508 return true 42509 } 42510 // match: (Rsh8x64 x (Const64 [c])) 42511 // cond: uint64(c) >= 8 42512 // result: (SRAWconst (SignExt8to32 x) [63]) 42513 for { 42514 _ = v.Args[1] 42515 x := v.Args[0] 42516 v_1 := v.Args[1] 42517 if v_1.Op != OpConst64 { 42518 break 42519 } 42520 c := v_1.AuxInt 42521 if !(uint64(c) >= 8) { 42522 break 42523 } 42524 v.reset(OpPPC64SRAWconst) 42525 v.AuxInt = 63 42526 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 42527 v0.AddArg(x) 42528 v.AddArg(v0) 42529 return true 42530 } 42531 // match: (Rsh8x64 x (MOVDconst [c])) 42532 // cond: uint64(c) < 8 42533 // result: (SRAWconst (SignExt8to32 x) [c]) 42534 for { 42535 _ = v.Args[1] 42536 x := v.Args[0] 42537 v_1 := v.Args[1] 42538 if v_1.Op != OpPPC64MOVDconst { 42539 break 42540 } 42541 c := v_1.AuxInt 42542 if !(uint64(c) < 8) { 42543 break 42544 } 42545 v.reset(OpPPC64SRAWconst) 42546 v.AuxInt = c 42547 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 42548 v0.AddArg(x) 42549 v.AddArg(v0) 42550 return true 42551 } 42552 // match: (Rsh8x64 x y) 42553 // cond: 42554 // result: (SRAW (SignExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] y)))) 42555 for { 42556 _ = v.Args[1] 42557 x := v.Args[0] 42558 y := v.Args[1] 42559 v.reset(OpPPC64SRAW) 42560 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 42561 v0.AddArg(x) 42562 v.AddArg(v0) 42563 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 42564 v1.AddArg(y) 42565 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 42566 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 42567 v3.AuxInt = -8 42568 v3.AddArg(y) 42569 v2.AddArg(v3) 42570 v1.AddArg(v2) 42571 v.AddArg(v1) 42572 return true 42573 } 42574 } 42575 func rewriteValuePPC64_OpRsh8x8_0(v *Value) bool { 42576 b := v.Block 42577 _ = b 42578 typ := &b.Func.Config.Types 42579 _ = typ 42580 // match: (Rsh8x8 x y) 42581 // cond: 42582 // result: (SRAW (SignExt8to32 x) (ORN y <typ.Int64> (MaskIfNotCarry (ADDconstForCarry [-8] (ZeroExt8to64 y))))) 42583 for { 42584 _ = v.Args[1] 42585 x := v.Args[0] 42586 y := v.Args[1] 42587 v.reset(OpPPC64SRAW) 42588 v0 := b.NewValue0(v.Pos, OpSignExt8to32, typ.Int32) 42589 v0.AddArg(x) 42590 v.AddArg(v0) 42591 v1 := b.NewValue0(v.Pos, OpPPC64ORN, typ.Int64) 42592 v1.AddArg(y) 42593 v2 := b.NewValue0(v.Pos, OpPPC64MaskIfNotCarry, typ.Int64) 42594 v3 := b.NewValue0(v.Pos, OpPPC64ADDconstForCarry, types.TypeFlags) 42595 v3.AuxInt = -8 42596 v4 := b.NewValue0(v.Pos, OpZeroExt8to64, typ.UInt64) 42597 v4.AddArg(y) 42598 v3.AddArg(v4) 42599 v2.AddArg(v3) 42600 v1.AddArg(v2) 42601 v.AddArg(v1) 42602 return true 42603 } 42604 } 42605 func rewriteValuePPC64_OpSignExt16to32_0(v *Value) bool { 42606 // match: (SignExt16to32 x) 42607 // cond: 42608 // result: (MOVHreg x) 42609 for { 42610 x := v.Args[0] 42611 v.reset(OpPPC64MOVHreg) 42612 v.AddArg(x) 42613 return true 42614 } 42615 } 42616 func rewriteValuePPC64_OpSignExt16to64_0(v *Value) bool { 42617 // match: (SignExt16to64 x) 42618 // cond: 42619 // result: (MOVHreg x) 42620 for { 42621 x := v.Args[0] 42622 v.reset(OpPPC64MOVHreg) 42623 v.AddArg(x) 42624 return true 42625 } 42626 } 42627 func rewriteValuePPC64_OpSignExt32to64_0(v *Value) bool { 42628 // match: (SignExt32to64 x) 42629 // cond: 42630 // result: (MOVWreg x) 42631 for { 42632 x := v.Args[0] 42633 v.reset(OpPPC64MOVWreg) 42634 v.AddArg(x) 42635 return true 42636 } 42637 } 42638 func rewriteValuePPC64_OpSignExt8to16_0(v *Value) bool { 42639 // match: (SignExt8to16 x) 42640 // cond: 42641 // result: (MOVBreg x) 42642 for { 42643 x := v.Args[0] 42644 v.reset(OpPPC64MOVBreg) 42645 v.AddArg(x) 42646 return true 42647 } 42648 } 42649 func rewriteValuePPC64_OpSignExt8to32_0(v *Value) bool { 42650 // match: (SignExt8to32 x) 42651 // cond: 42652 // result: (MOVBreg x) 42653 for { 42654 x := v.Args[0] 42655 v.reset(OpPPC64MOVBreg) 42656 v.AddArg(x) 42657 return true 42658 } 42659 } 42660 func rewriteValuePPC64_OpSignExt8to64_0(v *Value) bool { 42661 // match: (SignExt8to64 x) 42662 // cond: 42663 // result: (MOVBreg x) 42664 for { 42665 x := v.Args[0] 42666 v.reset(OpPPC64MOVBreg) 42667 v.AddArg(x) 42668 return true 42669 } 42670 } 42671 func rewriteValuePPC64_OpSlicemask_0(v *Value) bool { 42672 b := v.Block 42673 _ = b 42674 // match: (Slicemask <t> x) 42675 // cond: 42676 // result: (SRADconst (NEG <t> x) [63]) 42677 for { 42678 t := v.Type 42679 x := v.Args[0] 42680 v.reset(OpPPC64SRADconst) 42681 v.AuxInt = 63 42682 v0 := b.NewValue0(v.Pos, OpPPC64NEG, t) 42683 v0.AddArg(x) 42684 v.AddArg(v0) 42685 return true 42686 } 42687 } 42688 func rewriteValuePPC64_OpSqrt_0(v *Value) bool { 42689 // match: (Sqrt x) 42690 // cond: 42691 // result: (FSQRT x) 42692 for { 42693 x := v.Args[0] 42694 v.reset(OpPPC64FSQRT) 42695 v.AddArg(x) 42696 return true 42697 } 42698 } 42699 func rewriteValuePPC64_OpStaticCall_0(v *Value) bool { 42700 // match: (StaticCall [argwid] {target} mem) 42701 // cond: 42702 // result: (CALLstatic [argwid] {target} mem) 42703 for { 42704 argwid := v.AuxInt 42705 target := v.Aux 42706 mem := v.Args[0] 42707 v.reset(OpPPC64CALLstatic) 42708 v.AuxInt = argwid 42709 v.Aux = target 42710 v.AddArg(mem) 42711 return true 42712 } 42713 } 42714 func rewriteValuePPC64_OpStore_0(v *Value) bool { 42715 // match: (Store {t} ptr val mem) 42716 // cond: t.(*types.Type).Size() == 8 && is64BitFloat(val.Type) 42717 // result: (FMOVDstore ptr val mem) 42718 for { 42719 t := v.Aux 42720 _ = v.Args[2] 42721 ptr := v.Args[0] 42722 val := v.Args[1] 42723 mem := v.Args[2] 42724 if !(t.(*types.Type).Size() == 8 && is64BitFloat(val.Type)) { 42725 break 42726 } 42727 v.reset(OpPPC64FMOVDstore) 42728 v.AddArg(ptr) 42729 v.AddArg(val) 42730 v.AddArg(mem) 42731 return true 42732 } 42733 // match: (Store {t} ptr val mem) 42734 // cond: t.(*types.Type).Size() == 8 && is32BitFloat(val.Type) 42735 // result: (FMOVDstore ptr val mem) 42736 for { 42737 t := v.Aux 42738 _ = v.Args[2] 42739 ptr := v.Args[0] 42740 val := v.Args[1] 42741 mem := v.Args[2] 42742 if !(t.(*types.Type).Size() == 8 && is32BitFloat(val.Type)) { 42743 break 42744 } 42745 v.reset(OpPPC64FMOVDstore) 42746 v.AddArg(ptr) 42747 v.AddArg(val) 42748 v.AddArg(mem) 42749 return true 42750 } 42751 // match: (Store {t} ptr val mem) 42752 // cond: t.(*types.Type).Size() == 4 && is32BitFloat(val.Type) 42753 // result: (FMOVSstore ptr val mem) 42754 for { 42755 t := v.Aux 42756 _ = v.Args[2] 42757 ptr := v.Args[0] 42758 val := v.Args[1] 42759 mem := v.Args[2] 42760 if !(t.(*types.Type).Size() == 4 && is32BitFloat(val.Type)) { 42761 break 42762 } 42763 v.reset(OpPPC64FMOVSstore) 42764 v.AddArg(ptr) 42765 v.AddArg(val) 42766 v.AddArg(mem) 42767 return true 42768 } 42769 // match: (Store {t} ptr val mem) 42770 // cond: t.(*types.Type).Size() == 8 && (is64BitInt(val.Type) || isPtr(val.Type)) 42771 // result: (MOVDstore ptr val mem) 42772 for { 42773 t := v.Aux 42774 _ = v.Args[2] 42775 ptr := v.Args[0] 42776 val := v.Args[1] 42777 mem := v.Args[2] 42778 if !(t.(*types.Type).Size() == 8 && (is64BitInt(val.Type) || isPtr(val.Type))) { 42779 break 42780 } 42781 v.reset(OpPPC64MOVDstore) 42782 v.AddArg(ptr) 42783 v.AddArg(val) 42784 v.AddArg(mem) 42785 return true 42786 } 42787 // match: (Store {t} ptr val mem) 42788 // cond: t.(*types.Type).Size() == 4 && is32BitInt(val.Type) 42789 // result: (MOVWstore ptr val mem) 42790 for { 42791 t := v.Aux 42792 _ = v.Args[2] 42793 ptr := v.Args[0] 42794 val := v.Args[1] 42795 mem := v.Args[2] 42796 if !(t.(*types.Type).Size() == 4 && is32BitInt(val.Type)) { 42797 break 42798 } 42799 v.reset(OpPPC64MOVWstore) 42800 v.AddArg(ptr) 42801 v.AddArg(val) 42802 v.AddArg(mem) 42803 return true 42804 } 42805 // match: (Store {t} ptr val mem) 42806 // cond: t.(*types.Type).Size() == 2 42807 // result: (MOVHstore ptr val mem) 42808 for { 42809 t := v.Aux 42810 _ = v.Args[2] 42811 ptr := v.Args[0] 42812 val := v.Args[1] 42813 mem := v.Args[2] 42814 if !(t.(*types.Type).Size() == 2) { 42815 break 42816 } 42817 v.reset(OpPPC64MOVHstore) 42818 v.AddArg(ptr) 42819 v.AddArg(val) 42820 v.AddArg(mem) 42821 return true 42822 } 42823 // match: (Store {t} ptr val mem) 42824 // cond: t.(*types.Type).Size() == 1 42825 // result: (MOVBstore ptr val mem) 42826 for { 42827 t := v.Aux 42828 _ = v.Args[2] 42829 ptr := v.Args[0] 42830 val := v.Args[1] 42831 mem := v.Args[2] 42832 if !(t.(*types.Type).Size() == 1) { 42833 break 42834 } 42835 v.reset(OpPPC64MOVBstore) 42836 v.AddArg(ptr) 42837 v.AddArg(val) 42838 v.AddArg(mem) 42839 return true 42840 } 42841 return false 42842 } 42843 func rewriteValuePPC64_OpSub16_0(v *Value) bool { 42844 // match: (Sub16 x y) 42845 // cond: 42846 // result: (SUB x y) 42847 for { 42848 _ = v.Args[1] 42849 x := v.Args[0] 42850 y := v.Args[1] 42851 v.reset(OpPPC64SUB) 42852 v.AddArg(x) 42853 v.AddArg(y) 42854 return true 42855 } 42856 } 42857 func rewriteValuePPC64_OpSub32_0(v *Value) bool { 42858 // match: (Sub32 x y) 42859 // cond: 42860 // result: (SUB x y) 42861 for { 42862 _ = v.Args[1] 42863 x := v.Args[0] 42864 y := v.Args[1] 42865 v.reset(OpPPC64SUB) 42866 v.AddArg(x) 42867 v.AddArg(y) 42868 return true 42869 } 42870 } 42871 func rewriteValuePPC64_OpSub32F_0(v *Value) bool { 42872 // match: (Sub32F x y) 42873 // cond: 42874 // result: (FSUBS x y) 42875 for { 42876 _ = v.Args[1] 42877 x := v.Args[0] 42878 y := v.Args[1] 42879 v.reset(OpPPC64FSUBS) 42880 v.AddArg(x) 42881 v.AddArg(y) 42882 return true 42883 } 42884 } 42885 func rewriteValuePPC64_OpSub64_0(v *Value) bool { 42886 // match: (Sub64 x y) 42887 // cond: 42888 // result: (SUB x y) 42889 for { 42890 _ = v.Args[1] 42891 x := v.Args[0] 42892 y := v.Args[1] 42893 v.reset(OpPPC64SUB) 42894 v.AddArg(x) 42895 v.AddArg(y) 42896 return true 42897 } 42898 } 42899 func rewriteValuePPC64_OpSub64F_0(v *Value) bool { 42900 // match: (Sub64F x y) 42901 // cond: 42902 // result: (FSUB x y) 42903 for { 42904 _ = v.Args[1] 42905 x := v.Args[0] 42906 y := v.Args[1] 42907 v.reset(OpPPC64FSUB) 42908 v.AddArg(x) 42909 v.AddArg(y) 42910 return true 42911 } 42912 } 42913 func rewriteValuePPC64_OpSub8_0(v *Value) bool { 42914 // match: (Sub8 x y) 42915 // cond: 42916 // result: (SUB x y) 42917 for { 42918 _ = v.Args[1] 42919 x := v.Args[0] 42920 y := v.Args[1] 42921 v.reset(OpPPC64SUB) 42922 v.AddArg(x) 42923 v.AddArg(y) 42924 return true 42925 } 42926 } 42927 func rewriteValuePPC64_OpSubPtr_0(v *Value) bool { 42928 // match: (SubPtr x y) 42929 // cond: 42930 // result: (SUB x y) 42931 for { 42932 _ = v.Args[1] 42933 x := v.Args[0] 42934 y := v.Args[1] 42935 v.reset(OpPPC64SUB) 42936 v.AddArg(x) 42937 v.AddArg(y) 42938 return true 42939 } 42940 } 42941 func rewriteValuePPC64_OpTrunc_0(v *Value) bool { 42942 // match: (Trunc x) 42943 // cond: 42944 // result: (FTRUNC x) 42945 for { 42946 x := v.Args[0] 42947 v.reset(OpPPC64FTRUNC) 42948 v.AddArg(x) 42949 return true 42950 } 42951 } 42952 func rewriteValuePPC64_OpTrunc16to8_0(v *Value) bool { 42953 // match: (Trunc16to8 x) 42954 // cond: 42955 // result: (MOVBreg x) 42956 for { 42957 x := v.Args[0] 42958 v.reset(OpPPC64MOVBreg) 42959 v.AddArg(x) 42960 return true 42961 } 42962 } 42963 func rewriteValuePPC64_OpTrunc32to16_0(v *Value) bool { 42964 // match: (Trunc32to16 x) 42965 // cond: 42966 // result: (MOVHreg x) 42967 for { 42968 x := v.Args[0] 42969 v.reset(OpPPC64MOVHreg) 42970 v.AddArg(x) 42971 return true 42972 } 42973 } 42974 func rewriteValuePPC64_OpTrunc32to8_0(v *Value) bool { 42975 // match: (Trunc32to8 x) 42976 // cond: 42977 // result: (MOVBreg x) 42978 for { 42979 x := v.Args[0] 42980 v.reset(OpPPC64MOVBreg) 42981 v.AddArg(x) 42982 return true 42983 } 42984 } 42985 func rewriteValuePPC64_OpTrunc64to16_0(v *Value) bool { 42986 // match: (Trunc64to16 x) 42987 // cond: 42988 // result: (MOVHreg x) 42989 for { 42990 x := v.Args[0] 42991 v.reset(OpPPC64MOVHreg) 42992 v.AddArg(x) 42993 return true 42994 } 42995 } 42996 func rewriteValuePPC64_OpTrunc64to32_0(v *Value) bool { 42997 // match: (Trunc64to32 x) 42998 // cond: 42999 // result: (MOVWreg x) 43000 for { 43001 x := v.Args[0] 43002 v.reset(OpPPC64MOVWreg) 43003 v.AddArg(x) 43004 return true 43005 } 43006 } 43007 func rewriteValuePPC64_OpTrunc64to8_0(v *Value) bool { 43008 // match: (Trunc64to8 x) 43009 // cond: 43010 // result: (MOVBreg x) 43011 for { 43012 x := v.Args[0] 43013 v.reset(OpPPC64MOVBreg) 43014 v.AddArg(x) 43015 return true 43016 } 43017 } 43018 func rewriteValuePPC64_OpXor16_0(v *Value) bool { 43019 // match: (Xor16 x y) 43020 // cond: 43021 // result: (XOR x y) 43022 for { 43023 _ = v.Args[1] 43024 x := v.Args[0] 43025 y := v.Args[1] 43026 v.reset(OpPPC64XOR) 43027 v.AddArg(x) 43028 v.AddArg(y) 43029 return true 43030 } 43031 } 43032 func rewriteValuePPC64_OpXor32_0(v *Value) bool { 43033 // match: (Xor32 x y) 43034 // cond: 43035 // result: (XOR x y) 43036 for { 43037 _ = v.Args[1] 43038 x := v.Args[0] 43039 y := v.Args[1] 43040 v.reset(OpPPC64XOR) 43041 v.AddArg(x) 43042 v.AddArg(y) 43043 return true 43044 } 43045 } 43046 func rewriteValuePPC64_OpXor64_0(v *Value) bool { 43047 // match: (Xor64 x y) 43048 // cond: 43049 // result: (XOR x y) 43050 for { 43051 _ = v.Args[1] 43052 x := v.Args[0] 43053 y := v.Args[1] 43054 v.reset(OpPPC64XOR) 43055 v.AddArg(x) 43056 v.AddArg(y) 43057 return true 43058 } 43059 } 43060 func rewriteValuePPC64_OpXor8_0(v *Value) bool { 43061 // match: (Xor8 x y) 43062 // cond: 43063 // result: (XOR x y) 43064 for { 43065 _ = v.Args[1] 43066 x := v.Args[0] 43067 y := v.Args[1] 43068 v.reset(OpPPC64XOR) 43069 v.AddArg(x) 43070 v.AddArg(y) 43071 return true 43072 } 43073 } 43074 func rewriteValuePPC64_OpZero_0(v *Value) bool { 43075 b := v.Block 43076 _ = b 43077 // match: (Zero [0] _ mem) 43078 // cond: 43079 // result: mem 43080 for { 43081 if v.AuxInt != 0 { 43082 break 43083 } 43084 _ = v.Args[1] 43085 mem := v.Args[1] 43086 v.reset(OpCopy) 43087 v.Type = mem.Type 43088 v.AddArg(mem) 43089 return true 43090 } 43091 // match: (Zero [1] destptr mem) 43092 // cond: 43093 // result: (MOVBstorezero destptr mem) 43094 for { 43095 if v.AuxInt != 1 { 43096 break 43097 } 43098 _ = v.Args[1] 43099 destptr := v.Args[0] 43100 mem := v.Args[1] 43101 v.reset(OpPPC64MOVBstorezero) 43102 v.AddArg(destptr) 43103 v.AddArg(mem) 43104 return true 43105 } 43106 // match: (Zero [2] destptr mem) 43107 // cond: 43108 // result: (MOVHstorezero destptr mem) 43109 for { 43110 if v.AuxInt != 2 { 43111 break 43112 } 43113 _ = v.Args[1] 43114 destptr := v.Args[0] 43115 mem := v.Args[1] 43116 v.reset(OpPPC64MOVHstorezero) 43117 v.AddArg(destptr) 43118 v.AddArg(mem) 43119 return true 43120 } 43121 // match: (Zero [3] destptr mem) 43122 // cond: 43123 // result: (MOVBstorezero [2] destptr (MOVHstorezero destptr mem)) 43124 for { 43125 if v.AuxInt != 3 { 43126 break 43127 } 43128 _ = v.Args[1] 43129 destptr := v.Args[0] 43130 mem := v.Args[1] 43131 v.reset(OpPPC64MOVBstorezero) 43132 v.AuxInt = 2 43133 v.AddArg(destptr) 43134 v0 := b.NewValue0(v.Pos, OpPPC64MOVHstorezero, types.TypeMem) 43135 v0.AddArg(destptr) 43136 v0.AddArg(mem) 43137 v.AddArg(v0) 43138 return true 43139 } 43140 // match: (Zero [4] destptr mem) 43141 // cond: 43142 // result: (MOVWstorezero destptr mem) 43143 for { 43144 if v.AuxInt != 4 { 43145 break 43146 } 43147 _ = v.Args[1] 43148 destptr := v.Args[0] 43149 mem := v.Args[1] 43150 v.reset(OpPPC64MOVWstorezero) 43151 v.AddArg(destptr) 43152 v.AddArg(mem) 43153 return true 43154 } 43155 // match: (Zero [5] destptr mem) 43156 // cond: 43157 // result: (MOVBstorezero [4] destptr (MOVWstorezero destptr mem)) 43158 for { 43159 if v.AuxInt != 5 { 43160 break 43161 } 43162 _ = v.Args[1] 43163 destptr := v.Args[0] 43164 mem := v.Args[1] 43165 v.reset(OpPPC64MOVBstorezero) 43166 v.AuxInt = 4 43167 v.AddArg(destptr) 43168 v0 := b.NewValue0(v.Pos, OpPPC64MOVWstorezero, types.TypeMem) 43169 v0.AddArg(destptr) 43170 v0.AddArg(mem) 43171 v.AddArg(v0) 43172 return true 43173 } 43174 // match: (Zero [6] destptr mem) 43175 // cond: 43176 // result: (MOVHstorezero [4] destptr (MOVWstorezero destptr mem)) 43177 for { 43178 if v.AuxInt != 6 { 43179 break 43180 } 43181 _ = v.Args[1] 43182 destptr := v.Args[0] 43183 mem := v.Args[1] 43184 v.reset(OpPPC64MOVHstorezero) 43185 v.AuxInt = 4 43186 v.AddArg(destptr) 43187 v0 := b.NewValue0(v.Pos, OpPPC64MOVWstorezero, types.TypeMem) 43188 v0.AddArg(destptr) 43189 v0.AddArg(mem) 43190 v.AddArg(v0) 43191 return true 43192 } 43193 // match: (Zero [7] destptr mem) 43194 // cond: 43195 // result: (MOVBstorezero [6] destptr (MOVHstorezero [4] destptr (MOVWstorezero destptr mem))) 43196 for { 43197 if v.AuxInt != 7 { 43198 break 43199 } 43200 _ = v.Args[1] 43201 destptr := v.Args[0] 43202 mem := v.Args[1] 43203 v.reset(OpPPC64MOVBstorezero) 43204 v.AuxInt = 6 43205 v.AddArg(destptr) 43206 v0 := b.NewValue0(v.Pos, OpPPC64MOVHstorezero, types.TypeMem) 43207 v0.AuxInt = 4 43208 v0.AddArg(destptr) 43209 v1 := b.NewValue0(v.Pos, OpPPC64MOVWstorezero, types.TypeMem) 43210 v1.AddArg(destptr) 43211 v1.AddArg(mem) 43212 v0.AddArg(v1) 43213 v.AddArg(v0) 43214 return true 43215 } 43216 // match: (Zero [8] {t} destptr mem) 43217 // cond: t.(*types.Type).Alignment()%4 == 0 43218 // result: (MOVDstorezero destptr mem) 43219 for { 43220 if v.AuxInt != 8 { 43221 break 43222 } 43223 t := v.Aux 43224 _ = v.Args[1] 43225 destptr := v.Args[0] 43226 mem := v.Args[1] 43227 if !(t.(*types.Type).Alignment()%4 == 0) { 43228 break 43229 } 43230 v.reset(OpPPC64MOVDstorezero) 43231 v.AddArg(destptr) 43232 v.AddArg(mem) 43233 return true 43234 } 43235 // match: (Zero [8] destptr mem) 43236 // cond: 43237 // result: (MOVWstorezero [4] destptr (MOVWstorezero [0] destptr mem)) 43238 for { 43239 if v.AuxInt != 8 { 43240 break 43241 } 43242 _ = v.Args[1] 43243 destptr := v.Args[0] 43244 mem := v.Args[1] 43245 v.reset(OpPPC64MOVWstorezero) 43246 v.AuxInt = 4 43247 v.AddArg(destptr) 43248 v0 := b.NewValue0(v.Pos, OpPPC64MOVWstorezero, types.TypeMem) 43249 v0.AuxInt = 0 43250 v0.AddArg(destptr) 43251 v0.AddArg(mem) 43252 v.AddArg(v0) 43253 return true 43254 } 43255 return false 43256 } 43257 func rewriteValuePPC64_OpZero_10(v *Value) bool { 43258 b := v.Block 43259 _ = b 43260 // match: (Zero [12] {t} destptr mem) 43261 // cond: t.(*types.Type).Alignment()%4 == 0 43262 // result: (MOVWstorezero [8] destptr (MOVDstorezero [0] destptr mem)) 43263 for { 43264 if v.AuxInt != 12 { 43265 break 43266 } 43267 t := v.Aux 43268 _ = v.Args[1] 43269 destptr := v.Args[0] 43270 mem := v.Args[1] 43271 if !(t.(*types.Type).Alignment()%4 == 0) { 43272 break 43273 } 43274 v.reset(OpPPC64MOVWstorezero) 43275 v.AuxInt = 8 43276 v.AddArg(destptr) 43277 v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 43278 v0.AuxInt = 0 43279 v0.AddArg(destptr) 43280 v0.AddArg(mem) 43281 v.AddArg(v0) 43282 return true 43283 } 43284 // match: (Zero [16] {t} destptr mem) 43285 // cond: t.(*types.Type).Alignment()%4 == 0 43286 // result: (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem)) 43287 for { 43288 if v.AuxInt != 16 { 43289 break 43290 } 43291 t := v.Aux 43292 _ = v.Args[1] 43293 destptr := v.Args[0] 43294 mem := v.Args[1] 43295 if !(t.(*types.Type).Alignment()%4 == 0) { 43296 break 43297 } 43298 v.reset(OpPPC64MOVDstorezero) 43299 v.AuxInt = 8 43300 v.AddArg(destptr) 43301 v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 43302 v0.AuxInt = 0 43303 v0.AddArg(destptr) 43304 v0.AddArg(mem) 43305 v.AddArg(v0) 43306 return true 43307 } 43308 // match: (Zero [24] {t} destptr mem) 43309 // cond: t.(*types.Type).Alignment()%4 == 0 43310 // result: (MOVDstorezero [16] destptr (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem))) 43311 for { 43312 if v.AuxInt != 24 { 43313 break 43314 } 43315 t := v.Aux 43316 _ = v.Args[1] 43317 destptr := v.Args[0] 43318 mem := v.Args[1] 43319 if !(t.(*types.Type).Alignment()%4 == 0) { 43320 break 43321 } 43322 v.reset(OpPPC64MOVDstorezero) 43323 v.AuxInt = 16 43324 v.AddArg(destptr) 43325 v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 43326 v0.AuxInt = 8 43327 v0.AddArg(destptr) 43328 v1 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 43329 v1.AuxInt = 0 43330 v1.AddArg(destptr) 43331 v1.AddArg(mem) 43332 v0.AddArg(v1) 43333 v.AddArg(v0) 43334 return true 43335 } 43336 // match: (Zero [32] {t} destptr mem) 43337 // cond: t.(*types.Type).Alignment()%4 == 0 43338 // result: (MOVDstorezero [24] destptr (MOVDstorezero [16] destptr (MOVDstorezero [8] destptr (MOVDstorezero [0] destptr mem)))) 43339 for { 43340 if v.AuxInt != 32 { 43341 break 43342 } 43343 t := v.Aux 43344 _ = v.Args[1] 43345 destptr := v.Args[0] 43346 mem := v.Args[1] 43347 if !(t.(*types.Type).Alignment()%4 == 0) { 43348 break 43349 } 43350 v.reset(OpPPC64MOVDstorezero) 43351 v.AuxInt = 24 43352 v.AddArg(destptr) 43353 v0 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 43354 v0.AuxInt = 16 43355 v0.AddArg(destptr) 43356 v1 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 43357 v1.AuxInt = 8 43358 v1.AddArg(destptr) 43359 v2 := b.NewValue0(v.Pos, OpPPC64MOVDstorezero, types.TypeMem) 43360 v2.AuxInt = 0 43361 v2.AddArg(destptr) 43362 v2.AddArg(mem) 43363 v1.AddArg(v2) 43364 v0.AddArg(v1) 43365 v.AddArg(v0) 43366 return true 43367 } 43368 // match: (Zero [s] ptr mem) 43369 // cond: 43370 // result: (LoweredZero [s] ptr mem) 43371 for { 43372 s := v.AuxInt 43373 _ = v.Args[1] 43374 ptr := v.Args[0] 43375 mem := v.Args[1] 43376 v.reset(OpPPC64LoweredZero) 43377 v.AuxInt = s 43378 v.AddArg(ptr) 43379 v.AddArg(mem) 43380 return true 43381 } 43382 } 43383 func rewriteValuePPC64_OpZeroExt16to32_0(v *Value) bool { 43384 // match: (ZeroExt16to32 x) 43385 // cond: 43386 // result: (MOVHZreg x) 43387 for { 43388 x := v.Args[0] 43389 v.reset(OpPPC64MOVHZreg) 43390 v.AddArg(x) 43391 return true 43392 } 43393 } 43394 func rewriteValuePPC64_OpZeroExt16to64_0(v *Value) bool { 43395 // match: (ZeroExt16to64 x) 43396 // cond: 43397 // result: (MOVHZreg x) 43398 for { 43399 x := v.Args[0] 43400 v.reset(OpPPC64MOVHZreg) 43401 v.AddArg(x) 43402 return true 43403 } 43404 } 43405 func rewriteValuePPC64_OpZeroExt32to64_0(v *Value) bool { 43406 // match: (ZeroExt32to64 x) 43407 // cond: 43408 // result: (MOVWZreg x) 43409 for { 43410 x := v.Args[0] 43411 v.reset(OpPPC64MOVWZreg) 43412 v.AddArg(x) 43413 return true 43414 } 43415 } 43416 func rewriteValuePPC64_OpZeroExt8to16_0(v *Value) bool { 43417 // match: (ZeroExt8to16 x) 43418 // cond: 43419 // result: (MOVBZreg x) 43420 for { 43421 x := v.Args[0] 43422 v.reset(OpPPC64MOVBZreg) 43423 v.AddArg(x) 43424 return true 43425 } 43426 } 43427 func rewriteValuePPC64_OpZeroExt8to32_0(v *Value) bool { 43428 // match: (ZeroExt8to32 x) 43429 // cond: 43430 // result: (MOVBZreg x) 43431 for { 43432 x := v.Args[0] 43433 v.reset(OpPPC64MOVBZreg) 43434 v.AddArg(x) 43435 return true 43436 } 43437 } 43438 func rewriteValuePPC64_OpZeroExt8to64_0(v *Value) bool { 43439 // match: (ZeroExt8to64 x) 43440 // cond: 43441 // result: (MOVBZreg x) 43442 for { 43443 x := v.Args[0] 43444 v.reset(OpPPC64MOVBZreg) 43445 v.AddArg(x) 43446 return true 43447 } 43448 } 43449 func rewriteBlockPPC64(b *Block) bool { 43450 config := b.Func.Config 43451 _ = config 43452 fe := b.Func.fe 43453 _ = fe 43454 typ := &config.Types 43455 _ = typ 43456 switch b.Kind { 43457 case BlockPPC64EQ: 43458 // match: (EQ (CMPconst [0] (ANDconst [c] x)) yes no) 43459 // cond: 43460 // result: (EQ (ANDCCconst [c] x) yes no) 43461 for { 43462 v := b.Control 43463 if v.Op != OpPPC64CMPconst { 43464 break 43465 } 43466 if v.AuxInt != 0 { 43467 break 43468 } 43469 v_0 := v.Args[0] 43470 if v_0.Op != OpPPC64ANDconst { 43471 break 43472 } 43473 c := v_0.AuxInt 43474 x := v_0.Args[0] 43475 b.Kind = BlockPPC64EQ 43476 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags) 43477 v0.AuxInt = c 43478 v0.AddArg(x) 43479 b.SetControl(v0) 43480 b.Aux = nil 43481 return true 43482 } 43483 // match: (EQ (CMPWconst [0] (ANDconst [c] x)) yes no) 43484 // cond: 43485 // result: (EQ (ANDCCconst [c] x) yes no) 43486 for { 43487 v := b.Control 43488 if v.Op != OpPPC64CMPWconst { 43489 break 43490 } 43491 if v.AuxInt != 0 { 43492 break 43493 } 43494 v_0 := v.Args[0] 43495 if v_0.Op != OpPPC64ANDconst { 43496 break 43497 } 43498 c := v_0.AuxInt 43499 x := v_0.Args[0] 43500 b.Kind = BlockPPC64EQ 43501 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags) 43502 v0.AuxInt = c 43503 v0.AddArg(x) 43504 b.SetControl(v0) 43505 b.Aux = nil 43506 return true 43507 } 43508 // match: (EQ (FlagEQ) yes no) 43509 // cond: 43510 // result: (First nil yes no) 43511 for { 43512 v := b.Control 43513 if v.Op != OpPPC64FlagEQ { 43514 break 43515 } 43516 b.Kind = BlockFirst 43517 b.SetControl(nil) 43518 b.Aux = nil 43519 return true 43520 } 43521 // match: (EQ (FlagLT) yes no) 43522 // cond: 43523 // result: (First nil no yes) 43524 for { 43525 v := b.Control 43526 if v.Op != OpPPC64FlagLT { 43527 break 43528 } 43529 b.Kind = BlockFirst 43530 b.SetControl(nil) 43531 b.Aux = nil 43532 b.swapSuccessors() 43533 return true 43534 } 43535 // match: (EQ (FlagGT) yes no) 43536 // cond: 43537 // result: (First nil no yes) 43538 for { 43539 v := b.Control 43540 if v.Op != OpPPC64FlagGT { 43541 break 43542 } 43543 b.Kind = BlockFirst 43544 b.SetControl(nil) 43545 b.Aux = nil 43546 b.swapSuccessors() 43547 return true 43548 } 43549 // match: (EQ (InvertFlags cmp) yes no) 43550 // cond: 43551 // result: (EQ cmp yes no) 43552 for { 43553 v := b.Control 43554 if v.Op != OpPPC64InvertFlags { 43555 break 43556 } 43557 cmp := v.Args[0] 43558 b.Kind = BlockPPC64EQ 43559 b.SetControl(cmp) 43560 b.Aux = nil 43561 return true 43562 } 43563 case BlockPPC64GE: 43564 // match: (GE (FlagEQ) yes no) 43565 // cond: 43566 // result: (First nil yes no) 43567 for { 43568 v := b.Control 43569 if v.Op != OpPPC64FlagEQ { 43570 break 43571 } 43572 b.Kind = BlockFirst 43573 b.SetControl(nil) 43574 b.Aux = nil 43575 return true 43576 } 43577 // match: (GE (FlagLT) yes no) 43578 // cond: 43579 // result: (First nil no yes) 43580 for { 43581 v := b.Control 43582 if v.Op != OpPPC64FlagLT { 43583 break 43584 } 43585 b.Kind = BlockFirst 43586 b.SetControl(nil) 43587 b.Aux = nil 43588 b.swapSuccessors() 43589 return true 43590 } 43591 // match: (GE (FlagGT) yes no) 43592 // cond: 43593 // result: (First nil yes no) 43594 for { 43595 v := b.Control 43596 if v.Op != OpPPC64FlagGT { 43597 break 43598 } 43599 b.Kind = BlockFirst 43600 b.SetControl(nil) 43601 b.Aux = nil 43602 return true 43603 } 43604 // match: (GE (InvertFlags cmp) yes no) 43605 // cond: 43606 // result: (LE cmp yes no) 43607 for { 43608 v := b.Control 43609 if v.Op != OpPPC64InvertFlags { 43610 break 43611 } 43612 cmp := v.Args[0] 43613 b.Kind = BlockPPC64LE 43614 b.SetControl(cmp) 43615 b.Aux = nil 43616 return true 43617 } 43618 case BlockPPC64GT: 43619 // match: (GT (FlagEQ) yes no) 43620 // cond: 43621 // result: (First nil no yes) 43622 for { 43623 v := b.Control 43624 if v.Op != OpPPC64FlagEQ { 43625 break 43626 } 43627 b.Kind = BlockFirst 43628 b.SetControl(nil) 43629 b.Aux = nil 43630 b.swapSuccessors() 43631 return true 43632 } 43633 // match: (GT (FlagLT) yes no) 43634 // cond: 43635 // result: (First nil no yes) 43636 for { 43637 v := b.Control 43638 if v.Op != OpPPC64FlagLT { 43639 break 43640 } 43641 b.Kind = BlockFirst 43642 b.SetControl(nil) 43643 b.Aux = nil 43644 b.swapSuccessors() 43645 return true 43646 } 43647 // match: (GT (FlagGT) yes no) 43648 // cond: 43649 // result: (First nil yes no) 43650 for { 43651 v := b.Control 43652 if v.Op != OpPPC64FlagGT { 43653 break 43654 } 43655 b.Kind = BlockFirst 43656 b.SetControl(nil) 43657 b.Aux = nil 43658 return true 43659 } 43660 // match: (GT (InvertFlags cmp) yes no) 43661 // cond: 43662 // result: (LT cmp yes no) 43663 for { 43664 v := b.Control 43665 if v.Op != OpPPC64InvertFlags { 43666 break 43667 } 43668 cmp := v.Args[0] 43669 b.Kind = BlockPPC64LT 43670 b.SetControl(cmp) 43671 b.Aux = nil 43672 return true 43673 } 43674 case BlockIf: 43675 // match: (If (Equal cc) yes no) 43676 // cond: 43677 // result: (EQ cc yes no) 43678 for { 43679 v := b.Control 43680 if v.Op != OpPPC64Equal { 43681 break 43682 } 43683 cc := v.Args[0] 43684 b.Kind = BlockPPC64EQ 43685 b.SetControl(cc) 43686 b.Aux = nil 43687 return true 43688 } 43689 // match: (If (NotEqual cc) yes no) 43690 // cond: 43691 // result: (NE cc yes no) 43692 for { 43693 v := b.Control 43694 if v.Op != OpPPC64NotEqual { 43695 break 43696 } 43697 cc := v.Args[0] 43698 b.Kind = BlockPPC64NE 43699 b.SetControl(cc) 43700 b.Aux = nil 43701 return true 43702 } 43703 // match: (If (LessThan cc) yes no) 43704 // cond: 43705 // result: (LT cc yes no) 43706 for { 43707 v := b.Control 43708 if v.Op != OpPPC64LessThan { 43709 break 43710 } 43711 cc := v.Args[0] 43712 b.Kind = BlockPPC64LT 43713 b.SetControl(cc) 43714 b.Aux = nil 43715 return true 43716 } 43717 // match: (If (LessEqual cc) yes no) 43718 // cond: 43719 // result: (LE cc yes no) 43720 for { 43721 v := b.Control 43722 if v.Op != OpPPC64LessEqual { 43723 break 43724 } 43725 cc := v.Args[0] 43726 b.Kind = BlockPPC64LE 43727 b.SetControl(cc) 43728 b.Aux = nil 43729 return true 43730 } 43731 // match: (If (GreaterThan cc) yes no) 43732 // cond: 43733 // result: (GT cc yes no) 43734 for { 43735 v := b.Control 43736 if v.Op != OpPPC64GreaterThan { 43737 break 43738 } 43739 cc := v.Args[0] 43740 b.Kind = BlockPPC64GT 43741 b.SetControl(cc) 43742 b.Aux = nil 43743 return true 43744 } 43745 // match: (If (GreaterEqual cc) yes no) 43746 // cond: 43747 // result: (GE cc yes no) 43748 for { 43749 v := b.Control 43750 if v.Op != OpPPC64GreaterEqual { 43751 break 43752 } 43753 cc := v.Args[0] 43754 b.Kind = BlockPPC64GE 43755 b.SetControl(cc) 43756 b.Aux = nil 43757 return true 43758 } 43759 // match: (If (FLessThan cc) yes no) 43760 // cond: 43761 // result: (FLT cc yes no) 43762 for { 43763 v := b.Control 43764 if v.Op != OpPPC64FLessThan { 43765 break 43766 } 43767 cc := v.Args[0] 43768 b.Kind = BlockPPC64FLT 43769 b.SetControl(cc) 43770 b.Aux = nil 43771 return true 43772 } 43773 // match: (If (FLessEqual cc) yes no) 43774 // cond: 43775 // result: (FLE cc yes no) 43776 for { 43777 v := b.Control 43778 if v.Op != OpPPC64FLessEqual { 43779 break 43780 } 43781 cc := v.Args[0] 43782 b.Kind = BlockPPC64FLE 43783 b.SetControl(cc) 43784 b.Aux = nil 43785 return true 43786 } 43787 // match: (If (FGreaterThan cc) yes no) 43788 // cond: 43789 // result: (FGT cc yes no) 43790 for { 43791 v := b.Control 43792 if v.Op != OpPPC64FGreaterThan { 43793 break 43794 } 43795 cc := v.Args[0] 43796 b.Kind = BlockPPC64FGT 43797 b.SetControl(cc) 43798 b.Aux = nil 43799 return true 43800 } 43801 // match: (If (FGreaterEqual cc) yes no) 43802 // cond: 43803 // result: (FGE cc yes no) 43804 for { 43805 v := b.Control 43806 if v.Op != OpPPC64FGreaterEqual { 43807 break 43808 } 43809 cc := v.Args[0] 43810 b.Kind = BlockPPC64FGE 43811 b.SetControl(cc) 43812 b.Aux = nil 43813 return true 43814 } 43815 // match: (If cond yes no) 43816 // cond: 43817 // result: (NE (CMPWconst [0] cond) yes no) 43818 for { 43819 v := b.Control 43820 _ = v 43821 cond := b.Control 43822 b.Kind = BlockPPC64NE 43823 v0 := b.NewValue0(v.Pos, OpPPC64CMPWconst, types.TypeFlags) 43824 v0.AuxInt = 0 43825 v0.AddArg(cond) 43826 b.SetControl(v0) 43827 b.Aux = nil 43828 return true 43829 } 43830 case BlockPPC64LE: 43831 // match: (LE (FlagEQ) yes no) 43832 // cond: 43833 // result: (First nil yes no) 43834 for { 43835 v := b.Control 43836 if v.Op != OpPPC64FlagEQ { 43837 break 43838 } 43839 b.Kind = BlockFirst 43840 b.SetControl(nil) 43841 b.Aux = nil 43842 return true 43843 } 43844 // match: (LE (FlagLT) yes no) 43845 // cond: 43846 // result: (First nil yes no) 43847 for { 43848 v := b.Control 43849 if v.Op != OpPPC64FlagLT { 43850 break 43851 } 43852 b.Kind = BlockFirst 43853 b.SetControl(nil) 43854 b.Aux = nil 43855 return true 43856 } 43857 // match: (LE (FlagGT) yes no) 43858 // cond: 43859 // result: (First nil no yes) 43860 for { 43861 v := b.Control 43862 if v.Op != OpPPC64FlagGT { 43863 break 43864 } 43865 b.Kind = BlockFirst 43866 b.SetControl(nil) 43867 b.Aux = nil 43868 b.swapSuccessors() 43869 return true 43870 } 43871 // match: (LE (InvertFlags cmp) yes no) 43872 // cond: 43873 // result: (GE cmp yes no) 43874 for { 43875 v := b.Control 43876 if v.Op != OpPPC64InvertFlags { 43877 break 43878 } 43879 cmp := v.Args[0] 43880 b.Kind = BlockPPC64GE 43881 b.SetControl(cmp) 43882 b.Aux = nil 43883 return true 43884 } 43885 case BlockPPC64LT: 43886 // match: (LT (FlagEQ) yes no) 43887 // cond: 43888 // result: (First nil no yes) 43889 for { 43890 v := b.Control 43891 if v.Op != OpPPC64FlagEQ { 43892 break 43893 } 43894 b.Kind = BlockFirst 43895 b.SetControl(nil) 43896 b.Aux = nil 43897 b.swapSuccessors() 43898 return true 43899 } 43900 // match: (LT (FlagLT) yes no) 43901 // cond: 43902 // result: (First nil yes no) 43903 for { 43904 v := b.Control 43905 if v.Op != OpPPC64FlagLT { 43906 break 43907 } 43908 b.Kind = BlockFirst 43909 b.SetControl(nil) 43910 b.Aux = nil 43911 return true 43912 } 43913 // match: (LT (FlagGT) yes no) 43914 // cond: 43915 // result: (First nil no yes) 43916 for { 43917 v := b.Control 43918 if v.Op != OpPPC64FlagGT { 43919 break 43920 } 43921 b.Kind = BlockFirst 43922 b.SetControl(nil) 43923 b.Aux = nil 43924 b.swapSuccessors() 43925 return true 43926 } 43927 // match: (LT (InvertFlags cmp) yes no) 43928 // cond: 43929 // result: (GT cmp yes no) 43930 for { 43931 v := b.Control 43932 if v.Op != OpPPC64InvertFlags { 43933 break 43934 } 43935 cmp := v.Args[0] 43936 b.Kind = BlockPPC64GT 43937 b.SetControl(cmp) 43938 b.Aux = nil 43939 return true 43940 } 43941 case BlockPPC64NE: 43942 // match: (NE (CMPWconst [0] (Equal cc)) yes no) 43943 // cond: 43944 // result: (EQ cc yes no) 43945 for { 43946 v := b.Control 43947 if v.Op != OpPPC64CMPWconst { 43948 break 43949 } 43950 if v.AuxInt != 0 { 43951 break 43952 } 43953 v_0 := v.Args[0] 43954 if v_0.Op != OpPPC64Equal { 43955 break 43956 } 43957 cc := v_0.Args[0] 43958 b.Kind = BlockPPC64EQ 43959 b.SetControl(cc) 43960 b.Aux = nil 43961 return true 43962 } 43963 // match: (NE (CMPWconst [0] (NotEqual cc)) yes no) 43964 // cond: 43965 // result: (NE cc yes no) 43966 for { 43967 v := b.Control 43968 if v.Op != OpPPC64CMPWconst { 43969 break 43970 } 43971 if v.AuxInt != 0 { 43972 break 43973 } 43974 v_0 := v.Args[0] 43975 if v_0.Op != OpPPC64NotEqual { 43976 break 43977 } 43978 cc := v_0.Args[0] 43979 b.Kind = BlockPPC64NE 43980 b.SetControl(cc) 43981 b.Aux = nil 43982 return true 43983 } 43984 // match: (NE (CMPWconst [0] (LessThan cc)) yes no) 43985 // cond: 43986 // result: (LT cc yes no) 43987 for { 43988 v := b.Control 43989 if v.Op != OpPPC64CMPWconst { 43990 break 43991 } 43992 if v.AuxInt != 0 { 43993 break 43994 } 43995 v_0 := v.Args[0] 43996 if v_0.Op != OpPPC64LessThan { 43997 break 43998 } 43999 cc := v_0.Args[0] 44000 b.Kind = BlockPPC64LT 44001 b.SetControl(cc) 44002 b.Aux = nil 44003 return true 44004 } 44005 // match: (NE (CMPWconst [0] (LessEqual cc)) yes no) 44006 // cond: 44007 // result: (LE cc yes no) 44008 for { 44009 v := b.Control 44010 if v.Op != OpPPC64CMPWconst { 44011 break 44012 } 44013 if v.AuxInt != 0 { 44014 break 44015 } 44016 v_0 := v.Args[0] 44017 if v_0.Op != OpPPC64LessEqual { 44018 break 44019 } 44020 cc := v_0.Args[0] 44021 b.Kind = BlockPPC64LE 44022 b.SetControl(cc) 44023 b.Aux = nil 44024 return true 44025 } 44026 // match: (NE (CMPWconst [0] (GreaterThan cc)) yes no) 44027 // cond: 44028 // result: (GT cc yes no) 44029 for { 44030 v := b.Control 44031 if v.Op != OpPPC64CMPWconst { 44032 break 44033 } 44034 if v.AuxInt != 0 { 44035 break 44036 } 44037 v_0 := v.Args[0] 44038 if v_0.Op != OpPPC64GreaterThan { 44039 break 44040 } 44041 cc := v_0.Args[0] 44042 b.Kind = BlockPPC64GT 44043 b.SetControl(cc) 44044 b.Aux = nil 44045 return true 44046 } 44047 // match: (NE (CMPWconst [0] (GreaterEqual cc)) yes no) 44048 // cond: 44049 // result: (GE cc yes no) 44050 for { 44051 v := b.Control 44052 if v.Op != OpPPC64CMPWconst { 44053 break 44054 } 44055 if v.AuxInt != 0 { 44056 break 44057 } 44058 v_0 := v.Args[0] 44059 if v_0.Op != OpPPC64GreaterEqual { 44060 break 44061 } 44062 cc := v_0.Args[0] 44063 b.Kind = BlockPPC64GE 44064 b.SetControl(cc) 44065 b.Aux = nil 44066 return true 44067 } 44068 // match: (NE (CMPWconst [0] (FLessThan cc)) yes no) 44069 // cond: 44070 // result: (FLT cc yes no) 44071 for { 44072 v := b.Control 44073 if v.Op != OpPPC64CMPWconst { 44074 break 44075 } 44076 if v.AuxInt != 0 { 44077 break 44078 } 44079 v_0 := v.Args[0] 44080 if v_0.Op != OpPPC64FLessThan { 44081 break 44082 } 44083 cc := v_0.Args[0] 44084 b.Kind = BlockPPC64FLT 44085 b.SetControl(cc) 44086 b.Aux = nil 44087 return true 44088 } 44089 // match: (NE (CMPWconst [0] (FLessEqual cc)) yes no) 44090 // cond: 44091 // result: (FLE cc yes no) 44092 for { 44093 v := b.Control 44094 if v.Op != OpPPC64CMPWconst { 44095 break 44096 } 44097 if v.AuxInt != 0 { 44098 break 44099 } 44100 v_0 := v.Args[0] 44101 if v_0.Op != OpPPC64FLessEqual { 44102 break 44103 } 44104 cc := v_0.Args[0] 44105 b.Kind = BlockPPC64FLE 44106 b.SetControl(cc) 44107 b.Aux = nil 44108 return true 44109 } 44110 // match: (NE (CMPWconst [0] (FGreaterThan cc)) yes no) 44111 // cond: 44112 // result: (FGT cc yes no) 44113 for { 44114 v := b.Control 44115 if v.Op != OpPPC64CMPWconst { 44116 break 44117 } 44118 if v.AuxInt != 0 { 44119 break 44120 } 44121 v_0 := v.Args[0] 44122 if v_0.Op != OpPPC64FGreaterThan { 44123 break 44124 } 44125 cc := v_0.Args[0] 44126 b.Kind = BlockPPC64FGT 44127 b.SetControl(cc) 44128 b.Aux = nil 44129 return true 44130 } 44131 // match: (NE (CMPWconst [0] (FGreaterEqual cc)) yes no) 44132 // cond: 44133 // result: (FGE cc yes no) 44134 for { 44135 v := b.Control 44136 if v.Op != OpPPC64CMPWconst { 44137 break 44138 } 44139 if v.AuxInt != 0 { 44140 break 44141 } 44142 v_0 := v.Args[0] 44143 if v_0.Op != OpPPC64FGreaterEqual { 44144 break 44145 } 44146 cc := v_0.Args[0] 44147 b.Kind = BlockPPC64FGE 44148 b.SetControl(cc) 44149 b.Aux = nil 44150 return true 44151 } 44152 // match: (NE (CMPconst [0] (ANDconst [c] x)) yes no) 44153 // cond: 44154 // result: (NE (ANDCCconst [c] x) yes no) 44155 for { 44156 v := b.Control 44157 if v.Op != OpPPC64CMPconst { 44158 break 44159 } 44160 if v.AuxInt != 0 { 44161 break 44162 } 44163 v_0 := v.Args[0] 44164 if v_0.Op != OpPPC64ANDconst { 44165 break 44166 } 44167 c := v_0.AuxInt 44168 x := v_0.Args[0] 44169 b.Kind = BlockPPC64NE 44170 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags) 44171 v0.AuxInt = c 44172 v0.AddArg(x) 44173 b.SetControl(v0) 44174 b.Aux = nil 44175 return true 44176 } 44177 // match: (NE (CMPWconst [0] (ANDconst [c] x)) yes no) 44178 // cond: 44179 // result: (NE (ANDCCconst [c] x) yes no) 44180 for { 44181 v := b.Control 44182 if v.Op != OpPPC64CMPWconst { 44183 break 44184 } 44185 if v.AuxInt != 0 { 44186 break 44187 } 44188 v_0 := v.Args[0] 44189 if v_0.Op != OpPPC64ANDconst { 44190 break 44191 } 44192 c := v_0.AuxInt 44193 x := v_0.Args[0] 44194 b.Kind = BlockPPC64NE 44195 v0 := b.NewValue0(v.Pos, OpPPC64ANDCCconst, types.TypeFlags) 44196 v0.AuxInt = c 44197 v0.AddArg(x) 44198 b.SetControl(v0) 44199 b.Aux = nil 44200 return true 44201 } 44202 // match: (NE (FlagEQ) yes no) 44203 // cond: 44204 // result: (First nil no yes) 44205 for { 44206 v := b.Control 44207 if v.Op != OpPPC64FlagEQ { 44208 break 44209 } 44210 b.Kind = BlockFirst 44211 b.SetControl(nil) 44212 b.Aux = nil 44213 b.swapSuccessors() 44214 return true 44215 } 44216 // match: (NE (FlagLT) yes no) 44217 // cond: 44218 // result: (First nil yes no) 44219 for { 44220 v := b.Control 44221 if v.Op != OpPPC64FlagLT { 44222 break 44223 } 44224 b.Kind = BlockFirst 44225 b.SetControl(nil) 44226 b.Aux = nil 44227 return true 44228 } 44229 // match: (NE (FlagGT) yes no) 44230 // cond: 44231 // result: (First nil yes no) 44232 for { 44233 v := b.Control 44234 if v.Op != OpPPC64FlagGT { 44235 break 44236 } 44237 b.Kind = BlockFirst 44238 b.SetControl(nil) 44239 b.Aux = nil 44240 return true 44241 } 44242 // match: (NE (InvertFlags cmp) yes no) 44243 // cond: 44244 // result: (NE cmp yes no) 44245 for { 44246 v := b.Control 44247 if v.Op != OpPPC64InvertFlags { 44248 break 44249 } 44250 cmp := v.Args[0] 44251 b.Kind = BlockPPC64NE 44252 b.SetControl(cmp) 44253 b.Aux = nil 44254 return true 44255 } 44256 } 44257 return false 44258 }