1
2
3 package rewritegeneric
4
5 import "math"
6 import "math/bits"
7 import "cmd/internal/obj"
8 import "cmd/compile/internal/types"
9 import "cmd/compile/internal/ir"
10 import "cmd/compile/internal/ssa/block"
11 import "cmd/compile/internal/ssa/ssaop"
12 import "cmd/compile/internal/ssa"
13
14 func RewriteValue(v *ssa.Value) bool {
15 switch v.Op {
16 case ssaop.OpAdd16:
17 return rewriteValue_OpAdd16(v)
18 case ssaop.OpAdd32:
19 return rewriteValue_OpAdd32(v)
20 case ssaop.OpAdd32F:
21 return rewriteValue_OpAdd32F(v)
22 case ssaop.OpAdd64:
23 return rewriteValue_OpAdd64(v)
24 case ssaop.OpAdd64F:
25 return rewriteValue_OpAdd64F(v)
26 case ssaop.OpAdd64carry:
27 return rewriteValue_OpAdd64carry(v)
28 case ssaop.OpAdd8:
29 return rewriteValue_OpAdd8(v)
30 case ssaop.OpAddPtr:
31 return rewriteValue_OpAddPtr(v)
32 case ssaop.OpAnd16:
33 return rewriteValue_OpAnd16(v)
34 case ssaop.OpAnd32:
35 return rewriteValue_OpAnd32(v)
36 case ssaop.OpAnd64:
37 return rewriteValue_OpAnd64(v)
38 case ssaop.OpAnd8:
39 return rewriteValue_OpAnd8(v)
40 case ssaop.OpAndB:
41 return rewriteValue_OpAndB(v)
42 case ssaop.OpArraySelect:
43 return rewriteValue_OpArraySelect(v)
44 case ssaop.OpBitLen16:
45 return rewriteValue_OpBitLen16(v)
46 case ssaop.OpBitLen32:
47 return rewriteValue_OpBitLen32(v)
48 case ssaop.OpBitLen64:
49 return rewriteValue_OpBitLen64(v)
50 case ssaop.OpBitLen8:
51 return rewriteValue_OpBitLen8(v)
52 case ssaop.OpBitRev16:
53 return rewriteValue_OpBitRev16(v)
54 case ssaop.OpBitRev32:
55 return rewriteValue_OpBitRev32(v)
56 case ssaop.OpBitRev64:
57 return rewriteValue_OpBitRev64(v)
58 case ssaop.OpBitRev8:
59 return rewriteValue_OpBitRev8(v)
60 case ssaop.OpBswap16:
61 return rewriteValue_OpBswap16(v)
62 case ssaop.OpBswap32:
63 return rewriteValue_OpBswap32(v)
64 case ssaop.OpBswap64:
65 return rewriteValue_OpBswap64(v)
66 case ssaop.OpCeil:
67 return rewriteValue_OpCeil(v)
68 case ssaop.OpCom16:
69 return rewriteValue_OpCom16(v)
70 case ssaop.OpCom32:
71 return rewriteValue_OpCom32(v)
72 case ssaop.OpCom64:
73 return rewriteValue_OpCom64(v)
74 case ssaop.OpCom8:
75 return rewriteValue_OpCom8(v)
76 case ssaop.OpCondSelect:
77 return rewriteValue_OpCondSelect(v)
78 case ssaop.OpConstInterface:
79 return rewriteValue_OpConstInterface(v)
80 case ssaop.OpConstSlice:
81 return rewriteValue_OpConstSlice(v)
82 case ssaop.OpConstString:
83 return rewriteValue_OpConstString(v)
84 case ssaop.OpConvert:
85 return rewriteValue_OpConvert(v)
86 case ssaop.OpCtz16:
87 return rewriteValue_OpCtz16(v)
88 case ssaop.OpCtz32:
89 return rewriteValue_OpCtz32(v)
90 case ssaop.OpCtz64:
91 return rewriteValue_OpCtz64(v)
92 case ssaop.OpCtz8:
93 return rewriteValue_OpCtz8(v)
94 case ssaop.OpCvt32Fto32:
95 return rewriteValue_OpCvt32Fto32(v)
96 case ssaop.OpCvt32Fto64:
97 return rewriteValue_OpCvt32Fto64(v)
98 case ssaop.OpCvt32Fto64F:
99 return rewriteValue_OpCvt32Fto64F(v)
100 case ssaop.OpCvt32to32F:
101 return rewriteValue_OpCvt32to32F(v)
102 case ssaop.OpCvt32to64F:
103 return rewriteValue_OpCvt32to64F(v)
104 case ssaop.OpCvt64Fto32:
105 return rewriteValue_OpCvt64Fto32(v)
106 case ssaop.OpCvt64Fto32F:
107 return rewriteValue_OpCvt64Fto32F(v)
108 case ssaop.OpCvt64Fto64:
109 return rewriteValue_OpCvt64Fto64(v)
110 case ssaop.OpCvt64to32F:
111 return rewriteValue_OpCvt64to32F(v)
112 case ssaop.OpCvt64to64F:
113 return rewriteValue_OpCvt64to64F(v)
114 case ssaop.OpCvtBoolToUint8:
115 return rewriteValue_OpCvtBoolToUint8(v)
116 case ssaop.OpDiv128u:
117 return rewriteValue_OpDiv128u(v)
118 case ssaop.OpDiv16:
119 return rewriteValue_OpDiv16(v)
120 case ssaop.OpDiv16u:
121 return rewriteValue_OpDiv16u(v)
122 case ssaop.OpDiv32:
123 return rewriteValue_OpDiv32(v)
124 case ssaop.OpDiv32F:
125 return rewriteValue_OpDiv32F(v)
126 case ssaop.OpDiv32u:
127 return rewriteValue_OpDiv32u(v)
128 case ssaop.OpDiv64:
129 return rewriteValue_OpDiv64(v)
130 case ssaop.OpDiv64F:
131 return rewriteValue_OpDiv64F(v)
132 case ssaop.OpDiv64u:
133 return rewriteValue_OpDiv64u(v)
134 case ssaop.OpDiv8:
135 return rewriteValue_OpDiv8(v)
136 case ssaop.OpDiv8u:
137 return rewriteValue_OpDiv8u(v)
138 case ssaop.OpEq16:
139 return rewriteValue_OpEq16(v)
140 case ssaop.OpEq32:
141 return rewriteValue_OpEq32(v)
142 case ssaop.OpEq32F:
143 return rewriteValue_OpEq32F(v)
144 case ssaop.OpEq64:
145 return rewriteValue_OpEq64(v)
146 case ssaop.OpEq64F:
147 return rewriteValue_OpEq64F(v)
148 case ssaop.OpEq8:
149 return rewriteValue_OpEq8(v)
150 case ssaop.OpEqB:
151 return rewriteValue_OpEqB(v)
152 case ssaop.OpEqInter:
153 return rewriteValue_OpEqInter(v)
154 case ssaop.OpEqPtr:
155 return rewriteValue_OpEqPtr(v)
156 case ssaop.OpEqSlice:
157 return rewriteValue_OpEqSlice(v)
158 case ssaop.OpFloor:
159 return rewriteValue_OpFloor(v)
160 case ssaop.OpIMake:
161 return rewriteValue_OpIMake(v)
162 case ssaop.OpInterLECall:
163 return rewriteValue_OpInterLECall(v)
164 case ssaop.OpIsInBounds:
165 return rewriteValue_OpIsInBounds(v)
166 case ssaop.OpIsNonNil:
167 return rewriteValue_OpIsNonNil(v)
168 case ssaop.OpIsSliceInBounds:
169 return rewriteValue_OpIsSliceInBounds(v)
170 case ssaop.OpLeq16:
171 return rewriteValue_OpLeq16(v)
172 case ssaop.OpLeq16U:
173 return rewriteValue_OpLeq16U(v)
174 case ssaop.OpLeq32:
175 return rewriteValue_OpLeq32(v)
176 case ssaop.OpLeq32F:
177 return rewriteValue_OpLeq32F(v)
178 case ssaop.OpLeq32U:
179 return rewriteValue_OpLeq32U(v)
180 case ssaop.OpLeq64:
181 return rewriteValue_OpLeq64(v)
182 case ssaop.OpLeq64F:
183 return rewriteValue_OpLeq64F(v)
184 case ssaop.OpLeq64U:
185 return rewriteValue_OpLeq64U(v)
186 case ssaop.OpLeq8:
187 return rewriteValue_OpLeq8(v)
188 case ssaop.OpLeq8U:
189 return rewriteValue_OpLeq8U(v)
190 case ssaop.OpLess16:
191 return rewriteValue_OpLess16(v)
192 case ssaop.OpLess16U:
193 return rewriteValue_OpLess16U(v)
194 case ssaop.OpLess32:
195 return rewriteValue_OpLess32(v)
196 case ssaop.OpLess32F:
197 return rewriteValue_OpLess32F(v)
198 case ssaop.OpLess32U:
199 return rewriteValue_OpLess32U(v)
200 case ssaop.OpLess64:
201 return rewriteValue_OpLess64(v)
202 case ssaop.OpLess64F:
203 return rewriteValue_OpLess64F(v)
204 case ssaop.OpLess64U:
205 return rewriteValue_OpLess64U(v)
206 case ssaop.OpLess8:
207 return rewriteValue_OpLess8(v)
208 case ssaop.OpLess8U:
209 return rewriteValue_OpLess8U(v)
210 case ssaop.OpLoad:
211 return rewriteValue_OpLoad(v)
212 case ssaop.OpLsh16x16:
213 return rewriteValue_OpLsh16x16(v)
214 case ssaop.OpLsh16x32:
215 return rewriteValue_OpLsh16x32(v)
216 case ssaop.OpLsh16x64:
217 return rewriteValue_OpLsh16x64(v)
218 case ssaop.OpLsh16x8:
219 return rewriteValue_OpLsh16x8(v)
220 case ssaop.OpLsh32x16:
221 return rewriteValue_OpLsh32x16(v)
222 case ssaop.OpLsh32x32:
223 return rewriteValue_OpLsh32x32(v)
224 case ssaop.OpLsh32x64:
225 return rewriteValue_OpLsh32x64(v)
226 case ssaop.OpLsh32x8:
227 return rewriteValue_OpLsh32x8(v)
228 case ssaop.OpLsh64x16:
229 return rewriteValue_OpLsh64x16(v)
230 case ssaop.OpLsh64x32:
231 return rewriteValue_OpLsh64x32(v)
232 case ssaop.OpLsh64x64:
233 return rewriteValue_OpLsh64x64(v)
234 case ssaop.OpLsh64x8:
235 return rewriteValue_OpLsh64x8(v)
236 case ssaop.OpLsh8x16:
237 return rewriteValue_OpLsh8x16(v)
238 case ssaop.OpLsh8x32:
239 return rewriteValue_OpLsh8x32(v)
240 case ssaop.OpLsh8x64:
241 return rewriteValue_OpLsh8x64(v)
242 case ssaop.OpLsh8x8:
243 return rewriteValue_OpLsh8x8(v)
244 case ssaop.OpMemEq:
245 return rewriteValue_OpMemEq(v)
246 case ssaop.OpMod16:
247 return rewriteValue_OpMod16(v)
248 case ssaop.OpMod16u:
249 return rewriteValue_OpMod16u(v)
250 case ssaop.OpMod32:
251 return rewriteValue_OpMod32(v)
252 case ssaop.OpMod32u:
253 return rewriteValue_OpMod32u(v)
254 case ssaop.OpMod64:
255 return rewriteValue_OpMod64(v)
256 case ssaop.OpMod64u:
257 return rewriteValue_OpMod64u(v)
258 case ssaop.OpMod8:
259 return rewriteValue_OpMod8(v)
260 case ssaop.OpMod8u:
261 return rewriteValue_OpMod8u(v)
262 case ssaop.OpMove:
263 return rewriteValue_OpMove(v)
264 case ssaop.OpMul16:
265 return rewriteValue_OpMul16(v)
266 case ssaop.OpMul32:
267 return rewriteValue_OpMul32(v)
268 case ssaop.OpMul32F:
269 return rewriteValue_OpMul32F(v)
270 case ssaop.OpMul32uhilo:
271 return rewriteValue_OpMul32uhilo(v)
272 case ssaop.OpMul32uover:
273 return rewriteValue_OpMul32uover(v)
274 case ssaop.OpMul64:
275 return rewriteValue_OpMul64(v)
276 case ssaop.OpMul64F:
277 return rewriteValue_OpMul64F(v)
278 case ssaop.OpMul64uhilo:
279 return rewriteValue_OpMul64uhilo(v)
280 case ssaop.OpMul64uover:
281 return rewriteValue_OpMul64uover(v)
282 case ssaop.OpMul8:
283 return rewriteValue_OpMul8(v)
284 case ssaop.OpNeg16:
285 return rewriteValue_OpNeg16(v)
286 case ssaop.OpNeg32:
287 return rewriteValue_OpNeg32(v)
288 case ssaop.OpNeg32F:
289 return rewriteValue_OpNeg32F(v)
290 case ssaop.OpNeg64:
291 return rewriteValue_OpNeg64(v)
292 case ssaop.OpNeg64F:
293 return rewriteValue_OpNeg64F(v)
294 case ssaop.OpNeg8:
295 return rewriteValue_OpNeg8(v)
296 case ssaop.OpNeq16:
297 return rewriteValue_OpNeq16(v)
298 case ssaop.OpNeq32:
299 return rewriteValue_OpNeq32(v)
300 case ssaop.OpNeq32F:
301 return rewriteValue_OpNeq32F(v)
302 case ssaop.OpNeq64:
303 return rewriteValue_OpNeq64(v)
304 case ssaop.OpNeq64F:
305 return rewriteValue_OpNeq64F(v)
306 case ssaop.OpNeq8:
307 return rewriteValue_OpNeq8(v)
308 case ssaop.OpNeqB:
309 return rewriteValue_OpNeqB(v)
310 case ssaop.OpNeqInter:
311 return rewriteValue_OpNeqInter(v)
312 case ssaop.OpNeqPtr:
313 return rewriteValue_OpNeqPtr(v)
314 case ssaop.OpNeqSlice:
315 return rewriteValue_OpNeqSlice(v)
316 case ssaop.OpNilCheck:
317 return rewriteValue_OpNilCheck(v)
318 case ssaop.OpNot:
319 return rewriteValue_OpNot(v)
320 case ssaop.OpOffPtr:
321 return rewriteValue_OpOffPtr(v)
322 case ssaop.OpOr16:
323 return rewriteValue_OpOr16(v)
324 case ssaop.OpOr32:
325 return rewriteValue_OpOr32(v)
326 case ssaop.OpOr64:
327 return rewriteValue_OpOr64(v)
328 case ssaop.OpOr8:
329 return rewriteValue_OpOr8(v)
330 case ssaop.OpOrB:
331 return rewriteValue_OpOrB(v)
332 case ssaop.OpPhi:
333 return rewriteValue_OpPhi(v)
334 case ssaop.OpPopCount16:
335 return rewriteValue_OpPopCount16(v)
336 case ssaop.OpPopCount32:
337 return rewriteValue_OpPopCount32(v)
338 case ssaop.OpPopCount64:
339 return rewriteValue_OpPopCount64(v)
340 case ssaop.OpPopCount8:
341 return rewriteValue_OpPopCount8(v)
342 case ssaop.OpPtrIndex:
343 return rewriteValue_OpPtrIndex(v)
344 case ssaop.OpRotateLeft16:
345 return rewriteValue_OpRotateLeft16(v)
346 case ssaop.OpRotateLeft32:
347 return rewriteValue_OpRotateLeft32(v)
348 case ssaop.OpRotateLeft64:
349 return rewriteValue_OpRotateLeft64(v)
350 case ssaop.OpRotateLeft8:
351 return rewriteValue_OpRotateLeft8(v)
352 case ssaop.OpRound32F:
353 return rewriteValue_OpRound32F(v)
354 case ssaop.OpRound64F:
355 return rewriteValue_OpRound64F(v)
356 case ssaop.OpRoundToEven:
357 return rewriteValue_OpRoundToEven(v)
358 case ssaop.OpRsh16Ux16:
359 return rewriteValue_OpRsh16Ux16(v)
360 case ssaop.OpRsh16Ux32:
361 return rewriteValue_OpRsh16Ux32(v)
362 case ssaop.OpRsh16Ux64:
363 return rewriteValue_OpRsh16Ux64(v)
364 case ssaop.OpRsh16Ux8:
365 return rewriteValue_OpRsh16Ux8(v)
366 case ssaop.OpRsh16x16:
367 return rewriteValue_OpRsh16x16(v)
368 case ssaop.OpRsh16x32:
369 return rewriteValue_OpRsh16x32(v)
370 case ssaop.OpRsh16x64:
371 return rewriteValue_OpRsh16x64(v)
372 case ssaop.OpRsh16x8:
373 return rewriteValue_OpRsh16x8(v)
374 case ssaop.OpRsh32Ux16:
375 return rewriteValue_OpRsh32Ux16(v)
376 case ssaop.OpRsh32Ux32:
377 return rewriteValue_OpRsh32Ux32(v)
378 case ssaop.OpRsh32Ux64:
379 return rewriteValue_OpRsh32Ux64(v)
380 case ssaop.OpRsh32Ux8:
381 return rewriteValue_OpRsh32Ux8(v)
382 case ssaop.OpRsh32x16:
383 return rewriteValue_OpRsh32x16(v)
384 case ssaop.OpRsh32x32:
385 return rewriteValue_OpRsh32x32(v)
386 case ssaop.OpRsh32x64:
387 return rewriteValue_OpRsh32x64(v)
388 case ssaop.OpRsh32x8:
389 return rewriteValue_OpRsh32x8(v)
390 case ssaop.OpRsh64Ux16:
391 return rewriteValue_OpRsh64Ux16(v)
392 case ssaop.OpRsh64Ux32:
393 return rewriteValue_OpRsh64Ux32(v)
394 case ssaop.OpRsh64Ux64:
395 return rewriteValue_OpRsh64Ux64(v)
396 case ssaop.OpRsh64Ux8:
397 return rewriteValue_OpRsh64Ux8(v)
398 case ssaop.OpRsh64x16:
399 return rewriteValue_OpRsh64x16(v)
400 case ssaop.OpRsh64x32:
401 return rewriteValue_OpRsh64x32(v)
402 case ssaop.OpRsh64x64:
403 return rewriteValue_OpRsh64x64(v)
404 case ssaop.OpRsh64x8:
405 return rewriteValue_OpRsh64x8(v)
406 case ssaop.OpRsh8Ux16:
407 return rewriteValue_OpRsh8Ux16(v)
408 case ssaop.OpRsh8Ux32:
409 return rewriteValue_OpRsh8Ux32(v)
410 case ssaop.OpRsh8Ux64:
411 return rewriteValue_OpRsh8Ux64(v)
412 case ssaop.OpRsh8Ux8:
413 return rewriteValue_OpRsh8Ux8(v)
414 case ssaop.OpRsh8x16:
415 return rewriteValue_OpRsh8x16(v)
416 case ssaop.OpRsh8x32:
417 return rewriteValue_OpRsh8x32(v)
418 case ssaop.OpRsh8x64:
419 return rewriteValue_OpRsh8x64(v)
420 case ssaop.OpRsh8x8:
421 return rewriteValue_OpRsh8x8(v)
422 case ssaop.OpSelect0:
423 return rewriteValue_OpSelect0(v)
424 case ssaop.OpSelect1:
425 return rewriteValue_OpSelect1(v)
426 case ssaop.OpSelectN:
427 return rewriteValue_OpSelectN(v)
428 case ssaop.OpSignExt16to32:
429 return rewriteValue_OpSignExt16to32(v)
430 case ssaop.OpSignExt16to64:
431 return rewriteValue_OpSignExt16to64(v)
432 case ssaop.OpSignExt32to64:
433 return rewriteValue_OpSignExt32to64(v)
434 case ssaop.OpSignExt8to16:
435 return rewriteValue_OpSignExt8to16(v)
436 case ssaop.OpSignExt8to32:
437 return rewriteValue_OpSignExt8to32(v)
438 case ssaop.OpSignExt8to64:
439 return rewriteValue_OpSignExt8to64(v)
440 case ssaop.OpSliceCap:
441 return rewriteValue_OpSliceCap(v)
442 case ssaop.OpSliceLen:
443 return rewriteValue_OpSliceLen(v)
444 case ssaop.OpSliceMake:
445 return rewriteValue_OpSliceMake(v)
446 case ssaop.OpSlicePtr:
447 return rewriteValue_OpSlicePtr(v)
448 case ssaop.OpSlicemask:
449 return rewriteValue_OpSlicemask(v)
450 case ssaop.OpSqrt:
451 return rewriteValue_OpSqrt(v)
452 case ssaop.OpStaticCall:
453 return rewriteValue_OpStaticCall(v)
454 case ssaop.OpStaticLECall:
455 return rewriteValue_OpStaticLECall(v)
456 case ssaop.OpStore:
457 return rewriteValue_OpStore(v)
458 case ssaop.OpStringLen:
459 return rewriteValue_OpStringLen(v)
460 case ssaop.OpStringPtr:
461 return rewriteValue_OpStringPtr(v)
462 case ssaop.OpStructSelect:
463 return rewriteValue_OpStructSelect(v)
464 case ssaop.OpSub16:
465 return rewriteValue_OpSub16(v)
466 case ssaop.OpSub32:
467 return rewriteValue_OpSub32(v)
468 case ssaop.OpSub32F:
469 return rewriteValue_OpSub32F(v)
470 case ssaop.OpSub64:
471 return rewriteValue_OpSub64(v)
472 case ssaop.OpSub64F:
473 return rewriteValue_OpSub64F(v)
474 case ssaop.OpSub64borrow:
475 return rewriteValue_OpSub64borrow(v)
476 case ssaop.OpSub8:
477 return rewriteValue_OpSub8(v)
478 case ssaop.OpTrunc:
479 return rewriteValue_OpTrunc(v)
480 case ssaop.OpTrunc16to8:
481 return rewriteValue_OpTrunc16to8(v)
482 case ssaop.OpTrunc32to16:
483 return rewriteValue_OpTrunc32to16(v)
484 case ssaop.OpTrunc32to8:
485 return rewriteValue_OpTrunc32to8(v)
486 case ssaop.OpTrunc64to16:
487 return rewriteValue_OpTrunc64to16(v)
488 case ssaop.OpTrunc64to32:
489 return rewriteValue_OpTrunc64to32(v)
490 case ssaop.OpTrunc64to8:
491 return rewriteValue_OpTrunc64to8(v)
492 case ssaop.OpXor16:
493 return rewriteValue_OpXor16(v)
494 case ssaop.OpXor32:
495 return rewriteValue_OpXor32(v)
496 case ssaop.OpXor64:
497 return rewriteValue_OpXor64(v)
498 case ssaop.OpXor8:
499 return rewriteValue_OpXor8(v)
500 case ssaop.OpZero:
501 return rewriteValue_OpZero(v)
502 case ssaop.OpZeroExt16to32:
503 return rewriteValue_OpZeroExt16to32(v)
504 case ssaop.OpZeroExt16to64:
505 return rewriteValue_OpZeroExt16to64(v)
506 case ssaop.OpZeroExt32to64:
507 return rewriteValue_OpZeroExt32to64(v)
508 case ssaop.OpZeroExt8to16:
509 return rewriteValue_OpZeroExt8to16(v)
510 case ssaop.OpZeroExt8to32:
511 return rewriteValue_OpZeroExt8to32(v)
512 case ssaop.OpZeroExt8to64:
513 return rewriteValue_OpZeroExt8to64(v)
514 }
515 return false
516 }
517 func rewriteValue_OpAdd16(v *ssa.Value) bool {
518 v_1 := v.Args[1]
519 v_0 := v.Args[0]
520 b := v.Block
521 config := b.Func.Config
522
523
524 for {
525 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
526 if v_0.Op != ssaop.OpConst16 {
527 continue
528 }
529 c := ssa.AuxIntToInt16(v_0.AuxInt)
530 if v_1.Op != ssaop.OpConst16 {
531 continue
532 }
533 d := ssa.AuxIntToInt16(v_1.AuxInt)
534 v.Reset(ssaop.OpConst16)
535 v.AuxInt = ssa.Int16ToAuxInt(c + d)
536 return true
537 }
538 break
539 }
540
541
542 for {
543 t := v.Type
544 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
545 if v_0.Op != ssaop.OpMul16 {
546 continue
547 }
548 _ = v_0.Args[1]
549 v_0_0 := v_0.Args[0]
550 v_0_1 := v_0.Args[1]
551 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
552 x := v_0_0
553 y := v_0_1
554 if v_1.Op != ssaop.OpMul16 {
555 continue
556 }
557 _ = v_1.Args[1]
558 v_1_0 := v_1.Args[0]
559 v_1_1 := v_1.Args[1]
560 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
561 if x != v_1_0 {
562 continue
563 }
564 z := v_1_1
565 v.Reset(ssaop.OpMul16)
566 v0 := b.NewValue0(v.Pos, ssaop.OpAdd16, t)
567 v0.AddArg2(y, z)
568 v.AddArg2(x, v0)
569 return true
570 }
571 }
572 }
573 break
574 }
575
576
577 for {
578 x := v_0
579 if x != v_1 {
580 break
581 }
582 v.Reset(ssaop.OpLsh16x64)
583 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
584 v0.AuxInt = ssa.Int64ToAuxInt(1)
585 v.AddArg2(x, v0)
586 return true
587 }
588
589
590 for {
591 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
592 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
593 continue
594 }
595 x := v_1
596 v.CopyOf(x)
597 return true
598 }
599 break
600 }
601
602
603 for {
604 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
605 x := v_0
606 if v_1.Op != ssaop.OpNeg16 {
607 continue
608 }
609 y := v_1.Args[0]
610 v.Reset(ssaop.OpSub16)
611 v.AddArg2(x, y)
612 return true
613 }
614 break
615 }
616
617
618 for {
619 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
620 if v_0.Op != ssaop.OpCom16 {
621 continue
622 }
623 x := v_0.Args[0]
624 if x != v_1 {
625 continue
626 }
627 v.Reset(ssaop.OpConst16)
628 v.AuxInt = ssa.Int16ToAuxInt(-1)
629 return true
630 }
631 break
632 }
633
634
635 for {
636 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
637 if v_0.Op != ssaop.OpSub16 {
638 continue
639 }
640 t := v_0.Args[1]
641 x := v_0.Args[0]
642 if v_1.Op != ssaop.OpAdd16 {
643 continue
644 }
645 _ = v_1.Args[1]
646 v_1_0 := v_1.Args[0]
647 v_1_1 := v_1.Args[1]
648 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
649 if t != v_1_0 {
650 continue
651 }
652 y := v_1_1
653 v.Reset(ssaop.OpAdd16)
654 v.AddArg2(x, y)
655 return true
656 }
657 }
658 break
659 }
660
661
662 for {
663 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
664 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 1 || v_1.Op != ssaop.OpCom16 {
665 continue
666 }
667 x := v_1.Args[0]
668 v.Reset(ssaop.OpNeg16)
669 v.AddArg(x)
670 return true
671 }
672 break
673 }
674
675
676 for {
677 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
678 x := v_0
679 if v_1.Op != ssaop.OpSub16 {
680 continue
681 }
682 _ = v_1.Args[1]
683 y := v_1.Args[0]
684 if x != v_1.Args[1] {
685 continue
686 }
687 v.CopyOf(y)
688 return true
689 }
690 break
691 }
692
693
694 for {
695 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
696 x := v_0
697 if v_1.Op != ssaop.OpAdd16 {
698 continue
699 }
700 _ = v_1.Args[1]
701 v_1_0 := v_1.Args[0]
702 v_1_1 := v_1.Args[1]
703 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
704 y := v_1_0
705 if v_1_1.Op != ssaop.OpSub16 {
706 continue
707 }
708 _ = v_1_1.Args[1]
709 z := v_1_1.Args[0]
710 if x != v_1_1.Args[1] {
711 continue
712 }
713 v.Reset(ssaop.OpAdd16)
714 v.AddArg2(y, z)
715 return true
716 }
717 }
718 break
719 }
720
721
722 for {
723 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
724 x := v_0
725 if v_1.Op != ssaop.OpSub16 {
726 continue
727 }
728 _ = v_1.Args[1]
729 y := v_1.Args[0]
730 v_1_1 := v_1.Args[1]
731 if v_1_1.Op != ssaop.OpSub16 {
732 continue
733 }
734 z := v_1_1.Args[1]
735 if x != v_1_1.Args[0] {
736 continue
737 }
738 v.Reset(ssaop.OpAdd16)
739 v.AddArg2(y, z)
740 return true
741 }
742 break
743 }
744
745
746
747 for {
748 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
749 if v_0.Op != ssaop.OpAdd16 {
750 continue
751 }
752 _ = v_0.Args[1]
753 v_0_0 := v_0.Args[0]
754 v_0_1 := v_0.Args[1]
755 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
756 i := v_0_0
757 if i.Op != ssaop.OpConst16 {
758 continue
759 }
760 t := i.Type
761 z := v_0_1
762 x := v_1
763 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
764 continue
765 }
766 v.Reset(ssaop.OpAdd16)
767 v0 := b.NewValue0(v.Pos, ssaop.OpAdd16, t)
768 v0.AddArg2(z, x)
769 v.AddArg2(i, v0)
770 return true
771 }
772 }
773 break
774 }
775
776
777
778 for {
779 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
780 if v_0.Op != ssaop.OpSub16 {
781 continue
782 }
783 z := v_0.Args[1]
784 i := v_0.Args[0]
785 if i.Op != ssaop.OpConst16 {
786 continue
787 }
788 t := i.Type
789 x := v_1
790 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
791 continue
792 }
793 v.Reset(ssaop.OpAdd16)
794 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, t)
795 v0.AddArg2(x, z)
796 v.AddArg2(i, v0)
797 return true
798 }
799 break
800 }
801
802
803 for {
804 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
805 if v_0.Op != ssaop.OpConst16 {
806 continue
807 }
808 t := v_0.Type
809 c := ssa.AuxIntToInt16(v_0.AuxInt)
810 if v_1.Op != ssaop.OpAdd16 {
811 continue
812 }
813 _ = v_1.Args[1]
814 v_1_0 := v_1.Args[0]
815 v_1_1 := v_1.Args[1]
816 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
817 if v_1_0.Op != ssaop.OpConst16 || v_1_0.Type != t {
818 continue
819 }
820 d := ssa.AuxIntToInt16(v_1_0.AuxInt)
821 x := v_1_1
822 v.Reset(ssaop.OpAdd16)
823 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
824 v0.AuxInt = ssa.Int16ToAuxInt(c + d)
825 v.AddArg2(v0, x)
826 return true
827 }
828 }
829 break
830 }
831
832
833 for {
834 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
835 if v_0.Op != ssaop.OpConst16 {
836 continue
837 }
838 t := v_0.Type
839 c := ssa.AuxIntToInt16(v_0.AuxInt)
840 if v_1.Op != ssaop.OpSub16 {
841 continue
842 }
843 x := v_1.Args[1]
844 v_1_0 := v_1.Args[0]
845 if v_1_0.Op != ssaop.OpConst16 || v_1_0.Type != t {
846 continue
847 }
848 d := ssa.AuxIntToInt16(v_1_0.AuxInt)
849 v.Reset(ssaop.OpSub16)
850 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
851 v0.AuxInt = ssa.Int16ToAuxInt(c + d)
852 v.AddArg2(v0, x)
853 return true
854 }
855 break
856 }
857
858
859
860 for {
861 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
862 if v_0.Op != ssaop.OpLsh16x64 {
863 continue
864 }
865 _ = v_0.Args[1]
866 x := v_0.Args[0]
867 z := v_0.Args[1]
868 if z.Op != ssaop.OpConst64 {
869 continue
870 }
871 c := ssa.AuxIntToInt64(z.AuxInt)
872 if v_1.Op != ssaop.OpRsh16Ux64 {
873 continue
874 }
875 _ = v_1.Args[1]
876 if x != v_1.Args[0] {
877 continue
878 }
879 v_1_1 := v_1.Args[1]
880 if v_1_1.Op != ssaop.OpConst64 {
881 continue
882 }
883 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
884 if !(c < 16 && d == 16-c && canRotate(config, 16)) {
885 continue
886 }
887 v.Reset(ssaop.OpRotateLeft16)
888 v.AddArg2(x, z)
889 return true
890 }
891 break
892 }
893
894
895
896 for {
897 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
898 left := v_0
899 if left.Op != ssaop.OpLsh16x64 {
900 continue
901 }
902 y := left.Args[1]
903 x := left.Args[0]
904 right := v_1
905 if right.Op != ssaop.OpRsh16Ux64 {
906 continue
907 }
908 _ = right.Args[1]
909 if x != right.Args[0] {
910 continue
911 }
912 right_1 := right.Args[1]
913 if right_1.Op != ssaop.OpSub64 {
914 continue
915 }
916 _ = right_1.Args[1]
917 right_1_0 := right_1.Args[0]
918 if right_1_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(right_1_0.AuxInt) != 16 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
919 continue
920 }
921 v.Reset(ssaop.OpRotateLeft16)
922 v.AddArg2(x, y)
923 return true
924 }
925 break
926 }
927
928
929
930 for {
931 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
932 left := v_0
933 if left.Op != ssaop.OpLsh16x32 {
934 continue
935 }
936 y := left.Args[1]
937 x := left.Args[0]
938 right := v_1
939 if right.Op != ssaop.OpRsh16Ux32 {
940 continue
941 }
942 _ = right.Args[1]
943 if x != right.Args[0] {
944 continue
945 }
946 right_1 := right.Args[1]
947 if right_1.Op != ssaop.OpSub32 {
948 continue
949 }
950 _ = right_1.Args[1]
951 right_1_0 := right_1.Args[0]
952 if right_1_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(right_1_0.AuxInt) != 16 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
953 continue
954 }
955 v.Reset(ssaop.OpRotateLeft16)
956 v.AddArg2(x, y)
957 return true
958 }
959 break
960 }
961
962
963
964 for {
965 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
966 left := v_0
967 if left.Op != ssaop.OpLsh16x16 {
968 continue
969 }
970 y := left.Args[1]
971 x := left.Args[0]
972 right := v_1
973 if right.Op != ssaop.OpRsh16Ux16 {
974 continue
975 }
976 _ = right.Args[1]
977 if x != right.Args[0] {
978 continue
979 }
980 right_1 := right.Args[1]
981 if right_1.Op != ssaop.OpSub16 {
982 continue
983 }
984 _ = right_1.Args[1]
985 right_1_0 := right_1.Args[0]
986 if right_1_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(right_1_0.AuxInt) != 16 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
987 continue
988 }
989 v.Reset(ssaop.OpRotateLeft16)
990 v.AddArg2(x, y)
991 return true
992 }
993 break
994 }
995
996
997
998 for {
999 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1000 left := v_0
1001 if left.Op != ssaop.OpLsh16x8 {
1002 continue
1003 }
1004 y := left.Args[1]
1005 x := left.Args[0]
1006 right := v_1
1007 if right.Op != ssaop.OpRsh16Ux8 {
1008 continue
1009 }
1010 _ = right.Args[1]
1011 if x != right.Args[0] {
1012 continue
1013 }
1014 right_1 := right.Args[1]
1015 if right_1.Op != ssaop.OpSub8 {
1016 continue
1017 }
1018 _ = right_1.Args[1]
1019 right_1_0 := right_1.Args[0]
1020 if right_1_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(right_1_0.AuxInt) != 16 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
1021 continue
1022 }
1023 v.Reset(ssaop.OpRotateLeft16)
1024 v.AddArg2(x, y)
1025 return true
1026 }
1027 break
1028 }
1029
1030
1031
1032 for {
1033 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1034 right := v_0
1035 if right.Op != ssaop.OpRsh16Ux64 {
1036 continue
1037 }
1038 y := right.Args[1]
1039 x := right.Args[0]
1040 left := v_1
1041 if left.Op != ssaop.OpLsh16x64 {
1042 continue
1043 }
1044 _ = left.Args[1]
1045 if x != left.Args[0] {
1046 continue
1047 }
1048 z := left.Args[1]
1049 if z.Op != ssaop.OpSub64 {
1050 continue
1051 }
1052 _ = z.Args[1]
1053 z_0 := z.Args[0]
1054 if z_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(z_0.AuxInt) != 16 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
1055 continue
1056 }
1057 v.Reset(ssaop.OpRotateLeft16)
1058 v.AddArg2(x, z)
1059 return true
1060 }
1061 break
1062 }
1063
1064
1065
1066 for {
1067 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1068 right := v_0
1069 if right.Op != ssaop.OpRsh16Ux32 {
1070 continue
1071 }
1072 y := right.Args[1]
1073 x := right.Args[0]
1074 left := v_1
1075 if left.Op != ssaop.OpLsh16x32 {
1076 continue
1077 }
1078 _ = left.Args[1]
1079 if x != left.Args[0] {
1080 continue
1081 }
1082 z := left.Args[1]
1083 if z.Op != ssaop.OpSub32 {
1084 continue
1085 }
1086 _ = z.Args[1]
1087 z_0 := z.Args[0]
1088 if z_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(z_0.AuxInt) != 16 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
1089 continue
1090 }
1091 v.Reset(ssaop.OpRotateLeft16)
1092 v.AddArg2(x, z)
1093 return true
1094 }
1095 break
1096 }
1097
1098
1099
1100 for {
1101 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1102 right := v_0
1103 if right.Op != ssaop.OpRsh16Ux16 {
1104 continue
1105 }
1106 y := right.Args[1]
1107 x := right.Args[0]
1108 left := v_1
1109 if left.Op != ssaop.OpLsh16x16 {
1110 continue
1111 }
1112 _ = left.Args[1]
1113 if x != left.Args[0] {
1114 continue
1115 }
1116 z := left.Args[1]
1117 if z.Op != ssaop.OpSub16 {
1118 continue
1119 }
1120 _ = z.Args[1]
1121 z_0 := z.Args[0]
1122 if z_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(z_0.AuxInt) != 16 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
1123 continue
1124 }
1125 v.Reset(ssaop.OpRotateLeft16)
1126 v.AddArg2(x, z)
1127 return true
1128 }
1129 break
1130 }
1131
1132
1133
1134 for {
1135 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1136 right := v_0
1137 if right.Op != ssaop.OpRsh16Ux8 {
1138 continue
1139 }
1140 y := right.Args[1]
1141 x := right.Args[0]
1142 left := v_1
1143 if left.Op != ssaop.OpLsh16x8 {
1144 continue
1145 }
1146 _ = left.Args[1]
1147 if x != left.Args[0] {
1148 continue
1149 }
1150 z := left.Args[1]
1151 if z.Op != ssaop.OpSub8 {
1152 continue
1153 }
1154 _ = z.Args[1]
1155 z_0 := z.Args[0]
1156 if z_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(z_0.AuxInt) != 16 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
1157 continue
1158 }
1159 v.Reset(ssaop.OpRotateLeft16)
1160 v.AddArg2(x, z)
1161 return true
1162 }
1163 break
1164 }
1165 return false
1166 }
1167 func rewriteValue_OpAdd32(v *ssa.Value) bool {
1168 v_1 := v.Args[1]
1169 v_0 := v.Args[0]
1170 b := v.Block
1171 config := b.Func.Config
1172
1173
1174 for {
1175 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1176 if v_0.Op != ssaop.OpConst32 {
1177 continue
1178 }
1179 c := ssa.AuxIntToInt32(v_0.AuxInt)
1180 if v_1.Op != ssaop.OpConst32 {
1181 continue
1182 }
1183 d := ssa.AuxIntToInt32(v_1.AuxInt)
1184 v.Reset(ssaop.OpConst32)
1185 v.AuxInt = ssa.Int32ToAuxInt(c + d)
1186 return true
1187 }
1188 break
1189 }
1190
1191
1192 for {
1193 t := v.Type
1194 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1195 if v_0.Op != ssaop.OpMul32 {
1196 continue
1197 }
1198 _ = v_0.Args[1]
1199 v_0_0 := v_0.Args[0]
1200 v_0_1 := v_0.Args[1]
1201 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
1202 x := v_0_0
1203 y := v_0_1
1204 if v_1.Op != ssaop.OpMul32 {
1205 continue
1206 }
1207 _ = v_1.Args[1]
1208 v_1_0 := v_1.Args[0]
1209 v_1_1 := v_1.Args[1]
1210 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
1211 if x != v_1_0 {
1212 continue
1213 }
1214 z := v_1_1
1215 v.Reset(ssaop.OpMul32)
1216 v0 := b.NewValue0(v.Pos, ssaop.OpAdd32, t)
1217 v0.AddArg2(y, z)
1218 v.AddArg2(x, v0)
1219 return true
1220 }
1221 }
1222 }
1223 break
1224 }
1225
1226
1227 for {
1228 x := v_0
1229 if x != v_1 {
1230 break
1231 }
1232 v.Reset(ssaop.OpLsh32x64)
1233 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
1234 v0.AuxInt = ssa.Int64ToAuxInt(1)
1235 v.AddArg2(x, v0)
1236 return true
1237 }
1238
1239
1240 for {
1241 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1242 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
1243 continue
1244 }
1245 x := v_1
1246 v.CopyOf(x)
1247 return true
1248 }
1249 break
1250 }
1251
1252
1253 for {
1254 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1255 x := v_0
1256 if v_1.Op != ssaop.OpNeg32 {
1257 continue
1258 }
1259 y := v_1.Args[0]
1260 v.Reset(ssaop.OpSub32)
1261 v.AddArg2(x, y)
1262 return true
1263 }
1264 break
1265 }
1266
1267
1268 for {
1269 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1270 if v_0.Op != ssaop.OpCom32 {
1271 continue
1272 }
1273 x := v_0.Args[0]
1274 if x != v_1 {
1275 continue
1276 }
1277 v.Reset(ssaop.OpConst32)
1278 v.AuxInt = ssa.Int32ToAuxInt(-1)
1279 return true
1280 }
1281 break
1282 }
1283
1284
1285 for {
1286 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1287 if v_0.Op != ssaop.OpSub32 {
1288 continue
1289 }
1290 t := v_0.Args[1]
1291 x := v_0.Args[0]
1292 if v_1.Op != ssaop.OpAdd32 {
1293 continue
1294 }
1295 _ = v_1.Args[1]
1296 v_1_0 := v_1.Args[0]
1297 v_1_1 := v_1.Args[1]
1298 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
1299 if t != v_1_0 {
1300 continue
1301 }
1302 y := v_1_1
1303 v.Reset(ssaop.OpAdd32)
1304 v.AddArg2(x, y)
1305 return true
1306 }
1307 }
1308 break
1309 }
1310
1311
1312 for {
1313 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1314 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 1 || v_1.Op != ssaop.OpCom32 {
1315 continue
1316 }
1317 x := v_1.Args[0]
1318 v.Reset(ssaop.OpNeg32)
1319 v.AddArg(x)
1320 return true
1321 }
1322 break
1323 }
1324
1325
1326 for {
1327 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1328 x := v_0
1329 if v_1.Op != ssaop.OpSub32 {
1330 continue
1331 }
1332 _ = v_1.Args[1]
1333 y := v_1.Args[0]
1334 if x != v_1.Args[1] {
1335 continue
1336 }
1337 v.CopyOf(y)
1338 return true
1339 }
1340 break
1341 }
1342
1343
1344 for {
1345 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1346 x := v_0
1347 if v_1.Op != ssaop.OpAdd32 {
1348 continue
1349 }
1350 _ = v_1.Args[1]
1351 v_1_0 := v_1.Args[0]
1352 v_1_1 := v_1.Args[1]
1353 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
1354 y := v_1_0
1355 if v_1_1.Op != ssaop.OpSub32 {
1356 continue
1357 }
1358 _ = v_1_1.Args[1]
1359 z := v_1_1.Args[0]
1360 if x != v_1_1.Args[1] {
1361 continue
1362 }
1363 v.Reset(ssaop.OpAdd32)
1364 v.AddArg2(y, z)
1365 return true
1366 }
1367 }
1368 break
1369 }
1370
1371
1372 for {
1373 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1374 x := v_0
1375 if v_1.Op != ssaop.OpSub32 {
1376 continue
1377 }
1378 _ = v_1.Args[1]
1379 y := v_1.Args[0]
1380 v_1_1 := v_1.Args[1]
1381 if v_1_1.Op != ssaop.OpSub32 {
1382 continue
1383 }
1384 z := v_1_1.Args[1]
1385 if x != v_1_1.Args[0] {
1386 continue
1387 }
1388 v.Reset(ssaop.OpAdd32)
1389 v.AddArg2(y, z)
1390 return true
1391 }
1392 break
1393 }
1394
1395
1396
1397 for {
1398 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1399 if v_0.Op != ssaop.OpAdd32 {
1400 continue
1401 }
1402 _ = v_0.Args[1]
1403 v_0_0 := v_0.Args[0]
1404 v_0_1 := v_0.Args[1]
1405 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
1406 i := v_0_0
1407 if i.Op != ssaop.OpConst32 {
1408 continue
1409 }
1410 t := i.Type
1411 z := v_0_1
1412 x := v_1
1413 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
1414 continue
1415 }
1416 v.Reset(ssaop.OpAdd32)
1417 v0 := b.NewValue0(v.Pos, ssaop.OpAdd32, t)
1418 v0.AddArg2(z, x)
1419 v.AddArg2(i, v0)
1420 return true
1421 }
1422 }
1423 break
1424 }
1425
1426
1427
1428 for {
1429 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1430 if v_0.Op != ssaop.OpSub32 {
1431 continue
1432 }
1433 z := v_0.Args[1]
1434 i := v_0.Args[0]
1435 if i.Op != ssaop.OpConst32 {
1436 continue
1437 }
1438 t := i.Type
1439 x := v_1
1440 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
1441 continue
1442 }
1443 v.Reset(ssaop.OpAdd32)
1444 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, t)
1445 v0.AddArg2(x, z)
1446 v.AddArg2(i, v0)
1447 return true
1448 }
1449 break
1450 }
1451
1452
1453 for {
1454 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1455 if v_0.Op != ssaop.OpConst32 {
1456 continue
1457 }
1458 t := v_0.Type
1459 c := ssa.AuxIntToInt32(v_0.AuxInt)
1460 if v_1.Op != ssaop.OpAdd32 {
1461 continue
1462 }
1463 _ = v_1.Args[1]
1464 v_1_0 := v_1.Args[0]
1465 v_1_1 := v_1.Args[1]
1466 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
1467 if v_1_0.Op != ssaop.OpConst32 || v_1_0.Type != t {
1468 continue
1469 }
1470 d := ssa.AuxIntToInt32(v_1_0.AuxInt)
1471 x := v_1_1
1472 v.Reset(ssaop.OpAdd32)
1473 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
1474 v0.AuxInt = ssa.Int32ToAuxInt(c + d)
1475 v.AddArg2(v0, x)
1476 return true
1477 }
1478 }
1479 break
1480 }
1481
1482
1483 for {
1484 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1485 if v_0.Op != ssaop.OpConst32 {
1486 continue
1487 }
1488 t := v_0.Type
1489 c := ssa.AuxIntToInt32(v_0.AuxInt)
1490 if v_1.Op != ssaop.OpSub32 {
1491 continue
1492 }
1493 x := v_1.Args[1]
1494 v_1_0 := v_1.Args[0]
1495 if v_1_0.Op != ssaop.OpConst32 || v_1_0.Type != t {
1496 continue
1497 }
1498 d := ssa.AuxIntToInt32(v_1_0.AuxInt)
1499 v.Reset(ssaop.OpSub32)
1500 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
1501 v0.AuxInt = ssa.Int32ToAuxInt(c + d)
1502 v.AddArg2(v0, x)
1503 return true
1504 }
1505 break
1506 }
1507
1508
1509
1510 for {
1511 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1512 if v_0.Op != ssaop.OpLsh32x64 {
1513 continue
1514 }
1515 _ = v_0.Args[1]
1516 x := v_0.Args[0]
1517 z := v_0.Args[1]
1518 if z.Op != ssaop.OpConst64 {
1519 continue
1520 }
1521 c := ssa.AuxIntToInt64(z.AuxInt)
1522 if v_1.Op != ssaop.OpRsh32Ux64 {
1523 continue
1524 }
1525 _ = v_1.Args[1]
1526 if x != v_1.Args[0] {
1527 continue
1528 }
1529 v_1_1 := v_1.Args[1]
1530 if v_1_1.Op != ssaop.OpConst64 {
1531 continue
1532 }
1533 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
1534 if !(c < 32 && d == 32-c && canRotate(config, 32)) {
1535 continue
1536 }
1537 v.Reset(ssaop.OpRotateLeft32)
1538 v.AddArg2(x, z)
1539 return true
1540 }
1541 break
1542 }
1543
1544
1545
1546 for {
1547 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1548 left := v_0
1549 if left.Op != ssaop.OpLsh32x64 {
1550 continue
1551 }
1552 y := left.Args[1]
1553 x := left.Args[0]
1554 right := v_1
1555 if right.Op != ssaop.OpRsh32Ux64 {
1556 continue
1557 }
1558 _ = right.Args[1]
1559 if x != right.Args[0] {
1560 continue
1561 }
1562 right_1 := right.Args[1]
1563 if right_1.Op != ssaop.OpSub64 {
1564 continue
1565 }
1566 _ = right_1.Args[1]
1567 right_1_0 := right_1.Args[0]
1568 if right_1_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(right_1_0.AuxInt) != 32 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
1569 continue
1570 }
1571 v.Reset(ssaop.OpRotateLeft32)
1572 v.AddArg2(x, y)
1573 return true
1574 }
1575 break
1576 }
1577
1578
1579
1580 for {
1581 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1582 left := v_0
1583 if left.Op != ssaop.OpLsh32x32 {
1584 continue
1585 }
1586 y := left.Args[1]
1587 x := left.Args[0]
1588 right := v_1
1589 if right.Op != ssaop.OpRsh32Ux32 {
1590 continue
1591 }
1592 _ = right.Args[1]
1593 if x != right.Args[0] {
1594 continue
1595 }
1596 right_1 := right.Args[1]
1597 if right_1.Op != ssaop.OpSub32 {
1598 continue
1599 }
1600 _ = right_1.Args[1]
1601 right_1_0 := right_1.Args[0]
1602 if right_1_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(right_1_0.AuxInt) != 32 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
1603 continue
1604 }
1605 v.Reset(ssaop.OpRotateLeft32)
1606 v.AddArg2(x, y)
1607 return true
1608 }
1609 break
1610 }
1611
1612
1613
1614 for {
1615 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1616 left := v_0
1617 if left.Op != ssaop.OpLsh32x16 {
1618 continue
1619 }
1620 y := left.Args[1]
1621 x := left.Args[0]
1622 right := v_1
1623 if right.Op != ssaop.OpRsh32Ux16 {
1624 continue
1625 }
1626 _ = right.Args[1]
1627 if x != right.Args[0] {
1628 continue
1629 }
1630 right_1 := right.Args[1]
1631 if right_1.Op != ssaop.OpSub16 {
1632 continue
1633 }
1634 _ = right_1.Args[1]
1635 right_1_0 := right_1.Args[0]
1636 if right_1_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(right_1_0.AuxInt) != 32 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
1637 continue
1638 }
1639 v.Reset(ssaop.OpRotateLeft32)
1640 v.AddArg2(x, y)
1641 return true
1642 }
1643 break
1644 }
1645
1646
1647
1648 for {
1649 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1650 left := v_0
1651 if left.Op != ssaop.OpLsh32x8 {
1652 continue
1653 }
1654 y := left.Args[1]
1655 x := left.Args[0]
1656 right := v_1
1657 if right.Op != ssaop.OpRsh32Ux8 {
1658 continue
1659 }
1660 _ = right.Args[1]
1661 if x != right.Args[0] {
1662 continue
1663 }
1664 right_1 := right.Args[1]
1665 if right_1.Op != ssaop.OpSub8 {
1666 continue
1667 }
1668 _ = right_1.Args[1]
1669 right_1_0 := right_1.Args[0]
1670 if right_1_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(right_1_0.AuxInt) != 32 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
1671 continue
1672 }
1673 v.Reset(ssaop.OpRotateLeft32)
1674 v.AddArg2(x, y)
1675 return true
1676 }
1677 break
1678 }
1679
1680
1681
1682 for {
1683 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1684 right := v_0
1685 if right.Op != ssaop.OpRsh32Ux64 {
1686 continue
1687 }
1688 y := right.Args[1]
1689 x := right.Args[0]
1690 left := v_1
1691 if left.Op != ssaop.OpLsh32x64 {
1692 continue
1693 }
1694 _ = left.Args[1]
1695 if x != left.Args[0] {
1696 continue
1697 }
1698 z := left.Args[1]
1699 if z.Op != ssaop.OpSub64 {
1700 continue
1701 }
1702 _ = z.Args[1]
1703 z_0 := z.Args[0]
1704 if z_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(z_0.AuxInt) != 32 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
1705 continue
1706 }
1707 v.Reset(ssaop.OpRotateLeft32)
1708 v.AddArg2(x, z)
1709 return true
1710 }
1711 break
1712 }
1713
1714
1715
1716 for {
1717 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1718 right := v_0
1719 if right.Op != ssaop.OpRsh32Ux32 {
1720 continue
1721 }
1722 y := right.Args[1]
1723 x := right.Args[0]
1724 left := v_1
1725 if left.Op != ssaop.OpLsh32x32 {
1726 continue
1727 }
1728 _ = left.Args[1]
1729 if x != left.Args[0] {
1730 continue
1731 }
1732 z := left.Args[1]
1733 if z.Op != ssaop.OpSub32 {
1734 continue
1735 }
1736 _ = z.Args[1]
1737 z_0 := z.Args[0]
1738 if z_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(z_0.AuxInt) != 32 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
1739 continue
1740 }
1741 v.Reset(ssaop.OpRotateLeft32)
1742 v.AddArg2(x, z)
1743 return true
1744 }
1745 break
1746 }
1747
1748
1749
1750 for {
1751 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1752 right := v_0
1753 if right.Op != ssaop.OpRsh32Ux16 {
1754 continue
1755 }
1756 y := right.Args[1]
1757 x := right.Args[0]
1758 left := v_1
1759 if left.Op != ssaop.OpLsh32x16 {
1760 continue
1761 }
1762 _ = left.Args[1]
1763 if x != left.Args[0] {
1764 continue
1765 }
1766 z := left.Args[1]
1767 if z.Op != ssaop.OpSub16 {
1768 continue
1769 }
1770 _ = z.Args[1]
1771 z_0 := z.Args[0]
1772 if z_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(z_0.AuxInt) != 32 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
1773 continue
1774 }
1775 v.Reset(ssaop.OpRotateLeft32)
1776 v.AddArg2(x, z)
1777 return true
1778 }
1779 break
1780 }
1781
1782
1783
1784 for {
1785 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1786 right := v_0
1787 if right.Op != ssaop.OpRsh32Ux8 {
1788 continue
1789 }
1790 y := right.Args[1]
1791 x := right.Args[0]
1792 left := v_1
1793 if left.Op != ssaop.OpLsh32x8 {
1794 continue
1795 }
1796 _ = left.Args[1]
1797 if x != left.Args[0] {
1798 continue
1799 }
1800 z := left.Args[1]
1801 if z.Op != ssaop.OpSub8 {
1802 continue
1803 }
1804 _ = z.Args[1]
1805 z_0 := z.Args[0]
1806 if z_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(z_0.AuxInt) != 32 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
1807 continue
1808 }
1809 v.Reset(ssaop.OpRotateLeft32)
1810 v.AddArg2(x, z)
1811 return true
1812 }
1813 break
1814 }
1815 return false
1816 }
1817 func rewriteValue_OpAdd32F(v *ssa.Value) bool {
1818 v_1 := v.Args[1]
1819 v_0 := v.Args[0]
1820
1821
1822
1823 for {
1824 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1825 if v_0.Op != ssaop.OpConst32F {
1826 continue
1827 }
1828 c := ssa.AuxIntToFloat32(v_0.AuxInt)
1829 if v_1.Op != ssaop.OpConst32F {
1830 continue
1831 }
1832 d := ssa.AuxIntToFloat32(v_1.AuxInt)
1833 if !(c+d == c+d) {
1834 continue
1835 }
1836 v.Reset(ssaop.OpConst32F)
1837 v.AuxInt = ssa.Float32ToAuxInt(c + d)
1838 return true
1839 }
1840 break
1841 }
1842 return false
1843 }
1844 func rewriteValue_OpAdd64(v *ssa.Value) bool {
1845 v_1 := v.Args[1]
1846 v_0 := v.Args[0]
1847 b := v.Block
1848 config := b.Func.Config
1849
1850
1851 for {
1852 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1853 if v_0.Op != ssaop.OpConst64 {
1854 continue
1855 }
1856 c := ssa.AuxIntToInt64(v_0.AuxInt)
1857 if v_1.Op != ssaop.OpConst64 {
1858 continue
1859 }
1860 d := ssa.AuxIntToInt64(v_1.AuxInt)
1861 v.Reset(ssaop.OpConst64)
1862 v.AuxInt = ssa.Int64ToAuxInt(c + d)
1863 return true
1864 }
1865 break
1866 }
1867
1868
1869 for {
1870 t := v.Type
1871 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1872 if v_0.Op != ssaop.OpMul64 {
1873 continue
1874 }
1875 _ = v_0.Args[1]
1876 v_0_0 := v_0.Args[0]
1877 v_0_1 := v_0.Args[1]
1878 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
1879 x := v_0_0
1880 y := v_0_1
1881 if v_1.Op != ssaop.OpMul64 {
1882 continue
1883 }
1884 _ = v_1.Args[1]
1885 v_1_0 := v_1.Args[0]
1886 v_1_1 := v_1.Args[1]
1887 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
1888 if x != v_1_0 {
1889 continue
1890 }
1891 z := v_1_1
1892 v.Reset(ssaop.OpMul64)
1893 v0 := b.NewValue0(v.Pos, ssaop.OpAdd64, t)
1894 v0.AddArg2(y, z)
1895 v.AddArg2(x, v0)
1896 return true
1897 }
1898 }
1899 }
1900 break
1901 }
1902
1903
1904 for {
1905 x := v_0
1906 if x != v_1 {
1907 break
1908 }
1909 v.Reset(ssaop.OpLsh64x64)
1910 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
1911 v0.AuxInt = ssa.Int64ToAuxInt(1)
1912 v.AddArg2(x, v0)
1913 return true
1914 }
1915
1916
1917 for {
1918 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1919 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
1920 continue
1921 }
1922 x := v_1
1923 v.CopyOf(x)
1924 return true
1925 }
1926 break
1927 }
1928
1929
1930 for {
1931 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1932 x := v_0
1933 if v_1.Op != ssaop.OpNeg64 {
1934 continue
1935 }
1936 y := v_1.Args[0]
1937 v.Reset(ssaop.OpSub64)
1938 v.AddArg2(x, y)
1939 return true
1940 }
1941 break
1942 }
1943
1944
1945 for {
1946 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1947 if v_0.Op != ssaop.OpCom64 {
1948 continue
1949 }
1950 x := v_0.Args[0]
1951 if x != v_1 {
1952 continue
1953 }
1954 v.Reset(ssaop.OpConst64)
1955 v.AuxInt = ssa.Int64ToAuxInt(-1)
1956 return true
1957 }
1958 break
1959 }
1960
1961
1962 for {
1963 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1964 if v_0.Op != ssaop.OpSub64 {
1965 continue
1966 }
1967 t := v_0.Args[1]
1968 x := v_0.Args[0]
1969 if v_1.Op != ssaop.OpAdd64 {
1970 continue
1971 }
1972 _ = v_1.Args[1]
1973 v_1_0 := v_1.Args[0]
1974 v_1_1 := v_1.Args[1]
1975 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
1976 if t != v_1_0 {
1977 continue
1978 }
1979 y := v_1_1
1980 v.Reset(ssaop.OpAdd64)
1981 v.AddArg2(x, y)
1982 return true
1983 }
1984 }
1985 break
1986 }
1987
1988
1989 for {
1990 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
1991 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 1 || v_1.Op != ssaop.OpCom64 {
1992 continue
1993 }
1994 x := v_1.Args[0]
1995 v.Reset(ssaop.OpNeg64)
1996 v.AddArg(x)
1997 return true
1998 }
1999 break
2000 }
2001
2002
2003 for {
2004 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2005 x := v_0
2006 if v_1.Op != ssaop.OpSub64 {
2007 continue
2008 }
2009 _ = v_1.Args[1]
2010 y := v_1.Args[0]
2011 if x != v_1.Args[1] {
2012 continue
2013 }
2014 v.CopyOf(y)
2015 return true
2016 }
2017 break
2018 }
2019
2020
2021 for {
2022 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2023 x := v_0
2024 if v_1.Op != ssaop.OpAdd64 {
2025 continue
2026 }
2027 _ = v_1.Args[1]
2028 v_1_0 := v_1.Args[0]
2029 v_1_1 := v_1.Args[1]
2030 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
2031 y := v_1_0
2032 if v_1_1.Op != ssaop.OpSub64 {
2033 continue
2034 }
2035 _ = v_1_1.Args[1]
2036 z := v_1_1.Args[0]
2037 if x != v_1_1.Args[1] {
2038 continue
2039 }
2040 v.Reset(ssaop.OpAdd64)
2041 v.AddArg2(y, z)
2042 return true
2043 }
2044 }
2045 break
2046 }
2047
2048
2049 for {
2050 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2051 x := v_0
2052 if v_1.Op != ssaop.OpSub64 {
2053 continue
2054 }
2055 _ = v_1.Args[1]
2056 y := v_1.Args[0]
2057 v_1_1 := v_1.Args[1]
2058 if v_1_1.Op != ssaop.OpSub64 {
2059 continue
2060 }
2061 z := v_1_1.Args[1]
2062 if x != v_1_1.Args[0] {
2063 continue
2064 }
2065 v.Reset(ssaop.OpAdd64)
2066 v.AddArg2(y, z)
2067 return true
2068 }
2069 break
2070 }
2071
2072
2073
2074 for {
2075 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2076 if v_0.Op != ssaop.OpAdd64 {
2077 continue
2078 }
2079 _ = v_0.Args[1]
2080 v_0_0 := v_0.Args[0]
2081 v_0_1 := v_0.Args[1]
2082 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
2083 i := v_0_0
2084 if i.Op != ssaop.OpConst64 {
2085 continue
2086 }
2087 t := i.Type
2088 z := v_0_1
2089 x := v_1
2090 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
2091 continue
2092 }
2093 v.Reset(ssaop.OpAdd64)
2094 v0 := b.NewValue0(v.Pos, ssaop.OpAdd64, t)
2095 v0.AddArg2(z, x)
2096 v.AddArg2(i, v0)
2097 return true
2098 }
2099 }
2100 break
2101 }
2102
2103
2104
2105 for {
2106 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2107 if v_0.Op != ssaop.OpSub64 {
2108 continue
2109 }
2110 z := v_0.Args[1]
2111 i := v_0.Args[0]
2112 if i.Op != ssaop.OpConst64 {
2113 continue
2114 }
2115 t := i.Type
2116 x := v_1
2117 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
2118 continue
2119 }
2120 v.Reset(ssaop.OpAdd64)
2121 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, t)
2122 v0.AddArg2(x, z)
2123 v.AddArg2(i, v0)
2124 return true
2125 }
2126 break
2127 }
2128
2129
2130 for {
2131 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2132 if v_0.Op != ssaop.OpConst64 {
2133 continue
2134 }
2135 t := v_0.Type
2136 c := ssa.AuxIntToInt64(v_0.AuxInt)
2137 if v_1.Op != ssaop.OpAdd64 {
2138 continue
2139 }
2140 _ = v_1.Args[1]
2141 v_1_0 := v_1.Args[0]
2142 v_1_1 := v_1.Args[1]
2143 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
2144 if v_1_0.Op != ssaop.OpConst64 || v_1_0.Type != t {
2145 continue
2146 }
2147 d := ssa.AuxIntToInt64(v_1_0.AuxInt)
2148 x := v_1_1
2149 v.Reset(ssaop.OpAdd64)
2150 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
2151 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
2152 v.AddArg2(v0, x)
2153 return true
2154 }
2155 }
2156 break
2157 }
2158
2159
2160 for {
2161 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2162 if v_0.Op != ssaop.OpConst64 {
2163 continue
2164 }
2165 t := v_0.Type
2166 c := ssa.AuxIntToInt64(v_0.AuxInt)
2167 if v_1.Op != ssaop.OpSub64 {
2168 continue
2169 }
2170 x := v_1.Args[1]
2171 v_1_0 := v_1.Args[0]
2172 if v_1_0.Op != ssaop.OpConst64 || v_1_0.Type != t {
2173 continue
2174 }
2175 d := ssa.AuxIntToInt64(v_1_0.AuxInt)
2176 v.Reset(ssaop.OpSub64)
2177 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
2178 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
2179 v.AddArg2(v0, x)
2180 return true
2181 }
2182 break
2183 }
2184
2185
2186
2187 for {
2188 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2189 if v_0.Op != ssaop.OpLsh64x64 {
2190 continue
2191 }
2192 _ = v_0.Args[1]
2193 x := v_0.Args[0]
2194 z := v_0.Args[1]
2195 if z.Op != ssaop.OpConst64 {
2196 continue
2197 }
2198 c := ssa.AuxIntToInt64(z.AuxInt)
2199 if v_1.Op != ssaop.OpRsh64Ux64 {
2200 continue
2201 }
2202 _ = v_1.Args[1]
2203 if x != v_1.Args[0] {
2204 continue
2205 }
2206 v_1_1 := v_1.Args[1]
2207 if v_1_1.Op != ssaop.OpConst64 {
2208 continue
2209 }
2210 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
2211 if !(c < 64 && d == 64-c && canRotate(config, 64)) {
2212 continue
2213 }
2214 v.Reset(ssaop.OpRotateLeft64)
2215 v.AddArg2(x, z)
2216 return true
2217 }
2218 break
2219 }
2220
2221
2222
2223 for {
2224 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2225 left := v_0
2226 if left.Op != ssaop.OpLsh64x64 {
2227 continue
2228 }
2229 y := left.Args[1]
2230 x := left.Args[0]
2231 right := v_1
2232 if right.Op != ssaop.OpRsh64Ux64 {
2233 continue
2234 }
2235 _ = right.Args[1]
2236 if x != right.Args[0] {
2237 continue
2238 }
2239 right_1 := right.Args[1]
2240 if right_1.Op != ssaop.OpSub64 {
2241 continue
2242 }
2243 _ = right_1.Args[1]
2244 right_1_0 := right_1.Args[0]
2245 if right_1_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(right_1_0.AuxInt) != 64 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
2246 continue
2247 }
2248 v.Reset(ssaop.OpRotateLeft64)
2249 v.AddArg2(x, y)
2250 return true
2251 }
2252 break
2253 }
2254
2255
2256
2257 for {
2258 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2259 left := v_0
2260 if left.Op != ssaop.OpLsh64x32 {
2261 continue
2262 }
2263 y := left.Args[1]
2264 x := left.Args[0]
2265 right := v_1
2266 if right.Op != ssaop.OpRsh64Ux32 {
2267 continue
2268 }
2269 _ = right.Args[1]
2270 if x != right.Args[0] {
2271 continue
2272 }
2273 right_1 := right.Args[1]
2274 if right_1.Op != ssaop.OpSub32 {
2275 continue
2276 }
2277 _ = right_1.Args[1]
2278 right_1_0 := right_1.Args[0]
2279 if right_1_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(right_1_0.AuxInt) != 64 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
2280 continue
2281 }
2282 v.Reset(ssaop.OpRotateLeft64)
2283 v.AddArg2(x, y)
2284 return true
2285 }
2286 break
2287 }
2288
2289
2290
2291 for {
2292 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2293 left := v_0
2294 if left.Op != ssaop.OpLsh64x16 {
2295 continue
2296 }
2297 y := left.Args[1]
2298 x := left.Args[0]
2299 right := v_1
2300 if right.Op != ssaop.OpRsh64Ux16 {
2301 continue
2302 }
2303 _ = right.Args[1]
2304 if x != right.Args[0] {
2305 continue
2306 }
2307 right_1 := right.Args[1]
2308 if right_1.Op != ssaop.OpSub16 {
2309 continue
2310 }
2311 _ = right_1.Args[1]
2312 right_1_0 := right_1.Args[0]
2313 if right_1_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(right_1_0.AuxInt) != 64 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
2314 continue
2315 }
2316 v.Reset(ssaop.OpRotateLeft64)
2317 v.AddArg2(x, y)
2318 return true
2319 }
2320 break
2321 }
2322
2323
2324
2325 for {
2326 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2327 left := v_0
2328 if left.Op != ssaop.OpLsh64x8 {
2329 continue
2330 }
2331 y := left.Args[1]
2332 x := left.Args[0]
2333 right := v_1
2334 if right.Op != ssaop.OpRsh64Ux8 {
2335 continue
2336 }
2337 _ = right.Args[1]
2338 if x != right.Args[0] {
2339 continue
2340 }
2341 right_1 := right.Args[1]
2342 if right_1.Op != ssaop.OpSub8 {
2343 continue
2344 }
2345 _ = right_1.Args[1]
2346 right_1_0 := right_1.Args[0]
2347 if right_1_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(right_1_0.AuxInt) != 64 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
2348 continue
2349 }
2350 v.Reset(ssaop.OpRotateLeft64)
2351 v.AddArg2(x, y)
2352 return true
2353 }
2354 break
2355 }
2356
2357
2358
2359 for {
2360 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2361 right := v_0
2362 if right.Op != ssaop.OpRsh64Ux64 {
2363 continue
2364 }
2365 y := right.Args[1]
2366 x := right.Args[0]
2367 left := v_1
2368 if left.Op != ssaop.OpLsh64x64 {
2369 continue
2370 }
2371 _ = left.Args[1]
2372 if x != left.Args[0] {
2373 continue
2374 }
2375 z := left.Args[1]
2376 if z.Op != ssaop.OpSub64 {
2377 continue
2378 }
2379 _ = z.Args[1]
2380 z_0 := z.Args[0]
2381 if z_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(z_0.AuxInt) != 64 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
2382 continue
2383 }
2384 v.Reset(ssaop.OpRotateLeft64)
2385 v.AddArg2(x, z)
2386 return true
2387 }
2388 break
2389 }
2390
2391
2392
2393 for {
2394 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2395 right := v_0
2396 if right.Op != ssaop.OpRsh64Ux32 {
2397 continue
2398 }
2399 y := right.Args[1]
2400 x := right.Args[0]
2401 left := v_1
2402 if left.Op != ssaop.OpLsh64x32 {
2403 continue
2404 }
2405 _ = left.Args[1]
2406 if x != left.Args[0] {
2407 continue
2408 }
2409 z := left.Args[1]
2410 if z.Op != ssaop.OpSub32 {
2411 continue
2412 }
2413 _ = z.Args[1]
2414 z_0 := z.Args[0]
2415 if z_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(z_0.AuxInt) != 64 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
2416 continue
2417 }
2418 v.Reset(ssaop.OpRotateLeft64)
2419 v.AddArg2(x, z)
2420 return true
2421 }
2422 break
2423 }
2424
2425
2426
2427 for {
2428 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2429 right := v_0
2430 if right.Op != ssaop.OpRsh64Ux16 {
2431 continue
2432 }
2433 y := right.Args[1]
2434 x := right.Args[0]
2435 left := v_1
2436 if left.Op != ssaop.OpLsh64x16 {
2437 continue
2438 }
2439 _ = left.Args[1]
2440 if x != left.Args[0] {
2441 continue
2442 }
2443 z := left.Args[1]
2444 if z.Op != ssaop.OpSub16 {
2445 continue
2446 }
2447 _ = z.Args[1]
2448 z_0 := z.Args[0]
2449 if z_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(z_0.AuxInt) != 64 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
2450 continue
2451 }
2452 v.Reset(ssaop.OpRotateLeft64)
2453 v.AddArg2(x, z)
2454 return true
2455 }
2456 break
2457 }
2458
2459
2460
2461 for {
2462 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2463 right := v_0
2464 if right.Op != ssaop.OpRsh64Ux8 {
2465 continue
2466 }
2467 y := right.Args[1]
2468 x := right.Args[0]
2469 left := v_1
2470 if left.Op != ssaop.OpLsh64x8 {
2471 continue
2472 }
2473 _ = left.Args[1]
2474 if x != left.Args[0] {
2475 continue
2476 }
2477 z := left.Args[1]
2478 if z.Op != ssaop.OpSub8 {
2479 continue
2480 }
2481 _ = z.Args[1]
2482 z_0 := z.Args[0]
2483 if z_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(z_0.AuxInt) != 64 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
2484 continue
2485 }
2486 v.Reset(ssaop.OpRotateLeft64)
2487 v.AddArg2(x, z)
2488 return true
2489 }
2490 break
2491 }
2492 return false
2493 }
2494 func rewriteValue_OpAdd64F(v *ssa.Value) bool {
2495 v_1 := v.Args[1]
2496 v_0 := v.Args[0]
2497
2498
2499
2500 for {
2501 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2502 if v_0.Op != ssaop.OpConst64F {
2503 continue
2504 }
2505 c := ssa.AuxIntToFloat64(v_0.AuxInt)
2506 if v_1.Op != ssaop.OpConst64F {
2507 continue
2508 }
2509 d := ssa.AuxIntToFloat64(v_1.AuxInt)
2510 if !(c+d == c+d) {
2511 continue
2512 }
2513 v.Reset(ssaop.OpConst64F)
2514 v.AuxInt = ssa.Float64ToAuxInt(c + d)
2515 return true
2516 }
2517 break
2518 }
2519 return false
2520 }
2521 func rewriteValue_OpAdd64carry(v *ssa.Value) bool {
2522 v_2 := v.Args[2]
2523 v_1 := v.Args[1]
2524 v_0 := v.Args[0]
2525 b := v.Block
2526
2527
2528
2529 for {
2530 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2531 if v_0.Op != ssaop.OpConst64 {
2532 continue
2533 }
2534 t := v_0.Type
2535 x := ssa.AuxIntToInt64(v_0.AuxInt)
2536 if v_1.Op != ssaop.OpConst64 {
2537 continue
2538 }
2539 y := ssa.AuxIntToInt64(v_1.AuxInt)
2540 if v_2.Op != ssaop.OpConst64 {
2541 continue
2542 }
2543 c := ssa.AuxIntToInt64(v_2.AuxInt)
2544 if !(c >= 0 && c <= 1) {
2545 continue
2546 }
2547 v.Reset(ssaop.OpMakeTuple)
2548 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
2549 v0.AuxInt = ssa.Int64ToAuxInt(bitsAdd64(x, y, c).sum)
2550 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
2551 v1.AuxInt = ssa.Int64ToAuxInt(bitsAdd64(x, y, c).carry)
2552 v.AddArg2(v0, v1)
2553 return true
2554 }
2555 break
2556 }
2557 return false
2558 }
2559 func rewriteValue_OpAdd8(v *ssa.Value) bool {
2560 v_1 := v.Args[1]
2561 v_0 := v.Args[0]
2562 b := v.Block
2563 config := b.Func.Config
2564
2565
2566 for {
2567 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2568 if v_0.Op != ssaop.OpConst8 {
2569 continue
2570 }
2571 c := ssa.AuxIntToInt8(v_0.AuxInt)
2572 if v_1.Op != ssaop.OpConst8 {
2573 continue
2574 }
2575 d := ssa.AuxIntToInt8(v_1.AuxInt)
2576 v.Reset(ssaop.OpConst8)
2577 v.AuxInt = ssa.Int8ToAuxInt(c + d)
2578 return true
2579 }
2580 break
2581 }
2582
2583
2584 for {
2585 t := v.Type
2586 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2587 if v_0.Op != ssaop.OpMul8 {
2588 continue
2589 }
2590 _ = v_0.Args[1]
2591 v_0_0 := v_0.Args[0]
2592 v_0_1 := v_0.Args[1]
2593 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
2594 x := v_0_0
2595 y := v_0_1
2596 if v_1.Op != ssaop.OpMul8 {
2597 continue
2598 }
2599 _ = v_1.Args[1]
2600 v_1_0 := v_1.Args[0]
2601 v_1_1 := v_1.Args[1]
2602 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
2603 if x != v_1_0 {
2604 continue
2605 }
2606 z := v_1_1
2607 v.Reset(ssaop.OpMul8)
2608 v0 := b.NewValue0(v.Pos, ssaop.OpAdd8, t)
2609 v0.AddArg2(y, z)
2610 v.AddArg2(x, v0)
2611 return true
2612 }
2613 }
2614 }
2615 break
2616 }
2617
2618
2619 for {
2620 x := v_0
2621 if x != v_1 {
2622 break
2623 }
2624 v.Reset(ssaop.OpLsh8x64)
2625 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
2626 v0.AuxInt = ssa.Int64ToAuxInt(1)
2627 v.AddArg2(x, v0)
2628 return true
2629 }
2630
2631
2632 for {
2633 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2634 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
2635 continue
2636 }
2637 x := v_1
2638 v.CopyOf(x)
2639 return true
2640 }
2641 break
2642 }
2643
2644
2645 for {
2646 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2647 x := v_0
2648 if v_1.Op != ssaop.OpNeg8 {
2649 continue
2650 }
2651 y := v_1.Args[0]
2652 v.Reset(ssaop.OpSub8)
2653 v.AddArg2(x, y)
2654 return true
2655 }
2656 break
2657 }
2658
2659
2660 for {
2661 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2662 if v_0.Op != ssaop.OpCom8 {
2663 continue
2664 }
2665 x := v_0.Args[0]
2666 if x != v_1 {
2667 continue
2668 }
2669 v.Reset(ssaop.OpConst8)
2670 v.AuxInt = ssa.Int8ToAuxInt(-1)
2671 return true
2672 }
2673 break
2674 }
2675
2676
2677 for {
2678 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2679 if v_0.Op != ssaop.OpSub8 {
2680 continue
2681 }
2682 t := v_0.Args[1]
2683 x := v_0.Args[0]
2684 if v_1.Op != ssaop.OpAdd8 {
2685 continue
2686 }
2687 _ = v_1.Args[1]
2688 v_1_0 := v_1.Args[0]
2689 v_1_1 := v_1.Args[1]
2690 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
2691 if t != v_1_0 {
2692 continue
2693 }
2694 y := v_1_1
2695 v.Reset(ssaop.OpAdd8)
2696 v.AddArg2(x, y)
2697 return true
2698 }
2699 }
2700 break
2701 }
2702
2703
2704 for {
2705 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2706 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 1 || v_1.Op != ssaop.OpCom8 {
2707 continue
2708 }
2709 x := v_1.Args[0]
2710 v.Reset(ssaop.OpNeg8)
2711 v.AddArg(x)
2712 return true
2713 }
2714 break
2715 }
2716
2717
2718 for {
2719 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2720 x := v_0
2721 if v_1.Op != ssaop.OpSub8 {
2722 continue
2723 }
2724 _ = v_1.Args[1]
2725 y := v_1.Args[0]
2726 if x != v_1.Args[1] {
2727 continue
2728 }
2729 v.CopyOf(y)
2730 return true
2731 }
2732 break
2733 }
2734
2735
2736 for {
2737 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2738 x := v_0
2739 if v_1.Op != ssaop.OpAdd8 {
2740 continue
2741 }
2742 _ = v_1.Args[1]
2743 v_1_0 := v_1.Args[0]
2744 v_1_1 := v_1.Args[1]
2745 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
2746 y := v_1_0
2747 if v_1_1.Op != ssaop.OpSub8 {
2748 continue
2749 }
2750 _ = v_1_1.Args[1]
2751 z := v_1_1.Args[0]
2752 if x != v_1_1.Args[1] {
2753 continue
2754 }
2755 v.Reset(ssaop.OpAdd8)
2756 v.AddArg2(y, z)
2757 return true
2758 }
2759 }
2760 break
2761 }
2762
2763
2764 for {
2765 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2766 x := v_0
2767 if v_1.Op != ssaop.OpSub8 {
2768 continue
2769 }
2770 _ = v_1.Args[1]
2771 y := v_1.Args[0]
2772 v_1_1 := v_1.Args[1]
2773 if v_1_1.Op != ssaop.OpSub8 {
2774 continue
2775 }
2776 z := v_1_1.Args[1]
2777 if x != v_1_1.Args[0] {
2778 continue
2779 }
2780 v.Reset(ssaop.OpAdd8)
2781 v.AddArg2(y, z)
2782 return true
2783 }
2784 break
2785 }
2786
2787
2788
2789 for {
2790 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2791 if v_0.Op != ssaop.OpAdd8 {
2792 continue
2793 }
2794 _ = v_0.Args[1]
2795 v_0_0 := v_0.Args[0]
2796 v_0_1 := v_0.Args[1]
2797 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
2798 i := v_0_0
2799 if i.Op != ssaop.OpConst8 {
2800 continue
2801 }
2802 t := i.Type
2803 z := v_0_1
2804 x := v_1
2805 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
2806 continue
2807 }
2808 v.Reset(ssaop.OpAdd8)
2809 v0 := b.NewValue0(v.Pos, ssaop.OpAdd8, t)
2810 v0.AddArg2(z, x)
2811 v.AddArg2(i, v0)
2812 return true
2813 }
2814 }
2815 break
2816 }
2817
2818
2819
2820 for {
2821 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2822 if v_0.Op != ssaop.OpSub8 {
2823 continue
2824 }
2825 z := v_0.Args[1]
2826 i := v_0.Args[0]
2827 if i.Op != ssaop.OpConst8 {
2828 continue
2829 }
2830 t := i.Type
2831 x := v_1
2832 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
2833 continue
2834 }
2835 v.Reset(ssaop.OpAdd8)
2836 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, t)
2837 v0.AddArg2(x, z)
2838 v.AddArg2(i, v0)
2839 return true
2840 }
2841 break
2842 }
2843
2844
2845 for {
2846 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2847 if v_0.Op != ssaop.OpConst8 {
2848 continue
2849 }
2850 t := v_0.Type
2851 c := ssa.AuxIntToInt8(v_0.AuxInt)
2852 if v_1.Op != ssaop.OpAdd8 {
2853 continue
2854 }
2855 _ = v_1.Args[1]
2856 v_1_0 := v_1.Args[0]
2857 v_1_1 := v_1.Args[1]
2858 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
2859 if v_1_0.Op != ssaop.OpConst8 || v_1_0.Type != t {
2860 continue
2861 }
2862 d := ssa.AuxIntToInt8(v_1_0.AuxInt)
2863 x := v_1_1
2864 v.Reset(ssaop.OpAdd8)
2865 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
2866 v0.AuxInt = ssa.Int8ToAuxInt(c + d)
2867 v.AddArg2(v0, x)
2868 return true
2869 }
2870 }
2871 break
2872 }
2873
2874
2875 for {
2876 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2877 if v_0.Op != ssaop.OpConst8 {
2878 continue
2879 }
2880 t := v_0.Type
2881 c := ssa.AuxIntToInt8(v_0.AuxInt)
2882 if v_1.Op != ssaop.OpSub8 {
2883 continue
2884 }
2885 x := v_1.Args[1]
2886 v_1_0 := v_1.Args[0]
2887 if v_1_0.Op != ssaop.OpConst8 || v_1_0.Type != t {
2888 continue
2889 }
2890 d := ssa.AuxIntToInt8(v_1_0.AuxInt)
2891 v.Reset(ssaop.OpSub8)
2892 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
2893 v0.AuxInt = ssa.Int8ToAuxInt(c + d)
2894 v.AddArg2(v0, x)
2895 return true
2896 }
2897 break
2898 }
2899
2900
2901
2902 for {
2903 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2904 if v_0.Op != ssaop.OpLsh8x64 {
2905 continue
2906 }
2907 _ = v_0.Args[1]
2908 x := v_0.Args[0]
2909 z := v_0.Args[1]
2910 if z.Op != ssaop.OpConst64 {
2911 continue
2912 }
2913 c := ssa.AuxIntToInt64(z.AuxInt)
2914 if v_1.Op != ssaop.OpRsh8Ux64 {
2915 continue
2916 }
2917 _ = v_1.Args[1]
2918 if x != v_1.Args[0] {
2919 continue
2920 }
2921 v_1_1 := v_1.Args[1]
2922 if v_1_1.Op != ssaop.OpConst64 {
2923 continue
2924 }
2925 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
2926 if !(c < 8 && d == 8-c && canRotate(config, 8)) {
2927 continue
2928 }
2929 v.Reset(ssaop.OpRotateLeft8)
2930 v.AddArg2(x, z)
2931 return true
2932 }
2933 break
2934 }
2935
2936
2937
2938 for {
2939 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2940 left := v_0
2941 if left.Op != ssaop.OpLsh8x64 {
2942 continue
2943 }
2944 y := left.Args[1]
2945 x := left.Args[0]
2946 right := v_1
2947 if right.Op != ssaop.OpRsh8Ux64 {
2948 continue
2949 }
2950 _ = right.Args[1]
2951 if x != right.Args[0] {
2952 continue
2953 }
2954 right_1 := right.Args[1]
2955 if right_1.Op != ssaop.OpSub64 {
2956 continue
2957 }
2958 _ = right_1.Args[1]
2959 right_1_0 := right_1.Args[0]
2960 if right_1_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(right_1_0.AuxInt) != 8 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
2961 continue
2962 }
2963 v.Reset(ssaop.OpRotateLeft8)
2964 v.AddArg2(x, y)
2965 return true
2966 }
2967 break
2968 }
2969
2970
2971
2972 for {
2973 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
2974 left := v_0
2975 if left.Op != ssaop.OpLsh8x32 {
2976 continue
2977 }
2978 y := left.Args[1]
2979 x := left.Args[0]
2980 right := v_1
2981 if right.Op != ssaop.OpRsh8Ux32 {
2982 continue
2983 }
2984 _ = right.Args[1]
2985 if x != right.Args[0] {
2986 continue
2987 }
2988 right_1 := right.Args[1]
2989 if right_1.Op != ssaop.OpSub32 {
2990 continue
2991 }
2992 _ = right_1.Args[1]
2993 right_1_0 := right_1.Args[0]
2994 if right_1_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(right_1_0.AuxInt) != 8 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
2995 continue
2996 }
2997 v.Reset(ssaop.OpRotateLeft8)
2998 v.AddArg2(x, y)
2999 return true
3000 }
3001 break
3002 }
3003
3004
3005
3006 for {
3007 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3008 left := v_0
3009 if left.Op != ssaop.OpLsh8x16 {
3010 continue
3011 }
3012 y := left.Args[1]
3013 x := left.Args[0]
3014 right := v_1
3015 if right.Op != ssaop.OpRsh8Ux16 {
3016 continue
3017 }
3018 _ = right.Args[1]
3019 if x != right.Args[0] {
3020 continue
3021 }
3022 right_1 := right.Args[1]
3023 if right_1.Op != ssaop.OpSub16 {
3024 continue
3025 }
3026 _ = right_1.Args[1]
3027 right_1_0 := right_1.Args[0]
3028 if right_1_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(right_1_0.AuxInt) != 8 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
3029 continue
3030 }
3031 v.Reset(ssaop.OpRotateLeft8)
3032 v.AddArg2(x, y)
3033 return true
3034 }
3035 break
3036 }
3037
3038
3039
3040 for {
3041 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3042 left := v_0
3043 if left.Op != ssaop.OpLsh8x8 {
3044 continue
3045 }
3046 y := left.Args[1]
3047 x := left.Args[0]
3048 right := v_1
3049 if right.Op != ssaop.OpRsh8Ux8 {
3050 continue
3051 }
3052 _ = right.Args[1]
3053 if x != right.Args[0] {
3054 continue
3055 }
3056 right_1 := right.Args[1]
3057 if right_1.Op != ssaop.OpSub8 {
3058 continue
3059 }
3060 _ = right_1.Args[1]
3061 right_1_0 := right_1.Args[0]
3062 if right_1_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(right_1_0.AuxInt) != 8 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
3063 continue
3064 }
3065 v.Reset(ssaop.OpRotateLeft8)
3066 v.AddArg2(x, y)
3067 return true
3068 }
3069 break
3070 }
3071
3072
3073
3074 for {
3075 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3076 right := v_0
3077 if right.Op != ssaop.OpRsh8Ux64 {
3078 continue
3079 }
3080 y := right.Args[1]
3081 x := right.Args[0]
3082 left := v_1
3083 if left.Op != ssaop.OpLsh8x64 {
3084 continue
3085 }
3086 _ = left.Args[1]
3087 if x != left.Args[0] {
3088 continue
3089 }
3090 z := left.Args[1]
3091 if z.Op != ssaop.OpSub64 {
3092 continue
3093 }
3094 _ = z.Args[1]
3095 z_0 := z.Args[0]
3096 if z_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(z_0.AuxInt) != 8 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
3097 continue
3098 }
3099 v.Reset(ssaop.OpRotateLeft8)
3100 v.AddArg2(x, z)
3101 return true
3102 }
3103 break
3104 }
3105
3106
3107
3108 for {
3109 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3110 right := v_0
3111 if right.Op != ssaop.OpRsh8Ux32 {
3112 continue
3113 }
3114 y := right.Args[1]
3115 x := right.Args[0]
3116 left := v_1
3117 if left.Op != ssaop.OpLsh8x32 {
3118 continue
3119 }
3120 _ = left.Args[1]
3121 if x != left.Args[0] {
3122 continue
3123 }
3124 z := left.Args[1]
3125 if z.Op != ssaop.OpSub32 {
3126 continue
3127 }
3128 _ = z.Args[1]
3129 z_0 := z.Args[0]
3130 if z_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(z_0.AuxInt) != 8 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
3131 continue
3132 }
3133 v.Reset(ssaop.OpRotateLeft8)
3134 v.AddArg2(x, z)
3135 return true
3136 }
3137 break
3138 }
3139
3140
3141
3142 for {
3143 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3144 right := v_0
3145 if right.Op != ssaop.OpRsh8Ux16 {
3146 continue
3147 }
3148 y := right.Args[1]
3149 x := right.Args[0]
3150 left := v_1
3151 if left.Op != ssaop.OpLsh8x16 {
3152 continue
3153 }
3154 _ = left.Args[1]
3155 if x != left.Args[0] {
3156 continue
3157 }
3158 z := left.Args[1]
3159 if z.Op != ssaop.OpSub16 {
3160 continue
3161 }
3162 _ = z.Args[1]
3163 z_0 := z.Args[0]
3164 if z_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(z_0.AuxInt) != 8 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
3165 continue
3166 }
3167 v.Reset(ssaop.OpRotateLeft8)
3168 v.AddArg2(x, z)
3169 return true
3170 }
3171 break
3172 }
3173
3174
3175
3176 for {
3177 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3178 right := v_0
3179 if right.Op != ssaop.OpRsh8Ux8 {
3180 continue
3181 }
3182 y := right.Args[1]
3183 x := right.Args[0]
3184 left := v_1
3185 if left.Op != ssaop.OpLsh8x8 {
3186 continue
3187 }
3188 _ = left.Args[1]
3189 if x != left.Args[0] {
3190 continue
3191 }
3192 z := left.Args[1]
3193 if z.Op != ssaop.OpSub8 {
3194 continue
3195 }
3196 _ = z.Args[1]
3197 z_0 := z.Args[0]
3198 if z_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(z_0.AuxInt) != 8 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
3199 continue
3200 }
3201 v.Reset(ssaop.OpRotateLeft8)
3202 v.AddArg2(x, z)
3203 return true
3204 }
3205 break
3206 }
3207 return false
3208 }
3209 func rewriteValue_OpAddPtr(v *ssa.Value) bool {
3210 v_1 := v.Args[1]
3211 v_0 := v.Args[0]
3212
3213
3214 for {
3215 t := v.Type
3216 x := v_0
3217 if v_1.Op != ssaop.OpConst64 {
3218 break
3219 }
3220 c := ssa.AuxIntToInt64(v_1.AuxInt)
3221 v.Reset(ssaop.OpOffPtr)
3222 v.Type = t
3223 v.AuxInt = ssa.Int64ToAuxInt(c)
3224 v.AddArg(x)
3225 return true
3226 }
3227
3228
3229 for {
3230 t := v.Type
3231 x := v_0
3232 if v_1.Op != ssaop.OpConst32 {
3233 break
3234 }
3235 c := ssa.AuxIntToInt32(v_1.AuxInt)
3236 v.Reset(ssaop.OpOffPtr)
3237 v.Type = t
3238 v.AuxInt = ssa.Int64ToAuxInt(int64(c))
3239 v.AddArg(x)
3240 return true
3241 }
3242 return false
3243 }
3244 func rewriteValue_OpAnd16(v *ssa.Value) bool {
3245 v_1 := v.Args[1]
3246 v_0 := v.Args[0]
3247 b := v.Block
3248
3249
3250 for {
3251 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3252 if v_0.Op != ssaop.OpConst16 {
3253 continue
3254 }
3255 c := ssa.AuxIntToInt16(v_0.AuxInt)
3256 if v_1.Op != ssaop.OpConst16 {
3257 continue
3258 }
3259 d := ssa.AuxIntToInt16(v_1.AuxInt)
3260 v.Reset(ssaop.OpConst16)
3261 v.AuxInt = ssa.Int16ToAuxInt(c & d)
3262 return true
3263 }
3264 break
3265 }
3266
3267
3268 for {
3269 t := v.Type
3270 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3271 if v_0.Op != ssaop.OpCom16 {
3272 continue
3273 }
3274 x := v_0.Args[0]
3275 if v_1.Op != ssaop.OpCom16 {
3276 continue
3277 }
3278 y := v_1.Args[0]
3279 v.Reset(ssaop.OpCom16)
3280 v0 := b.NewValue0(v.Pos, ssaop.OpOr16, t)
3281 v0.AddArg2(x, y)
3282 v.AddArg(v0)
3283 return true
3284 }
3285 break
3286 }
3287
3288
3289 for {
3290 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3291 x := v_0
3292 if v_1.Op != ssaop.OpOr16 {
3293 continue
3294 }
3295 _ = v_1.Args[1]
3296 v_1_0 := v_1.Args[0]
3297 v_1_1 := v_1.Args[1]
3298 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
3299 if x != v_1_0 {
3300 continue
3301 }
3302 v.CopyOf(x)
3303 return true
3304 }
3305 }
3306 break
3307 }
3308
3309
3310
3311 for {
3312 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3313 if v_0.Op != ssaop.OpConst16 {
3314 continue
3315 }
3316 m := ssa.AuxIntToInt16(v_0.AuxInt)
3317 if v_1.Op != ssaop.OpRsh16Ux64 {
3318 continue
3319 }
3320 _ = v_1.Args[1]
3321 v_1_1 := v_1.Args[1]
3322 if v_1_1.Op != ssaop.OpConst64 {
3323 continue
3324 }
3325 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
3326 if !(c >= int64(16-ntz16(m))) {
3327 continue
3328 }
3329 v.Reset(ssaop.OpConst16)
3330 v.AuxInt = ssa.Int16ToAuxInt(0)
3331 return true
3332 }
3333 break
3334 }
3335
3336
3337
3338 for {
3339 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3340 if v_0.Op != ssaop.OpConst16 {
3341 continue
3342 }
3343 m := ssa.AuxIntToInt16(v_0.AuxInt)
3344 if v_1.Op != ssaop.OpLsh16x64 {
3345 continue
3346 }
3347 _ = v_1.Args[1]
3348 v_1_1 := v_1.Args[1]
3349 if v_1_1.Op != ssaop.OpConst64 {
3350 continue
3351 }
3352 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
3353 if !(c >= int64(16-nlz16(m))) {
3354 continue
3355 }
3356 v.Reset(ssaop.OpConst16)
3357 v.AuxInt = ssa.Int16ToAuxInt(0)
3358 return true
3359 }
3360 break
3361 }
3362
3363
3364 for {
3365 x := v_0
3366 if x != v_1 {
3367 break
3368 }
3369 v.CopyOf(x)
3370 return true
3371 }
3372
3373
3374 for {
3375 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3376 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != -1 {
3377 continue
3378 }
3379 x := v_1
3380 v.CopyOf(x)
3381 return true
3382 }
3383 break
3384 }
3385
3386
3387 for {
3388 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3389 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
3390 continue
3391 }
3392 v.Reset(ssaop.OpConst16)
3393 v.AuxInt = ssa.Int16ToAuxInt(0)
3394 return true
3395 }
3396 break
3397 }
3398
3399
3400 for {
3401 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3402 if v_0.Op != ssaop.OpCom16 {
3403 continue
3404 }
3405 x := v_0.Args[0]
3406 if x != v_1 {
3407 continue
3408 }
3409 v.Reset(ssaop.OpConst16)
3410 v.AuxInt = ssa.Int16ToAuxInt(0)
3411 return true
3412 }
3413 break
3414 }
3415
3416
3417 for {
3418 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3419 x := v_0
3420 if v_1.Op != ssaop.OpAnd16 {
3421 continue
3422 }
3423 _ = v_1.Args[1]
3424 v_1_0 := v_1.Args[0]
3425 v_1_1 := v_1.Args[1]
3426 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
3427 if x != v_1_0 {
3428 continue
3429 }
3430 y := v_1_1
3431 v.Reset(ssaop.OpAnd16)
3432 v.AddArg2(x, y)
3433 return true
3434 }
3435 }
3436 break
3437 }
3438
3439
3440
3441 for {
3442 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3443 if v_0.Op != ssaop.OpAnd16 {
3444 continue
3445 }
3446 _ = v_0.Args[1]
3447 v_0_0 := v_0.Args[0]
3448 v_0_1 := v_0.Args[1]
3449 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
3450 i := v_0_0
3451 if i.Op != ssaop.OpConst16 {
3452 continue
3453 }
3454 t := i.Type
3455 z := v_0_1
3456 x := v_1
3457 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
3458 continue
3459 }
3460 v.Reset(ssaop.OpAnd16)
3461 v0 := b.NewValue0(v.Pos, ssaop.OpAnd16, t)
3462 v0.AddArg2(z, x)
3463 v.AddArg2(i, v0)
3464 return true
3465 }
3466 }
3467 break
3468 }
3469
3470
3471 for {
3472 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3473 if v_0.Op != ssaop.OpConst16 {
3474 continue
3475 }
3476 t := v_0.Type
3477 c := ssa.AuxIntToInt16(v_0.AuxInt)
3478 if v_1.Op != ssaop.OpAnd16 {
3479 continue
3480 }
3481 _ = v_1.Args[1]
3482 v_1_0 := v_1.Args[0]
3483 v_1_1 := v_1.Args[1]
3484 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
3485 if v_1_0.Op != ssaop.OpConst16 || v_1_0.Type != t {
3486 continue
3487 }
3488 d := ssa.AuxIntToInt16(v_1_0.AuxInt)
3489 x := v_1_1
3490 v.Reset(ssaop.OpAnd16)
3491 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
3492 v0.AuxInt = ssa.Int16ToAuxInt(c & d)
3493 v.AddArg2(v0, x)
3494 return true
3495 }
3496 }
3497 break
3498 }
3499 return false
3500 }
3501 func rewriteValue_OpAnd32(v *ssa.Value) bool {
3502 v_1 := v.Args[1]
3503 v_0 := v.Args[0]
3504 b := v.Block
3505
3506
3507 for {
3508 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3509 if v_0.Op != ssaop.OpConst32 {
3510 continue
3511 }
3512 c := ssa.AuxIntToInt32(v_0.AuxInt)
3513 if v_1.Op != ssaop.OpConst32 {
3514 continue
3515 }
3516 d := ssa.AuxIntToInt32(v_1.AuxInt)
3517 v.Reset(ssaop.OpConst32)
3518 v.AuxInt = ssa.Int32ToAuxInt(c & d)
3519 return true
3520 }
3521 break
3522 }
3523
3524
3525 for {
3526 t := v.Type
3527 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3528 if v_0.Op != ssaop.OpCom32 {
3529 continue
3530 }
3531 x := v_0.Args[0]
3532 if v_1.Op != ssaop.OpCom32 {
3533 continue
3534 }
3535 y := v_1.Args[0]
3536 v.Reset(ssaop.OpCom32)
3537 v0 := b.NewValue0(v.Pos, ssaop.OpOr32, t)
3538 v0.AddArg2(x, y)
3539 v.AddArg(v0)
3540 return true
3541 }
3542 break
3543 }
3544
3545
3546 for {
3547 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3548 x := v_0
3549 if v_1.Op != ssaop.OpOr32 {
3550 continue
3551 }
3552 _ = v_1.Args[1]
3553 v_1_0 := v_1.Args[0]
3554 v_1_1 := v_1.Args[1]
3555 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
3556 if x != v_1_0 {
3557 continue
3558 }
3559 v.CopyOf(x)
3560 return true
3561 }
3562 }
3563 break
3564 }
3565
3566
3567
3568 for {
3569 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3570 if v_0.Op != ssaop.OpConst32 {
3571 continue
3572 }
3573 m := ssa.AuxIntToInt32(v_0.AuxInt)
3574 if v_1.Op != ssaop.OpRsh32Ux64 {
3575 continue
3576 }
3577 _ = v_1.Args[1]
3578 v_1_1 := v_1.Args[1]
3579 if v_1_1.Op != ssaop.OpConst64 {
3580 continue
3581 }
3582 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
3583 if !(c >= int64(32-ntz32(m))) {
3584 continue
3585 }
3586 v.Reset(ssaop.OpConst32)
3587 v.AuxInt = ssa.Int32ToAuxInt(0)
3588 return true
3589 }
3590 break
3591 }
3592
3593
3594
3595 for {
3596 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3597 if v_0.Op != ssaop.OpConst32 {
3598 continue
3599 }
3600 m := ssa.AuxIntToInt32(v_0.AuxInt)
3601 if v_1.Op != ssaop.OpLsh32x64 {
3602 continue
3603 }
3604 _ = v_1.Args[1]
3605 v_1_1 := v_1.Args[1]
3606 if v_1_1.Op != ssaop.OpConst64 {
3607 continue
3608 }
3609 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
3610 if !(c >= int64(32-nlz32(m))) {
3611 continue
3612 }
3613 v.Reset(ssaop.OpConst32)
3614 v.AuxInt = ssa.Int32ToAuxInt(0)
3615 return true
3616 }
3617 break
3618 }
3619
3620
3621 for {
3622 x := v_0
3623 if x != v_1 {
3624 break
3625 }
3626 v.CopyOf(x)
3627 return true
3628 }
3629
3630
3631 for {
3632 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3633 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != -1 {
3634 continue
3635 }
3636 x := v_1
3637 v.CopyOf(x)
3638 return true
3639 }
3640 break
3641 }
3642
3643
3644 for {
3645 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3646 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
3647 continue
3648 }
3649 v.Reset(ssaop.OpConst32)
3650 v.AuxInt = ssa.Int32ToAuxInt(0)
3651 return true
3652 }
3653 break
3654 }
3655
3656
3657 for {
3658 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3659 if v_0.Op != ssaop.OpCom32 {
3660 continue
3661 }
3662 x := v_0.Args[0]
3663 if x != v_1 {
3664 continue
3665 }
3666 v.Reset(ssaop.OpConst32)
3667 v.AuxInt = ssa.Int32ToAuxInt(0)
3668 return true
3669 }
3670 break
3671 }
3672
3673
3674 for {
3675 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3676 x := v_0
3677 if v_1.Op != ssaop.OpAnd32 {
3678 continue
3679 }
3680 _ = v_1.Args[1]
3681 v_1_0 := v_1.Args[0]
3682 v_1_1 := v_1.Args[1]
3683 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
3684 if x != v_1_0 {
3685 continue
3686 }
3687 y := v_1_1
3688 v.Reset(ssaop.OpAnd32)
3689 v.AddArg2(x, y)
3690 return true
3691 }
3692 }
3693 break
3694 }
3695
3696
3697
3698 for {
3699 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3700 if v_0.Op != ssaop.OpAnd32 {
3701 continue
3702 }
3703 _ = v_0.Args[1]
3704 v_0_0 := v_0.Args[0]
3705 v_0_1 := v_0.Args[1]
3706 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
3707 i := v_0_0
3708 if i.Op != ssaop.OpConst32 {
3709 continue
3710 }
3711 t := i.Type
3712 z := v_0_1
3713 x := v_1
3714 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
3715 continue
3716 }
3717 v.Reset(ssaop.OpAnd32)
3718 v0 := b.NewValue0(v.Pos, ssaop.OpAnd32, t)
3719 v0.AddArg2(z, x)
3720 v.AddArg2(i, v0)
3721 return true
3722 }
3723 }
3724 break
3725 }
3726
3727
3728 for {
3729 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3730 if v_0.Op != ssaop.OpConst32 {
3731 continue
3732 }
3733 t := v_0.Type
3734 c := ssa.AuxIntToInt32(v_0.AuxInt)
3735 if v_1.Op != ssaop.OpAnd32 {
3736 continue
3737 }
3738 _ = v_1.Args[1]
3739 v_1_0 := v_1.Args[0]
3740 v_1_1 := v_1.Args[1]
3741 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
3742 if v_1_0.Op != ssaop.OpConst32 || v_1_0.Type != t {
3743 continue
3744 }
3745 d := ssa.AuxIntToInt32(v_1_0.AuxInt)
3746 x := v_1_1
3747 v.Reset(ssaop.OpAnd32)
3748 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
3749 v0.AuxInt = ssa.Int32ToAuxInt(c & d)
3750 v.AddArg2(v0, x)
3751 return true
3752 }
3753 }
3754 break
3755 }
3756 return false
3757 }
3758 func rewriteValue_OpAnd64(v *ssa.Value) bool {
3759 v_1 := v.Args[1]
3760 v_0 := v.Args[0]
3761 b := v.Block
3762
3763
3764 for {
3765 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3766 if v_0.Op != ssaop.OpConst64 {
3767 continue
3768 }
3769 c := ssa.AuxIntToInt64(v_0.AuxInt)
3770 if v_1.Op != ssaop.OpConst64 {
3771 continue
3772 }
3773 d := ssa.AuxIntToInt64(v_1.AuxInt)
3774 v.Reset(ssaop.OpConst64)
3775 v.AuxInt = ssa.Int64ToAuxInt(c & d)
3776 return true
3777 }
3778 break
3779 }
3780
3781
3782 for {
3783 t := v.Type
3784 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3785 if v_0.Op != ssaop.OpCom64 {
3786 continue
3787 }
3788 x := v_0.Args[0]
3789 if v_1.Op != ssaop.OpCom64 {
3790 continue
3791 }
3792 y := v_1.Args[0]
3793 v.Reset(ssaop.OpCom64)
3794 v0 := b.NewValue0(v.Pos, ssaop.OpOr64, t)
3795 v0.AddArg2(x, y)
3796 v.AddArg(v0)
3797 return true
3798 }
3799 break
3800 }
3801
3802
3803 for {
3804 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3805 x := v_0
3806 if v_1.Op != ssaop.OpOr64 {
3807 continue
3808 }
3809 _ = v_1.Args[1]
3810 v_1_0 := v_1.Args[0]
3811 v_1_1 := v_1.Args[1]
3812 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
3813 if x != v_1_0 {
3814 continue
3815 }
3816 v.CopyOf(x)
3817 return true
3818 }
3819 }
3820 break
3821 }
3822
3823
3824
3825 for {
3826 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3827 if v_0.Op != ssaop.OpConst64 {
3828 continue
3829 }
3830 m := ssa.AuxIntToInt64(v_0.AuxInt)
3831 if v_1.Op != ssaop.OpRsh64Ux64 {
3832 continue
3833 }
3834 _ = v_1.Args[1]
3835 v_1_1 := v_1.Args[1]
3836 if v_1_1.Op != ssaop.OpConst64 {
3837 continue
3838 }
3839 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
3840 if !(c >= int64(64-ssa.Ntz64(m))) {
3841 continue
3842 }
3843 v.Reset(ssaop.OpConst64)
3844 v.AuxInt = ssa.Int64ToAuxInt(0)
3845 return true
3846 }
3847 break
3848 }
3849
3850
3851
3852 for {
3853 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3854 if v_0.Op != ssaop.OpConst64 {
3855 continue
3856 }
3857 m := ssa.AuxIntToInt64(v_0.AuxInt)
3858 if v_1.Op != ssaop.OpLsh64x64 {
3859 continue
3860 }
3861 _ = v_1.Args[1]
3862 v_1_1 := v_1.Args[1]
3863 if v_1_1.Op != ssaop.OpConst64 {
3864 continue
3865 }
3866 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
3867 if !(c >= int64(64-nlz64(m))) {
3868 continue
3869 }
3870 v.Reset(ssaop.OpConst64)
3871 v.AuxInt = ssa.Int64ToAuxInt(0)
3872 return true
3873 }
3874 break
3875 }
3876
3877
3878 for {
3879 x := v_0
3880 if x != v_1 {
3881 break
3882 }
3883 v.CopyOf(x)
3884 return true
3885 }
3886
3887
3888 for {
3889 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3890 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != -1 {
3891 continue
3892 }
3893 x := v_1
3894 v.CopyOf(x)
3895 return true
3896 }
3897 break
3898 }
3899
3900
3901 for {
3902 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3903 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
3904 continue
3905 }
3906 v.Reset(ssaop.OpConst64)
3907 v.AuxInt = ssa.Int64ToAuxInt(0)
3908 return true
3909 }
3910 break
3911 }
3912
3913
3914 for {
3915 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3916 if v_0.Op != ssaop.OpCom64 {
3917 continue
3918 }
3919 x := v_0.Args[0]
3920 if x != v_1 {
3921 continue
3922 }
3923 v.Reset(ssaop.OpConst64)
3924 v.AuxInt = ssa.Int64ToAuxInt(0)
3925 return true
3926 }
3927 break
3928 }
3929
3930
3931 for {
3932 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3933 x := v_0
3934 if v_1.Op != ssaop.OpAnd64 {
3935 continue
3936 }
3937 _ = v_1.Args[1]
3938 v_1_0 := v_1.Args[0]
3939 v_1_1 := v_1.Args[1]
3940 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
3941 if x != v_1_0 {
3942 continue
3943 }
3944 y := v_1_1
3945 v.Reset(ssaop.OpAnd64)
3946 v.AddArg2(x, y)
3947 return true
3948 }
3949 }
3950 break
3951 }
3952
3953
3954
3955 for {
3956 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3957 if v_0.Op != ssaop.OpAnd64 {
3958 continue
3959 }
3960 _ = v_0.Args[1]
3961 v_0_0 := v_0.Args[0]
3962 v_0_1 := v_0.Args[1]
3963 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
3964 i := v_0_0
3965 if i.Op != ssaop.OpConst64 {
3966 continue
3967 }
3968 t := i.Type
3969 z := v_0_1
3970 x := v_1
3971 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
3972 continue
3973 }
3974 v.Reset(ssaop.OpAnd64)
3975 v0 := b.NewValue0(v.Pos, ssaop.OpAnd64, t)
3976 v0.AddArg2(z, x)
3977 v.AddArg2(i, v0)
3978 return true
3979 }
3980 }
3981 break
3982 }
3983
3984
3985 for {
3986 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
3987 if v_0.Op != ssaop.OpConst64 {
3988 continue
3989 }
3990 t := v_0.Type
3991 c := ssa.AuxIntToInt64(v_0.AuxInt)
3992 if v_1.Op != ssaop.OpAnd64 {
3993 continue
3994 }
3995 _ = v_1.Args[1]
3996 v_1_0 := v_1.Args[0]
3997 v_1_1 := v_1.Args[1]
3998 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
3999 if v_1_0.Op != ssaop.OpConst64 || v_1_0.Type != t {
4000 continue
4001 }
4002 d := ssa.AuxIntToInt64(v_1_0.AuxInt)
4003 x := v_1_1
4004 v.Reset(ssaop.OpAnd64)
4005 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
4006 v0.AuxInt = ssa.Int64ToAuxInt(c & d)
4007 v.AddArg2(v0, x)
4008 return true
4009 }
4010 }
4011 break
4012 }
4013 return false
4014 }
4015 func rewriteValue_OpAnd8(v *ssa.Value) bool {
4016 v_1 := v.Args[1]
4017 v_0 := v.Args[0]
4018 b := v.Block
4019
4020
4021 for {
4022 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4023 if v_0.Op != ssaop.OpConst8 {
4024 continue
4025 }
4026 c := ssa.AuxIntToInt8(v_0.AuxInt)
4027 if v_1.Op != ssaop.OpConst8 {
4028 continue
4029 }
4030 d := ssa.AuxIntToInt8(v_1.AuxInt)
4031 v.Reset(ssaop.OpConst8)
4032 v.AuxInt = ssa.Int8ToAuxInt(c & d)
4033 return true
4034 }
4035 break
4036 }
4037
4038
4039 for {
4040 t := v.Type
4041 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4042 if v_0.Op != ssaop.OpCom8 {
4043 continue
4044 }
4045 x := v_0.Args[0]
4046 if v_1.Op != ssaop.OpCom8 {
4047 continue
4048 }
4049 y := v_1.Args[0]
4050 v.Reset(ssaop.OpCom8)
4051 v0 := b.NewValue0(v.Pos, ssaop.OpOr8, t)
4052 v0.AddArg2(x, y)
4053 v.AddArg(v0)
4054 return true
4055 }
4056 break
4057 }
4058
4059
4060 for {
4061 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4062 x := v_0
4063 if v_1.Op != ssaop.OpOr8 {
4064 continue
4065 }
4066 _ = v_1.Args[1]
4067 v_1_0 := v_1.Args[0]
4068 v_1_1 := v_1.Args[1]
4069 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
4070 if x != v_1_0 {
4071 continue
4072 }
4073 v.CopyOf(x)
4074 return true
4075 }
4076 }
4077 break
4078 }
4079
4080
4081
4082 for {
4083 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4084 if v_0.Op != ssaop.OpConst8 {
4085 continue
4086 }
4087 m := ssa.AuxIntToInt8(v_0.AuxInt)
4088 if v_1.Op != ssaop.OpRsh8Ux64 {
4089 continue
4090 }
4091 _ = v_1.Args[1]
4092 v_1_1 := v_1.Args[1]
4093 if v_1_1.Op != ssaop.OpConst64 {
4094 continue
4095 }
4096 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
4097 if !(c >= int64(8-ntz8(m))) {
4098 continue
4099 }
4100 v.Reset(ssaop.OpConst8)
4101 v.AuxInt = ssa.Int8ToAuxInt(0)
4102 return true
4103 }
4104 break
4105 }
4106
4107
4108
4109 for {
4110 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4111 if v_0.Op != ssaop.OpConst8 {
4112 continue
4113 }
4114 m := ssa.AuxIntToInt8(v_0.AuxInt)
4115 if v_1.Op != ssaop.OpLsh8x64 {
4116 continue
4117 }
4118 _ = v_1.Args[1]
4119 v_1_1 := v_1.Args[1]
4120 if v_1_1.Op != ssaop.OpConst64 {
4121 continue
4122 }
4123 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
4124 if !(c >= int64(8-nlz8(m))) {
4125 continue
4126 }
4127 v.Reset(ssaop.OpConst8)
4128 v.AuxInt = ssa.Int8ToAuxInt(0)
4129 return true
4130 }
4131 break
4132 }
4133
4134
4135 for {
4136 x := v_0
4137 if x != v_1 {
4138 break
4139 }
4140 v.CopyOf(x)
4141 return true
4142 }
4143
4144
4145 for {
4146 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4147 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != -1 {
4148 continue
4149 }
4150 x := v_1
4151 v.CopyOf(x)
4152 return true
4153 }
4154 break
4155 }
4156
4157
4158 for {
4159 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4160 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
4161 continue
4162 }
4163 v.Reset(ssaop.OpConst8)
4164 v.AuxInt = ssa.Int8ToAuxInt(0)
4165 return true
4166 }
4167 break
4168 }
4169
4170
4171 for {
4172 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4173 if v_0.Op != ssaop.OpCom8 {
4174 continue
4175 }
4176 x := v_0.Args[0]
4177 if x != v_1 {
4178 continue
4179 }
4180 v.Reset(ssaop.OpConst8)
4181 v.AuxInt = ssa.Int8ToAuxInt(0)
4182 return true
4183 }
4184 break
4185 }
4186
4187
4188 for {
4189 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4190 x := v_0
4191 if v_1.Op != ssaop.OpAnd8 {
4192 continue
4193 }
4194 _ = v_1.Args[1]
4195 v_1_0 := v_1.Args[0]
4196 v_1_1 := v_1.Args[1]
4197 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
4198 if x != v_1_0 {
4199 continue
4200 }
4201 y := v_1_1
4202 v.Reset(ssaop.OpAnd8)
4203 v.AddArg2(x, y)
4204 return true
4205 }
4206 }
4207 break
4208 }
4209
4210
4211
4212 for {
4213 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4214 if v_0.Op != ssaop.OpAnd8 {
4215 continue
4216 }
4217 _ = v_0.Args[1]
4218 v_0_0 := v_0.Args[0]
4219 v_0_1 := v_0.Args[1]
4220 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
4221 i := v_0_0
4222 if i.Op != ssaop.OpConst8 {
4223 continue
4224 }
4225 t := i.Type
4226 z := v_0_1
4227 x := v_1
4228 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
4229 continue
4230 }
4231 v.Reset(ssaop.OpAnd8)
4232 v0 := b.NewValue0(v.Pos, ssaop.OpAnd8, t)
4233 v0.AddArg2(z, x)
4234 v.AddArg2(i, v0)
4235 return true
4236 }
4237 }
4238 break
4239 }
4240
4241
4242 for {
4243 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4244 if v_0.Op != ssaop.OpConst8 {
4245 continue
4246 }
4247 t := v_0.Type
4248 c := ssa.AuxIntToInt8(v_0.AuxInt)
4249 if v_1.Op != ssaop.OpAnd8 {
4250 continue
4251 }
4252 _ = v_1.Args[1]
4253 v_1_0 := v_1.Args[0]
4254 v_1_1 := v_1.Args[1]
4255 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
4256 if v_1_0.Op != ssaop.OpConst8 || v_1_0.Type != t {
4257 continue
4258 }
4259 d := ssa.AuxIntToInt8(v_1_0.AuxInt)
4260 x := v_1_1
4261 v.Reset(ssaop.OpAnd8)
4262 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
4263 v0.AuxInt = ssa.Int8ToAuxInt(c & d)
4264 v.AddArg2(v0, x)
4265 return true
4266 }
4267 }
4268 break
4269 }
4270 return false
4271 }
4272 func rewriteValue_OpAndB(v *ssa.Value) bool {
4273 v_1 := v.Args[1]
4274 v_0 := v.Args[0]
4275 b := v.Block
4276
4277
4278 for {
4279 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4280 if v_0.Op != ssaop.OpConstBool {
4281 continue
4282 }
4283 c := ssa.AuxIntToBool(v_0.AuxInt)
4284 if v_1.Op != ssaop.OpConstBool {
4285 continue
4286 }
4287 d := ssa.AuxIntToBool(v_1.AuxInt)
4288 v.Reset(ssaop.OpConstBool)
4289 v.AuxInt = ssa.BoolToAuxInt(c && d)
4290 return true
4291 }
4292 break
4293 }
4294
4295
4296
4297 for {
4298 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4299 if v_0.Op != ssaop.OpLeq64 {
4300 continue
4301 }
4302 x := v_0.Args[1]
4303 v_0_0 := v_0.Args[0]
4304 if v_0_0.Op != ssaop.OpConst64 {
4305 continue
4306 }
4307 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
4308 if v_1.Op != ssaop.OpLess64 {
4309 continue
4310 }
4311 _ = v_1.Args[1]
4312 if x != v_1.Args[0] {
4313 continue
4314 }
4315 v_1_1 := v_1.Args[1]
4316 if v_1_1.Op != ssaop.OpConst64 {
4317 continue
4318 }
4319 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
4320 if !(d >= c) {
4321 continue
4322 }
4323 v.Reset(ssaop.OpLess64U)
4324 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
4325 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
4326 v1.AuxInt = ssa.Int64ToAuxInt(c)
4327 v0.AddArg2(x, v1)
4328 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
4329 v2.AuxInt = ssa.Int64ToAuxInt(d - c)
4330 v.AddArg2(v0, v2)
4331 return true
4332 }
4333 break
4334 }
4335
4336
4337
4338 for {
4339 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4340 if v_0.Op != ssaop.OpLeq64 {
4341 continue
4342 }
4343 x := v_0.Args[1]
4344 v_0_0 := v_0.Args[0]
4345 if v_0_0.Op != ssaop.OpConst64 {
4346 continue
4347 }
4348 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
4349 if v_1.Op != ssaop.OpLeq64 {
4350 continue
4351 }
4352 _ = v_1.Args[1]
4353 if x != v_1.Args[0] {
4354 continue
4355 }
4356 v_1_1 := v_1.Args[1]
4357 if v_1_1.Op != ssaop.OpConst64 {
4358 continue
4359 }
4360 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
4361 if !(d >= c) {
4362 continue
4363 }
4364 v.Reset(ssaop.OpLeq64U)
4365 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
4366 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
4367 v1.AuxInt = ssa.Int64ToAuxInt(c)
4368 v0.AddArg2(x, v1)
4369 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
4370 v2.AuxInt = ssa.Int64ToAuxInt(d - c)
4371 v.AddArg2(v0, v2)
4372 return true
4373 }
4374 break
4375 }
4376
4377
4378
4379 for {
4380 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4381 if v_0.Op != ssaop.OpLeq32 {
4382 continue
4383 }
4384 x := v_0.Args[1]
4385 v_0_0 := v_0.Args[0]
4386 if v_0_0.Op != ssaop.OpConst32 {
4387 continue
4388 }
4389 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
4390 if v_1.Op != ssaop.OpLess32 {
4391 continue
4392 }
4393 _ = v_1.Args[1]
4394 if x != v_1.Args[0] {
4395 continue
4396 }
4397 v_1_1 := v_1.Args[1]
4398 if v_1_1.Op != ssaop.OpConst32 {
4399 continue
4400 }
4401 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
4402 if !(d >= c) {
4403 continue
4404 }
4405 v.Reset(ssaop.OpLess32U)
4406 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
4407 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
4408 v1.AuxInt = ssa.Int32ToAuxInt(c)
4409 v0.AddArg2(x, v1)
4410 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
4411 v2.AuxInt = ssa.Int32ToAuxInt(d - c)
4412 v.AddArg2(v0, v2)
4413 return true
4414 }
4415 break
4416 }
4417
4418
4419
4420 for {
4421 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4422 if v_0.Op != ssaop.OpLeq32 {
4423 continue
4424 }
4425 x := v_0.Args[1]
4426 v_0_0 := v_0.Args[0]
4427 if v_0_0.Op != ssaop.OpConst32 {
4428 continue
4429 }
4430 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
4431 if v_1.Op != ssaop.OpLeq32 {
4432 continue
4433 }
4434 _ = v_1.Args[1]
4435 if x != v_1.Args[0] {
4436 continue
4437 }
4438 v_1_1 := v_1.Args[1]
4439 if v_1_1.Op != ssaop.OpConst32 {
4440 continue
4441 }
4442 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
4443 if !(d >= c) {
4444 continue
4445 }
4446 v.Reset(ssaop.OpLeq32U)
4447 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
4448 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
4449 v1.AuxInt = ssa.Int32ToAuxInt(c)
4450 v0.AddArg2(x, v1)
4451 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
4452 v2.AuxInt = ssa.Int32ToAuxInt(d - c)
4453 v.AddArg2(v0, v2)
4454 return true
4455 }
4456 break
4457 }
4458
4459
4460
4461 for {
4462 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4463 if v_0.Op != ssaop.OpLeq16 {
4464 continue
4465 }
4466 x := v_0.Args[1]
4467 v_0_0 := v_0.Args[0]
4468 if v_0_0.Op != ssaop.OpConst16 {
4469 continue
4470 }
4471 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
4472 if v_1.Op != ssaop.OpLess16 {
4473 continue
4474 }
4475 _ = v_1.Args[1]
4476 if x != v_1.Args[0] {
4477 continue
4478 }
4479 v_1_1 := v_1.Args[1]
4480 if v_1_1.Op != ssaop.OpConst16 {
4481 continue
4482 }
4483 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
4484 if !(d >= c) {
4485 continue
4486 }
4487 v.Reset(ssaop.OpLess16U)
4488 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
4489 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
4490 v1.AuxInt = ssa.Int16ToAuxInt(c)
4491 v0.AddArg2(x, v1)
4492 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
4493 v2.AuxInt = ssa.Int16ToAuxInt(d - c)
4494 v.AddArg2(v0, v2)
4495 return true
4496 }
4497 break
4498 }
4499
4500
4501
4502 for {
4503 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4504 if v_0.Op != ssaop.OpLeq16 {
4505 continue
4506 }
4507 x := v_0.Args[1]
4508 v_0_0 := v_0.Args[0]
4509 if v_0_0.Op != ssaop.OpConst16 {
4510 continue
4511 }
4512 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
4513 if v_1.Op != ssaop.OpLeq16 {
4514 continue
4515 }
4516 _ = v_1.Args[1]
4517 if x != v_1.Args[0] {
4518 continue
4519 }
4520 v_1_1 := v_1.Args[1]
4521 if v_1_1.Op != ssaop.OpConst16 {
4522 continue
4523 }
4524 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
4525 if !(d >= c) {
4526 continue
4527 }
4528 v.Reset(ssaop.OpLeq16U)
4529 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
4530 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
4531 v1.AuxInt = ssa.Int16ToAuxInt(c)
4532 v0.AddArg2(x, v1)
4533 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
4534 v2.AuxInt = ssa.Int16ToAuxInt(d - c)
4535 v.AddArg2(v0, v2)
4536 return true
4537 }
4538 break
4539 }
4540
4541
4542
4543 for {
4544 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4545 if v_0.Op != ssaop.OpLeq8 {
4546 continue
4547 }
4548 x := v_0.Args[1]
4549 v_0_0 := v_0.Args[0]
4550 if v_0_0.Op != ssaop.OpConst8 {
4551 continue
4552 }
4553 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
4554 if v_1.Op != ssaop.OpLess8 {
4555 continue
4556 }
4557 _ = v_1.Args[1]
4558 if x != v_1.Args[0] {
4559 continue
4560 }
4561 v_1_1 := v_1.Args[1]
4562 if v_1_1.Op != ssaop.OpConst8 {
4563 continue
4564 }
4565 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
4566 if !(d >= c) {
4567 continue
4568 }
4569 v.Reset(ssaop.OpLess8U)
4570 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
4571 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
4572 v1.AuxInt = ssa.Int8ToAuxInt(c)
4573 v0.AddArg2(x, v1)
4574 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
4575 v2.AuxInt = ssa.Int8ToAuxInt(d - c)
4576 v.AddArg2(v0, v2)
4577 return true
4578 }
4579 break
4580 }
4581
4582
4583
4584 for {
4585 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4586 if v_0.Op != ssaop.OpLeq8 {
4587 continue
4588 }
4589 x := v_0.Args[1]
4590 v_0_0 := v_0.Args[0]
4591 if v_0_0.Op != ssaop.OpConst8 {
4592 continue
4593 }
4594 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
4595 if v_1.Op != ssaop.OpLeq8 {
4596 continue
4597 }
4598 _ = v_1.Args[1]
4599 if x != v_1.Args[0] {
4600 continue
4601 }
4602 v_1_1 := v_1.Args[1]
4603 if v_1_1.Op != ssaop.OpConst8 {
4604 continue
4605 }
4606 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
4607 if !(d >= c) {
4608 continue
4609 }
4610 v.Reset(ssaop.OpLeq8U)
4611 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
4612 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
4613 v1.AuxInt = ssa.Int8ToAuxInt(c)
4614 v0.AddArg2(x, v1)
4615 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
4616 v2.AuxInt = ssa.Int8ToAuxInt(d - c)
4617 v.AddArg2(v0, v2)
4618 return true
4619 }
4620 break
4621 }
4622
4623
4624
4625 for {
4626 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4627 if v_0.Op != ssaop.OpLess64 {
4628 continue
4629 }
4630 x := v_0.Args[1]
4631 v_0_0 := v_0.Args[0]
4632 if v_0_0.Op != ssaop.OpConst64 {
4633 continue
4634 }
4635 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
4636 if v_1.Op != ssaop.OpLess64 {
4637 continue
4638 }
4639 _ = v_1.Args[1]
4640 if x != v_1.Args[0] {
4641 continue
4642 }
4643 v_1_1 := v_1.Args[1]
4644 if v_1_1.Op != ssaop.OpConst64 {
4645 continue
4646 }
4647 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
4648 if !(d >= c+1 && c+1 > c) {
4649 continue
4650 }
4651 v.Reset(ssaop.OpLess64U)
4652 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
4653 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
4654 v1.AuxInt = ssa.Int64ToAuxInt(c + 1)
4655 v0.AddArg2(x, v1)
4656 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
4657 v2.AuxInt = ssa.Int64ToAuxInt(d - c - 1)
4658 v.AddArg2(v0, v2)
4659 return true
4660 }
4661 break
4662 }
4663
4664
4665
4666 for {
4667 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4668 if v_0.Op != ssaop.OpLess64 {
4669 continue
4670 }
4671 x := v_0.Args[1]
4672 v_0_0 := v_0.Args[0]
4673 if v_0_0.Op != ssaop.OpConst64 {
4674 continue
4675 }
4676 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
4677 if v_1.Op != ssaop.OpLeq64 {
4678 continue
4679 }
4680 _ = v_1.Args[1]
4681 if x != v_1.Args[0] {
4682 continue
4683 }
4684 v_1_1 := v_1.Args[1]
4685 if v_1_1.Op != ssaop.OpConst64 {
4686 continue
4687 }
4688 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
4689 if !(d >= c+1 && c+1 > c) {
4690 continue
4691 }
4692 v.Reset(ssaop.OpLeq64U)
4693 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
4694 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
4695 v1.AuxInt = ssa.Int64ToAuxInt(c + 1)
4696 v0.AddArg2(x, v1)
4697 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
4698 v2.AuxInt = ssa.Int64ToAuxInt(d - c - 1)
4699 v.AddArg2(v0, v2)
4700 return true
4701 }
4702 break
4703 }
4704
4705
4706
4707 for {
4708 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4709 if v_0.Op != ssaop.OpLess32 {
4710 continue
4711 }
4712 x := v_0.Args[1]
4713 v_0_0 := v_0.Args[0]
4714 if v_0_0.Op != ssaop.OpConst32 {
4715 continue
4716 }
4717 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
4718 if v_1.Op != ssaop.OpLess32 {
4719 continue
4720 }
4721 _ = v_1.Args[1]
4722 if x != v_1.Args[0] {
4723 continue
4724 }
4725 v_1_1 := v_1.Args[1]
4726 if v_1_1.Op != ssaop.OpConst32 {
4727 continue
4728 }
4729 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
4730 if !(d >= c+1 && c+1 > c) {
4731 continue
4732 }
4733 v.Reset(ssaop.OpLess32U)
4734 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
4735 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
4736 v1.AuxInt = ssa.Int32ToAuxInt(c + 1)
4737 v0.AddArg2(x, v1)
4738 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
4739 v2.AuxInt = ssa.Int32ToAuxInt(d - c - 1)
4740 v.AddArg2(v0, v2)
4741 return true
4742 }
4743 break
4744 }
4745
4746
4747
4748 for {
4749 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4750 if v_0.Op != ssaop.OpLess32 {
4751 continue
4752 }
4753 x := v_0.Args[1]
4754 v_0_0 := v_0.Args[0]
4755 if v_0_0.Op != ssaop.OpConst32 {
4756 continue
4757 }
4758 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
4759 if v_1.Op != ssaop.OpLeq32 {
4760 continue
4761 }
4762 _ = v_1.Args[1]
4763 if x != v_1.Args[0] {
4764 continue
4765 }
4766 v_1_1 := v_1.Args[1]
4767 if v_1_1.Op != ssaop.OpConst32 {
4768 continue
4769 }
4770 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
4771 if !(d >= c+1 && c+1 > c) {
4772 continue
4773 }
4774 v.Reset(ssaop.OpLeq32U)
4775 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
4776 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
4777 v1.AuxInt = ssa.Int32ToAuxInt(c + 1)
4778 v0.AddArg2(x, v1)
4779 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
4780 v2.AuxInt = ssa.Int32ToAuxInt(d - c - 1)
4781 v.AddArg2(v0, v2)
4782 return true
4783 }
4784 break
4785 }
4786
4787
4788
4789 for {
4790 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4791 if v_0.Op != ssaop.OpLess16 {
4792 continue
4793 }
4794 x := v_0.Args[1]
4795 v_0_0 := v_0.Args[0]
4796 if v_0_0.Op != ssaop.OpConst16 {
4797 continue
4798 }
4799 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
4800 if v_1.Op != ssaop.OpLess16 {
4801 continue
4802 }
4803 _ = v_1.Args[1]
4804 if x != v_1.Args[0] {
4805 continue
4806 }
4807 v_1_1 := v_1.Args[1]
4808 if v_1_1.Op != ssaop.OpConst16 {
4809 continue
4810 }
4811 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
4812 if !(d >= c+1 && c+1 > c) {
4813 continue
4814 }
4815 v.Reset(ssaop.OpLess16U)
4816 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
4817 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
4818 v1.AuxInt = ssa.Int16ToAuxInt(c + 1)
4819 v0.AddArg2(x, v1)
4820 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
4821 v2.AuxInt = ssa.Int16ToAuxInt(d - c - 1)
4822 v.AddArg2(v0, v2)
4823 return true
4824 }
4825 break
4826 }
4827
4828
4829
4830 for {
4831 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4832 if v_0.Op != ssaop.OpLess16 {
4833 continue
4834 }
4835 x := v_0.Args[1]
4836 v_0_0 := v_0.Args[0]
4837 if v_0_0.Op != ssaop.OpConst16 {
4838 continue
4839 }
4840 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
4841 if v_1.Op != ssaop.OpLeq16 {
4842 continue
4843 }
4844 _ = v_1.Args[1]
4845 if x != v_1.Args[0] {
4846 continue
4847 }
4848 v_1_1 := v_1.Args[1]
4849 if v_1_1.Op != ssaop.OpConst16 {
4850 continue
4851 }
4852 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
4853 if !(d >= c+1 && c+1 > c) {
4854 continue
4855 }
4856 v.Reset(ssaop.OpLeq16U)
4857 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
4858 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
4859 v1.AuxInt = ssa.Int16ToAuxInt(c + 1)
4860 v0.AddArg2(x, v1)
4861 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
4862 v2.AuxInt = ssa.Int16ToAuxInt(d - c - 1)
4863 v.AddArg2(v0, v2)
4864 return true
4865 }
4866 break
4867 }
4868
4869
4870
4871 for {
4872 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4873 if v_0.Op != ssaop.OpLess8 {
4874 continue
4875 }
4876 x := v_0.Args[1]
4877 v_0_0 := v_0.Args[0]
4878 if v_0_0.Op != ssaop.OpConst8 {
4879 continue
4880 }
4881 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
4882 if v_1.Op != ssaop.OpLess8 {
4883 continue
4884 }
4885 _ = v_1.Args[1]
4886 if x != v_1.Args[0] {
4887 continue
4888 }
4889 v_1_1 := v_1.Args[1]
4890 if v_1_1.Op != ssaop.OpConst8 {
4891 continue
4892 }
4893 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
4894 if !(d >= c+1 && c+1 > c) {
4895 continue
4896 }
4897 v.Reset(ssaop.OpLess8U)
4898 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
4899 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
4900 v1.AuxInt = ssa.Int8ToAuxInt(c + 1)
4901 v0.AddArg2(x, v1)
4902 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
4903 v2.AuxInt = ssa.Int8ToAuxInt(d - c - 1)
4904 v.AddArg2(v0, v2)
4905 return true
4906 }
4907 break
4908 }
4909
4910
4911
4912 for {
4913 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4914 if v_0.Op != ssaop.OpLess8 {
4915 continue
4916 }
4917 x := v_0.Args[1]
4918 v_0_0 := v_0.Args[0]
4919 if v_0_0.Op != ssaop.OpConst8 {
4920 continue
4921 }
4922 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
4923 if v_1.Op != ssaop.OpLeq8 {
4924 continue
4925 }
4926 _ = v_1.Args[1]
4927 if x != v_1.Args[0] {
4928 continue
4929 }
4930 v_1_1 := v_1.Args[1]
4931 if v_1_1.Op != ssaop.OpConst8 {
4932 continue
4933 }
4934 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
4935 if !(d >= c+1 && c+1 > c) {
4936 continue
4937 }
4938 v.Reset(ssaop.OpLeq8U)
4939 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
4940 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
4941 v1.AuxInt = ssa.Int8ToAuxInt(c + 1)
4942 v0.AddArg2(x, v1)
4943 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
4944 v2.AuxInt = ssa.Int8ToAuxInt(d - c - 1)
4945 v.AddArg2(v0, v2)
4946 return true
4947 }
4948 break
4949 }
4950
4951
4952
4953 for {
4954 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4955 if v_0.Op != ssaop.OpLeq64U {
4956 continue
4957 }
4958 x := v_0.Args[1]
4959 v_0_0 := v_0.Args[0]
4960 if v_0_0.Op != ssaop.OpConst64 {
4961 continue
4962 }
4963 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
4964 if v_1.Op != ssaop.OpLess64U {
4965 continue
4966 }
4967 _ = v_1.Args[1]
4968 if x != v_1.Args[0] {
4969 continue
4970 }
4971 v_1_1 := v_1.Args[1]
4972 if v_1_1.Op != ssaop.OpConst64 {
4973 continue
4974 }
4975 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
4976 if !(uint64(d) >= uint64(c)) {
4977 continue
4978 }
4979 v.Reset(ssaop.OpLess64U)
4980 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
4981 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
4982 v1.AuxInt = ssa.Int64ToAuxInt(c)
4983 v0.AddArg2(x, v1)
4984 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
4985 v2.AuxInt = ssa.Int64ToAuxInt(d - c)
4986 v.AddArg2(v0, v2)
4987 return true
4988 }
4989 break
4990 }
4991
4992
4993
4994 for {
4995 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
4996 if v_0.Op != ssaop.OpLeq64U {
4997 continue
4998 }
4999 x := v_0.Args[1]
5000 v_0_0 := v_0.Args[0]
5001 if v_0_0.Op != ssaop.OpConst64 {
5002 continue
5003 }
5004 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
5005 if v_1.Op != ssaop.OpLeq64U {
5006 continue
5007 }
5008 _ = v_1.Args[1]
5009 if x != v_1.Args[0] {
5010 continue
5011 }
5012 v_1_1 := v_1.Args[1]
5013 if v_1_1.Op != ssaop.OpConst64 {
5014 continue
5015 }
5016 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
5017 if !(uint64(d) >= uint64(c)) {
5018 continue
5019 }
5020 v.Reset(ssaop.OpLeq64U)
5021 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
5022 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
5023 v1.AuxInt = ssa.Int64ToAuxInt(c)
5024 v0.AddArg2(x, v1)
5025 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
5026 v2.AuxInt = ssa.Int64ToAuxInt(d - c)
5027 v.AddArg2(v0, v2)
5028 return true
5029 }
5030 break
5031 }
5032
5033
5034
5035 for {
5036 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5037 if v_0.Op != ssaop.OpLeq32U {
5038 continue
5039 }
5040 x := v_0.Args[1]
5041 v_0_0 := v_0.Args[0]
5042 if v_0_0.Op != ssaop.OpConst32 {
5043 continue
5044 }
5045 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
5046 if v_1.Op != ssaop.OpLess32U {
5047 continue
5048 }
5049 _ = v_1.Args[1]
5050 if x != v_1.Args[0] {
5051 continue
5052 }
5053 v_1_1 := v_1.Args[1]
5054 if v_1_1.Op != ssaop.OpConst32 {
5055 continue
5056 }
5057 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
5058 if !(uint32(d) >= uint32(c)) {
5059 continue
5060 }
5061 v.Reset(ssaop.OpLess32U)
5062 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
5063 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
5064 v1.AuxInt = ssa.Int32ToAuxInt(c)
5065 v0.AddArg2(x, v1)
5066 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
5067 v2.AuxInt = ssa.Int32ToAuxInt(d - c)
5068 v.AddArg2(v0, v2)
5069 return true
5070 }
5071 break
5072 }
5073
5074
5075
5076 for {
5077 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5078 if v_0.Op != ssaop.OpLeq32U {
5079 continue
5080 }
5081 x := v_0.Args[1]
5082 v_0_0 := v_0.Args[0]
5083 if v_0_0.Op != ssaop.OpConst32 {
5084 continue
5085 }
5086 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
5087 if v_1.Op != ssaop.OpLeq32U {
5088 continue
5089 }
5090 _ = v_1.Args[1]
5091 if x != v_1.Args[0] {
5092 continue
5093 }
5094 v_1_1 := v_1.Args[1]
5095 if v_1_1.Op != ssaop.OpConst32 {
5096 continue
5097 }
5098 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
5099 if !(uint32(d) >= uint32(c)) {
5100 continue
5101 }
5102 v.Reset(ssaop.OpLeq32U)
5103 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
5104 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
5105 v1.AuxInt = ssa.Int32ToAuxInt(c)
5106 v0.AddArg2(x, v1)
5107 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
5108 v2.AuxInt = ssa.Int32ToAuxInt(d - c)
5109 v.AddArg2(v0, v2)
5110 return true
5111 }
5112 break
5113 }
5114
5115
5116
5117 for {
5118 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5119 if v_0.Op != ssaop.OpLeq16U {
5120 continue
5121 }
5122 x := v_0.Args[1]
5123 v_0_0 := v_0.Args[0]
5124 if v_0_0.Op != ssaop.OpConst16 {
5125 continue
5126 }
5127 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
5128 if v_1.Op != ssaop.OpLess16U {
5129 continue
5130 }
5131 _ = v_1.Args[1]
5132 if x != v_1.Args[0] {
5133 continue
5134 }
5135 v_1_1 := v_1.Args[1]
5136 if v_1_1.Op != ssaop.OpConst16 {
5137 continue
5138 }
5139 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
5140 if !(uint16(d) >= uint16(c)) {
5141 continue
5142 }
5143 v.Reset(ssaop.OpLess16U)
5144 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
5145 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
5146 v1.AuxInt = ssa.Int16ToAuxInt(c)
5147 v0.AddArg2(x, v1)
5148 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
5149 v2.AuxInt = ssa.Int16ToAuxInt(d - c)
5150 v.AddArg2(v0, v2)
5151 return true
5152 }
5153 break
5154 }
5155
5156
5157
5158 for {
5159 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5160 if v_0.Op != ssaop.OpLeq16U {
5161 continue
5162 }
5163 x := v_0.Args[1]
5164 v_0_0 := v_0.Args[0]
5165 if v_0_0.Op != ssaop.OpConst16 {
5166 continue
5167 }
5168 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
5169 if v_1.Op != ssaop.OpLeq16U {
5170 continue
5171 }
5172 _ = v_1.Args[1]
5173 if x != v_1.Args[0] {
5174 continue
5175 }
5176 v_1_1 := v_1.Args[1]
5177 if v_1_1.Op != ssaop.OpConst16 {
5178 continue
5179 }
5180 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
5181 if !(uint16(d) >= uint16(c)) {
5182 continue
5183 }
5184 v.Reset(ssaop.OpLeq16U)
5185 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
5186 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
5187 v1.AuxInt = ssa.Int16ToAuxInt(c)
5188 v0.AddArg2(x, v1)
5189 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
5190 v2.AuxInt = ssa.Int16ToAuxInt(d - c)
5191 v.AddArg2(v0, v2)
5192 return true
5193 }
5194 break
5195 }
5196
5197
5198
5199 for {
5200 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5201 if v_0.Op != ssaop.OpLeq8U {
5202 continue
5203 }
5204 x := v_0.Args[1]
5205 v_0_0 := v_0.Args[0]
5206 if v_0_0.Op != ssaop.OpConst8 {
5207 continue
5208 }
5209 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
5210 if v_1.Op != ssaop.OpLess8U {
5211 continue
5212 }
5213 _ = v_1.Args[1]
5214 if x != v_1.Args[0] {
5215 continue
5216 }
5217 v_1_1 := v_1.Args[1]
5218 if v_1_1.Op != ssaop.OpConst8 {
5219 continue
5220 }
5221 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
5222 if !(uint8(d) >= uint8(c)) {
5223 continue
5224 }
5225 v.Reset(ssaop.OpLess8U)
5226 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
5227 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
5228 v1.AuxInt = ssa.Int8ToAuxInt(c)
5229 v0.AddArg2(x, v1)
5230 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
5231 v2.AuxInt = ssa.Int8ToAuxInt(d - c)
5232 v.AddArg2(v0, v2)
5233 return true
5234 }
5235 break
5236 }
5237
5238
5239
5240 for {
5241 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5242 if v_0.Op != ssaop.OpLeq8U {
5243 continue
5244 }
5245 x := v_0.Args[1]
5246 v_0_0 := v_0.Args[0]
5247 if v_0_0.Op != ssaop.OpConst8 {
5248 continue
5249 }
5250 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
5251 if v_1.Op != ssaop.OpLeq8U {
5252 continue
5253 }
5254 _ = v_1.Args[1]
5255 if x != v_1.Args[0] {
5256 continue
5257 }
5258 v_1_1 := v_1.Args[1]
5259 if v_1_1.Op != ssaop.OpConst8 {
5260 continue
5261 }
5262 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
5263 if !(uint8(d) >= uint8(c)) {
5264 continue
5265 }
5266 v.Reset(ssaop.OpLeq8U)
5267 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
5268 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
5269 v1.AuxInt = ssa.Int8ToAuxInt(c)
5270 v0.AddArg2(x, v1)
5271 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
5272 v2.AuxInt = ssa.Int8ToAuxInt(d - c)
5273 v.AddArg2(v0, v2)
5274 return true
5275 }
5276 break
5277 }
5278
5279
5280
5281 for {
5282 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5283 if v_0.Op != ssaop.OpLess64U {
5284 continue
5285 }
5286 x := v_0.Args[1]
5287 v_0_0 := v_0.Args[0]
5288 if v_0_0.Op != ssaop.OpConst64 {
5289 continue
5290 }
5291 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
5292 if v_1.Op != ssaop.OpLess64U {
5293 continue
5294 }
5295 _ = v_1.Args[1]
5296 if x != v_1.Args[0] {
5297 continue
5298 }
5299 v_1_1 := v_1.Args[1]
5300 if v_1_1.Op != ssaop.OpConst64 {
5301 continue
5302 }
5303 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
5304 if !(uint64(d) >= uint64(c+1) && uint64(c+1) > uint64(c)) {
5305 continue
5306 }
5307 v.Reset(ssaop.OpLess64U)
5308 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
5309 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
5310 v1.AuxInt = ssa.Int64ToAuxInt(c + 1)
5311 v0.AddArg2(x, v1)
5312 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
5313 v2.AuxInt = ssa.Int64ToAuxInt(d - c - 1)
5314 v.AddArg2(v0, v2)
5315 return true
5316 }
5317 break
5318 }
5319
5320
5321
5322 for {
5323 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5324 if v_0.Op != ssaop.OpLess64U {
5325 continue
5326 }
5327 x := v_0.Args[1]
5328 v_0_0 := v_0.Args[0]
5329 if v_0_0.Op != ssaop.OpConst64 {
5330 continue
5331 }
5332 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
5333 if v_1.Op != ssaop.OpLeq64U {
5334 continue
5335 }
5336 _ = v_1.Args[1]
5337 if x != v_1.Args[0] {
5338 continue
5339 }
5340 v_1_1 := v_1.Args[1]
5341 if v_1_1.Op != ssaop.OpConst64 {
5342 continue
5343 }
5344 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
5345 if !(uint64(d) >= uint64(c+1) && uint64(c+1) > uint64(c)) {
5346 continue
5347 }
5348 v.Reset(ssaop.OpLeq64U)
5349 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
5350 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
5351 v1.AuxInt = ssa.Int64ToAuxInt(c + 1)
5352 v0.AddArg2(x, v1)
5353 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
5354 v2.AuxInt = ssa.Int64ToAuxInt(d - c - 1)
5355 v.AddArg2(v0, v2)
5356 return true
5357 }
5358 break
5359 }
5360
5361
5362
5363 for {
5364 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5365 if v_0.Op != ssaop.OpLess32U {
5366 continue
5367 }
5368 x := v_0.Args[1]
5369 v_0_0 := v_0.Args[0]
5370 if v_0_0.Op != ssaop.OpConst32 {
5371 continue
5372 }
5373 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
5374 if v_1.Op != ssaop.OpLess32U {
5375 continue
5376 }
5377 _ = v_1.Args[1]
5378 if x != v_1.Args[0] {
5379 continue
5380 }
5381 v_1_1 := v_1.Args[1]
5382 if v_1_1.Op != ssaop.OpConst32 {
5383 continue
5384 }
5385 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
5386 if !(uint32(d) >= uint32(c+1) && uint32(c+1) > uint32(c)) {
5387 continue
5388 }
5389 v.Reset(ssaop.OpLess32U)
5390 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
5391 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
5392 v1.AuxInt = ssa.Int32ToAuxInt(c + 1)
5393 v0.AddArg2(x, v1)
5394 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
5395 v2.AuxInt = ssa.Int32ToAuxInt(d - c - 1)
5396 v.AddArg2(v0, v2)
5397 return true
5398 }
5399 break
5400 }
5401
5402
5403
5404 for {
5405 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5406 if v_0.Op != ssaop.OpLess32U {
5407 continue
5408 }
5409 x := v_0.Args[1]
5410 v_0_0 := v_0.Args[0]
5411 if v_0_0.Op != ssaop.OpConst32 {
5412 continue
5413 }
5414 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
5415 if v_1.Op != ssaop.OpLeq32U {
5416 continue
5417 }
5418 _ = v_1.Args[1]
5419 if x != v_1.Args[0] {
5420 continue
5421 }
5422 v_1_1 := v_1.Args[1]
5423 if v_1_1.Op != ssaop.OpConst32 {
5424 continue
5425 }
5426 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
5427 if !(uint32(d) >= uint32(c+1) && uint32(c+1) > uint32(c)) {
5428 continue
5429 }
5430 v.Reset(ssaop.OpLeq32U)
5431 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
5432 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
5433 v1.AuxInt = ssa.Int32ToAuxInt(c + 1)
5434 v0.AddArg2(x, v1)
5435 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
5436 v2.AuxInt = ssa.Int32ToAuxInt(d - c - 1)
5437 v.AddArg2(v0, v2)
5438 return true
5439 }
5440 break
5441 }
5442
5443
5444
5445 for {
5446 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5447 if v_0.Op != ssaop.OpLess16U {
5448 continue
5449 }
5450 x := v_0.Args[1]
5451 v_0_0 := v_0.Args[0]
5452 if v_0_0.Op != ssaop.OpConst16 {
5453 continue
5454 }
5455 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
5456 if v_1.Op != ssaop.OpLess16U {
5457 continue
5458 }
5459 _ = v_1.Args[1]
5460 if x != v_1.Args[0] {
5461 continue
5462 }
5463 v_1_1 := v_1.Args[1]
5464 if v_1_1.Op != ssaop.OpConst16 {
5465 continue
5466 }
5467 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
5468 if !(uint16(d) >= uint16(c+1) && uint16(c+1) > uint16(c)) {
5469 continue
5470 }
5471 v.Reset(ssaop.OpLess16U)
5472 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
5473 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
5474 v1.AuxInt = ssa.Int16ToAuxInt(c + 1)
5475 v0.AddArg2(x, v1)
5476 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
5477 v2.AuxInt = ssa.Int16ToAuxInt(d - c - 1)
5478 v.AddArg2(v0, v2)
5479 return true
5480 }
5481 break
5482 }
5483
5484
5485
5486 for {
5487 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5488 if v_0.Op != ssaop.OpLess16U {
5489 continue
5490 }
5491 x := v_0.Args[1]
5492 v_0_0 := v_0.Args[0]
5493 if v_0_0.Op != ssaop.OpConst16 {
5494 continue
5495 }
5496 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
5497 if v_1.Op != ssaop.OpLeq16U {
5498 continue
5499 }
5500 _ = v_1.Args[1]
5501 if x != v_1.Args[0] {
5502 continue
5503 }
5504 v_1_1 := v_1.Args[1]
5505 if v_1_1.Op != ssaop.OpConst16 {
5506 continue
5507 }
5508 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
5509 if !(uint16(d) >= uint16(c+1) && uint16(c+1) > uint16(c)) {
5510 continue
5511 }
5512 v.Reset(ssaop.OpLeq16U)
5513 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
5514 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
5515 v1.AuxInt = ssa.Int16ToAuxInt(c + 1)
5516 v0.AddArg2(x, v1)
5517 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
5518 v2.AuxInt = ssa.Int16ToAuxInt(d - c - 1)
5519 v.AddArg2(v0, v2)
5520 return true
5521 }
5522 break
5523 }
5524
5525
5526
5527 for {
5528 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5529 if v_0.Op != ssaop.OpLess8U {
5530 continue
5531 }
5532 x := v_0.Args[1]
5533 v_0_0 := v_0.Args[0]
5534 if v_0_0.Op != ssaop.OpConst8 {
5535 continue
5536 }
5537 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
5538 if v_1.Op != ssaop.OpLess8U {
5539 continue
5540 }
5541 _ = v_1.Args[1]
5542 if x != v_1.Args[0] {
5543 continue
5544 }
5545 v_1_1 := v_1.Args[1]
5546 if v_1_1.Op != ssaop.OpConst8 {
5547 continue
5548 }
5549 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
5550 if !(uint8(d) >= uint8(c+1) && uint8(c+1) > uint8(c)) {
5551 continue
5552 }
5553 v.Reset(ssaop.OpLess8U)
5554 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
5555 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
5556 v1.AuxInt = ssa.Int8ToAuxInt(c + 1)
5557 v0.AddArg2(x, v1)
5558 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
5559 v2.AuxInt = ssa.Int8ToAuxInt(d - c - 1)
5560 v.AddArg2(v0, v2)
5561 return true
5562 }
5563 break
5564 }
5565
5566
5567
5568 for {
5569 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5570 if v_0.Op != ssaop.OpLess8U {
5571 continue
5572 }
5573 x := v_0.Args[1]
5574 v_0_0 := v_0.Args[0]
5575 if v_0_0.Op != ssaop.OpConst8 {
5576 continue
5577 }
5578 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
5579 if v_1.Op != ssaop.OpLeq8U {
5580 continue
5581 }
5582 _ = v_1.Args[1]
5583 if x != v_1.Args[0] {
5584 continue
5585 }
5586 v_1_1 := v_1.Args[1]
5587 if v_1_1.Op != ssaop.OpConst8 {
5588 continue
5589 }
5590 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
5591 if !(uint8(d) >= uint8(c+1) && uint8(c+1) > uint8(c)) {
5592 continue
5593 }
5594 v.Reset(ssaop.OpLeq8U)
5595 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
5596 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
5597 v1.AuxInt = ssa.Int8ToAuxInt(c + 1)
5598 v0.AddArg2(x, v1)
5599 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
5600 v2.AuxInt = ssa.Int8ToAuxInt(d - c - 1)
5601 v.AddArg2(v0, v2)
5602 return true
5603 }
5604 break
5605 }
5606
5607
5608
5609 for {
5610 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5611 if v_0.Op != ssaop.OpNeq64 {
5612 continue
5613 }
5614 _ = v_0.Args[1]
5615 v_0_0 := v_0.Args[0]
5616 v_0_1 := v_0.Args[1]
5617 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
5618 x := v_0_0
5619 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 0 || v_1.Op != ssaop.OpLess64U {
5620 continue
5621 }
5622 _ = v_1.Args[1]
5623 if x != v_1.Args[0] {
5624 continue
5625 }
5626 v_1_1 := v_1.Args[1]
5627 if v_1_1.Op != ssaop.OpConst64 {
5628 continue
5629 }
5630 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
5631 if !(uint64(d) >= 1) {
5632 continue
5633 }
5634 v.Reset(ssaop.OpLess64U)
5635 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
5636 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
5637 v1.AuxInt = ssa.Int64ToAuxInt(1)
5638 v0.AddArg2(x, v1)
5639 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
5640 v2.AuxInt = ssa.Int64ToAuxInt(d - 1)
5641 v.AddArg2(v0, v2)
5642 return true
5643 }
5644 }
5645 break
5646 }
5647
5648
5649
5650 for {
5651 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5652 if v_0.Op != ssaop.OpNeq64 {
5653 continue
5654 }
5655 _ = v_0.Args[1]
5656 v_0_0 := v_0.Args[0]
5657 v_0_1 := v_0.Args[1]
5658 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
5659 x := v_0_0
5660 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 0 || v_1.Op != ssaop.OpLeq64U {
5661 continue
5662 }
5663 _ = v_1.Args[1]
5664 if x != v_1.Args[0] {
5665 continue
5666 }
5667 v_1_1 := v_1.Args[1]
5668 if v_1_1.Op != ssaop.OpConst64 {
5669 continue
5670 }
5671 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
5672 if !(uint64(d) >= 1) {
5673 continue
5674 }
5675 v.Reset(ssaop.OpLeq64U)
5676 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
5677 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
5678 v1.AuxInt = ssa.Int64ToAuxInt(1)
5679 v0.AddArg2(x, v1)
5680 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
5681 v2.AuxInt = ssa.Int64ToAuxInt(d - 1)
5682 v.AddArg2(v0, v2)
5683 return true
5684 }
5685 }
5686 break
5687 }
5688
5689
5690
5691 for {
5692 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5693 if v_0.Op != ssaop.OpNeq32 {
5694 continue
5695 }
5696 _ = v_0.Args[1]
5697 v_0_0 := v_0.Args[0]
5698 v_0_1 := v_0.Args[1]
5699 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
5700 x := v_0_0
5701 if v_0_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0_1.AuxInt) != 0 || v_1.Op != ssaop.OpLess32U {
5702 continue
5703 }
5704 _ = v_1.Args[1]
5705 if x != v_1.Args[0] {
5706 continue
5707 }
5708 v_1_1 := v_1.Args[1]
5709 if v_1_1.Op != ssaop.OpConst32 {
5710 continue
5711 }
5712 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
5713 if !(uint32(d) >= 1) {
5714 continue
5715 }
5716 v.Reset(ssaop.OpLess32U)
5717 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
5718 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
5719 v1.AuxInt = ssa.Int32ToAuxInt(1)
5720 v0.AddArg2(x, v1)
5721 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
5722 v2.AuxInt = ssa.Int32ToAuxInt(d - 1)
5723 v.AddArg2(v0, v2)
5724 return true
5725 }
5726 }
5727 break
5728 }
5729
5730
5731
5732 for {
5733 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5734 if v_0.Op != ssaop.OpNeq32 {
5735 continue
5736 }
5737 _ = v_0.Args[1]
5738 v_0_0 := v_0.Args[0]
5739 v_0_1 := v_0.Args[1]
5740 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
5741 x := v_0_0
5742 if v_0_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0_1.AuxInt) != 0 || v_1.Op != ssaop.OpLeq32U {
5743 continue
5744 }
5745 _ = v_1.Args[1]
5746 if x != v_1.Args[0] {
5747 continue
5748 }
5749 v_1_1 := v_1.Args[1]
5750 if v_1_1.Op != ssaop.OpConst32 {
5751 continue
5752 }
5753 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
5754 if !(uint32(d) >= 1) {
5755 continue
5756 }
5757 v.Reset(ssaop.OpLeq32U)
5758 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
5759 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
5760 v1.AuxInt = ssa.Int32ToAuxInt(1)
5761 v0.AddArg2(x, v1)
5762 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
5763 v2.AuxInt = ssa.Int32ToAuxInt(d - 1)
5764 v.AddArg2(v0, v2)
5765 return true
5766 }
5767 }
5768 break
5769 }
5770
5771
5772
5773 for {
5774 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5775 if v_0.Op != ssaop.OpNeq16 {
5776 continue
5777 }
5778 _ = v_0.Args[1]
5779 v_0_0 := v_0.Args[0]
5780 v_0_1 := v_0.Args[1]
5781 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
5782 x := v_0_0
5783 if v_0_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0_1.AuxInt) != 0 || v_1.Op != ssaop.OpLess16U {
5784 continue
5785 }
5786 _ = v_1.Args[1]
5787 if x != v_1.Args[0] {
5788 continue
5789 }
5790 v_1_1 := v_1.Args[1]
5791 if v_1_1.Op != ssaop.OpConst16 {
5792 continue
5793 }
5794 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
5795 if !(uint16(d) >= 1) {
5796 continue
5797 }
5798 v.Reset(ssaop.OpLess16U)
5799 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
5800 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
5801 v1.AuxInt = ssa.Int16ToAuxInt(1)
5802 v0.AddArg2(x, v1)
5803 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
5804 v2.AuxInt = ssa.Int16ToAuxInt(d - 1)
5805 v.AddArg2(v0, v2)
5806 return true
5807 }
5808 }
5809 break
5810 }
5811
5812
5813
5814 for {
5815 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5816 if v_0.Op != ssaop.OpNeq16 {
5817 continue
5818 }
5819 _ = v_0.Args[1]
5820 v_0_0 := v_0.Args[0]
5821 v_0_1 := v_0.Args[1]
5822 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
5823 x := v_0_0
5824 if v_0_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0_1.AuxInt) != 0 || v_1.Op != ssaop.OpLeq16U {
5825 continue
5826 }
5827 _ = v_1.Args[1]
5828 if x != v_1.Args[0] {
5829 continue
5830 }
5831 v_1_1 := v_1.Args[1]
5832 if v_1_1.Op != ssaop.OpConst16 {
5833 continue
5834 }
5835 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
5836 if !(uint16(d) >= 1) {
5837 continue
5838 }
5839 v.Reset(ssaop.OpLeq16U)
5840 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
5841 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
5842 v1.AuxInt = ssa.Int16ToAuxInt(1)
5843 v0.AddArg2(x, v1)
5844 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
5845 v2.AuxInt = ssa.Int16ToAuxInt(d - 1)
5846 v.AddArg2(v0, v2)
5847 return true
5848 }
5849 }
5850 break
5851 }
5852
5853
5854
5855 for {
5856 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5857 if v_0.Op != ssaop.OpNeq8 {
5858 continue
5859 }
5860 _ = v_0.Args[1]
5861 v_0_0 := v_0.Args[0]
5862 v_0_1 := v_0.Args[1]
5863 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
5864 x := v_0_0
5865 if v_0_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0_1.AuxInt) != 0 || v_1.Op != ssaop.OpLess8U {
5866 continue
5867 }
5868 _ = v_1.Args[1]
5869 if x != v_1.Args[0] {
5870 continue
5871 }
5872 v_1_1 := v_1.Args[1]
5873 if v_1_1.Op != ssaop.OpConst8 {
5874 continue
5875 }
5876 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
5877 if !(uint8(d) >= 1) {
5878 continue
5879 }
5880 v.Reset(ssaop.OpLess8U)
5881 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
5882 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
5883 v1.AuxInt = ssa.Int8ToAuxInt(1)
5884 v0.AddArg2(x, v1)
5885 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
5886 v2.AuxInt = ssa.Int8ToAuxInt(d - 1)
5887 v.AddArg2(v0, v2)
5888 return true
5889 }
5890 }
5891 break
5892 }
5893
5894
5895
5896 for {
5897 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5898 if v_0.Op != ssaop.OpNeq8 {
5899 continue
5900 }
5901 _ = v_0.Args[1]
5902 v_0_0 := v_0.Args[0]
5903 v_0_1 := v_0.Args[1]
5904 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
5905 x := v_0_0
5906 if v_0_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0_1.AuxInt) != 0 || v_1.Op != ssaop.OpLeq8U {
5907 continue
5908 }
5909 _ = v_1.Args[1]
5910 if x != v_1.Args[0] {
5911 continue
5912 }
5913 v_1_1 := v_1.Args[1]
5914 if v_1_1.Op != ssaop.OpConst8 {
5915 continue
5916 }
5917 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
5918 if !(uint8(d) >= 1) {
5919 continue
5920 }
5921 v.Reset(ssaop.OpLeq8U)
5922 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
5923 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
5924 v1.AuxInt = ssa.Int8ToAuxInt(1)
5925 v0.AddArg2(x, v1)
5926 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
5927 v2.AuxInt = ssa.Int8ToAuxInt(d - 1)
5928 v.AddArg2(v0, v2)
5929 return true
5930 }
5931 }
5932 break
5933 }
5934
5935
5936
5937 for {
5938 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5939 if v_0.Op != ssaop.OpNeq64 {
5940 continue
5941 }
5942 _ = v_0.Args[1]
5943 v_0_0 := v_0.Args[0]
5944 v_0_1 := v_0.Args[1]
5945 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
5946 x := v_0_0
5947 cv := v_0_1
5948 if cv.Op != ssaop.OpConst64 {
5949 continue
5950 }
5951 c := ssa.AuxIntToInt64(cv.AuxInt)
5952 if v_1.Op != ssaop.OpNeq64 {
5953 continue
5954 }
5955 _ = v_1.Args[1]
5956 v_1_0 := v_1.Args[0]
5957 v_1_1 := v_1.Args[1]
5958 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
5959 if x != v_1_0 || v_1_1.Op != ssaop.OpConst64 {
5960 continue
5961 }
5962 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
5963 if !(c|d == c && ssa.OneBit(c^d)) {
5964 continue
5965 }
5966 v.Reset(ssaop.OpNeq64)
5967 v0 := b.NewValue0(v.Pos, ssaop.OpOr64, x.Type)
5968 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
5969 v1.AuxInt = ssa.Int64ToAuxInt(c ^ d)
5970 v0.AddArg2(x, v1)
5971 v.AddArg2(v0, cv)
5972 return true
5973 }
5974 }
5975 }
5976 break
5977 }
5978
5979
5980
5981 for {
5982 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
5983 if v_0.Op != ssaop.OpNeq32 {
5984 continue
5985 }
5986 _ = v_0.Args[1]
5987 v_0_0 := v_0.Args[0]
5988 v_0_1 := v_0.Args[1]
5989 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
5990 x := v_0_0
5991 cv := v_0_1
5992 if cv.Op != ssaop.OpConst32 {
5993 continue
5994 }
5995 c := ssa.AuxIntToInt32(cv.AuxInt)
5996 if v_1.Op != ssaop.OpNeq32 {
5997 continue
5998 }
5999 _ = v_1.Args[1]
6000 v_1_0 := v_1.Args[0]
6001 v_1_1 := v_1.Args[1]
6002 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
6003 if x != v_1_0 || v_1_1.Op != ssaop.OpConst32 {
6004 continue
6005 }
6006 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
6007 if !(c|d == c && ssa.OneBit(c^d)) {
6008 continue
6009 }
6010 v.Reset(ssaop.OpNeq32)
6011 v0 := b.NewValue0(v.Pos, ssaop.OpOr32, x.Type)
6012 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
6013 v1.AuxInt = ssa.Int32ToAuxInt(c ^ d)
6014 v0.AddArg2(x, v1)
6015 v.AddArg2(v0, cv)
6016 return true
6017 }
6018 }
6019 }
6020 break
6021 }
6022
6023
6024
6025 for {
6026 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
6027 if v_0.Op != ssaop.OpNeq16 {
6028 continue
6029 }
6030 _ = v_0.Args[1]
6031 v_0_0 := v_0.Args[0]
6032 v_0_1 := v_0.Args[1]
6033 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
6034 x := v_0_0
6035 cv := v_0_1
6036 if cv.Op != ssaop.OpConst16 {
6037 continue
6038 }
6039 c := ssa.AuxIntToInt16(cv.AuxInt)
6040 if v_1.Op != ssaop.OpNeq16 {
6041 continue
6042 }
6043 _ = v_1.Args[1]
6044 v_1_0 := v_1.Args[0]
6045 v_1_1 := v_1.Args[1]
6046 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
6047 if x != v_1_0 || v_1_1.Op != ssaop.OpConst16 {
6048 continue
6049 }
6050 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
6051 if !(c|d == c && ssa.OneBit(c^d)) {
6052 continue
6053 }
6054 v.Reset(ssaop.OpNeq16)
6055 v0 := b.NewValue0(v.Pos, ssaop.OpOr16, x.Type)
6056 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
6057 v1.AuxInt = ssa.Int16ToAuxInt(c ^ d)
6058 v0.AddArg2(x, v1)
6059 v.AddArg2(v0, cv)
6060 return true
6061 }
6062 }
6063 }
6064 break
6065 }
6066
6067
6068
6069 for {
6070 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
6071 if v_0.Op != ssaop.OpNeq8 {
6072 continue
6073 }
6074 _ = v_0.Args[1]
6075 v_0_0 := v_0.Args[0]
6076 v_0_1 := v_0.Args[1]
6077 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
6078 x := v_0_0
6079 cv := v_0_1
6080 if cv.Op != ssaop.OpConst8 {
6081 continue
6082 }
6083 c := ssa.AuxIntToInt8(cv.AuxInt)
6084 if v_1.Op != ssaop.OpNeq8 {
6085 continue
6086 }
6087 _ = v_1.Args[1]
6088 v_1_0 := v_1.Args[0]
6089 v_1_1 := v_1.Args[1]
6090 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
6091 if x != v_1_0 || v_1_1.Op != ssaop.OpConst8 {
6092 continue
6093 }
6094 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
6095 if !(c|d == c && ssa.OneBit(c^d)) {
6096 continue
6097 }
6098 v.Reset(ssaop.OpNeq8)
6099 v0 := b.NewValue0(v.Pos, ssaop.OpOr8, x.Type)
6100 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
6101 v1.AuxInt = ssa.Int8ToAuxInt(c ^ d)
6102 v0.AddArg2(x, v1)
6103 v.AddArg2(v0, cv)
6104 return true
6105 }
6106 }
6107 }
6108 break
6109 }
6110
6111
6112 for {
6113 x := v_0
6114 if x != v_1 {
6115 break
6116 }
6117 v.CopyOf(x)
6118 return true
6119 }
6120
6121
6122 for {
6123 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
6124 if v_0.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_0.AuxInt) != true {
6125 continue
6126 }
6127 x := v_1
6128 v.CopyOf(x)
6129 return true
6130 }
6131 break
6132 }
6133
6134
6135 for {
6136 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
6137 if v_0.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_0.AuxInt) != false {
6138 continue
6139 }
6140 v.Reset(ssaop.OpConstBool)
6141 v.AuxInt = ssa.BoolToAuxInt(false)
6142 return true
6143 }
6144 break
6145 }
6146 return false
6147 }
6148 func rewriteValue_OpArraySelect(v *ssa.Value) bool {
6149 v_0 := v.Args[0]
6150
6151
6152 for {
6153 if v_0.Op != ssaop.OpArrayMake1 {
6154 break
6155 }
6156 x := v_0.Args[0]
6157 v.CopyOf(x)
6158 return true
6159 }
6160
6161
6162 for {
6163 if ssa.AuxIntToInt64(v.AuxInt) != 0 || v_0.Op != ssaop.OpIData {
6164 break
6165 }
6166 x := v_0.Args[0]
6167 v.Reset(ssaop.OpIData)
6168 v.AddArg(x)
6169 return true
6170 }
6171 return false
6172 }
6173 func rewriteValue_OpBitLen16(v *ssa.Value) bool {
6174 v_0 := v.Args[0]
6175 b := v.Block
6176 config := b.Func.Config
6177
6178
6179
6180 for {
6181 if v_0.Op != ssaop.OpConst16 {
6182 break
6183 }
6184 c := ssa.AuxIntToInt16(v_0.AuxInt)
6185 if !(config.PtrSize == 8) {
6186 break
6187 }
6188 v.Reset(ssaop.OpConst64)
6189 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.Len16(uint16(c))))
6190 return true
6191 }
6192
6193
6194
6195 for {
6196 if v_0.Op != ssaop.OpConst16 {
6197 break
6198 }
6199 c := ssa.AuxIntToInt16(v_0.AuxInt)
6200 if !(config.PtrSize == 4) {
6201 break
6202 }
6203 v.Reset(ssaop.OpConst32)
6204 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.Len16(uint16(c))))
6205 return true
6206 }
6207 return false
6208 }
6209 func rewriteValue_OpBitLen32(v *ssa.Value) bool {
6210 v_0 := v.Args[0]
6211 b := v.Block
6212 config := b.Func.Config
6213
6214
6215
6216 for {
6217 if v_0.Op != ssaop.OpConst32 {
6218 break
6219 }
6220 c := ssa.AuxIntToInt32(v_0.AuxInt)
6221 if !(config.PtrSize == 8) {
6222 break
6223 }
6224 v.Reset(ssaop.OpConst64)
6225 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.Len32(uint32(c))))
6226 return true
6227 }
6228
6229
6230
6231 for {
6232 if v_0.Op != ssaop.OpConst32 {
6233 break
6234 }
6235 c := ssa.AuxIntToInt32(v_0.AuxInt)
6236 if !(config.PtrSize == 4) {
6237 break
6238 }
6239 v.Reset(ssaop.OpConst32)
6240 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.Len32(uint32(c))))
6241 return true
6242 }
6243 return false
6244 }
6245 func rewriteValue_OpBitLen64(v *ssa.Value) bool {
6246 v_0 := v.Args[0]
6247 b := v.Block
6248 config := b.Func.Config
6249
6250
6251
6252 for {
6253 if v_0.Op != ssaop.OpConst64 {
6254 break
6255 }
6256 c := ssa.AuxIntToInt64(v_0.AuxInt)
6257 if !(config.PtrSize == 8) {
6258 break
6259 }
6260 v.Reset(ssaop.OpConst64)
6261 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.Len64(uint64(c))))
6262 return true
6263 }
6264
6265
6266
6267 for {
6268 if v_0.Op != ssaop.OpConst64 {
6269 break
6270 }
6271 c := ssa.AuxIntToInt64(v_0.AuxInt)
6272 if !(config.PtrSize == 4) {
6273 break
6274 }
6275 v.Reset(ssaop.OpConst32)
6276 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.Len64(uint64(c))))
6277 return true
6278 }
6279 return false
6280 }
6281 func rewriteValue_OpBitLen8(v *ssa.Value) bool {
6282 v_0 := v.Args[0]
6283 b := v.Block
6284 config := b.Func.Config
6285
6286
6287
6288 for {
6289 if v_0.Op != ssaop.OpConst8 {
6290 break
6291 }
6292 c := ssa.AuxIntToInt8(v_0.AuxInt)
6293 if !(config.PtrSize == 8) {
6294 break
6295 }
6296 v.Reset(ssaop.OpConst64)
6297 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.Len8(uint8(c))))
6298 return true
6299 }
6300
6301
6302
6303 for {
6304 if v_0.Op != ssaop.OpConst8 {
6305 break
6306 }
6307 c := ssa.AuxIntToInt8(v_0.AuxInt)
6308 if !(config.PtrSize == 4) {
6309 break
6310 }
6311 v.Reset(ssaop.OpConst32)
6312 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.Len8(uint8(c))))
6313 return true
6314 }
6315 return false
6316 }
6317 func rewriteValue_OpBitRev16(v *ssa.Value) bool {
6318 v_0 := v.Args[0]
6319
6320
6321 for {
6322 if v_0.Op != ssaop.OpConst16 {
6323 break
6324 }
6325 c := ssa.AuxIntToInt16(v_0.AuxInt)
6326 v.Reset(ssaop.OpConst16)
6327 v.AuxInt = ssa.Int16ToAuxInt(int16(bits.Reverse16(uint16(c))))
6328 return true
6329 }
6330 return false
6331 }
6332 func rewriteValue_OpBitRev32(v *ssa.Value) bool {
6333 v_0 := v.Args[0]
6334
6335
6336 for {
6337 if v_0.Op != ssaop.OpConst32 {
6338 break
6339 }
6340 c := ssa.AuxIntToInt32(v_0.AuxInt)
6341 v.Reset(ssaop.OpConst32)
6342 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.Reverse32(uint32(c))))
6343 return true
6344 }
6345 return false
6346 }
6347 func rewriteValue_OpBitRev64(v *ssa.Value) bool {
6348 v_0 := v.Args[0]
6349
6350
6351 for {
6352 if v_0.Op != ssaop.OpConst64 {
6353 break
6354 }
6355 c := ssa.AuxIntToInt64(v_0.AuxInt)
6356 v.Reset(ssaop.OpConst64)
6357 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.Reverse64(uint64(c))))
6358 return true
6359 }
6360 return false
6361 }
6362 func rewriteValue_OpBitRev8(v *ssa.Value) bool {
6363 v_0 := v.Args[0]
6364
6365
6366 for {
6367 if v_0.Op != ssaop.OpConst8 {
6368 break
6369 }
6370 c := ssa.AuxIntToInt8(v_0.AuxInt)
6371 v.Reset(ssaop.OpConst8)
6372 v.AuxInt = ssa.Int8ToAuxInt(int8(bits.Reverse8(uint8(c))))
6373 return true
6374 }
6375 return false
6376 }
6377 func rewriteValue_OpBswap16(v *ssa.Value) bool {
6378 v_0 := v.Args[0]
6379
6380
6381 for {
6382 if v_0.Op != ssaop.OpConst16 {
6383 break
6384 }
6385 c := ssa.AuxIntToInt16(v_0.AuxInt)
6386 v.Reset(ssaop.OpConst16)
6387 v.AuxInt = ssa.Int16ToAuxInt(int16(bits.ReverseBytes16(uint16(c))))
6388 return true
6389 }
6390 return false
6391 }
6392 func rewriteValue_OpBswap32(v *ssa.Value) bool {
6393 v_0 := v.Args[0]
6394
6395
6396 for {
6397 if v_0.Op != ssaop.OpConst32 {
6398 break
6399 }
6400 c := ssa.AuxIntToInt32(v_0.AuxInt)
6401 v.Reset(ssaop.OpConst32)
6402 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.ReverseBytes32(uint32(c))))
6403 return true
6404 }
6405 return false
6406 }
6407 func rewriteValue_OpBswap64(v *ssa.Value) bool {
6408 v_0 := v.Args[0]
6409
6410
6411 for {
6412 if v_0.Op != ssaop.OpConst64 {
6413 break
6414 }
6415 c := ssa.AuxIntToInt64(v_0.AuxInt)
6416 v.Reset(ssaop.OpConst64)
6417 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.ReverseBytes64(uint64(c))))
6418 return true
6419 }
6420 return false
6421 }
6422 func rewriteValue_OpCeil(v *ssa.Value) bool {
6423 v_0 := v.Args[0]
6424
6425
6426 for {
6427 if v_0.Op != ssaop.OpConst64F {
6428 break
6429 }
6430 c := ssa.AuxIntToFloat64(v_0.AuxInt)
6431 v.Reset(ssaop.OpConst64F)
6432 v.AuxInt = ssa.Float64ToAuxInt(math.Ceil(c))
6433 return true
6434 }
6435 return false
6436 }
6437 func rewriteValue_OpCom16(v *ssa.Value) bool {
6438 v_0 := v.Args[0]
6439
6440
6441 for {
6442 if v_0.Op != ssaop.OpCom16 {
6443 break
6444 }
6445 x := v_0.Args[0]
6446 v.CopyOf(x)
6447 return true
6448 }
6449
6450
6451 for {
6452 if v_0.Op != ssaop.OpConst16 {
6453 break
6454 }
6455 c := ssa.AuxIntToInt16(v_0.AuxInt)
6456 v.Reset(ssaop.OpConst16)
6457 v.AuxInt = ssa.Int16ToAuxInt(^c)
6458 return true
6459 }
6460
6461
6462 for {
6463 if v_0.Op != ssaop.OpAdd16 {
6464 break
6465 }
6466 _ = v_0.Args[1]
6467 v_0_0 := v_0.Args[0]
6468 v_0_1 := v_0.Args[1]
6469 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
6470 if v_0_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0_0.AuxInt) != -1 {
6471 continue
6472 }
6473 x := v_0_1
6474 v.Reset(ssaop.OpNeg16)
6475 v.AddArg(x)
6476 return true
6477 }
6478 break
6479 }
6480 return false
6481 }
6482 func rewriteValue_OpCom32(v *ssa.Value) bool {
6483 v_0 := v.Args[0]
6484
6485
6486 for {
6487 if v_0.Op != ssaop.OpCom32 {
6488 break
6489 }
6490 x := v_0.Args[0]
6491 v.CopyOf(x)
6492 return true
6493 }
6494
6495
6496 for {
6497 if v_0.Op != ssaop.OpConst32 {
6498 break
6499 }
6500 c := ssa.AuxIntToInt32(v_0.AuxInt)
6501 v.Reset(ssaop.OpConst32)
6502 v.AuxInt = ssa.Int32ToAuxInt(^c)
6503 return true
6504 }
6505
6506
6507 for {
6508 if v_0.Op != ssaop.OpAdd32 {
6509 break
6510 }
6511 _ = v_0.Args[1]
6512 v_0_0 := v_0.Args[0]
6513 v_0_1 := v_0.Args[1]
6514 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
6515 if v_0_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0_0.AuxInt) != -1 {
6516 continue
6517 }
6518 x := v_0_1
6519 v.Reset(ssaop.OpNeg32)
6520 v.AddArg(x)
6521 return true
6522 }
6523 break
6524 }
6525 return false
6526 }
6527 func rewriteValue_OpCom64(v *ssa.Value) bool {
6528 v_0 := v.Args[0]
6529
6530
6531 for {
6532 if v_0.Op != ssaop.OpCom64 {
6533 break
6534 }
6535 x := v_0.Args[0]
6536 v.CopyOf(x)
6537 return true
6538 }
6539
6540
6541 for {
6542 if v_0.Op != ssaop.OpConst64 {
6543 break
6544 }
6545 c := ssa.AuxIntToInt64(v_0.AuxInt)
6546 v.Reset(ssaop.OpConst64)
6547 v.AuxInt = ssa.Int64ToAuxInt(^c)
6548 return true
6549 }
6550
6551
6552 for {
6553 if v_0.Op != ssaop.OpAdd64 {
6554 break
6555 }
6556 _ = v_0.Args[1]
6557 v_0_0 := v_0.Args[0]
6558 v_0_1 := v_0.Args[1]
6559 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
6560 if v_0_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_0.AuxInt) != -1 {
6561 continue
6562 }
6563 x := v_0_1
6564 v.Reset(ssaop.OpNeg64)
6565 v.AddArg(x)
6566 return true
6567 }
6568 break
6569 }
6570 return false
6571 }
6572 func rewriteValue_OpCom8(v *ssa.Value) bool {
6573 v_0 := v.Args[0]
6574
6575
6576 for {
6577 if v_0.Op != ssaop.OpCom8 {
6578 break
6579 }
6580 x := v_0.Args[0]
6581 v.CopyOf(x)
6582 return true
6583 }
6584
6585
6586 for {
6587 if v_0.Op != ssaop.OpConst8 {
6588 break
6589 }
6590 c := ssa.AuxIntToInt8(v_0.AuxInt)
6591 v.Reset(ssaop.OpConst8)
6592 v.AuxInt = ssa.Int8ToAuxInt(^c)
6593 return true
6594 }
6595
6596
6597 for {
6598 if v_0.Op != ssaop.OpAdd8 {
6599 break
6600 }
6601 _ = v_0.Args[1]
6602 v_0_0 := v_0.Args[0]
6603 v_0_1 := v_0.Args[1]
6604 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
6605 if v_0_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0_0.AuxInt) != -1 {
6606 continue
6607 }
6608 x := v_0_1
6609 v.Reset(ssaop.OpNeg8)
6610 v.AddArg(x)
6611 return true
6612 }
6613 break
6614 }
6615 return false
6616 }
6617 func rewriteValue_OpCondSelect(v *ssa.Value) bool {
6618 v_2 := v.Args[2]
6619 v_1 := v.Args[1]
6620 v_0 := v.Args[0]
6621 b := v.Block
6622 config := b.Func.Config
6623
6624
6625 for {
6626 x := v_0
6627 if v_2.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_2.AuxInt) != true {
6628 break
6629 }
6630 v.CopyOf(x)
6631 return true
6632 }
6633
6634
6635 for {
6636 y := v_1
6637 if v_2.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_2.AuxInt) != false {
6638 break
6639 }
6640 v.CopyOf(y)
6641 return true
6642 }
6643
6644
6645 for {
6646 x := v_0
6647 if x != v_1 {
6648 break
6649 }
6650 v.CopyOf(x)
6651 return true
6652 }
6653
6654
6655
6656 for {
6657 op1 := v_0
6658 if op1.Op != ssaop.OpAdd8 {
6659 break
6660 }
6661 t := op1.Type
6662 _ = op1.Args[1]
6663 op1_0 := op1.Args[0]
6664 op1_1 := op1.Args[1]
6665 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
6666 x := op1_0
6667 c := op1_1
6668 if c.Op != ssaop.OpConst8 || x != v_1 {
6669 continue
6670 }
6671 bool := v_2
6672 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
6673 continue
6674 }
6675 v.Reset(ssaop.OpAdd8)
6676 v0 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
6677 v1 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, t)
6678 v1.AddArg(bool)
6679 v0.AddArg2(c, v1)
6680 v.AddArg2(x, v0)
6681 return true
6682 }
6683 break
6684 }
6685
6686
6687
6688 for {
6689 op1 := v_0
6690 if op1.Op != ssaop.OpAdd64 {
6691 break
6692 }
6693 t := op1.Type
6694 _ = op1.Args[1]
6695 op1_0 := op1.Args[0]
6696 op1_1 := op1.Args[1]
6697 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
6698 x := op1_0
6699 c := op1_1
6700 if c.Op != ssaop.OpConst64 || x != v_1 {
6701 continue
6702 }
6703 bool := v_2
6704 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
6705 continue
6706 }
6707 v.Reset(ssaop.OpAdd64)
6708 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
6709 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, t)
6710 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
6711 v2.AddArg(bool)
6712 v1.AddArg(v2)
6713 v0.AddArg2(c, v1)
6714 v.AddArg2(x, v0)
6715 return true
6716 }
6717 break
6718 }
6719
6720
6721
6722 for {
6723 op1 := v_0
6724 if op1.Op != ssaop.OpAdd32 {
6725 break
6726 }
6727 t := op1.Type
6728 _ = op1.Args[1]
6729 op1_0 := op1.Args[0]
6730 op1_1 := op1.Args[1]
6731 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
6732 x := op1_0
6733 c := op1_1
6734 if c.Op != ssaop.OpConst32 || x != v_1 {
6735 continue
6736 }
6737 bool := v_2
6738 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
6739 continue
6740 }
6741 v.Reset(ssaop.OpAdd32)
6742 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
6743 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, t)
6744 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
6745 v2.AddArg(bool)
6746 v1.AddArg(v2)
6747 v0.AddArg2(c, v1)
6748 v.AddArg2(x, v0)
6749 return true
6750 }
6751 break
6752 }
6753
6754
6755
6756 for {
6757 op1 := v_0
6758 if op1.Op != ssaop.OpAdd16 {
6759 break
6760 }
6761 t := op1.Type
6762 _ = op1.Args[1]
6763 op1_0 := op1.Args[0]
6764 op1_1 := op1.Args[1]
6765 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
6766 x := op1_0
6767 c := op1_1
6768 if c.Op != ssaop.OpConst16 || x != v_1 {
6769 continue
6770 }
6771 bool := v_2
6772 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
6773 continue
6774 }
6775 v.Reset(ssaop.OpAdd16)
6776 v0 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
6777 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to16, t)
6778 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
6779 v2.AddArg(bool)
6780 v1.AddArg(v2)
6781 v0.AddArg2(c, v1)
6782 v.AddArg2(x, v0)
6783 return true
6784 }
6785 break
6786 }
6787
6788
6789
6790 for {
6791 x := v_0
6792 op1 := v_1
6793 if op1.Op != ssaop.OpAdd8 {
6794 break
6795 }
6796 t := op1.Type
6797 _ = op1.Args[1]
6798 op1_0 := op1.Args[0]
6799 op1_1 := op1.Args[1]
6800 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
6801 if x != op1_0 {
6802 continue
6803 }
6804 c := op1_1
6805 if c.Op != ssaop.OpConst8 {
6806 continue
6807 }
6808 bool := v_2
6809 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
6810 continue
6811 }
6812 v.Reset(ssaop.OpAdd8)
6813 v0 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
6814 v1 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, t)
6815 v2 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
6816 v2.AddArg(bool)
6817 v1.AddArg(v2)
6818 v0.AddArg2(c, v1)
6819 v.AddArg2(x, v0)
6820 return true
6821 }
6822 break
6823 }
6824
6825
6826
6827 for {
6828 x := v_0
6829 op1 := v_1
6830 if op1.Op != ssaop.OpAdd64 {
6831 break
6832 }
6833 t := op1.Type
6834 _ = op1.Args[1]
6835 op1_0 := op1.Args[0]
6836 op1_1 := op1.Args[1]
6837 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
6838 if x != op1_0 {
6839 continue
6840 }
6841 c := op1_1
6842 if c.Op != ssaop.OpConst64 {
6843 continue
6844 }
6845 bool := v_2
6846 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
6847 continue
6848 }
6849 v.Reset(ssaop.OpAdd64)
6850 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
6851 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, t)
6852 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
6853 v3 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
6854 v3.AddArg(bool)
6855 v2.AddArg(v3)
6856 v1.AddArg(v2)
6857 v0.AddArg2(c, v1)
6858 v.AddArg2(x, v0)
6859 return true
6860 }
6861 break
6862 }
6863
6864
6865
6866 for {
6867 x := v_0
6868 op1 := v_1
6869 if op1.Op != ssaop.OpAdd32 {
6870 break
6871 }
6872 t := op1.Type
6873 _ = op1.Args[1]
6874 op1_0 := op1.Args[0]
6875 op1_1 := op1.Args[1]
6876 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
6877 if x != op1_0 {
6878 continue
6879 }
6880 c := op1_1
6881 if c.Op != ssaop.OpConst32 {
6882 continue
6883 }
6884 bool := v_2
6885 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
6886 continue
6887 }
6888 v.Reset(ssaop.OpAdd32)
6889 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
6890 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, t)
6891 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
6892 v3 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
6893 v3.AddArg(bool)
6894 v2.AddArg(v3)
6895 v1.AddArg(v2)
6896 v0.AddArg2(c, v1)
6897 v.AddArg2(x, v0)
6898 return true
6899 }
6900 break
6901 }
6902
6903
6904
6905 for {
6906 x := v_0
6907 op1 := v_1
6908 if op1.Op != ssaop.OpAdd16 {
6909 break
6910 }
6911 t := op1.Type
6912 _ = op1.Args[1]
6913 op1_0 := op1.Args[0]
6914 op1_1 := op1.Args[1]
6915 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
6916 if x != op1_0 {
6917 continue
6918 }
6919 c := op1_1
6920 if c.Op != ssaop.OpConst16 {
6921 continue
6922 }
6923 bool := v_2
6924 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
6925 continue
6926 }
6927 v.Reset(ssaop.OpAdd16)
6928 v0 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
6929 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to16, t)
6930 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
6931 v3 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
6932 v3.AddArg(bool)
6933 v2.AddArg(v3)
6934 v1.AddArg(v2)
6935 v0.AddArg2(c, v1)
6936 v.AddArg2(x, v0)
6937 return true
6938 }
6939 break
6940 }
6941
6942
6943
6944 for {
6945 op1 := v_0
6946 if op1.Op != ssaop.OpAdd8 {
6947 break
6948 }
6949 t := op1.Type
6950 _ = op1.Args[1]
6951 op1_0 := op1.Args[0]
6952 op1_1 := op1.Args[1]
6953 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
6954 x := op1_0
6955 c := op1_1
6956 if c.Op != ssaop.OpConst8 {
6957 continue
6958 }
6959 consT := ssa.AuxIntToInt8(c.AuxInt)
6960 if x != v_1 {
6961 continue
6962 }
6963 bool := v_2
6964 if !(!rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt) && rewriteCondSelectIntoMath(config, addToSub(op1.Op), -c.AuxInt)) {
6965 continue
6966 }
6967 v.Reset(ssaop.OpSub8)
6968 v0 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
6969 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
6970 v1.AuxInt = ssa.Int8ToAuxInt(-consT)
6971 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, t)
6972 v2.AddArg(bool)
6973 v0.AddArg2(v1, v2)
6974 v.AddArg2(x, v0)
6975 return true
6976 }
6977 break
6978 }
6979
6980
6981
6982 for {
6983 op1 := v_0
6984 if op1.Op != ssaop.OpAdd64 {
6985 break
6986 }
6987 t := op1.Type
6988 _ = op1.Args[1]
6989 op1_0 := op1.Args[0]
6990 op1_1 := op1.Args[1]
6991 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
6992 x := op1_0
6993 c := op1_1
6994 if c.Op != ssaop.OpConst64 {
6995 continue
6996 }
6997 consT := ssa.AuxIntToInt64(c.AuxInt)
6998 if x != v_1 {
6999 continue
7000 }
7001 bool := v_2
7002 if !(!rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt) && rewriteCondSelectIntoMath(config, addToSub(op1.Op), -c.AuxInt)) {
7003 continue
7004 }
7005 v.Reset(ssaop.OpSub64)
7006 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
7007 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
7008 v1.AuxInt = ssa.Int64ToAuxInt(-consT)
7009 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, t)
7010 v3 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7011 v3.AddArg(bool)
7012 v2.AddArg(v3)
7013 v0.AddArg2(v1, v2)
7014 v.AddArg2(x, v0)
7015 return true
7016 }
7017 break
7018 }
7019
7020
7021
7022 for {
7023 op1 := v_0
7024 if op1.Op != ssaop.OpAdd32 {
7025 break
7026 }
7027 t := op1.Type
7028 _ = op1.Args[1]
7029 op1_0 := op1.Args[0]
7030 op1_1 := op1.Args[1]
7031 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
7032 x := op1_0
7033 c := op1_1
7034 if c.Op != ssaop.OpConst32 {
7035 continue
7036 }
7037 consT := ssa.AuxIntToInt32(c.AuxInt)
7038 if x != v_1 {
7039 continue
7040 }
7041 bool := v_2
7042 if !(!rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt) && rewriteCondSelectIntoMath(config, addToSub(op1.Op), -c.AuxInt)) {
7043 continue
7044 }
7045 v.Reset(ssaop.OpSub32)
7046 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
7047 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
7048 v1.AuxInt = ssa.Int32ToAuxInt(-consT)
7049 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, t)
7050 v3 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7051 v3.AddArg(bool)
7052 v2.AddArg(v3)
7053 v0.AddArg2(v1, v2)
7054 v.AddArg2(x, v0)
7055 return true
7056 }
7057 break
7058 }
7059
7060
7061
7062 for {
7063 op1 := v_0
7064 if op1.Op != ssaop.OpAdd16 {
7065 break
7066 }
7067 t := op1.Type
7068 _ = op1.Args[1]
7069 op1_0 := op1.Args[0]
7070 op1_1 := op1.Args[1]
7071 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
7072 x := op1_0
7073 c := op1_1
7074 if c.Op != ssaop.OpConst16 {
7075 continue
7076 }
7077 consT := ssa.AuxIntToInt16(c.AuxInt)
7078 if x != v_1 {
7079 continue
7080 }
7081 bool := v_2
7082 if !(!rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt) && rewriteCondSelectIntoMath(config, addToSub(op1.Op), -c.AuxInt)) {
7083 continue
7084 }
7085 v.Reset(ssaop.OpSub16)
7086 v0 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
7087 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
7088 v1.AuxInt = ssa.Int16ToAuxInt(-consT)
7089 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to16, t)
7090 v3 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7091 v3.AddArg(bool)
7092 v2.AddArg(v3)
7093 v0.AddArg2(v1, v2)
7094 v.AddArg2(x, v0)
7095 return true
7096 }
7097 break
7098 }
7099
7100
7101
7102 for {
7103 x := v_0
7104 op1 := v_1
7105 if op1.Op != ssaop.OpAdd8 {
7106 break
7107 }
7108 t := op1.Type
7109 _ = op1.Args[1]
7110 op1_0 := op1.Args[0]
7111 op1_1 := op1.Args[1]
7112 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
7113 if x != op1_0 {
7114 continue
7115 }
7116 c := op1_1
7117 if c.Op != ssaop.OpConst8 {
7118 continue
7119 }
7120 consT := ssa.AuxIntToInt8(c.AuxInt)
7121 bool := v_2
7122 if !(!rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt) && rewriteCondSelectIntoMath(config, addToSub(op1.Op), -c.AuxInt)) {
7123 continue
7124 }
7125 v.Reset(ssaop.OpSub8)
7126 v0 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
7127 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
7128 v1.AuxInt = ssa.Int8ToAuxInt(-consT)
7129 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, t)
7130 v3 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7131 v3.AddArg(bool)
7132 v2.AddArg(v3)
7133 v0.AddArg2(v1, v2)
7134 v.AddArg2(x, v0)
7135 return true
7136 }
7137 break
7138 }
7139
7140
7141
7142 for {
7143 x := v_0
7144 op1 := v_1
7145 if op1.Op != ssaop.OpAdd64 {
7146 break
7147 }
7148 t := op1.Type
7149 _ = op1.Args[1]
7150 op1_0 := op1.Args[0]
7151 op1_1 := op1.Args[1]
7152 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
7153 if x != op1_0 {
7154 continue
7155 }
7156 c := op1_1
7157 if c.Op != ssaop.OpConst64 {
7158 continue
7159 }
7160 consT := ssa.AuxIntToInt64(c.AuxInt)
7161 bool := v_2
7162 if !(!rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt) && rewriteCondSelectIntoMath(config, addToSub(op1.Op), -c.AuxInt)) {
7163 continue
7164 }
7165 v.Reset(ssaop.OpSub64)
7166 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
7167 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
7168 v1.AuxInt = ssa.Int64ToAuxInt(-consT)
7169 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, t)
7170 v3 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7171 v4 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7172 v4.AddArg(bool)
7173 v3.AddArg(v4)
7174 v2.AddArg(v3)
7175 v0.AddArg2(v1, v2)
7176 v.AddArg2(x, v0)
7177 return true
7178 }
7179 break
7180 }
7181
7182
7183
7184 for {
7185 x := v_0
7186 op1 := v_1
7187 if op1.Op != ssaop.OpAdd32 {
7188 break
7189 }
7190 t := op1.Type
7191 _ = op1.Args[1]
7192 op1_0 := op1.Args[0]
7193 op1_1 := op1.Args[1]
7194 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
7195 if x != op1_0 {
7196 continue
7197 }
7198 c := op1_1
7199 if c.Op != ssaop.OpConst32 {
7200 continue
7201 }
7202 consT := ssa.AuxIntToInt32(c.AuxInt)
7203 bool := v_2
7204 if !(!rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt) && rewriteCondSelectIntoMath(config, addToSub(op1.Op), -c.AuxInt)) {
7205 continue
7206 }
7207 v.Reset(ssaop.OpSub32)
7208 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
7209 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
7210 v1.AuxInt = ssa.Int32ToAuxInt(-consT)
7211 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, t)
7212 v3 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7213 v4 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7214 v4.AddArg(bool)
7215 v3.AddArg(v4)
7216 v2.AddArg(v3)
7217 v0.AddArg2(v1, v2)
7218 v.AddArg2(x, v0)
7219 return true
7220 }
7221 break
7222 }
7223
7224
7225
7226 for {
7227 x := v_0
7228 op1 := v_1
7229 if op1.Op != ssaop.OpAdd16 {
7230 break
7231 }
7232 t := op1.Type
7233 _ = op1.Args[1]
7234 op1_0 := op1.Args[0]
7235 op1_1 := op1.Args[1]
7236 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
7237 if x != op1_0 {
7238 continue
7239 }
7240 c := op1_1
7241 if c.Op != ssaop.OpConst16 {
7242 continue
7243 }
7244 consT := ssa.AuxIntToInt16(c.AuxInt)
7245 bool := v_2
7246 if !(!rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt) && rewriteCondSelectIntoMath(config, addToSub(op1.Op), -c.AuxInt)) {
7247 continue
7248 }
7249 v.Reset(ssaop.OpSub16)
7250 v0 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
7251 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
7252 v1.AuxInt = ssa.Int16ToAuxInt(-consT)
7253 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to16, t)
7254 v3 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7255 v4 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7256 v4.AddArg(bool)
7257 v3.AddArg(v4)
7258 v2.AddArg(v3)
7259 v0.AddArg2(v1, v2)
7260 v.AddArg2(x, v0)
7261 return true
7262 }
7263 break
7264 }
7265
7266
7267 for {
7268 if v_0.Op != ssaop.OpLsh64x64 {
7269 break
7270 }
7271 _ = v_0.Args[1]
7272 x := v_0.Args[0]
7273 v_0_1 := v_0.Args[1]
7274 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 1 || x != v_1 {
7275 break
7276 }
7277 bool := v_2
7278 v.Reset(ssaop.OpLsh64x8)
7279 v.AuxInt = ssa.BoolToAuxInt(true)
7280 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7281 v0.AddArg(bool)
7282 v.AddArg2(x, v0)
7283 return true
7284 }
7285
7286
7287 for {
7288 if v_0.Op != ssaop.OpLsh32x64 {
7289 break
7290 }
7291 _ = v_0.Args[1]
7292 x := v_0.Args[0]
7293 v_0_1 := v_0.Args[1]
7294 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 1 || x != v_1 {
7295 break
7296 }
7297 bool := v_2
7298 v.Reset(ssaop.OpLsh32x8)
7299 v.AuxInt = ssa.BoolToAuxInt(true)
7300 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7301 v0.AddArg(bool)
7302 v.AddArg2(x, v0)
7303 return true
7304 }
7305
7306
7307 for {
7308 if v_0.Op != ssaop.OpLsh16x64 {
7309 break
7310 }
7311 _ = v_0.Args[1]
7312 x := v_0.Args[0]
7313 v_0_1 := v_0.Args[1]
7314 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 1 || x != v_1 {
7315 break
7316 }
7317 bool := v_2
7318 v.Reset(ssaop.OpLsh16x8)
7319 v.AuxInt = ssa.BoolToAuxInt(true)
7320 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7321 v0.AddArg(bool)
7322 v.AddArg2(x, v0)
7323 return true
7324 }
7325
7326
7327 for {
7328 if v_0.Op != ssaop.OpLsh8x64 {
7329 break
7330 }
7331 _ = v_0.Args[1]
7332 x := v_0.Args[0]
7333 v_0_1 := v_0.Args[1]
7334 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 1 || x != v_1 {
7335 break
7336 }
7337 bool := v_2
7338 v.Reset(ssaop.OpLsh8x8)
7339 v.AuxInt = ssa.BoolToAuxInt(true)
7340 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7341 v0.AddArg(bool)
7342 v.AddArg2(x, v0)
7343 return true
7344 }
7345
7346
7347 for {
7348 x := v_0
7349 if v_1.Op != ssaop.OpLsh64x64 {
7350 break
7351 }
7352 _ = v_1.Args[1]
7353 if x != v_1.Args[0] {
7354 break
7355 }
7356 v_1_1 := v_1.Args[1]
7357 if v_1_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1_1.AuxInt) != 1 {
7358 break
7359 }
7360 bool := v_2
7361 v.Reset(ssaop.OpLsh64x8)
7362 v.AuxInt = ssa.BoolToAuxInt(true)
7363 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7364 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7365 v1.AddArg(bool)
7366 v0.AddArg(v1)
7367 v.AddArg2(x, v0)
7368 return true
7369 }
7370
7371
7372 for {
7373 x := v_0
7374 if v_1.Op != ssaop.OpLsh32x64 {
7375 break
7376 }
7377 _ = v_1.Args[1]
7378 if x != v_1.Args[0] {
7379 break
7380 }
7381 v_1_1 := v_1.Args[1]
7382 if v_1_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1_1.AuxInt) != 1 {
7383 break
7384 }
7385 bool := v_2
7386 v.Reset(ssaop.OpLsh32x8)
7387 v.AuxInt = ssa.BoolToAuxInt(true)
7388 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7389 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7390 v1.AddArg(bool)
7391 v0.AddArg(v1)
7392 v.AddArg2(x, v0)
7393 return true
7394 }
7395
7396
7397 for {
7398 x := v_0
7399 if v_1.Op != ssaop.OpLsh16x64 {
7400 break
7401 }
7402 _ = v_1.Args[1]
7403 if x != v_1.Args[0] {
7404 break
7405 }
7406 v_1_1 := v_1.Args[1]
7407 if v_1_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1_1.AuxInt) != 1 {
7408 break
7409 }
7410 bool := v_2
7411 v.Reset(ssaop.OpLsh16x8)
7412 v.AuxInt = ssa.BoolToAuxInt(true)
7413 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7414 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7415 v1.AddArg(bool)
7416 v0.AddArg(v1)
7417 v.AddArg2(x, v0)
7418 return true
7419 }
7420
7421
7422 for {
7423 x := v_0
7424 if v_1.Op != ssaop.OpLsh8x64 {
7425 break
7426 }
7427 _ = v_1.Args[1]
7428 if x != v_1.Args[0] {
7429 break
7430 }
7431 v_1_1 := v_1.Args[1]
7432 if v_1_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1_1.AuxInt) != 1 {
7433 break
7434 }
7435 bool := v_2
7436 v.Reset(ssaop.OpLsh8x8)
7437 v.AuxInt = ssa.BoolToAuxInt(true)
7438 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7439 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7440 v1.AddArg(bool)
7441 v0.AddArg(v1)
7442 v.AddArg2(x, v0)
7443 return true
7444 }
7445
7446
7447 for {
7448 if v_0.Op != ssaop.OpRsh64x64 {
7449 break
7450 }
7451 _ = v_0.Args[1]
7452 x := v_0.Args[0]
7453 v_0_1 := v_0.Args[1]
7454 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 1 || x != v_1 {
7455 break
7456 }
7457 bool := v_2
7458 v.Reset(ssaop.OpRsh64x8)
7459 v.AuxInt = ssa.BoolToAuxInt(true)
7460 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7461 v0.AddArg(bool)
7462 v.AddArg2(x, v0)
7463 return true
7464 }
7465
7466
7467 for {
7468 if v_0.Op != ssaop.OpRsh32x64 {
7469 break
7470 }
7471 _ = v_0.Args[1]
7472 x := v_0.Args[0]
7473 v_0_1 := v_0.Args[1]
7474 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 1 || x != v_1 {
7475 break
7476 }
7477 bool := v_2
7478 v.Reset(ssaop.OpRsh32x8)
7479 v.AuxInt = ssa.BoolToAuxInt(true)
7480 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7481 v0.AddArg(bool)
7482 v.AddArg2(x, v0)
7483 return true
7484 }
7485
7486
7487 for {
7488 if v_0.Op != ssaop.OpRsh16x64 {
7489 break
7490 }
7491 _ = v_0.Args[1]
7492 x := v_0.Args[0]
7493 v_0_1 := v_0.Args[1]
7494 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 1 || x != v_1 {
7495 break
7496 }
7497 bool := v_2
7498 v.Reset(ssaop.OpRsh16x8)
7499 v.AuxInt = ssa.BoolToAuxInt(true)
7500 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7501 v0.AddArg(bool)
7502 v.AddArg2(x, v0)
7503 return true
7504 }
7505
7506
7507 for {
7508 if v_0.Op != ssaop.OpRsh8x64 {
7509 break
7510 }
7511 _ = v_0.Args[1]
7512 x := v_0.Args[0]
7513 v_0_1 := v_0.Args[1]
7514 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 1 || x != v_1 {
7515 break
7516 }
7517 bool := v_2
7518 v.Reset(ssaop.OpRsh8x8)
7519 v.AuxInt = ssa.BoolToAuxInt(true)
7520 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7521 v0.AddArg(bool)
7522 v.AddArg2(x, v0)
7523 return true
7524 }
7525
7526
7527 for {
7528 if v_0.Op != ssaop.OpRsh64Ux64 {
7529 break
7530 }
7531 _ = v_0.Args[1]
7532 x := v_0.Args[0]
7533 v_0_1 := v_0.Args[1]
7534 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 1 || x != v_1 {
7535 break
7536 }
7537 bool := v_2
7538 v.Reset(ssaop.OpRsh64Ux8)
7539 v.AuxInt = ssa.BoolToAuxInt(true)
7540 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7541 v0.AddArg(bool)
7542 v.AddArg2(x, v0)
7543 return true
7544 }
7545
7546
7547 for {
7548 if v_0.Op != ssaop.OpRsh32Ux64 {
7549 break
7550 }
7551 _ = v_0.Args[1]
7552 x := v_0.Args[0]
7553 v_0_1 := v_0.Args[1]
7554 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 1 || x != v_1 {
7555 break
7556 }
7557 bool := v_2
7558 v.Reset(ssaop.OpRsh32Ux8)
7559 v.AuxInt = ssa.BoolToAuxInt(true)
7560 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7561 v0.AddArg(bool)
7562 v.AddArg2(x, v0)
7563 return true
7564 }
7565
7566
7567 for {
7568 if v_0.Op != ssaop.OpRsh16Ux64 {
7569 break
7570 }
7571 _ = v_0.Args[1]
7572 x := v_0.Args[0]
7573 v_0_1 := v_0.Args[1]
7574 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 1 || x != v_1 {
7575 break
7576 }
7577 bool := v_2
7578 v.Reset(ssaop.OpRsh16Ux8)
7579 v.AuxInt = ssa.BoolToAuxInt(true)
7580 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7581 v0.AddArg(bool)
7582 v.AddArg2(x, v0)
7583 return true
7584 }
7585
7586
7587 for {
7588 if v_0.Op != ssaop.OpRsh8Ux64 {
7589 break
7590 }
7591 _ = v_0.Args[1]
7592 x := v_0.Args[0]
7593 v_0_1 := v_0.Args[1]
7594 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 1 || x != v_1 {
7595 break
7596 }
7597 bool := v_2
7598 v.Reset(ssaop.OpRsh8Ux8)
7599 v.AuxInt = ssa.BoolToAuxInt(true)
7600 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7601 v0.AddArg(bool)
7602 v.AddArg2(x, v0)
7603 return true
7604 }
7605
7606
7607 for {
7608 x := v_0
7609 if v_1.Op != ssaop.OpRsh64x64 {
7610 break
7611 }
7612 _ = v_1.Args[1]
7613 if x != v_1.Args[0] {
7614 break
7615 }
7616 v_1_1 := v_1.Args[1]
7617 if v_1_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1_1.AuxInt) != 1 {
7618 break
7619 }
7620 bool := v_2
7621 v.Reset(ssaop.OpRsh64x8)
7622 v.AuxInt = ssa.BoolToAuxInt(true)
7623 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7624 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7625 v1.AddArg(bool)
7626 v0.AddArg(v1)
7627 v.AddArg2(x, v0)
7628 return true
7629 }
7630
7631
7632 for {
7633 x := v_0
7634 if v_1.Op != ssaop.OpRsh32x64 {
7635 break
7636 }
7637 _ = v_1.Args[1]
7638 if x != v_1.Args[0] {
7639 break
7640 }
7641 v_1_1 := v_1.Args[1]
7642 if v_1_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1_1.AuxInt) != 1 {
7643 break
7644 }
7645 bool := v_2
7646 v.Reset(ssaop.OpRsh32x8)
7647 v.AuxInt = ssa.BoolToAuxInt(true)
7648 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7649 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7650 v1.AddArg(bool)
7651 v0.AddArg(v1)
7652 v.AddArg2(x, v0)
7653 return true
7654 }
7655
7656
7657 for {
7658 x := v_0
7659 if v_1.Op != ssaop.OpRsh16x64 {
7660 break
7661 }
7662 _ = v_1.Args[1]
7663 if x != v_1.Args[0] {
7664 break
7665 }
7666 v_1_1 := v_1.Args[1]
7667 if v_1_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1_1.AuxInt) != 1 {
7668 break
7669 }
7670 bool := v_2
7671 v.Reset(ssaop.OpRsh16x8)
7672 v.AuxInt = ssa.BoolToAuxInt(true)
7673 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7674 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7675 v1.AddArg(bool)
7676 v0.AddArg(v1)
7677 v.AddArg2(x, v0)
7678 return true
7679 }
7680
7681
7682 for {
7683 x := v_0
7684 if v_1.Op != ssaop.OpRsh8x64 {
7685 break
7686 }
7687 _ = v_1.Args[1]
7688 if x != v_1.Args[0] {
7689 break
7690 }
7691 v_1_1 := v_1.Args[1]
7692 if v_1_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1_1.AuxInt) != 1 {
7693 break
7694 }
7695 bool := v_2
7696 v.Reset(ssaop.OpRsh8x8)
7697 v.AuxInt = ssa.BoolToAuxInt(true)
7698 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7699 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7700 v1.AddArg(bool)
7701 v0.AddArg(v1)
7702 v.AddArg2(x, v0)
7703 return true
7704 }
7705
7706
7707 for {
7708 x := v_0
7709 if v_1.Op != ssaop.OpRsh64Ux64 {
7710 break
7711 }
7712 _ = v_1.Args[1]
7713 if x != v_1.Args[0] {
7714 break
7715 }
7716 v_1_1 := v_1.Args[1]
7717 if v_1_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1_1.AuxInt) != 1 {
7718 break
7719 }
7720 bool := v_2
7721 v.Reset(ssaop.OpRsh64Ux8)
7722 v.AuxInt = ssa.BoolToAuxInt(true)
7723 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7724 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7725 v1.AddArg(bool)
7726 v0.AddArg(v1)
7727 v.AddArg2(x, v0)
7728 return true
7729 }
7730
7731
7732 for {
7733 x := v_0
7734 if v_1.Op != ssaop.OpRsh32Ux64 {
7735 break
7736 }
7737 _ = v_1.Args[1]
7738 if x != v_1.Args[0] {
7739 break
7740 }
7741 v_1_1 := v_1.Args[1]
7742 if v_1_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1_1.AuxInt) != 1 {
7743 break
7744 }
7745 bool := v_2
7746 v.Reset(ssaop.OpRsh32Ux8)
7747 v.AuxInt = ssa.BoolToAuxInt(true)
7748 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7749 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7750 v1.AddArg(bool)
7751 v0.AddArg(v1)
7752 v.AddArg2(x, v0)
7753 return true
7754 }
7755
7756
7757 for {
7758 x := v_0
7759 if v_1.Op != ssaop.OpRsh16Ux64 {
7760 break
7761 }
7762 _ = v_1.Args[1]
7763 if x != v_1.Args[0] {
7764 break
7765 }
7766 v_1_1 := v_1.Args[1]
7767 if v_1_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1_1.AuxInt) != 1 {
7768 break
7769 }
7770 bool := v_2
7771 v.Reset(ssaop.OpRsh16Ux8)
7772 v.AuxInt = ssa.BoolToAuxInt(true)
7773 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7774 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7775 v1.AddArg(bool)
7776 v0.AddArg(v1)
7777 v.AddArg2(x, v0)
7778 return true
7779 }
7780
7781
7782 for {
7783 x := v_0
7784 if v_1.Op != ssaop.OpRsh8Ux64 {
7785 break
7786 }
7787 _ = v_1.Args[1]
7788 if x != v_1.Args[0] {
7789 break
7790 }
7791 v_1_1 := v_1.Args[1]
7792 if v_1_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1_1.AuxInt) != 1 {
7793 break
7794 }
7795 bool := v_2
7796 v.Reset(ssaop.OpRsh8Ux8)
7797 v.AuxInt = ssa.BoolToAuxInt(true)
7798 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7799 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7800 v1.AddArg(bool)
7801 v0.AddArg(v1)
7802 v.AddArg2(x, v0)
7803 return true
7804 }
7805
7806
7807
7808 for {
7809 op1 := v_0
7810 if op1.Op != ssaop.OpOr8 {
7811 break
7812 }
7813 t := op1.Type
7814 _ = op1.Args[1]
7815 op1_0 := op1.Args[0]
7816 op1_1 := op1.Args[1]
7817 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
7818 x := op1_0
7819 c := op1_1
7820 if c.Op != ssaop.OpConst8 || x != v_1 {
7821 continue
7822 }
7823 bool := v_2
7824 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
7825 continue
7826 }
7827 v.Reset(ssaop.OpOr8)
7828 v0 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
7829 v1 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, t)
7830 v1.AddArg(bool)
7831 v0.AddArg2(c, v1)
7832 v.AddArg2(x, v0)
7833 return true
7834 }
7835 break
7836 }
7837
7838
7839
7840 for {
7841 op1 := v_0
7842 if op1.Op != ssaop.OpOr64 {
7843 break
7844 }
7845 t := op1.Type
7846 _ = op1.Args[1]
7847 op1_0 := op1.Args[0]
7848 op1_1 := op1.Args[1]
7849 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
7850 x := op1_0
7851 c := op1_1
7852 if c.Op != ssaop.OpConst64 || x != v_1 {
7853 continue
7854 }
7855 bool := v_2
7856 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
7857 continue
7858 }
7859 v.Reset(ssaop.OpOr64)
7860 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
7861 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, t)
7862 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7863 v2.AddArg(bool)
7864 v1.AddArg(v2)
7865 v0.AddArg2(c, v1)
7866 v.AddArg2(x, v0)
7867 return true
7868 }
7869 break
7870 }
7871
7872
7873
7874 for {
7875 op1 := v_0
7876 if op1.Op != ssaop.OpOr32 {
7877 break
7878 }
7879 t := op1.Type
7880 _ = op1.Args[1]
7881 op1_0 := op1.Args[0]
7882 op1_1 := op1.Args[1]
7883 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
7884 x := op1_0
7885 c := op1_1
7886 if c.Op != ssaop.OpConst32 || x != v_1 {
7887 continue
7888 }
7889 bool := v_2
7890 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
7891 continue
7892 }
7893 v.Reset(ssaop.OpOr32)
7894 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
7895 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, t)
7896 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7897 v2.AddArg(bool)
7898 v1.AddArg(v2)
7899 v0.AddArg2(c, v1)
7900 v.AddArg2(x, v0)
7901 return true
7902 }
7903 break
7904 }
7905
7906
7907
7908 for {
7909 op1 := v_0
7910 if op1.Op != ssaop.OpOr16 {
7911 break
7912 }
7913 t := op1.Type
7914 _ = op1.Args[1]
7915 op1_0 := op1.Args[0]
7916 op1_1 := op1.Args[1]
7917 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
7918 x := op1_0
7919 c := op1_1
7920 if c.Op != ssaop.OpConst16 || x != v_1 {
7921 continue
7922 }
7923 bool := v_2
7924 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
7925 continue
7926 }
7927 v.Reset(ssaop.OpOr16)
7928 v0 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
7929 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to16, t)
7930 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
7931 v2.AddArg(bool)
7932 v1.AddArg(v2)
7933 v0.AddArg2(c, v1)
7934 v.AddArg2(x, v0)
7935 return true
7936 }
7937 break
7938 }
7939
7940
7941
7942 for {
7943 x := v_0
7944 op1 := v_1
7945 if op1.Op != ssaop.OpOr8 {
7946 break
7947 }
7948 t := op1.Type
7949 _ = op1.Args[1]
7950 op1_0 := op1.Args[0]
7951 op1_1 := op1.Args[1]
7952 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
7953 if x != op1_0 {
7954 continue
7955 }
7956 c := op1_1
7957 if c.Op != ssaop.OpConst8 {
7958 continue
7959 }
7960 bool := v_2
7961 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
7962 continue
7963 }
7964 v.Reset(ssaop.OpOr8)
7965 v0 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
7966 v1 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, t)
7967 v2 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
7968 v2.AddArg(bool)
7969 v1.AddArg(v2)
7970 v0.AddArg2(c, v1)
7971 v.AddArg2(x, v0)
7972 return true
7973 }
7974 break
7975 }
7976
7977
7978
7979 for {
7980 x := v_0
7981 op1 := v_1
7982 if op1.Op != ssaop.OpOr64 {
7983 break
7984 }
7985 t := op1.Type
7986 _ = op1.Args[1]
7987 op1_0 := op1.Args[0]
7988 op1_1 := op1.Args[1]
7989 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
7990 if x != op1_0 {
7991 continue
7992 }
7993 c := op1_1
7994 if c.Op != ssaop.OpConst64 {
7995 continue
7996 }
7997 bool := v_2
7998 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
7999 continue
8000 }
8001 v.Reset(ssaop.OpOr64)
8002 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
8003 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, t)
8004 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
8005 v3 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
8006 v3.AddArg(bool)
8007 v2.AddArg(v3)
8008 v1.AddArg(v2)
8009 v0.AddArg2(c, v1)
8010 v.AddArg2(x, v0)
8011 return true
8012 }
8013 break
8014 }
8015
8016
8017
8018 for {
8019 x := v_0
8020 op1 := v_1
8021 if op1.Op != ssaop.OpOr32 {
8022 break
8023 }
8024 t := op1.Type
8025 _ = op1.Args[1]
8026 op1_0 := op1.Args[0]
8027 op1_1 := op1.Args[1]
8028 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
8029 if x != op1_0 {
8030 continue
8031 }
8032 c := op1_1
8033 if c.Op != ssaop.OpConst32 {
8034 continue
8035 }
8036 bool := v_2
8037 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
8038 continue
8039 }
8040 v.Reset(ssaop.OpOr32)
8041 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
8042 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, t)
8043 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
8044 v3 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
8045 v3.AddArg(bool)
8046 v2.AddArg(v3)
8047 v1.AddArg(v2)
8048 v0.AddArg2(c, v1)
8049 v.AddArg2(x, v0)
8050 return true
8051 }
8052 break
8053 }
8054
8055
8056
8057 for {
8058 x := v_0
8059 op1 := v_1
8060 if op1.Op != ssaop.OpOr16 {
8061 break
8062 }
8063 t := op1.Type
8064 _ = op1.Args[1]
8065 op1_0 := op1.Args[0]
8066 op1_1 := op1.Args[1]
8067 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
8068 if x != op1_0 {
8069 continue
8070 }
8071 c := op1_1
8072 if c.Op != ssaop.OpConst16 {
8073 continue
8074 }
8075 bool := v_2
8076 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
8077 continue
8078 }
8079 v.Reset(ssaop.OpOr16)
8080 v0 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
8081 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to16, t)
8082 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
8083 v3 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
8084 v3.AddArg(bool)
8085 v2.AddArg(v3)
8086 v1.AddArg(v2)
8087 v0.AddArg2(c, v1)
8088 v.AddArg2(x, v0)
8089 return true
8090 }
8091 break
8092 }
8093
8094
8095
8096 for {
8097 op1 := v_0
8098 if op1.Op != ssaop.OpXor8 {
8099 break
8100 }
8101 t := op1.Type
8102 _ = op1.Args[1]
8103 op1_0 := op1.Args[0]
8104 op1_1 := op1.Args[1]
8105 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
8106 x := op1_0
8107 c := op1_1
8108 if c.Op != ssaop.OpConst8 || x != v_1 {
8109 continue
8110 }
8111 bool := v_2
8112 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
8113 continue
8114 }
8115 v.Reset(ssaop.OpXor8)
8116 v0 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
8117 v1 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, t)
8118 v1.AddArg(bool)
8119 v0.AddArg2(c, v1)
8120 v.AddArg2(x, v0)
8121 return true
8122 }
8123 break
8124 }
8125
8126
8127
8128 for {
8129 op1 := v_0
8130 if op1.Op != ssaop.OpXor64 {
8131 break
8132 }
8133 t := op1.Type
8134 _ = op1.Args[1]
8135 op1_0 := op1.Args[0]
8136 op1_1 := op1.Args[1]
8137 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
8138 x := op1_0
8139 c := op1_1
8140 if c.Op != ssaop.OpConst64 || x != v_1 {
8141 continue
8142 }
8143 bool := v_2
8144 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
8145 continue
8146 }
8147 v.Reset(ssaop.OpXor64)
8148 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
8149 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, t)
8150 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
8151 v2.AddArg(bool)
8152 v1.AddArg(v2)
8153 v0.AddArg2(c, v1)
8154 v.AddArg2(x, v0)
8155 return true
8156 }
8157 break
8158 }
8159
8160
8161
8162 for {
8163 op1 := v_0
8164 if op1.Op != ssaop.OpXor32 {
8165 break
8166 }
8167 t := op1.Type
8168 _ = op1.Args[1]
8169 op1_0 := op1.Args[0]
8170 op1_1 := op1.Args[1]
8171 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
8172 x := op1_0
8173 c := op1_1
8174 if c.Op != ssaop.OpConst32 || x != v_1 {
8175 continue
8176 }
8177 bool := v_2
8178 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
8179 continue
8180 }
8181 v.Reset(ssaop.OpXor32)
8182 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
8183 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, t)
8184 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
8185 v2.AddArg(bool)
8186 v1.AddArg(v2)
8187 v0.AddArg2(c, v1)
8188 v.AddArg2(x, v0)
8189 return true
8190 }
8191 break
8192 }
8193
8194
8195
8196 for {
8197 op1 := v_0
8198 if op1.Op != ssaop.OpXor16 {
8199 break
8200 }
8201 t := op1.Type
8202 _ = op1.Args[1]
8203 op1_0 := op1.Args[0]
8204 op1_1 := op1.Args[1]
8205 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
8206 x := op1_0
8207 c := op1_1
8208 if c.Op != ssaop.OpConst16 || x != v_1 {
8209 continue
8210 }
8211 bool := v_2
8212 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
8213 continue
8214 }
8215 v.Reset(ssaop.OpXor16)
8216 v0 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
8217 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to16, t)
8218 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
8219 v2.AddArg(bool)
8220 v1.AddArg(v2)
8221 v0.AddArg2(c, v1)
8222 v.AddArg2(x, v0)
8223 return true
8224 }
8225 break
8226 }
8227
8228
8229
8230 for {
8231 x := v_0
8232 op1 := v_1
8233 if op1.Op != ssaop.OpXor8 {
8234 break
8235 }
8236 t := op1.Type
8237 _ = op1.Args[1]
8238 op1_0 := op1.Args[0]
8239 op1_1 := op1.Args[1]
8240 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
8241 if x != op1_0 {
8242 continue
8243 }
8244 c := op1_1
8245 if c.Op != ssaop.OpConst8 {
8246 continue
8247 }
8248 bool := v_2
8249 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
8250 continue
8251 }
8252 v.Reset(ssaop.OpXor8)
8253 v0 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
8254 v1 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, t)
8255 v2 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
8256 v2.AddArg(bool)
8257 v1.AddArg(v2)
8258 v0.AddArg2(c, v1)
8259 v.AddArg2(x, v0)
8260 return true
8261 }
8262 break
8263 }
8264
8265
8266
8267 for {
8268 x := v_0
8269 op1 := v_1
8270 if op1.Op != ssaop.OpXor64 {
8271 break
8272 }
8273 t := op1.Type
8274 _ = op1.Args[1]
8275 op1_0 := op1.Args[0]
8276 op1_1 := op1.Args[1]
8277 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
8278 if x != op1_0 {
8279 continue
8280 }
8281 c := op1_1
8282 if c.Op != ssaop.OpConst64 {
8283 continue
8284 }
8285 bool := v_2
8286 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
8287 continue
8288 }
8289 v.Reset(ssaop.OpXor64)
8290 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
8291 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, t)
8292 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
8293 v3 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
8294 v3.AddArg(bool)
8295 v2.AddArg(v3)
8296 v1.AddArg(v2)
8297 v0.AddArg2(c, v1)
8298 v.AddArg2(x, v0)
8299 return true
8300 }
8301 break
8302 }
8303
8304
8305
8306 for {
8307 x := v_0
8308 op1 := v_1
8309 if op1.Op != ssaop.OpXor32 {
8310 break
8311 }
8312 t := op1.Type
8313 _ = op1.Args[1]
8314 op1_0 := op1.Args[0]
8315 op1_1 := op1.Args[1]
8316 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
8317 if x != op1_0 {
8318 continue
8319 }
8320 c := op1_1
8321 if c.Op != ssaop.OpConst32 {
8322 continue
8323 }
8324 bool := v_2
8325 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
8326 continue
8327 }
8328 v.Reset(ssaop.OpXor32)
8329 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
8330 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, t)
8331 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
8332 v3 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
8333 v3.AddArg(bool)
8334 v2.AddArg(v3)
8335 v1.AddArg(v2)
8336 v0.AddArg2(c, v1)
8337 v.AddArg2(x, v0)
8338 return true
8339 }
8340 break
8341 }
8342
8343
8344
8345 for {
8346 x := v_0
8347 op1 := v_1
8348 if op1.Op != ssaop.OpXor16 {
8349 break
8350 }
8351 t := op1.Type
8352 _ = op1.Args[1]
8353 op1_0 := op1.Args[0]
8354 op1_1 := op1.Args[1]
8355 for _i0 := 0; _i0 <= 1; _i0, op1_0, op1_1 = _i0+1, op1_1, op1_0 {
8356 if x != op1_0 {
8357 continue
8358 }
8359 c := op1_1
8360 if c.Op != ssaop.OpConst16 {
8361 continue
8362 }
8363 bool := v_2
8364 if !(rewriteCondSelectIntoMath(config, op1.Op, c.AuxInt)) {
8365 continue
8366 }
8367 v.Reset(ssaop.OpXor16)
8368 v0 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
8369 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to16, t)
8370 v2 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, types.Types[types.TUINT8])
8371 v3 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
8372 v3.AddArg(bool)
8373 v2.AddArg(v3)
8374 v1.AddArg(v2)
8375 v0.AddArg2(c, v1)
8376 v.AddArg2(x, v0)
8377 return true
8378 }
8379 break
8380 }
8381 return false
8382 }
8383 func rewriteValue_OpConstInterface(v *ssa.Value) bool {
8384 b := v.Block
8385 typ := &b.Func.Config.Types
8386
8387
8388 for {
8389 v.Reset(ssaop.OpIMake)
8390 v0 := b.NewValue0(v.Pos, ssaop.OpConstNil, typ.Uintptr)
8391 v1 := b.NewValue0(v.Pos, ssaop.OpConstNil, typ.BytePtr)
8392 v.AddArg2(v0, v1)
8393 return true
8394 }
8395 }
8396 func rewriteValue_OpConstSlice(v *ssa.Value) bool {
8397 b := v.Block
8398 config := b.Func.Config
8399 typ := &b.Func.Config.Types
8400
8401
8402
8403 for {
8404 if !(config.PtrSize == 4) {
8405 break
8406 }
8407 v.Reset(ssaop.OpSliceMake)
8408 v0 := b.NewValue0(v.Pos, ssaop.OpConstNil, v.Type.Elem().PtrTo())
8409 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int)
8410 v1.AuxInt = ssa.Int32ToAuxInt(0)
8411 v.AddArg3(v0, v1, v1)
8412 return true
8413 }
8414
8415
8416
8417 for {
8418 if !(config.PtrSize == 8) {
8419 break
8420 }
8421 v.Reset(ssaop.OpSliceMake)
8422 v0 := b.NewValue0(v.Pos, ssaop.OpConstNil, v.Type.Elem().PtrTo())
8423 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int)
8424 v1.AuxInt = ssa.Int64ToAuxInt(0)
8425 v.AddArg3(v0, v1, v1)
8426 return true
8427 }
8428 return false
8429 }
8430 func rewriteValue_OpConstString(v *ssa.Value) bool {
8431 b := v.Block
8432 config := b.Func.Config
8433 fe := b.Func.Fe
8434 typ := &b.Func.Config.Types
8435
8436
8437
8438 for {
8439 str := ssa.AuxToString(v.Aux)
8440 if !(config.PtrSize == 4 && str == "") {
8441 break
8442 }
8443 v.Reset(ssaop.OpStringMake)
8444 v0 := b.NewValue0(v.Pos, ssaop.OpConstNil, typ.BytePtr)
8445 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int)
8446 v1.AuxInt = ssa.Int32ToAuxInt(0)
8447 v.AddArg2(v0, v1)
8448 return true
8449 }
8450
8451
8452
8453 for {
8454 str := ssa.AuxToString(v.Aux)
8455 if !(config.PtrSize == 8 && str == "") {
8456 break
8457 }
8458 v.Reset(ssaop.OpStringMake)
8459 v0 := b.NewValue0(v.Pos, ssaop.OpConstNil, typ.BytePtr)
8460 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int)
8461 v1.AuxInt = ssa.Int64ToAuxInt(0)
8462 v.AddArg2(v0, v1)
8463 return true
8464 }
8465
8466
8467
8468 for {
8469 str := ssa.AuxToString(v.Aux)
8470 if !(config.PtrSize == 4 && str != "") {
8471 break
8472 }
8473 v.Reset(ssaop.OpStringMake)
8474 v0 := b.NewValue0(v.Pos, ssaop.OpAddr, typ.BytePtr)
8475 v0.Aux = ssa.SymToAux(fe.StringData(str))
8476 v1 := b.NewValue0(v.Pos, ssaop.OpSB, typ.Uintptr)
8477 v0.AddArg(v1)
8478 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int)
8479 v2.AuxInt = ssa.Int32ToAuxInt(int32(len(str)))
8480 v.AddArg2(v0, v2)
8481 return true
8482 }
8483
8484
8485
8486 for {
8487 str := ssa.AuxToString(v.Aux)
8488 if !(config.PtrSize == 8 && str != "") {
8489 break
8490 }
8491 v.Reset(ssaop.OpStringMake)
8492 v0 := b.NewValue0(v.Pos, ssaop.OpAddr, typ.BytePtr)
8493 v0.Aux = ssa.SymToAux(fe.StringData(str))
8494 v1 := b.NewValue0(v.Pos, ssaop.OpSB, typ.Uintptr)
8495 v0.AddArg(v1)
8496 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int)
8497 v2.AuxInt = ssa.Int64ToAuxInt(int64(len(str)))
8498 v.AddArg2(v0, v2)
8499 return true
8500 }
8501 return false
8502 }
8503 func rewriteValue_OpConvert(v *ssa.Value) bool {
8504 v_1 := v.Args[1]
8505 v_0 := v.Args[0]
8506 b := v.Block
8507
8508
8509 for {
8510 if v_0.Op != ssaop.OpAdd64 {
8511 break
8512 }
8513 _ = v_0.Args[1]
8514 v_0_0 := v_0.Args[0]
8515 v_0_1 := v_0.Args[1]
8516 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
8517 if v_0_0.Op != ssaop.OpConvert {
8518 continue
8519 }
8520 mem := v_0_0.Args[1]
8521 ptr := v_0_0.Args[0]
8522 off := v_0_1
8523 if mem != v_1 {
8524 continue
8525 }
8526 v.Reset(ssaop.OpAddPtr)
8527 v.AddArg2(ptr, off)
8528 return true
8529 }
8530 break
8531 }
8532
8533
8534 for {
8535 if v_0.Op != ssaop.OpAdd32 {
8536 break
8537 }
8538 _ = v_0.Args[1]
8539 v_0_0 := v_0.Args[0]
8540 v_0_1 := v_0.Args[1]
8541 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
8542 if v_0_0.Op != ssaop.OpConvert {
8543 continue
8544 }
8545 mem := v_0_0.Args[1]
8546 ptr := v_0_0.Args[0]
8547 off := v_0_1
8548 if mem != v_1 {
8549 continue
8550 }
8551 v.Reset(ssaop.OpAddPtr)
8552 v.AddArg2(ptr, off)
8553 return true
8554 }
8555 break
8556 }
8557
8558
8559 for {
8560 if v_0.Op != ssaop.OpConvert {
8561 break
8562 }
8563 mem := v_0.Args[1]
8564 ptr := v_0.Args[0]
8565 if mem != v_1 {
8566 break
8567 }
8568 v.CopyOf(ptr)
8569 return true
8570 }
8571
8572
8573 for {
8574 a := v_0
8575 if a.Op != ssaop.OpAdd64 {
8576 break
8577 }
8578 _ = a.Args[1]
8579 a_0 := a.Args[0]
8580 a_1 := a.Args[1]
8581 for _i0 := 0; _i0 <= 1; _i0, a_0, a_1 = _i0+1, a_1, a_0 {
8582 if a_0.Op != ssaop.OpAdd64 {
8583 continue
8584 }
8585 _ = a_0.Args[1]
8586 a_0_0 := a_0.Args[0]
8587 a_0_1 := a_0.Args[1]
8588 for _i1 := 0; _i1 <= 1; _i1, a_0_0, a_0_1 = _i1+1, a_0_1, a_0_0 {
8589 if a_0_0.Op != ssaop.OpConvert {
8590 continue
8591 }
8592 mem := a_0_0.Args[1]
8593 ptr := a_0_0.Args[0]
8594 off1 := a_0_1
8595 off2 := a_1
8596 if mem != v_1 {
8597 continue
8598 }
8599 v.Reset(ssaop.OpAddPtr)
8600 v0 := b.NewValue0(v.Pos, ssaop.OpAdd64, a.Type)
8601 v0.AddArg2(off1, off2)
8602 v.AddArg2(ptr, v0)
8603 return true
8604 }
8605 }
8606 break
8607 }
8608
8609
8610 for {
8611 a := v_0
8612 if a.Op != ssaop.OpAdd32 {
8613 break
8614 }
8615 _ = a.Args[1]
8616 a_0 := a.Args[0]
8617 a_1 := a.Args[1]
8618 for _i0 := 0; _i0 <= 1; _i0, a_0, a_1 = _i0+1, a_1, a_0 {
8619 if a_0.Op != ssaop.OpAdd32 {
8620 continue
8621 }
8622 _ = a_0.Args[1]
8623 a_0_0 := a_0.Args[0]
8624 a_0_1 := a_0.Args[1]
8625 for _i1 := 0; _i1 <= 1; _i1, a_0_0, a_0_1 = _i1+1, a_0_1, a_0_0 {
8626 if a_0_0.Op != ssaop.OpConvert {
8627 continue
8628 }
8629 mem := a_0_0.Args[1]
8630 ptr := a_0_0.Args[0]
8631 off1 := a_0_1
8632 off2 := a_1
8633 if mem != v_1 {
8634 continue
8635 }
8636 v.Reset(ssaop.OpAddPtr)
8637 v0 := b.NewValue0(v.Pos, ssaop.OpAdd32, a.Type)
8638 v0.AddArg2(off1, off2)
8639 v.AddArg2(ptr, v0)
8640 return true
8641 }
8642 }
8643 break
8644 }
8645 return false
8646 }
8647 func rewriteValue_OpCtz16(v *ssa.Value) bool {
8648 v_0 := v.Args[0]
8649 b := v.Block
8650 config := b.Func.Config
8651
8652
8653
8654 for {
8655 if v_0.Op != ssaop.OpConst16 {
8656 break
8657 }
8658 c := ssa.AuxIntToInt16(v_0.AuxInt)
8659 if !(config.PtrSize == 4) {
8660 break
8661 }
8662 v.Reset(ssaop.OpConst32)
8663 v.AuxInt = ssa.Int32ToAuxInt(int32(ntz16(c)))
8664 return true
8665 }
8666
8667
8668
8669 for {
8670 if v_0.Op != ssaop.OpConst16 {
8671 break
8672 }
8673 c := ssa.AuxIntToInt16(v_0.AuxInt)
8674 if !(config.PtrSize == 8) {
8675 break
8676 }
8677 v.Reset(ssaop.OpConst64)
8678 v.AuxInt = ssa.Int64ToAuxInt(int64(ntz16(c)))
8679 return true
8680 }
8681 return false
8682 }
8683 func rewriteValue_OpCtz32(v *ssa.Value) bool {
8684 v_0 := v.Args[0]
8685 b := v.Block
8686 config := b.Func.Config
8687
8688
8689
8690 for {
8691 if v_0.Op != ssaop.OpConst32 {
8692 break
8693 }
8694 c := ssa.AuxIntToInt32(v_0.AuxInt)
8695 if !(config.PtrSize == 4) {
8696 break
8697 }
8698 v.Reset(ssaop.OpConst32)
8699 v.AuxInt = ssa.Int32ToAuxInt(int32(ntz32(c)))
8700 return true
8701 }
8702
8703
8704
8705 for {
8706 if v_0.Op != ssaop.OpConst32 {
8707 break
8708 }
8709 c := ssa.AuxIntToInt32(v_0.AuxInt)
8710 if !(config.PtrSize == 8) {
8711 break
8712 }
8713 v.Reset(ssaop.OpConst64)
8714 v.AuxInt = ssa.Int64ToAuxInt(int64(ntz32(c)))
8715 return true
8716 }
8717 return false
8718 }
8719 func rewriteValue_OpCtz64(v *ssa.Value) bool {
8720 v_0 := v.Args[0]
8721 b := v.Block
8722 config := b.Func.Config
8723
8724
8725
8726 for {
8727 if v_0.Op != ssaop.OpConst64 {
8728 break
8729 }
8730 c := ssa.AuxIntToInt64(v_0.AuxInt)
8731 if !(config.PtrSize == 4) {
8732 break
8733 }
8734 v.Reset(ssaop.OpConst32)
8735 v.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Ntz64(c)))
8736 return true
8737 }
8738
8739
8740
8741 for {
8742 if v_0.Op != ssaop.OpConst64 {
8743 break
8744 }
8745 c := ssa.AuxIntToInt64(v_0.AuxInt)
8746 if !(config.PtrSize == 8) {
8747 break
8748 }
8749 v.Reset(ssaop.OpConst64)
8750 v.AuxInt = ssa.Int64ToAuxInt(int64(ssa.Ntz64(c)))
8751 return true
8752 }
8753 return false
8754 }
8755 func rewriteValue_OpCtz8(v *ssa.Value) bool {
8756 v_0 := v.Args[0]
8757 b := v.Block
8758 config := b.Func.Config
8759
8760
8761
8762 for {
8763 if v_0.Op != ssaop.OpConst8 {
8764 break
8765 }
8766 c := ssa.AuxIntToInt8(v_0.AuxInt)
8767 if !(config.PtrSize == 4) {
8768 break
8769 }
8770 v.Reset(ssaop.OpConst32)
8771 v.AuxInt = ssa.Int32ToAuxInt(int32(ntz8(c)))
8772 return true
8773 }
8774
8775
8776
8777 for {
8778 if v_0.Op != ssaop.OpConst8 {
8779 break
8780 }
8781 c := ssa.AuxIntToInt8(v_0.AuxInt)
8782 if !(config.PtrSize == 8) {
8783 break
8784 }
8785 v.Reset(ssaop.OpConst64)
8786 v.AuxInt = ssa.Int64ToAuxInt(int64(ntz8(c)))
8787 return true
8788 }
8789 return false
8790 }
8791 func rewriteValue_OpCvt32Fto32(v *ssa.Value) bool {
8792 v_0 := v.Args[0]
8793
8794
8795
8796 for {
8797 if v_0.Op != ssaop.OpConst32F {
8798 break
8799 }
8800 c := ssa.AuxIntToFloat32(v_0.AuxInt)
8801 if !(c >= -1<<31 && c < 1<<31) {
8802 break
8803 }
8804 v.Reset(ssaop.OpConst32)
8805 v.AuxInt = ssa.Int32ToAuxInt(int32(c))
8806 return true
8807 }
8808 return false
8809 }
8810 func rewriteValue_OpCvt32Fto64(v *ssa.Value) bool {
8811 v_0 := v.Args[0]
8812
8813
8814
8815 for {
8816 if v_0.Op != ssaop.OpConst32F {
8817 break
8818 }
8819 c := ssa.AuxIntToFloat32(v_0.AuxInt)
8820 if !(c >= -1<<63 && c < 1<<63) {
8821 break
8822 }
8823 v.Reset(ssaop.OpConst64)
8824 v.AuxInt = ssa.Int64ToAuxInt(int64(c))
8825 return true
8826 }
8827 return false
8828 }
8829 func rewriteValue_OpCvt32Fto64F(v *ssa.Value) bool {
8830 v_0 := v.Args[0]
8831
8832
8833 for {
8834 if v_0.Op != ssaop.OpConst32F {
8835 break
8836 }
8837 c := ssa.AuxIntToFloat32(v_0.AuxInt)
8838 v.Reset(ssaop.OpConst64F)
8839 v.AuxInt = ssa.Float64ToAuxInt(float64(c))
8840 return true
8841 }
8842 return false
8843 }
8844 func rewriteValue_OpCvt32to32F(v *ssa.Value) bool {
8845 v_0 := v.Args[0]
8846
8847
8848 for {
8849 if v_0.Op != ssaop.OpConst32 {
8850 break
8851 }
8852 c := ssa.AuxIntToInt32(v_0.AuxInt)
8853 v.Reset(ssaop.OpConst32F)
8854 v.AuxInt = ssa.Float32ToAuxInt(float32(c))
8855 return true
8856 }
8857 return false
8858 }
8859 func rewriteValue_OpCvt32to64F(v *ssa.Value) bool {
8860 v_0 := v.Args[0]
8861
8862
8863 for {
8864 if v_0.Op != ssaop.OpConst32 {
8865 break
8866 }
8867 c := ssa.AuxIntToInt32(v_0.AuxInt)
8868 v.Reset(ssaop.OpConst64F)
8869 v.AuxInt = ssa.Float64ToAuxInt(float64(c))
8870 return true
8871 }
8872 return false
8873 }
8874 func rewriteValue_OpCvt64Fto32(v *ssa.Value) bool {
8875 v_0 := v.Args[0]
8876
8877
8878
8879 for {
8880 if v_0.Op != ssaop.OpConst64F {
8881 break
8882 }
8883 c := ssa.AuxIntToFloat64(v_0.AuxInt)
8884 if !(c >= -1<<31 && c < 1<<31) {
8885 break
8886 }
8887 v.Reset(ssaop.OpConst32)
8888 v.AuxInt = ssa.Int32ToAuxInt(int32(c))
8889 return true
8890 }
8891 return false
8892 }
8893 func rewriteValue_OpCvt64Fto32F(v *ssa.Value) bool {
8894 v_0 := v.Args[0]
8895
8896
8897 for {
8898 if v_0.Op != ssaop.OpConst64F {
8899 break
8900 }
8901 c := ssa.AuxIntToFloat64(v_0.AuxInt)
8902 v.Reset(ssaop.OpConst32F)
8903 v.AuxInt = ssa.Float32ToAuxInt(float32(c))
8904 return true
8905 }
8906
8907
8908
8909 for {
8910 sqrt0 := v_0
8911 if sqrt0.Op != ssaop.OpSqrt {
8912 break
8913 }
8914 sqrt0_0 := sqrt0.Args[0]
8915 if sqrt0_0.Op != ssaop.OpCvt32Fto64F {
8916 break
8917 }
8918 x := sqrt0_0.Args[0]
8919 if !(sqrt0.Uses == 1) {
8920 break
8921 }
8922 v.Reset(ssaop.OpSqrt32)
8923 v.AddArg(x)
8924 return true
8925 }
8926 return false
8927 }
8928 func rewriteValue_OpCvt64Fto64(v *ssa.Value) bool {
8929 v_0 := v.Args[0]
8930
8931
8932
8933 for {
8934 if v_0.Op != ssaop.OpConst64F {
8935 break
8936 }
8937 c := ssa.AuxIntToFloat64(v_0.AuxInt)
8938 if !(c >= -1<<63 && c < 1<<63) {
8939 break
8940 }
8941 v.Reset(ssaop.OpConst64)
8942 v.AuxInt = ssa.Int64ToAuxInt(int64(c))
8943 return true
8944 }
8945 return false
8946 }
8947 func rewriteValue_OpCvt64to32F(v *ssa.Value) bool {
8948 v_0 := v.Args[0]
8949
8950
8951 for {
8952 if v_0.Op != ssaop.OpConst64 {
8953 break
8954 }
8955 c := ssa.AuxIntToInt64(v_0.AuxInt)
8956 v.Reset(ssaop.OpConst32F)
8957 v.AuxInt = ssa.Float32ToAuxInt(float32(c))
8958 return true
8959 }
8960 return false
8961 }
8962 func rewriteValue_OpCvt64to64F(v *ssa.Value) bool {
8963 v_0 := v.Args[0]
8964
8965
8966 for {
8967 if v_0.Op != ssaop.OpConst64 {
8968 break
8969 }
8970 c := ssa.AuxIntToInt64(v_0.AuxInt)
8971 v.Reset(ssaop.OpConst64F)
8972 v.AuxInt = ssa.Float64ToAuxInt(float64(c))
8973 return true
8974 }
8975 return false
8976 }
8977 func rewriteValue_OpCvtBoolToUint8(v *ssa.Value) bool {
8978 v_0 := v.Args[0]
8979
8980
8981 for {
8982 if v_0.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_0.AuxInt) != false {
8983 break
8984 }
8985 v.Reset(ssaop.OpConst8)
8986 v.AuxInt = ssa.Int8ToAuxInt(0)
8987 return true
8988 }
8989
8990
8991 for {
8992 if v_0.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_0.AuxInt) != true {
8993 break
8994 }
8995 v.Reset(ssaop.OpConst8)
8996 v.AuxInt = ssa.Int8ToAuxInt(1)
8997 return true
8998 }
8999 return false
9000 }
9001 func rewriteValue_OpDiv128u(v *ssa.Value) bool {
9002 v_2 := v.Args[2]
9003 v_1 := v.Args[1]
9004 v_0 := v.Args[0]
9005 b := v.Block
9006
9007
9008
9009 for {
9010 t := v.Type
9011 if v_0.Op != ssaop.OpConst64 {
9012 break
9013 }
9014 hi := ssa.AuxIntToInt64(v_0.AuxInt)
9015 if v_1.Op != ssaop.OpConst64 {
9016 break
9017 }
9018 lo := ssa.AuxIntToInt64(v_1.AuxInt)
9019 if v_2.Op != ssaop.OpConst64 {
9020 break
9021 }
9022 y := ssa.AuxIntToInt64(v_2.AuxInt)
9023 if !(y != 0 && uint64(hi) < uint64(y)) {
9024 break
9025 }
9026 v.Reset(ssaop.OpMakeTuple)
9027 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t.FieldType(0))
9028 v0.AuxInt = ssa.Int64ToAuxInt(bitsDiv128u(hi, lo, y).quo)
9029 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t.FieldType(1))
9030 v1.AuxInt = ssa.Int64ToAuxInt(bitsDiv128u(hi, lo, y).rem)
9031 v.AddArg2(v0, v1)
9032 return true
9033 }
9034
9035
9036 for {
9037 t := v.Type
9038 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
9039 break
9040 }
9041 lo := v_1
9042 y := v_2
9043 v.Reset(ssaop.OpMakeTuple)
9044 v0 := b.NewValue0(v.Pos, ssaop.OpDiv64u, t.FieldType(0))
9045 v0.AddArg2(lo, y)
9046 v1 := b.NewValue0(v.Pos, ssaop.OpMod64u, t.FieldType(1))
9047 v1.AddArg2(lo, y)
9048 v.AddArg2(v0, v1)
9049 return true
9050 }
9051 return false
9052 }
9053 func rewriteValue_OpDiv16(v *ssa.Value) bool {
9054 v_1 := v.Args[1]
9055 v_0 := v.Args[0]
9056 b := v.Block
9057 typ := &b.Func.Config.Types
9058
9059
9060
9061 for {
9062 if v_0.Op != ssaop.OpConst16 {
9063 break
9064 }
9065 c := ssa.AuxIntToInt16(v_0.AuxInt)
9066 if v_1.Op != ssaop.OpConst16 {
9067 break
9068 }
9069 d := ssa.AuxIntToInt16(v_1.AuxInt)
9070 if !(d != 0) {
9071 break
9072 }
9073 v.Reset(ssaop.OpConst16)
9074 v.AuxInt = ssa.Int16ToAuxInt(c / d)
9075 return true
9076 }
9077
9078
9079
9080 for {
9081 t := v.Type
9082 n := v_0
9083 if v_1.Op != ssaop.OpConst16 {
9084 break
9085 }
9086 c := ssa.AuxIntToInt16(v_1.AuxInt)
9087 if !(c < 0 && c != -1<<15) {
9088 break
9089 }
9090 v.Reset(ssaop.OpNeg16)
9091 v0 := b.NewValue0(v.Pos, ssaop.OpDiv16, t)
9092 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
9093 v1.AuxInt = ssa.Int16ToAuxInt(-c)
9094 v0.AddArg2(n, v1)
9095 v.AddArg(v0)
9096 return true
9097 }
9098
9099
9100 for {
9101 t := v.Type
9102 x := v_0
9103 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != -1<<15 {
9104 break
9105 }
9106 v.Reset(ssaop.OpRsh16Ux64)
9107 v0 := b.NewValue0(v.Pos, ssaop.OpAnd16, t)
9108 v1 := b.NewValue0(v.Pos, ssaop.OpNeg16, t)
9109 v1.AddArg(x)
9110 v0.AddArg2(x, v1)
9111 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
9112 v2.AuxInt = ssa.Int64ToAuxInt(15)
9113 v.AddArg2(v0, v2)
9114 return true
9115 }
9116 return false
9117 }
9118 func rewriteValue_OpDiv16u(v *ssa.Value) bool {
9119 v_1 := v.Args[1]
9120 v_0 := v.Args[0]
9121 b := v.Block
9122 typ := &b.Func.Config.Types
9123
9124
9125
9126 for {
9127 if v_0.Op != ssaop.OpConst16 {
9128 break
9129 }
9130 c := ssa.AuxIntToInt16(v_0.AuxInt)
9131 if v_1.Op != ssaop.OpConst16 {
9132 break
9133 }
9134 d := ssa.AuxIntToInt16(v_1.AuxInt)
9135 if !(d != 0) {
9136 break
9137 }
9138 v.Reset(ssaop.OpConst16)
9139 v.AuxInt = ssa.Int16ToAuxInt(int16(uint16(c) / uint16(d)))
9140 return true
9141 }
9142
9143
9144
9145 for {
9146 n := v_0
9147 if v_1.Op != ssaop.OpConst16 {
9148 break
9149 }
9150 c := ssa.AuxIntToInt16(v_1.AuxInt)
9151 if !(ssa.IsPowerOfTwo(uint16(c))) {
9152 break
9153 }
9154 v.Reset(ssaop.OpRsh16Ux64)
9155 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
9156 v0.AuxInt = ssa.Int64ToAuxInt(ssa.Log16u(uint16(c)))
9157 v.AddArg2(n, v0)
9158 return true
9159 }
9160 return false
9161 }
9162 func rewriteValue_OpDiv32(v *ssa.Value) bool {
9163 v_1 := v.Args[1]
9164 v_0 := v.Args[0]
9165 b := v.Block
9166 typ := &b.Func.Config.Types
9167
9168
9169
9170 for {
9171 if v_0.Op != ssaop.OpConst32 {
9172 break
9173 }
9174 c := ssa.AuxIntToInt32(v_0.AuxInt)
9175 if v_1.Op != ssaop.OpConst32 {
9176 break
9177 }
9178 d := ssa.AuxIntToInt32(v_1.AuxInt)
9179 if !(d != 0) {
9180 break
9181 }
9182 v.Reset(ssaop.OpConst32)
9183 v.AuxInt = ssa.Int32ToAuxInt(c / d)
9184 return true
9185 }
9186
9187
9188
9189 for {
9190 t := v.Type
9191 n := v_0
9192 if v_1.Op != ssaop.OpConst32 {
9193 break
9194 }
9195 c := ssa.AuxIntToInt32(v_1.AuxInt)
9196 if !(c < 0 && c != -1<<31) {
9197 break
9198 }
9199 v.Reset(ssaop.OpNeg32)
9200 v0 := b.NewValue0(v.Pos, ssaop.OpDiv32, t)
9201 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
9202 v1.AuxInt = ssa.Int32ToAuxInt(-c)
9203 v0.AddArg2(n, v1)
9204 v.AddArg(v0)
9205 return true
9206 }
9207
9208
9209 for {
9210 t := v.Type
9211 x := v_0
9212 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != -1<<31 {
9213 break
9214 }
9215 v.Reset(ssaop.OpRsh32Ux64)
9216 v0 := b.NewValue0(v.Pos, ssaop.OpAnd32, t)
9217 v1 := b.NewValue0(v.Pos, ssaop.OpNeg32, t)
9218 v1.AddArg(x)
9219 v0.AddArg2(x, v1)
9220 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
9221 v2.AuxInt = ssa.Int64ToAuxInt(31)
9222 v.AddArg2(v0, v2)
9223 return true
9224 }
9225 return false
9226 }
9227 func rewriteValue_OpDiv32F(v *ssa.Value) bool {
9228 v_1 := v.Args[1]
9229 v_0 := v.Args[0]
9230 b := v.Block
9231
9232
9233
9234 for {
9235 if v_0.Op != ssaop.OpConst32F {
9236 break
9237 }
9238 c := ssa.AuxIntToFloat32(v_0.AuxInt)
9239 if v_1.Op != ssaop.OpConst32F {
9240 break
9241 }
9242 d := ssa.AuxIntToFloat32(v_1.AuxInt)
9243 if !(c/d == c/d) {
9244 break
9245 }
9246 v.Reset(ssaop.OpConst32F)
9247 v.AuxInt = ssa.Float32ToAuxInt(c / d)
9248 return true
9249 }
9250
9251
9252
9253 for {
9254 x := v_0
9255 if v_1.Op != ssaop.OpConst32F {
9256 break
9257 }
9258 t := v_1.Type
9259 c := ssa.AuxIntToFloat32(v_1.AuxInt)
9260 if !(reciprocalExact32(c)) {
9261 break
9262 }
9263 v.Reset(ssaop.OpMul32F)
9264 v0 := b.NewValue0(v.Pos, ssaop.OpConst32F, t)
9265 v0.AuxInt = ssa.Float32ToAuxInt(1 / c)
9266 v.AddArg2(x, v0)
9267 return true
9268 }
9269 return false
9270 }
9271 func rewriteValue_OpDiv32u(v *ssa.Value) bool {
9272 v_1 := v.Args[1]
9273 v_0 := v.Args[0]
9274 b := v.Block
9275 typ := &b.Func.Config.Types
9276
9277
9278
9279 for {
9280 if v_0.Op != ssaop.OpConst32 {
9281 break
9282 }
9283 c := ssa.AuxIntToInt32(v_0.AuxInt)
9284 if v_1.Op != ssaop.OpConst32 {
9285 break
9286 }
9287 d := ssa.AuxIntToInt32(v_1.AuxInt)
9288 if !(d != 0) {
9289 break
9290 }
9291 v.Reset(ssaop.OpConst32)
9292 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) / uint32(d)))
9293 return true
9294 }
9295
9296
9297
9298 for {
9299 n := v_0
9300 if v_1.Op != ssaop.OpConst32 {
9301 break
9302 }
9303 c := ssa.AuxIntToInt32(v_1.AuxInt)
9304 if !(ssa.IsPowerOfTwo(uint32(c))) {
9305 break
9306 }
9307 v.Reset(ssaop.OpRsh32Ux64)
9308 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
9309 v0.AuxInt = ssa.Int64ToAuxInt(ssa.Log32u(uint32(c)))
9310 v.AddArg2(n, v0)
9311 return true
9312 }
9313 return false
9314 }
9315 func rewriteValue_OpDiv64(v *ssa.Value) bool {
9316 v_1 := v.Args[1]
9317 v_0 := v.Args[0]
9318 b := v.Block
9319 typ := &b.Func.Config.Types
9320
9321
9322
9323 for {
9324 if v_0.Op != ssaop.OpConst64 {
9325 break
9326 }
9327 c := ssa.AuxIntToInt64(v_0.AuxInt)
9328 if v_1.Op != ssaop.OpConst64 {
9329 break
9330 }
9331 d := ssa.AuxIntToInt64(v_1.AuxInt)
9332 if !(d != 0) {
9333 break
9334 }
9335 v.Reset(ssaop.OpConst64)
9336 v.AuxInt = ssa.Int64ToAuxInt(c / d)
9337 return true
9338 }
9339
9340
9341
9342 for {
9343 t := v.Type
9344 n := v_0
9345 if v_1.Op != ssaop.OpConst64 {
9346 break
9347 }
9348 c := ssa.AuxIntToInt64(v_1.AuxInt)
9349 if !(c < 0 && c != -1<<63) {
9350 break
9351 }
9352 v.Reset(ssaop.OpNeg64)
9353 v0 := b.NewValue0(v.Pos, ssaop.OpDiv64, t)
9354 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
9355 v1.AuxInt = ssa.Int64ToAuxInt(-c)
9356 v0.AddArg2(n, v1)
9357 v.AddArg(v0)
9358 return true
9359 }
9360
9361
9362
9363 for {
9364 x := v_0
9365 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != -1<<63 || !(isNonNegative(x)) {
9366 break
9367 }
9368 v.Reset(ssaop.OpConst64)
9369 v.AuxInt = ssa.Int64ToAuxInt(0)
9370 return true
9371 }
9372
9373
9374 for {
9375 t := v.Type
9376 x := v_0
9377 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != -1<<63 {
9378 break
9379 }
9380 v.Reset(ssaop.OpRsh64Ux64)
9381 v0 := b.NewValue0(v.Pos, ssaop.OpAnd64, t)
9382 v1 := b.NewValue0(v.Pos, ssaop.OpNeg64, t)
9383 v1.AddArg(x)
9384 v0.AddArg2(x, v1)
9385 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
9386 v2.AuxInt = ssa.Int64ToAuxInt(63)
9387 v.AddArg2(v0, v2)
9388 return true
9389 }
9390 return false
9391 }
9392 func rewriteValue_OpDiv64F(v *ssa.Value) bool {
9393 v_1 := v.Args[1]
9394 v_0 := v.Args[0]
9395 b := v.Block
9396
9397
9398
9399 for {
9400 if v_0.Op != ssaop.OpConst64F {
9401 break
9402 }
9403 c := ssa.AuxIntToFloat64(v_0.AuxInt)
9404 if v_1.Op != ssaop.OpConst64F {
9405 break
9406 }
9407 d := ssa.AuxIntToFloat64(v_1.AuxInt)
9408 if !(c/d == c/d) {
9409 break
9410 }
9411 v.Reset(ssaop.OpConst64F)
9412 v.AuxInt = ssa.Float64ToAuxInt(c / d)
9413 return true
9414 }
9415
9416
9417
9418 for {
9419 x := v_0
9420 if v_1.Op != ssaop.OpConst64F {
9421 break
9422 }
9423 t := v_1.Type
9424 c := ssa.AuxIntToFloat64(v_1.AuxInt)
9425 if !(reciprocalExact64(c)) {
9426 break
9427 }
9428 v.Reset(ssaop.OpMul64F)
9429 v0 := b.NewValue0(v.Pos, ssaop.OpConst64F, t)
9430 v0.AuxInt = ssa.Float64ToAuxInt(1 / c)
9431 v.AddArg2(x, v0)
9432 return true
9433 }
9434 return false
9435 }
9436 func rewriteValue_OpDiv64u(v *ssa.Value) bool {
9437 v_1 := v.Args[1]
9438 v_0 := v.Args[0]
9439 b := v.Block
9440 typ := &b.Func.Config.Types
9441
9442
9443
9444 for {
9445 if v_0.Op != ssaop.OpConst64 {
9446 break
9447 }
9448 c := ssa.AuxIntToInt64(v_0.AuxInt)
9449 if v_1.Op != ssaop.OpConst64 {
9450 break
9451 }
9452 d := ssa.AuxIntToInt64(v_1.AuxInt)
9453 if !(d != 0) {
9454 break
9455 }
9456 v.Reset(ssaop.OpConst64)
9457 v.AuxInt = ssa.Int64ToAuxInt(int64(uint64(c) / uint64(d)))
9458 return true
9459 }
9460
9461
9462
9463 for {
9464 n := v_0
9465 if v_1.Op != ssaop.OpConst64 {
9466 break
9467 }
9468 c := ssa.AuxIntToInt64(v_1.AuxInt)
9469 if !(ssa.IsPowerOfTwo(uint64(c))) {
9470 break
9471 }
9472 v.Reset(ssaop.OpRsh64Ux64)
9473 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
9474 v0.AuxInt = ssa.Int64ToAuxInt(ssa.Log64u(uint64(c)))
9475 v.AddArg2(n, v0)
9476 return true
9477 }
9478 return false
9479 }
9480 func rewriteValue_OpDiv8(v *ssa.Value) bool {
9481 v_1 := v.Args[1]
9482 v_0 := v.Args[0]
9483 b := v.Block
9484 typ := &b.Func.Config.Types
9485
9486
9487
9488 for {
9489 if v_0.Op != ssaop.OpConst8 {
9490 break
9491 }
9492 c := ssa.AuxIntToInt8(v_0.AuxInt)
9493 if v_1.Op != ssaop.OpConst8 {
9494 break
9495 }
9496 d := ssa.AuxIntToInt8(v_1.AuxInt)
9497 if !(d != 0) {
9498 break
9499 }
9500 v.Reset(ssaop.OpConst8)
9501 v.AuxInt = ssa.Int8ToAuxInt(c / d)
9502 return true
9503 }
9504
9505
9506
9507 for {
9508 t := v.Type
9509 n := v_0
9510 if v_1.Op != ssaop.OpConst8 {
9511 break
9512 }
9513 c := ssa.AuxIntToInt8(v_1.AuxInt)
9514 if !(c < 0 && c != -1<<7) {
9515 break
9516 }
9517 v.Reset(ssaop.OpNeg8)
9518 v0 := b.NewValue0(v.Pos, ssaop.OpDiv8, t)
9519 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
9520 v1.AuxInt = ssa.Int8ToAuxInt(-c)
9521 v0.AddArg2(n, v1)
9522 v.AddArg(v0)
9523 return true
9524 }
9525
9526
9527 for {
9528 t := v.Type
9529 x := v_0
9530 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != -1<<7 {
9531 break
9532 }
9533 v.Reset(ssaop.OpRsh8Ux64)
9534 v0 := b.NewValue0(v.Pos, ssaop.OpAnd8, t)
9535 v1 := b.NewValue0(v.Pos, ssaop.OpNeg8, t)
9536 v1.AddArg(x)
9537 v0.AddArg2(x, v1)
9538 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
9539 v2.AuxInt = ssa.Int64ToAuxInt(7)
9540 v.AddArg2(v0, v2)
9541 return true
9542 }
9543 return false
9544 }
9545 func rewriteValue_OpDiv8u(v *ssa.Value) bool {
9546 v_1 := v.Args[1]
9547 v_0 := v.Args[0]
9548 b := v.Block
9549 typ := &b.Func.Config.Types
9550
9551
9552
9553 for {
9554 if v_0.Op != ssaop.OpConst8 {
9555 break
9556 }
9557 c := ssa.AuxIntToInt8(v_0.AuxInt)
9558 if v_1.Op != ssaop.OpConst8 {
9559 break
9560 }
9561 d := ssa.AuxIntToInt8(v_1.AuxInt)
9562 if !(d != 0) {
9563 break
9564 }
9565 v.Reset(ssaop.OpConst8)
9566 v.AuxInt = ssa.Int8ToAuxInt(int8(uint8(c) / uint8(d)))
9567 return true
9568 }
9569
9570
9571
9572 for {
9573 n := v_0
9574 if v_1.Op != ssaop.OpConst8 {
9575 break
9576 }
9577 c := ssa.AuxIntToInt8(v_1.AuxInt)
9578 if !(ssa.IsPowerOfTwo(uint8(c))) {
9579 break
9580 }
9581 v.Reset(ssaop.OpRsh8Ux64)
9582 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
9583 v0.AuxInt = ssa.Int64ToAuxInt(ssa.Log8u(uint8(c)))
9584 v.AddArg2(n, v0)
9585 return true
9586 }
9587 return false
9588 }
9589 func rewriteValue_OpEq16(v *ssa.Value) bool {
9590 v_1 := v.Args[1]
9591 v_0 := v.Args[0]
9592 b := v.Block
9593 config := b.Func.Config
9594 typ := &b.Func.Config.Types
9595
9596
9597 for {
9598 x := v_0
9599 if x != v_1 {
9600 break
9601 }
9602 v.Reset(ssaop.OpConstBool)
9603 v.AuxInt = ssa.BoolToAuxInt(true)
9604 return true
9605 }
9606
9607
9608
9609 for {
9610 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
9611 if v_0.Op != ssaop.OpConst16 {
9612 continue
9613 }
9614 t := v_0.Type
9615 c := ssa.AuxIntToInt16(v_0.AuxInt)
9616 o := v_1
9617 if o.Op != ssaop.OpAdd16 {
9618 continue
9619 }
9620 _ = o.Args[1]
9621 o_0 := o.Args[0]
9622 o_1 := o.Args[1]
9623 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
9624 if o_0.Op != ssaop.OpConst16 {
9625 continue
9626 }
9627 d := ssa.AuxIntToInt16(o_0.AuxInt)
9628 x := o_1
9629 if !(o.Uses == 1) {
9630 continue
9631 }
9632 v.Reset(ssaop.OpEq16)
9633 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
9634 v0.AuxInt = ssa.Int16ToAuxInt(c - d)
9635 v.AddArg2(v0, x)
9636 return true
9637 }
9638 }
9639 break
9640 }
9641
9642
9643
9644 for {
9645 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
9646 if v_0.Op != ssaop.OpConst16 {
9647 continue
9648 }
9649 t := v_0.Type
9650 c := ssa.AuxIntToInt16(v_0.AuxInt)
9651 o := v_1
9652 if o.Op != ssaop.OpSub16 {
9653 continue
9654 }
9655 _ = o.Args[1]
9656 x := o.Args[0]
9657 o_1 := o.Args[1]
9658 if o_1.Op != ssaop.OpConst16 {
9659 continue
9660 }
9661 d := ssa.AuxIntToInt16(o_1.AuxInt)
9662 if !(o.Uses == 1) {
9663 continue
9664 }
9665 v.Reset(ssaop.OpEq16)
9666 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
9667 v0.AuxInt = ssa.Int16ToAuxInt(c + d)
9668 v.AddArg2(v0, x)
9669 return true
9670 }
9671 break
9672 }
9673
9674
9675
9676 for {
9677 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
9678 if v_0.Op != ssaop.OpConst16 {
9679 continue
9680 }
9681 t := v_0.Type
9682 c := ssa.AuxIntToInt16(v_0.AuxInt)
9683 o := v_1
9684 if o.Op != ssaop.OpSub16 {
9685 continue
9686 }
9687 x := o.Args[1]
9688 o_0 := o.Args[0]
9689 if o_0.Op != ssaop.OpConst16 {
9690 continue
9691 }
9692 d := ssa.AuxIntToInt16(o_0.AuxInt)
9693 if !(o.Uses == 1) {
9694 continue
9695 }
9696 v.Reset(ssaop.OpEq16)
9697 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
9698 v0.AuxInt = ssa.Int16ToAuxInt(d - c)
9699 v.AddArg2(v0, x)
9700 return true
9701 }
9702 break
9703 }
9704
9705
9706
9707 for {
9708 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
9709 if v_0.Op != ssaop.OpConst16 {
9710 continue
9711 }
9712 t := v_0.Type
9713 c := ssa.AuxIntToInt16(v_0.AuxInt)
9714 o := v_1
9715 if o.Op != ssaop.OpXor16 {
9716 continue
9717 }
9718 _ = o.Args[1]
9719 o_0 := o.Args[0]
9720 o_1 := o.Args[1]
9721 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
9722 if o_0.Op != ssaop.OpConst16 {
9723 continue
9724 }
9725 d := ssa.AuxIntToInt16(o_0.AuxInt)
9726 x := o_1
9727 if !(o.Uses == 1) {
9728 continue
9729 }
9730 v.Reset(ssaop.OpEq16)
9731 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
9732 v0.AuxInt = ssa.Int16ToAuxInt(d ^ c)
9733 v.AddArg2(v0, x)
9734 return true
9735 }
9736 }
9737 break
9738 }
9739
9740
9741
9742 for {
9743 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
9744 if v_0.Op != ssaop.OpConst16 {
9745 continue
9746 }
9747 t := v_0.Type
9748 c := ssa.AuxIntToInt16(v_0.AuxInt)
9749 o := v_1
9750 if o.Op != ssaop.OpCom16 {
9751 continue
9752 }
9753 x := o.Args[0]
9754 if !(o.Uses == 1) {
9755 continue
9756 }
9757 v.Reset(ssaop.OpEq16)
9758 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
9759 v0.AuxInt = ssa.Int16ToAuxInt(^c)
9760 v.AddArg2(v0, x)
9761 return true
9762 }
9763 break
9764 }
9765
9766
9767
9768 for {
9769 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
9770 if v_0.Op != ssaop.OpConst16 {
9771 continue
9772 }
9773 t := v_0.Type
9774 c := ssa.AuxIntToInt16(v_0.AuxInt)
9775 o := v_1
9776 if o.Op != ssaop.OpNeg16 {
9777 continue
9778 }
9779 x := o.Args[0]
9780 if !(o.Uses == 1) {
9781 continue
9782 }
9783 v.Reset(ssaop.OpEq16)
9784 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
9785 v0.AuxInt = ssa.Int16ToAuxInt(-c)
9786 v.AddArg2(v0, x)
9787 return true
9788 }
9789 break
9790 }
9791
9792
9793
9794 for {
9795 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
9796 if v_0.Op != ssaop.OpConst16 {
9797 continue
9798 }
9799 t := v_0.Type
9800 c := ssa.AuxIntToInt16(v_0.AuxInt)
9801 o := v_1
9802 if o.Op != ssaop.OpMul16 {
9803 continue
9804 }
9805 _ = o.Args[1]
9806 o_0 := o.Args[0]
9807 o_1 := o.Args[1]
9808 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
9809 if o_0.Op != ssaop.OpConst16 {
9810 continue
9811 }
9812 d := ssa.AuxIntToInt16(o_0.AuxInt)
9813 x := o_1
9814 if !(uint16(d)%2 == 1 && o.Uses == 1) {
9815 continue
9816 }
9817 v.Reset(ssaop.OpEq16)
9818 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
9819 v0.AuxInt = ssa.Int16ToAuxInt(int16(uint16(c) * uint16(modularMultiplicativeInverse(uint64(d)))))
9820 v.AddArg2(v0, x)
9821 return true
9822 }
9823 }
9824 break
9825 }
9826
9827
9828 for {
9829 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
9830 if v_0.Op != ssaop.OpConst16 {
9831 continue
9832 }
9833 c := ssa.AuxIntToInt16(v_0.AuxInt)
9834 if v_1.Op != ssaop.OpConst16 {
9835 continue
9836 }
9837 d := ssa.AuxIntToInt16(v_1.AuxInt)
9838 v.Reset(ssaop.OpConstBool)
9839 v.AuxInt = ssa.BoolToAuxInt(c == d)
9840 return true
9841 }
9842 break
9843 }
9844
9845
9846
9847 for {
9848 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
9849 if v_0.Op != ssaop.OpMod16u {
9850 continue
9851 }
9852 _ = v_0.Args[1]
9853 x := v_0.Args[0]
9854 v_0_1 := v_0.Args[1]
9855 if v_0_1.Op != ssaop.OpConst16 {
9856 continue
9857 }
9858 c := ssa.AuxIntToInt16(v_0_1.AuxInt)
9859 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != 0 || !(x.Op != ssaop.OpConst16 && ssa.UdivisibleOK16(c) && !hasSmallRotate(config)) {
9860 continue
9861 }
9862 v.Reset(ssaop.OpEq32)
9863 v0 := b.NewValue0(v.Pos, ssaop.OpMod32u, typ.UInt32)
9864 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.UInt32)
9865 v1.AddArg(x)
9866 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.UInt32)
9867 v2.AuxInt = ssa.Int32ToAuxInt(int32(uint16(c)))
9868 v0.AddArg2(v1, v2)
9869 v3 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.UInt32)
9870 v3.AuxInt = ssa.Int32ToAuxInt(0)
9871 v.AddArg2(v0, v3)
9872 return true
9873 }
9874 break
9875 }
9876
9877
9878
9879 for {
9880 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
9881 if v_0.Op != ssaop.OpMod16 {
9882 continue
9883 }
9884 _ = v_0.Args[1]
9885 x := v_0.Args[0]
9886 v_0_1 := v_0.Args[1]
9887 if v_0_1.Op != ssaop.OpConst16 {
9888 continue
9889 }
9890 c := ssa.AuxIntToInt16(v_0_1.AuxInt)
9891 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != 0 || !(x.Op != ssaop.OpConst16 && ssa.SdivisibleOK16(c) && !hasSmallRotate(config)) {
9892 continue
9893 }
9894 v.Reset(ssaop.OpEq32)
9895 v0 := b.NewValue0(v.Pos, ssaop.OpMod32, typ.Int32)
9896 v1 := b.NewValue0(v.Pos, ssaop.OpSignExt16to32, typ.Int32)
9897 v1.AddArg(x)
9898 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
9899 v2.AuxInt = ssa.Int32ToAuxInt(int32(c))
9900 v0.AddArg2(v1, v2)
9901 v3 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
9902 v3.AuxInt = ssa.Int32ToAuxInt(0)
9903 v.AddArg2(v0, v3)
9904 return true
9905 }
9906 break
9907 }
9908
9909
9910
9911 for {
9912 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
9913 s := v_0
9914 if s.Op != ssaop.OpSub16 {
9915 continue
9916 }
9917 y := s.Args[1]
9918 x := s.Args[0]
9919 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != 0 || !(s.Uses == 1) {
9920 continue
9921 }
9922 v.Reset(ssaop.OpEq16)
9923 v.AddArg2(x, y)
9924 return true
9925 }
9926 break
9927 }
9928
9929
9930
9931 for {
9932 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
9933 if v_0.Op != ssaop.OpAnd16 {
9934 continue
9935 }
9936 t := v_0.Type
9937 _ = v_0.Args[1]
9938 v_0_0 := v_0.Args[0]
9939 v_0_1 := v_0.Args[1]
9940 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
9941 x := v_0_0
9942 if v_0_1.Op != ssaop.OpConst16 || v_0_1.Type != t {
9943 continue
9944 }
9945 y := ssa.AuxIntToInt16(v_0_1.AuxInt)
9946 if v_1.Op != ssaop.OpConst16 || v_1.Type != t || ssa.AuxIntToInt16(v_1.AuxInt) != y || !(ssa.OneBit(y)) {
9947 continue
9948 }
9949 v.Reset(ssaop.OpNeq16)
9950 v0 := b.NewValue0(v.Pos, ssaop.OpAnd16, t)
9951 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
9952 v1.AuxInt = ssa.Int16ToAuxInt(y)
9953 v0.AddArg2(x, v1)
9954 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
9955 v2.AuxInt = ssa.Int16ToAuxInt(0)
9956 v.AddArg2(v0, v2)
9957 return true
9958 }
9959 }
9960 break
9961 }
9962
9963
9964 for {
9965 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
9966 if v_0.Op != ssaop.OpZeroExt8to16 {
9967 continue
9968 }
9969 v_0_0 := v_0.Args[0]
9970 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
9971 continue
9972 }
9973 x := v_0_0.Args[0]
9974 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != 1 {
9975 continue
9976 }
9977 v.CopyOf(x)
9978 return true
9979 }
9980 break
9981 }
9982
9983
9984 for {
9985 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
9986 if v_0.Op != ssaop.OpZeroExt8to16 {
9987 continue
9988 }
9989 v_0_0 := v_0.Args[0]
9990 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
9991 continue
9992 }
9993 x := v_0_0.Args[0]
9994 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != 0 {
9995 continue
9996 }
9997 v.Reset(ssaop.OpNot)
9998 v.AddArg(x)
9999 return true
10000 }
10001 break
10002 }
10003 return false
10004 }
10005 func rewriteValue_OpEq32(v *ssa.Value) bool {
10006 v_1 := v.Args[1]
10007 v_0 := v.Args[0]
10008 b := v.Block
10009
10010
10011 for {
10012 x := v_0
10013 if x != v_1 {
10014 break
10015 }
10016 v.Reset(ssaop.OpConstBool)
10017 v.AuxInt = ssa.BoolToAuxInt(true)
10018 return true
10019 }
10020
10021
10022
10023 for {
10024 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10025 if v_0.Op != ssaop.OpConst32 {
10026 continue
10027 }
10028 t := v_0.Type
10029 c := ssa.AuxIntToInt32(v_0.AuxInt)
10030 o := v_1
10031 if o.Op != ssaop.OpAdd32 {
10032 continue
10033 }
10034 _ = o.Args[1]
10035 o_0 := o.Args[0]
10036 o_1 := o.Args[1]
10037 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
10038 if o_0.Op != ssaop.OpConst32 {
10039 continue
10040 }
10041 d := ssa.AuxIntToInt32(o_0.AuxInt)
10042 x := o_1
10043 if !(o.Uses == 1) {
10044 continue
10045 }
10046 v.Reset(ssaop.OpEq32)
10047 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
10048 v0.AuxInt = ssa.Int32ToAuxInt(c - d)
10049 v.AddArg2(v0, x)
10050 return true
10051 }
10052 }
10053 break
10054 }
10055
10056
10057
10058 for {
10059 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10060 if v_0.Op != ssaop.OpConst32 {
10061 continue
10062 }
10063 t := v_0.Type
10064 c := ssa.AuxIntToInt32(v_0.AuxInt)
10065 o := v_1
10066 if o.Op != ssaop.OpSub32 {
10067 continue
10068 }
10069 _ = o.Args[1]
10070 x := o.Args[0]
10071 o_1 := o.Args[1]
10072 if o_1.Op != ssaop.OpConst32 {
10073 continue
10074 }
10075 d := ssa.AuxIntToInt32(o_1.AuxInt)
10076 if !(o.Uses == 1) {
10077 continue
10078 }
10079 v.Reset(ssaop.OpEq32)
10080 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
10081 v0.AuxInt = ssa.Int32ToAuxInt(c + d)
10082 v.AddArg2(v0, x)
10083 return true
10084 }
10085 break
10086 }
10087
10088
10089
10090 for {
10091 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10092 if v_0.Op != ssaop.OpConst32 {
10093 continue
10094 }
10095 t := v_0.Type
10096 c := ssa.AuxIntToInt32(v_0.AuxInt)
10097 o := v_1
10098 if o.Op != ssaop.OpSub32 {
10099 continue
10100 }
10101 x := o.Args[1]
10102 o_0 := o.Args[0]
10103 if o_0.Op != ssaop.OpConst32 {
10104 continue
10105 }
10106 d := ssa.AuxIntToInt32(o_0.AuxInt)
10107 if !(o.Uses == 1) {
10108 continue
10109 }
10110 v.Reset(ssaop.OpEq32)
10111 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
10112 v0.AuxInt = ssa.Int32ToAuxInt(d - c)
10113 v.AddArg2(v0, x)
10114 return true
10115 }
10116 break
10117 }
10118
10119
10120
10121 for {
10122 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10123 if v_0.Op != ssaop.OpConst32 {
10124 continue
10125 }
10126 t := v_0.Type
10127 c := ssa.AuxIntToInt32(v_0.AuxInt)
10128 o := v_1
10129 if o.Op != ssaop.OpXor32 {
10130 continue
10131 }
10132 _ = o.Args[1]
10133 o_0 := o.Args[0]
10134 o_1 := o.Args[1]
10135 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
10136 if o_0.Op != ssaop.OpConst32 {
10137 continue
10138 }
10139 d := ssa.AuxIntToInt32(o_0.AuxInt)
10140 x := o_1
10141 if !(o.Uses == 1) {
10142 continue
10143 }
10144 v.Reset(ssaop.OpEq32)
10145 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
10146 v0.AuxInt = ssa.Int32ToAuxInt(d ^ c)
10147 v.AddArg2(v0, x)
10148 return true
10149 }
10150 }
10151 break
10152 }
10153
10154
10155
10156 for {
10157 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10158 if v_0.Op != ssaop.OpConst32 {
10159 continue
10160 }
10161 t := v_0.Type
10162 c := ssa.AuxIntToInt32(v_0.AuxInt)
10163 o := v_1
10164 if o.Op != ssaop.OpCom32 {
10165 continue
10166 }
10167 x := o.Args[0]
10168 if !(o.Uses == 1) {
10169 continue
10170 }
10171 v.Reset(ssaop.OpEq32)
10172 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
10173 v0.AuxInt = ssa.Int32ToAuxInt(^c)
10174 v.AddArg2(v0, x)
10175 return true
10176 }
10177 break
10178 }
10179
10180
10181
10182 for {
10183 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10184 if v_0.Op != ssaop.OpConst32 {
10185 continue
10186 }
10187 t := v_0.Type
10188 c := ssa.AuxIntToInt32(v_0.AuxInt)
10189 o := v_1
10190 if o.Op != ssaop.OpNeg32 {
10191 continue
10192 }
10193 x := o.Args[0]
10194 if !(o.Uses == 1) {
10195 continue
10196 }
10197 v.Reset(ssaop.OpEq32)
10198 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
10199 v0.AuxInt = ssa.Int32ToAuxInt(-c)
10200 v.AddArg2(v0, x)
10201 return true
10202 }
10203 break
10204 }
10205
10206
10207
10208 for {
10209 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10210 if v_0.Op != ssaop.OpConst32 {
10211 continue
10212 }
10213 t := v_0.Type
10214 c := ssa.AuxIntToInt32(v_0.AuxInt)
10215 o := v_1
10216 if o.Op != ssaop.OpMul32 {
10217 continue
10218 }
10219 _ = o.Args[1]
10220 o_0 := o.Args[0]
10221 o_1 := o.Args[1]
10222 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
10223 if o_0.Op != ssaop.OpConst32 {
10224 continue
10225 }
10226 d := ssa.AuxIntToInt32(o_0.AuxInt)
10227 x := o_1
10228 if !(uint32(d)%2 == 1 && o.Uses == 1) {
10229 continue
10230 }
10231 v.Reset(ssaop.OpEq32)
10232 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
10233 v0.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) * uint32(modularMultiplicativeInverse(uint64(d)))))
10234 v.AddArg2(v0, x)
10235 return true
10236 }
10237 }
10238 break
10239 }
10240
10241
10242 for {
10243 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10244 if v_0.Op != ssaop.OpConst32 {
10245 continue
10246 }
10247 c := ssa.AuxIntToInt32(v_0.AuxInt)
10248 if v_1.Op != ssaop.OpConst32 {
10249 continue
10250 }
10251 d := ssa.AuxIntToInt32(v_1.AuxInt)
10252 v.Reset(ssaop.OpConstBool)
10253 v.AuxInt = ssa.BoolToAuxInt(c == d)
10254 return true
10255 }
10256 break
10257 }
10258
10259
10260
10261 for {
10262 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10263 s := v_0
10264 if s.Op != ssaop.OpSub32 {
10265 continue
10266 }
10267 y := s.Args[1]
10268 x := s.Args[0]
10269 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != 0 || !(s.Uses == 1) {
10270 continue
10271 }
10272 v.Reset(ssaop.OpEq32)
10273 v.AddArg2(x, y)
10274 return true
10275 }
10276 break
10277 }
10278
10279
10280
10281 for {
10282 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10283 if v_0.Op != ssaop.OpAnd32 {
10284 continue
10285 }
10286 t := v_0.Type
10287 _ = v_0.Args[1]
10288 v_0_0 := v_0.Args[0]
10289 v_0_1 := v_0.Args[1]
10290 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
10291 x := v_0_0
10292 if v_0_1.Op != ssaop.OpConst32 || v_0_1.Type != t {
10293 continue
10294 }
10295 y := ssa.AuxIntToInt32(v_0_1.AuxInt)
10296 if v_1.Op != ssaop.OpConst32 || v_1.Type != t || ssa.AuxIntToInt32(v_1.AuxInt) != y || !(ssa.OneBit(y)) {
10297 continue
10298 }
10299 v.Reset(ssaop.OpNeq32)
10300 v0 := b.NewValue0(v.Pos, ssaop.OpAnd32, t)
10301 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
10302 v1.AuxInt = ssa.Int32ToAuxInt(y)
10303 v0.AddArg2(x, v1)
10304 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
10305 v2.AuxInt = ssa.Int32ToAuxInt(0)
10306 v.AddArg2(v0, v2)
10307 return true
10308 }
10309 }
10310 break
10311 }
10312
10313
10314 for {
10315 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10316 if v_0.Op != ssaop.OpZeroExt8to32 {
10317 continue
10318 }
10319 v_0_0 := v_0.Args[0]
10320 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
10321 continue
10322 }
10323 x := v_0_0.Args[0]
10324 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != 1 {
10325 continue
10326 }
10327 v.CopyOf(x)
10328 return true
10329 }
10330 break
10331 }
10332
10333
10334 for {
10335 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10336 if v_0.Op != ssaop.OpZeroExt8to32 {
10337 continue
10338 }
10339 v_0_0 := v_0.Args[0]
10340 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
10341 continue
10342 }
10343 x := v_0_0.Args[0]
10344 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != 0 {
10345 continue
10346 }
10347 v.Reset(ssaop.OpNot)
10348 v.AddArg(x)
10349 return true
10350 }
10351 break
10352 }
10353 return false
10354 }
10355 func rewriteValue_OpEq32F(v *ssa.Value) bool {
10356 v_1 := v.Args[1]
10357 v_0 := v.Args[0]
10358
10359
10360 for {
10361 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10362 if v_0.Op != ssaop.OpConst32F {
10363 continue
10364 }
10365 c := ssa.AuxIntToFloat32(v_0.AuxInt)
10366 if v_1.Op != ssaop.OpConst32F {
10367 continue
10368 }
10369 d := ssa.AuxIntToFloat32(v_1.AuxInt)
10370 v.Reset(ssaop.OpConstBool)
10371 v.AuxInt = ssa.BoolToAuxInt(c == d)
10372 return true
10373 }
10374 break
10375 }
10376 return false
10377 }
10378 func rewriteValue_OpEq64(v *ssa.Value) bool {
10379 v_1 := v.Args[1]
10380 v_0 := v.Args[0]
10381 b := v.Block
10382
10383
10384 for {
10385 x := v_0
10386 if x != v_1 {
10387 break
10388 }
10389 v.Reset(ssaop.OpConstBool)
10390 v.AuxInt = ssa.BoolToAuxInt(true)
10391 return true
10392 }
10393
10394
10395
10396 for {
10397 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10398 if v_0.Op != ssaop.OpConst64 {
10399 continue
10400 }
10401 t := v_0.Type
10402 c := ssa.AuxIntToInt64(v_0.AuxInt)
10403 o := v_1
10404 if o.Op != ssaop.OpAdd64 {
10405 continue
10406 }
10407 _ = o.Args[1]
10408 o_0 := o.Args[0]
10409 o_1 := o.Args[1]
10410 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
10411 if o_0.Op != ssaop.OpConst64 {
10412 continue
10413 }
10414 d := ssa.AuxIntToInt64(o_0.AuxInt)
10415 x := o_1
10416 if !(o.Uses == 1) {
10417 continue
10418 }
10419 v.Reset(ssaop.OpEq64)
10420 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
10421 v0.AuxInt = ssa.Int64ToAuxInt(c - d)
10422 v.AddArg2(v0, x)
10423 return true
10424 }
10425 }
10426 break
10427 }
10428
10429
10430
10431 for {
10432 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10433 if v_0.Op != ssaop.OpConst64 {
10434 continue
10435 }
10436 t := v_0.Type
10437 c := ssa.AuxIntToInt64(v_0.AuxInt)
10438 o := v_1
10439 if o.Op != ssaop.OpSub64 {
10440 continue
10441 }
10442 _ = o.Args[1]
10443 x := o.Args[0]
10444 o_1 := o.Args[1]
10445 if o_1.Op != ssaop.OpConst64 {
10446 continue
10447 }
10448 d := ssa.AuxIntToInt64(o_1.AuxInt)
10449 if !(o.Uses == 1) {
10450 continue
10451 }
10452 v.Reset(ssaop.OpEq64)
10453 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
10454 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
10455 v.AddArg2(v0, x)
10456 return true
10457 }
10458 break
10459 }
10460
10461
10462
10463 for {
10464 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10465 if v_0.Op != ssaop.OpConst64 {
10466 continue
10467 }
10468 t := v_0.Type
10469 c := ssa.AuxIntToInt64(v_0.AuxInt)
10470 o := v_1
10471 if o.Op != ssaop.OpSub64 {
10472 continue
10473 }
10474 x := o.Args[1]
10475 o_0 := o.Args[0]
10476 if o_0.Op != ssaop.OpConst64 {
10477 continue
10478 }
10479 d := ssa.AuxIntToInt64(o_0.AuxInt)
10480 if !(o.Uses == 1) {
10481 continue
10482 }
10483 v.Reset(ssaop.OpEq64)
10484 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
10485 v0.AuxInt = ssa.Int64ToAuxInt(d - c)
10486 v.AddArg2(v0, x)
10487 return true
10488 }
10489 break
10490 }
10491
10492
10493
10494 for {
10495 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10496 if v_0.Op != ssaop.OpConst64 {
10497 continue
10498 }
10499 t := v_0.Type
10500 c := ssa.AuxIntToInt64(v_0.AuxInt)
10501 o := v_1
10502 if o.Op != ssaop.OpXor64 {
10503 continue
10504 }
10505 _ = o.Args[1]
10506 o_0 := o.Args[0]
10507 o_1 := o.Args[1]
10508 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
10509 if o_0.Op != ssaop.OpConst64 {
10510 continue
10511 }
10512 d := ssa.AuxIntToInt64(o_0.AuxInt)
10513 x := o_1
10514 if !(o.Uses == 1) {
10515 continue
10516 }
10517 v.Reset(ssaop.OpEq64)
10518 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
10519 v0.AuxInt = ssa.Int64ToAuxInt(d ^ c)
10520 v.AddArg2(v0, x)
10521 return true
10522 }
10523 }
10524 break
10525 }
10526
10527
10528
10529 for {
10530 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10531 if v_0.Op != ssaop.OpConst64 {
10532 continue
10533 }
10534 t := v_0.Type
10535 c := ssa.AuxIntToInt64(v_0.AuxInt)
10536 o := v_1
10537 if o.Op != ssaop.OpCom64 {
10538 continue
10539 }
10540 x := o.Args[0]
10541 if !(o.Uses == 1) {
10542 continue
10543 }
10544 v.Reset(ssaop.OpEq64)
10545 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
10546 v0.AuxInt = ssa.Int64ToAuxInt(^c)
10547 v.AddArg2(v0, x)
10548 return true
10549 }
10550 break
10551 }
10552
10553
10554
10555 for {
10556 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10557 if v_0.Op != ssaop.OpConst64 {
10558 continue
10559 }
10560 t := v_0.Type
10561 c := ssa.AuxIntToInt64(v_0.AuxInt)
10562 o := v_1
10563 if o.Op != ssaop.OpNeg64 {
10564 continue
10565 }
10566 x := o.Args[0]
10567 if !(o.Uses == 1) {
10568 continue
10569 }
10570 v.Reset(ssaop.OpEq64)
10571 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
10572 v0.AuxInt = ssa.Int64ToAuxInt(-c)
10573 v.AddArg2(v0, x)
10574 return true
10575 }
10576 break
10577 }
10578
10579
10580
10581 for {
10582 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10583 if v_0.Op != ssaop.OpConst64 {
10584 continue
10585 }
10586 t := v_0.Type
10587 c := ssa.AuxIntToInt64(v_0.AuxInt)
10588 o := v_1
10589 if o.Op != ssaop.OpMul64 {
10590 continue
10591 }
10592 _ = o.Args[1]
10593 o_0 := o.Args[0]
10594 o_1 := o.Args[1]
10595 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
10596 if o_0.Op != ssaop.OpConst64 {
10597 continue
10598 }
10599 d := ssa.AuxIntToInt64(o_0.AuxInt)
10600 x := o_1
10601 if !(uint64(d)%2 == 1 && o.Uses == 1) {
10602 continue
10603 }
10604 v.Reset(ssaop.OpEq64)
10605 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
10606 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint64(c) * modularMultiplicativeInverse(uint64(d))))
10607 v.AddArg2(v0, x)
10608 return true
10609 }
10610 }
10611 break
10612 }
10613
10614
10615 for {
10616 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10617 if v_0.Op != ssaop.OpConst64 {
10618 continue
10619 }
10620 c := ssa.AuxIntToInt64(v_0.AuxInt)
10621 if v_1.Op != ssaop.OpConst64 {
10622 continue
10623 }
10624 d := ssa.AuxIntToInt64(v_1.AuxInt)
10625 v.Reset(ssaop.OpConstBool)
10626 v.AuxInt = ssa.BoolToAuxInt(c == d)
10627 return true
10628 }
10629 break
10630 }
10631
10632
10633
10634 for {
10635 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10636 s := v_0
10637 if s.Op != ssaop.OpSub64 {
10638 continue
10639 }
10640 y := s.Args[1]
10641 x := s.Args[0]
10642 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 || !(s.Uses == 1) {
10643 continue
10644 }
10645 v.Reset(ssaop.OpEq64)
10646 v.AddArg2(x, y)
10647 return true
10648 }
10649 break
10650 }
10651
10652
10653
10654 for {
10655 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10656 if v_0.Op != ssaop.OpAnd64 {
10657 continue
10658 }
10659 t := v_0.Type
10660 _ = v_0.Args[1]
10661 v_0_0 := v_0.Args[0]
10662 v_0_1 := v_0.Args[1]
10663 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
10664 x := v_0_0
10665 if v_0_1.Op != ssaop.OpConst64 || v_0_1.Type != t {
10666 continue
10667 }
10668 y := ssa.AuxIntToInt64(v_0_1.AuxInt)
10669 if v_1.Op != ssaop.OpConst64 || v_1.Type != t || ssa.AuxIntToInt64(v_1.AuxInt) != y || !(ssa.OneBit(y)) {
10670 continue
10671 }
10672 v.Reset(ssaop.OpNeq64)
10673 v0 := b.NewValue0(v.Pos, ssaop.OpAnd64, t)
10674 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
10675 v1.AuxInt = ssa.Int64ToAuxInt(y)
10676 v0.AddArg2(x, v1)
10677 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
10678 v2.AuxInt = ssa.Int64ToAuxInt(0)
10679 v.AddArg2(v0, v2)
10680 return true
10681 }
10682 }
10683 break
10684 }
10685
10686
10687 for {
10688 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10689 if v_0.Op != ssaop.OpZeroExt8to64 {
10690 continue
10691 }
10692 v_0_0 := v_0.Args[0]
10693 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
10694 continue
10695 }
10696 x := v_0_0.Args[0]
10697 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 1 {
10698 continue
10699 }
10700 v.CopyOf(x)
10701 return true
10702 }
10703 break
10704 }
10705
10706
10707 for {
10708 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10709 if v_0.Op != ssaop.OpZeroExt8to64 {
10710 continue
10711 }
10712 v_0_0 := v_0.Args[0]
10713 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
10714 continue
10715 }
10716 x := v_0_0.Args[0]
10717 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
10718 continue
10719 }
10720 v.Reset(ssaop.OpNot)
10721 v.AddArg(x)
10722 return true
10723 }
10724 break
10725 }
10726 return false
10727 }
10728 func rewriteValue_OpEq64F(v *ssa.Value) bool {
10729 v_1 := v.Args[1]
10730 v_0 := v.Args[0]
10731
10732
10733 for {
10734 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10735 if v_0.Op != ssaop.OpConst64F {
10736 continue
10737 }
10738 c := ssa.AuxIntToFloat64(v_0.AuxInt)
10739 if v_1.Op != ssaop.OpConst64F {
10740 continue
10741 }
10742 d := ssa.AuxIntToFloat64(v_1.AuxInt)
10743 v.Reset(ssaop.OpConstBool)
10744 v.AuxInt = ssa.BoolToAuxInt(c == d)
10745 return true
10746 }
10747 break
10748 }
10749 return false
10750 }
10751 func rewriteValue_OpEq8(v *ssa.Value) bool {
10752 v_1 := v.Args[1]
10753 v_0 := v.Args[0]
10754 b := v.Block
10755 config := b.Func.Config
10756 typ := &b.Func.Config.Types
10757
10758
10759 for {
10760 x := v_0
10761 if x != v_1 {
10762 break
10763 }
10764 v.Reset(ssaop.OpConstBool)
10765 v.AuxInt = ssa.BoolToAuxInt(true)
10766 return true
10767 }
10768
10769
10770
10771 for {
10772 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10773 if v_0.Op != ssaop.OpConst8 {
10774 continue
10775 }
10776 t := v_0.Type
10777 c := ssa.AuxIntToInt8(v_0.AuxInt)
10778 o := v_1
10779 if o.Op != ssaop.OpAdd8 {
10780 continue
10781 }
10782 _ = o.Args[1]
10783 o_0 := o.Args[0]
10784 o_1 := o.Args[1]
10785 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
10786 if o_0.Op != ssaop.OpConst8 {
10787 continue
10788 }
10789 d := ssa.AuxIntToInt8(o_0.AuxInt)
10790 x := o_1
10791 if !(o.Uses == 1) {
10792 continue
10793 }
10794 v.Reset(ssaop.OpEq8)
10795 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
10796 v0.AuxInt = ssa.Int8ToAuxInt(c - d)
10797 v.AddArg2(v0, x)
10798 return true
10799 }
10800 }
10801 break
10802 }
10803
10804
10805
10806 for {
10807 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10808 if v_0.Op != ssaop.OpConst8 {
10809 continue
10810 }
10811 t := v_0.Type
10812 c := ssa.AuxIntToInt8(v_0.AuxInt)
10813 o := v_1
10814 if o.Op != ssaop.OpSub8 {
10815 continue
10816 }
10817 _ = o.Args[1]
10818 x := o.Args[0]
10819 o_1 := o.Args[1]
10820 if o_1.Op != ssaop.OpConst8 {
10821 continue
10822 }
10823 d := ssa.AuxIntToInt8(o_1.AuxInt)
10824 if !(o.Uses == 1) {
10825 continue
10826 }
10827 v.Reset(ssaop.OpEq8)
10828 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
10829 v0.AuxInt = ssa.Int8ToAuxInt(c + d)
10830 v.AddArg2(v0, x)
10831 return true
10832 }
10833 break
10834 }
10835
10836
10837
10838 for {
10839 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10840 if v_0.Op != ssaop.OpConst8 {
10841 continue
10842 }
10843 t := v_0.Type
10844 c := ssa.AuxIntToInt8(v_0.AuxInt)
10845 o := v_1
10846 if o.Op != ssaop.OpSub8 {
10847 continue
10848 }
10849 x := o.Args[1]
10850 o_0 := o.Args[0]
10851 if o_0.Op != ssaop.OpConst8 {
10852 continue
10853 }
10854 d := ssa.AuxIntToInt8(o_0.AuxInt)
10855 if !(o.Uses == 1) {
10856 continue
10857 }
10858 v.Reset(ssaop.OpEq8)
10859 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
10860 v0.AuxInt = ssa.Int8ToAuxInt(d - c)
10861 v.AddArg2(v0, x)
10862 return true
10863 }
10864 break
10865 }
10866
10867
10868
10869 for {
10870 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10871 if v_0.Op != ssaop.OpConst8 {
10872 continue
10873 }
10874 t := v_0.Type
10875 c := ssa.AuxIntToInt8(v_0.AuxInt)
10876 o := v_1
10877 if o.Op != ssaop.OpXor8 {
10878 continue
10879 }
10880 _ = o.Args[1]
10881 o_0 := o.Args[0]
10882 o_1 := o.Args[1]
10883 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
10884 if o_0.Op != ssaop.OpConst8 {
10885 continue
10886 }
10887 d := ssa.AuxIntToInt8(o_0.AuxInt)
10888 x := o_1
10889 if !(o.Uses == 1) {
10890 continue
10891 }
10892 v.Reset(ssaop.OpEq8)
10893 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
10894 v0.AuxInt = ssa.Int8ToAuxInt(d ^ c)
10895 v.AddArg2(v0, x)
10896 return true
10897 }
10898 }
10899 break
10900 }
10901
10902
10903
10904 for {
10905 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10906 if v_0.Op != ssaop.OpConst8 {
10907 continue
10908 }
10909 t := v_0.Type
10910 c := ssa.AuxIntToInt8(v_0.AuxInt)
10911 o := v_1
10912 if o.Op != ssaop.OpCom8 {
10913 continue
10914 }
10915 x := o.Args[0]
10916 if !(o.Uses == 1) {
10917 continue
10918 }
10919 v.Reset(ssaop.OpEq8)
10920 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
10921 v0.AuxInt = ssa.Int8ToAuxInt(^c)
10922 v.AddArg2(v0, x)
10923 return true
10924 }
10925 break
10926 }
10927
10928
10929
10930 for {
10931 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10932 if v_0.Op != ssaop.OpConst8 {
10933 continue
10934 }
10935 t := v_0.Type
10936 c := ssa.AuxIntToInt8(v_0.AuxInt)
10937 o := v_1
10938 if o.Op != ssaop.OpNeg8 {
10939 continue
10940 }
10941 x := o.Args[0]
10942 if !(o.Uses == 1) {
10943 continue
10944 }
10945 v.Reset(ssaop.OpEq8)
10946 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
10947 v0.AuxInt = ssa.Int8ToAuxInt(-c)
10948 v.AddArg2(v0, x)
10949 return true
10950 }
10951 break
10952 }
10953
10954
10955
10956 for {
10957 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10958 if v_0.Op != ssaop.OpConst8 {
10959 continue
10960 }
10961 t := v_0.Type
10962 c := ssa.AuxIntToInt8(v_0.AuxInt)
10963 o := v_1
10964 if o.Op != ssaop.OpMul8 {
10965 continue
10966 }
10967 _ = o.Args[1]
10968 o_0 := o.Args[0]
10969 o_1 := o.Args[1]
10970 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
10971 if o_0.Op != ssaop.OpConst8 {
10972 continue
10973 }
10974 d := ssa.AuxIntToInt8(o_0.AuxInt)
10975 x := o_1
10976 if !(uint8(d)%2 == 1 && o.Uses == 1) {
10977 continue
10978 }
10979 v.Reset(ssaop.OpEq8)
10980 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
10981 v0.AuxInt = ssa.Int8ToAuxInt(int8(uint8(c) * uint8(modularMultiplicativeInverse(uint64(d)))))
10982 v.AddArg2(v0, x)
10983 return true
10984 }
10985 }
10986 break
10987 }
10988
10989
10990 for {
10991 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
10992 if v_0.Op != ssaop.OpConst8 {
10993 continue
10994 }
10995 c := ssa.AuxIntToInt8(v_0.AuxInt)
10996 if v_1.Op != ssaop.OpConst8 {
10997 continue
10998 }
10999 d := ssa.AuxIntToInt8(v_1.AuxInt)
11000 v.Reset(ssaop.OpConstBool)
11001 v.AuxInt = ssa.BoolToAuxInt(c == d)
11002 return true
11003 }
11004 break
11005 }
11006
11007
11008
11009 for {
11010 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11011 if v_0.Op != ssaop.OpMod8u {
11012 continue
11013 }
11014 _ = v_0.Args[1]
11015 x := v_0.Args[0]
11016 v_0_1 := v_0.Args[1]
11017 if v_0_1.Op != ssaop.OpConst8 {
11018 continue
11019 }
11020 c := ssa.AuxIntToInt8(v_0_1.AuxInt)
11021 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != 0 || !(x.Op != ssaop.OpConst8 && ssa.UdivisibleOK8(c) && !hasSmallRotate(config)) {
11022 continue
11023 }
11024 v.Reset(ssaop.OpEq32)
11025 v0 := b.NewValue0(v.Pos, ssaop.OpMod32u, typ.UInt32)
11026 v1 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
11027 v1.AddArg(x)
11028 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.UInt32)
11029 v2.AuxInt = ssa.Int32ToAuxInt(int32(uint8(c)))
11030 v0.AddArg2(v1, v2)
11031 v3 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.UInt32)
11032 v3.AuxInt = ssa.Int32ToAuxInt(0)
11033 v.AddArg2(v0, v3)
11034 return true
11035 }
11036 break
11037 }
11038
11039
11040
11041 for {
11042 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11043 if v_0.Op != ssaop.OpMod8 {
11044 continue
11045 }
11046 _ = v_0.Args[1]
11047 x := v_0.Args[0]
11048 v_0_1 := v_0.Args[1]
11049 if v_0_1.Op != ssaop.OpConst8 {
11050 continue
11051 }
11052 c := ssa.AuxIntToInt8(v_0_1.AuxInt)
11053 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != 0 || !(x.Op != ssaop.OpConst8 && ssa.SdivisibleOK8(c) && !hasSmallRotate(config)) {
11054 continue
11055 }
11056 v.Reset(ssaop.OpEq32)
11057 v0 := b.NewValue0(v.Pos, ssaop.OpMod32, typ.Int32)
11058 v1 := b.NewValue0(v.Pos, ssaop.OpSignExt8to32, typ.Int32)
11059 v1.AddArg(x)
11060 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
11061 v2.AuxInt = ssa.Int32ToAuxInt(int32(c))
11062 v0.AddArg2(v1, v2)
11063 v3 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
11064 v3.AuxInt = ssa.Int32ToAuxInt(0)
11065 v.AddArg2(v0, v3)
11066 return true
11067 }
11068 break
11069 }
11070
11071
11072
11073 for {
11074 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11075 s := v_0
11076 if s.Op != ssaop.OpSub8 {
11077 continue
11078 }
11079 y := s.Args[1]
11080 x := s.Args[0]
11081 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != 0 || !(s.Uses == 1) {
11082 continue
11083 }
11084 v.Reset(ssaop.OpEq8)
11085 v.AddArg2(x, y)
11086 return true
11087 }
11088 break
11089 }
11090
11091
11092
11093 for {
11094 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11095 if v_0.Op != ssaop.OpAnd8 {
11096 continue
11097 }
11098 t := v_0.Type
11099 _ = v_0.Args[1]
11100 v_0_0 := v_0.Args[0]
11101 v_0_1 := v_0.Args[1]
11102 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
11103 x := v_0_0
11104 if v_0_1.Op != ssaop.OpConst8 || v_0_1.Type != t {
11105 continue
11106 }
11107 y := ssa.AuxIntToInt8(v_0_1.AuxInt)
11108 if v_1.Op != ssaop.OpConst8 || v_1.Type != t || ssa.AuxIntToInt8(v_1.AuxInt) != y || !(ssa.OneBit(y)) {
11109 continue
11110 }
11111 v.Reset(ssaop.OpNeq8)
11112 v0 := b.NewValue0(v.Pos, ssaop.OpAnd8, t)
11113 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
11114 v1.AuxInt = ssa.Int8ToAuxInt(y)
11115 v0.AddArg2(x, v1)
11116 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
11117 v2.AuxInt = ssa.Int8ToAuxInt(0)
11118 v.AddArg2(v0, v2)
11119 return true
11120 }
11121 }
11122 break
11123 }
11124
11125
11126 for {
11127 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11128 if v_0.Op != ssaop.OpCvtBoolToUint8 {
11129 continue
11130 }
11131 x := v_0.Args[0]
11132 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != 1 {
11133 continue
11134 }
11135 v.CopyOf(x)
11136 return true
11137 }
11138 break
11139 }
11140
11141
11142 for {
11143 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11144 if v_0.Op != ssaop.OpCvtBoolToUint8 {
11145 continue
11146 }
11147 x := v_0.Args[0]
11148 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != 0 {
11149 continue
11150 }
11151 v.Reset(ssaop.OpNot)
11152 v.AddArg(x)
11153 return true
11154 }
11155 break
11156 }
11157 return false
11158 }
11159 func rewriteValue_OpEqB(v *ssa.Value) bool {
11160 v_1 := v.Args[1]
11161 v_0 := v.Args[0]
11162
11163
11164 for {
11165 x := v_0
11166 if x != v_1 {
11167 break
11168 }
11169 v.Reset(ssaop.OpConstBool)
11170 v.AuxInt = ssa.BoolToAuxInt(true)
11171 return true
11172 }
11173
11174
11175 for {
11176 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11177 if v_0.Op != ssaop.OpConstBool {
11178 continue
11179 }
11180 c := ssa.AuxIntToBool(v_0.AuxInt)
11181 if v_1.Op != ssaop.OpConstBool {
11182 continue
11183 }
11184 d := ssa.AuxIntToBool(v_1.AuxInt)
11185 v.Reset(ssaop.OpConstBool)
11186 v.AuxInt = ssa.BoolToAuxInt(c == d)
11187 return true
11188 }
11189 break
11190 }
11191
11192
11193 for {
11194 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11195 if v_0.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_0.AuxInt) != false {
11196 continue
11197 }
11198 x := v_1
11199 v.Reset(ssaop.OpNot)
11200 v.AddArg(x)
11201 return true
11202 }
11203 break
11204 }
11205
11206
11207 for {
11208 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11209 if v_0.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_0.AuxInt) != true {
11210 continue
11211 }
11212 x := v_1
11213 v.CopyOf(x)
11214 return true
11215 }
11216 break
11217 }
11218
11219
11220 for {
11221 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11222 if v_0.Op != ssaop.OpNot {
11223 continue
11224 }
11225 x := v_0.Args[0]
11226 y := v_1
11227 v.Reset(ssaop.OpNeqB)
11228 v.AddArg2(x, y)
11229 return true
11230 }
11231 break
11232 }
11233 return false
11234 }
11235 func rewriteValue_OpEqInter(v *ssa.Value) bool {
11236 v_1 := v.Args[1]
11237 v_0 := v.Args[0]
11238 b := v.Block
11239 typ := &b.Func.Config.Types
11240
11241
11242 for {
11243 x := v_0
11244 y := v_1
11245 v.Reset(ssaop.OpEqPtr)
11246 v0 := b.NewValue0(v.Pos, ssaop.OpITab, typ.Uintptr)
11247 v0.AddArg(x)
11248 v1 := b.NewValue0(v.Pos, ssaop.OpITab, typ.Uintptr)
11249 v1.AddArg(y)
11250 v.AddArg2(v0, v1)
11251 return true
11252 }
11253 }
11254 func rewriteValue_OpEqPtr(v *ssa.Value) bool {
11255 v_1 := v.Args[1]
11256 v_0 := v.Args[0]
11257 b := v.Block
11258 typ := &b.Func.Config.Types
11259
11260
11261 for {
11262 x := v_0
11263 if x != v_1 {
11264 break
11265 }
11266 v.Reset(ssaop.OpConstBool)
11267 v.AuxInt = ssa.BoolToAuxInt(true)
11268 return true
11269 }
11270
11271
11272 for {
11273 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11274 if v_0.Op != ssaop.OpAddr {
11275 continue
11276 }
11277 x := ssa.AuxToSym(v_0.Aux)
11278 if v_1.Op != ssaop.OpAddr {
11279 continue
11280 }
11281 y := ssa.AuxToSym(v_1.Aux)
11282 v.Reset(ssaop.OpConstBool)
11283 v.AuxInt = ssa.BoolToAuxInt(x == y)
11284 return true
11285 }
11286 break
11287 }
11288
11289
11290 for {
11291 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11292 if v_0.Op != ssaop.OpAddr {
11293 continue
11294 }
11295 x := ssa.AuxToSym(v_0.Aux)
11296 if v_1.Op != ssaop.OpOffPtr {
11297 continue
11298 }
11299 o := ssa.AuxIntToInt64(v_1.AuxInt)
11300 v_1_0 := v_1.Args[0]
11301 if v_1_0.Op != ssaop.OpAddr {
11302 continue
11303 }
11304 y := ssa.AuxToSym(v_1_0.Aux)
11305 v.Reset(ssaop.OpConstBool)
11306 v.AuxInt = ssa.BoolToAuxInt(x == y && o == 0)
11307 return true
11308 }
11309 break
11310 }
11311
11312
11313 for {
11314 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11315 if v_0.Op != ssaop.OpOffPtr {
11316 continue
11317 }
11318 o1 := ssa.AuxIntToInt64(v_0.AuxInt)
11319 v_0_0 := v_0.Args[0]
11320 if v_0_0.Op != ssaop.OpAddr {
11321 continue
11322 }
11323 x := ssa.AuxToSym(v_0_0.Aux)
11324 if v_1.Op != ssaop.OpOffPtr {
11325 continue
11326 }
11327 o2 := ssa.AuxIntToInt64(v_1.AuxInt)
11328 v_1_0 := v_1.Args[0]
11329 if v_1_0.Op != ssaop.OpAddr {
11330 continue
11331 }
11332 y := ssa.AuxToSym(v_1_0.Aux)
11333 v.Reset(ssaop.OpConstBool)
11334 v.AuxInt = ssa.BoolToAuxInt(x == y && o1 == o2)
11335 return true
11336 }
11337 break
11338 }
11339
11340
11341 for {
11342 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11343 if v_0.Op != ssaop.OpLocalAddr {
11344 continue
11345 }
11346 x := ssa.AuxToSym(v_0.Aux)
11347 if v_1.Op != ssaop.OpLocalAddr {
11348 continue
11349 }
11350 y := ssa.AuxToSym(v_1.Aux)
11351 v.Reset(ssaop.OpConstBool)
11352 v.AuxInt = ssa.BoolToAuxInt(x == y)
11353 return true
11354 }
11355 break
11356 }
11357
11358
11359 for {
11360 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11361 if v_0.Op != ssaop.OpLocalAddr {
11362 continue
11363 }
11364 x := ssa.AuxToSym(v_0.Aux)
11365 if v_1.Op != ssaop.OpOffPtr {
11366 continue
11367 }
11368 o := ssa.AuxIntToInt64(v_1.AuxInt)
11369 v_1_0 := v_1.Args[0]
11370 if v_1_0.Op != ssaop.OpLocalAddr {
11371 continue
11372 }
11373 y := ssa.AuxToSym(v_1_0.Aux)
11374 v.Reset(ssaop.OpConstBool)
11375 v.AuxInt = ssa.BoolToAuxInt(x == y && o == 0)
11376 return true
11377 }
11378 break
11379 }
11380
11381
11382 for {
11383 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11384 if v_0.Op != ssaop.OpOffPtr {
11385 continue
11386 }
11387 o1 := ssa.AuxIntToInt64(v_0.AuxInt)
11388 v_0_0 := v_0.Args[0]
11389 if v_0_0.Op != ssaop.OpLocalAddr {
11390 continue
11391 }
11392 x := ssa.AuxToSym(v_0_0.Aux)
11393 if v_1.Op != ssaop.OpOffPtr {
11394 continue
11395 }
11396 o2 := ssa.AuxIntToInt64(v_1.AuxInt)
11397 v_1_0 := v_1.Args[0]
11398 if v_1_0.Op != ssaop.OpLocalAddr {
11399 continue
11400 }
11401 y := ssa.AuxToSym(v_1_0.Aux)
11402 v.Reset(ssaop.OpConstBool)
11403 v.AuxInt = ssa.BoolToAuxInt(x == y && o1 == o2)
11404 return true
11405 }
11406 break
11407 }
11408
11409
11410
11411 for {
11412 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11413 if v_0.Op != ssaop.OpOffPtr {
11414 continue
11415 }
11416 o1 := ssa.AuxIntToInt64(v_0.AuxInt)
11417 p1 := v_0.Args[0]
11418 p2 := v_1
11419 if !(ssa.IsSamePtr(p1, p2)) {
11420 continue
11421 }
11422 v.Reset(ssaop.OpConstBool)
11423 v.AuxInt = ssa.BoolToAuxInt(o1 == 0)
11424 return true
11425 }
11426 break
11427 }
11428
11429
11430
11431 for {
11432 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11433 if v_0.Op != ssaop.OpOffPtr {
11434 continue
11435 }
11436 o1 := ssa.AuxIntToInt64(v_0.AuxInt)
11437 p1 := v_0.Args[0]
11438 if v_1.Op != ssaop.OpOffPtr {
11439 continue
11440 }
11441 o2 := ssa.AuxIntToInt64(v_1.AuxInt)
11442 p2 := v_1.Args[0]
11443 if !(ssa.IsSamePtr(p1, p2)) {
11444 continue
11445 }
11446 v.Reset(ssaop.OpConstBool)
11447 v.AuxInt = ssa.BoolToAuxInt(o1 == o2)
11448 return true
11449 }
11450 break
11451 }
11452
11453
11454 for {
11455 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11456 if v_0.Op != ssaop.OpConst32 {
11457 continue
11458 }
11459 c := ssa.AuxIntToInt32(v_0.AuxInt)
11460 if v_1.Op != ssaop.OpConst32 {
11461 continue
11462 }
11463 d := ssa.AuxIntToInt32(v_1.AuxInt)
11464 v.Reset(ssaop.OpConstBool)
11465 v.AuxInt = ssa.BoolToAuxInt(c == d)
11466 return true
11467 }
11468 break
11469 }
11470
11471
11472 for {
11473 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11474 if v_0.Op != ssaop.OpConst64 {
11475 continue
11476 }
11477 c := ssa.AuxIntToInt64(v_0.AuxInt)
11478 if v_1.Op != ssaop.OpConst64 {
11479 continue
11480 }
11481 d := ssa.AuxIntToInt64(v_1.AuxInt)
11482 v.Reset(ssaop.OpConstBool)
11483 v.AuxInt = ssa.BoolToAuxInt(c == d)
11484 return true
11485 }
11486 break
11487 }
11488
11489
11490 for {
11491 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11492 if v_0.Op != ssaop.OpConvert {
11493 continue
11494 }
11495 v_0_0 := v_0.Args[0]
11496 if v_0_0.Op != ssaop.OpAddr {
11497 continue
11498 }
11499 x := ssa.AuxToSym(v_0_0.Aux)
11500 if v_1.Op != ssaop.OpAddr {
11501 continue
11502 }
11503 y := ssa.AuxToSym(v_1.Aux)
11504 v.Reset(ssaop.OpConstBool)
11505 v.AuxInt = ssa.BoolToAuxInt(x == y)
11506 return true
11507 }
11508 break
11509 }
11510
11511
11512 for {
11513 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11514 if v_0.Op != ssaop.OpLocalAddr || v_1.Op != ssaop.OpAddr {
11515 continue
11516 }
11517 v.Reset(ssaop.OpConstBool)
11518 v.AuxInt = ssa.BoolToAuxInt(false)
11519 return true
11520 }
11521 break
11522 }
11523
11524
11525 for {
11526 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11527 if v_0.Op != ssaop.OpOffPtr {
11528 continue
11529 }
11530 v_0_0 := v_0.Args[0]
11531 if v_0_0.Op != ssaop.OpLocalAddr || v_1.Op != ssaop.OpAddr {
11532 continue
11533 }
11534 v.Reset(ssaop.OpConstBool)
11535 v.AuxInt = ssa.BoolToAuxInt(false)
11536 return true
11537 }
11538 break
11539 }
11540
11541
11542 for {
11543 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11544 if v_0.Op != ssaop.OpLocalAddr || v_1.Op != ssaop.OpOffPtr {
11545 continue
11546 }
11547 v_1_0 := v_1.Args[0]
11548 if v_1_0.Op != ssaop.OpAddr {
11549 continue
11550 }
11551 v.Reset(ssaop.OpConstBool)
11552 v.AuxInt = ssa.BoolToAuxInt(false)
11553 return true
11554 }
11555 break
11556 }
11557
11558
11559 for {
11560 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11561 if v_0.Op != ssaop.OpOffPtr {
11562 continue
11563 }
11564 v_0_0 := v_0.Args[0]
11565 if v_0_0.Op != ssaop.OpLocalAddr || v_1.Op != ssaop.OpOffPtr {
11566 continue
11567 }
11568 v_1_0 := v_1.Args[0]
11569 if v_1_0.Op != ssaop.OpAddr {
11570 continue
11571 }
11572 v.Reset(ssaop.OpConstBool)
11573 v.AuxInt = ssa.BoolToAuxInt(false)
11574 return true
11575 }
11576 break
11577 }
11578
11579
11580
11581 for {
11582 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11583 if v_0.Op != ssaop.OpAddPtr {
11584 continue
11585 }
11586 o1 := v_0.Args[1]
11587 p1 := v_0.Args[0]
11588 p2 := v_1
11589 if !(ssa.IsSamePtr(p1, p2)) {
11590 continue
11591 }
11592 v.Reset(ssaop.OpNot)
11593 v0 := b.NewValue0(v.Pos, ssaop.OpIsNonNil, typ.Bool)
11594 v0.AddArg(o1)
11595 v.AddArg(v0)
11596 return true
11597 }
11598 break
11599 }
11600
11601
11602 for {
11603 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11604 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
11605 continue
11606 }
11607 p := v_1
11608 v.Reset(ssaop.OpNot)
11609 v0 := b.NewValue0(v.Pos, ssaop.OpIsNonNil, typ.Bool)
11610 v0.AddArg(p)
11611 v.AddArg(v0)
11612 return true
11613 }
11614 break
11615 }
11616
11617
11618 for {
11619 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11620 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
11621 continue
11622 }
11623 p := v_1
11624 v.Reset(ssaop.OpNot)
11625 v0 := b.NewValue0(v.Pos, ssaop.OpIsNonNil, typ.Bool)
11626 v0.AddArg(p)
11627 v.AddArg(v0)
11628 return true
11629 }
11630 break
11631 }
11632
11633
11634 for {
11635 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
11636 if v_0.Op != ssaop.OpConstNil {
11637 continue
11638 }
11639 p := v_1
11640 v.Reset(ssaop.OpNot)
11641 v0 := b.NewValue0(v.Pos, ssaop.OpIsNonNil, typ.Bool)
11642 v0.AddArg(p)
11643 v.AddArg(v0)
11644 return true
11645 }
11646 break
11647 }
11648 return false
11649 }
11650 func rewriteValue_OpEqSlice(v *ssa.Value) bool {
11651 v_1 := v.Args[1]
11652 v_0 := v.Args[0]
11653 b := v.Block
11654 typ := &b.Func.Config.Types
11655
11656
11657 for {
11658 x := v_0
11659 y := v_1
11660 v.Reset(ssaop.OpEqPtr)
11661 v0 := b.NewValue0(v.Pos, ssaop.OpSlicePtr, typ.BytePtr)
11662 v0.AddArg(x)
11663 v1 := b.NewValue0(v.Pos, ssaop.OpSlicePtr, typ.BytePtr)
11664 v1.AddArg(y)
11665 v.AddArg2(v0, v1)
11666 return true
11667 }
11668 }
11669 func rewriteValue_OpFloor(v *ssa.Value) bool {
11670 v_0 := v.Args[0]
11671
11672
11673 for {
11674 if v_0.Op != ssaop.OpConst64F {
11675 break
11676 }
11677 c := ssa.AuxIntToFloat64(v_0.AuxInt)
11678 v.Reset(ssaop.OpConst64F)
11679 v.AuxInt = ssa.Float64ToAuxInt(math.Floor(c))
11680 return true
11681 }
11682 return false
11683 }
11684 func rewriteValue_OpIMake(v *ssa.Value) bool {
11685 v_1 := v.Args[1]
11686 v_0 := v.Args[0]
11687
11688
11689 for {
11690 if v_1.Op != ssaop.OpStructMake {
11691 break
11692 }
11693 v.CopyOf(ssa.ImakeOfStructMake(v))
11694 return true
11695 }
11696
11697
11698 for {
11699 _typ := v_0
11700 if v_1.Op != ssaop.OpArrayMake1 {
11701 break
11702 }
11703 val := v_1.Args[0]
11704 v.Reset(ssaop.OpIMake)
11705 v.AddArg2(_typ, val)
11706 return true
11707 }
11708 return false
11709 }
11710 func rewriteValue_OpInterLECall(v *ssa.Value) bool {
11711
11712
11713 for {
11714 if len(v.Args) < 1 {
11715 break
11716 }
11717 v_0 := v.Args[0]
11718 if v_0.Op != ssaop.OpAddr {
11719 break
11720 }
11721 fn := ssa.AuxToSym(v_0.Aux)
11722 v_0_0 := v_0.Args[0]
11723 if v_0_0.Op != ssaop.OpSB {
11724 break
11725 }
11726 v.CopyOf(devirtLECall(v, fn.(*obj.LSym)))
11727 return true
11728 }
11729 return false
11730 }
11731 func rewriteValue_OpIsInBounds(v *ssa.Value) bool {
11732 v_1 := v.Args[1]
11733 v_0 := v.Args[0]
11734
11735
11736
11737 for {
11738 if v_0.Op != ssaop.OpZeroExt8to32 || v_1.Op != ssaop.OpConst32 {
11739 break
11740 }
11741 c := ssa.AuxIntToInt32(v_1.AuxInt)
11742 if !((1 << 8) <= c) {
11743 break
11744 }
11745 v.Reset(ssaop.OpConstBool)
11746 v.AuxInt = ssa.BoolToAuxInt(true)
11747 return true
11748 }
11749
11750
11751
11752 for {
11753 if v_0.Op != ssaop.OpZeroExt8to64 || v_1.Op != ssaop.OpConst64 {
11754 break
11755 }
11756 c := ssa.AuxIntToInt64(v_1.AuxInt)
11757 if !((1 << 8) <= c) {
11758 break
11759 }
11760 v.Reset(ssaop.OpConstBool)
11761 v.AuxInt = ssa.BoolToAuxInt(true)
11762 return true
11763 }
11764
11765
11766
11767 for {
11768 if v_0.Op != ssaop.OpZeroExt16to32 || v_1.Op != ssaop.OpConst32 {
11769 break
11770 }
11771 c := ssa.AuxIntToInt32(v_1.AuxInt)
11772 if !((1 << 16) <= c) {
11773 break
11774 }
11775 v.Reset(ssaop.OpConstBool)
11776 v.AuxInt = ssa.BoolToAuxInt(true)
11777 return true
11778 }
11779
11780
11781
11782 for {
11783 if v_0.Op != ssaop.OpZeroExt16to64 || v_1.Op != ssaop.OpConst64 {
11784 break
11785 }
11786 c := ssa.AuxIntToInt64(v_1.AuxInt)
11787 if !((1 << 16) <= c) {
11788 break
11789 }
11790 v.Reset(ssaop.OpConstBool)
11791 v.AuxInt = ssa.BoolToAuxInt(true)
11792 return true
11793 }
11794
11795
11796 for {
11797 x := v_0
11798 if x != v_1 {
11799 break
11800 }
11801 v.Reset(ssaop.OpConstBool)
11802 v.AuxInt = ssa.BoolToAuxInt(false)
11803 return true
11804 }
11805
11806
11807
11808 for {
11809 if v_0.Op != ssaop.OpAnd8 {
11810 break
11811 }
11812 v_0_0 := v_0.Args[0]
11813 v_0_1 := v_0.Args[1]
11814 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
11815 if v_0_0.Op != ssaop.OpConst8 {
11816 continue
11817 }
11818 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
11819 if v_1.Op != ssaop.OpConst8 {
11820 continue
11821 }
11822 d := ssa.AuxIntToInt8(v_1.AuxInt)
11823 if !(0 <= c && c < d) {
11824 continue
11825 }
11826 v.Reset(ssaop.OpConstBool)
11827 v.AuxInt = ssa.BoolToAuxInt(true)
11828 return true
11829 }
11830 break
11831 }
11832
11833
11834
11835 for {
11836 if v_0.Op != ssaop.OpZeroExt8to16 {
11837 break
11838 }
11839 v_0_0 := v_0.Args[0]
11840 if v_0_0.Op != ssaop.OpAnd8 {
11841 break
11842 }
11843 v_0_0_0 := v_0_0.Args[0]
11844 v_0_0_1 := v_0_0.Args[1]
11845 for _i0 := 0; _i0 <= 1; _i0, v_0_0_0, v_0_0_1 = _i0+1, v_0_0_1, v_0_0_0 {
11846 if v_0_0_0.Op != ssaop.OpConst8 {
11847 continue
11848 }
11849 c := ssa.AuxIntToInt8(v_0_0_0.AuxInt)
11850 if v_1.Op != ssaop.OpConst16 {
11851 continue
11852 }
11853 d := ssa.AuxIntToInt16(v_1.AuxInt)
11854 if !(0 <= c && int16(c) < d) {
11855 continue
11856 }
11857 v.Reset(ssaop.OpConstBool)
11858 v.AuxInt = ssa.BoolToAuxInt(true)
11859 return true
11860 }
11861 break
11862 }
11863
11864
11865
11866 for {
11867 if v_0.Op != ssaop.OpZeroExt8to32 {
11868 break
11869 }
11870 v_0_0 := v_0.Args[0]
11871 if v_0_0.Op != ssaop.OpAnd8 {
11872 break
11873 }
11874 v_0_0_0 := v_0_0.Args[0]
11875 v_0_0_1 := v_0_0.Args[1]
11876 for _i0 := 0; _i0 <= 1; _i0, v_0_0_0, v_0_0_1 = _i0+1, v_0_0_1, v_0_0_0 {
11877 if v_0_0_0.Op != ssaop.OpConst8 {
11878 continue
11879 }
11880 c := ssa.AuxIntToInt8(v_0_0_0.AuxInt)
11881 if v_1.Op != ssaop.OpConst32 {
11882 continue
11883 }
11884 d := ssa.AuxIntToInt32(v_1.AuxInt)
11885 if !(0 <= c && int32(c) < d) {
11886 continue
11887 }
11888 v.Reset(ssaop.OpConstBool)
11889 v.AuxInt = ssa.BoolToAuxInt(true)
11890 return true
11891 }
11892 break
11893 }
11894
11895
11896
11897 for {
11898 if v_0.Op != ssaop.OpZeroExt8to64 {
11899 break
11900 }
11901 v_0_0 := v_0.Args[0]
11902 if v_0_0.Op != ssaop.OpAnd8 {
11903 break
11904 }
11905 v_0_0_0 := v_0_0.Args[0]
11906 v_0_0_1 := v_0_0.Args[1]
11907 for _i0 := 0; _i0 <= 1; _i0, v_0_0_0, v_0_0_1 = _i0+1, v_0_0_1, v_0_0_0 {
11908 if v_0_0_0.Op != ssaop.OpConst8 {
11909 continue
11910 }
11911 c := ssa.AuxIntToInt8(v_0_0_0.AuxInt)
11912 if v_1.Op != ssaop.OpConst64 {
11913 continue
11914 }
11915 d := ssa.AuxIntToInt64(v_1.AuxInt)
11916 if !(0 <= c && int64(c) < d) {
11917 continue
11918 }
11919 v.Reset(ssaop.OpConstBool)
11920 v.AuxInt = ssa.BoolToAuxInt(true)
11921 return true
11922 }
11923 break
11924 }
11925
11926
11927
11928 for {
11929 if v_0.Op != ssaop.OpAnd16 {
11930 break
11931 }
11932 v_0_0 := v_0.Args[0]
11933 v_0_1 := v_0.Args[1]
11934 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
11935 if v_0_0.Op != ssaop.OpConst16 {
11936 continue
11937 }
11938 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
11939 if v_1.Op != ssaop.OpConst16 {
11940 continue
11941 }
11942 d := ssa.AuxIntToInt16(v_1.AuxInt)
11943 if !(0 <= c && c < d) {
11944 continue
11945 }
11946 v.Reset(ssaop.OpConstBool)
11947 v.AuxInt = ssa.BoolToAuxInt(true)
11948 return true
11949 }
11950 break
11951 }
11952
11953
11954
11955 for {
11956 if v_0.Op != ssaop.OpZeroExt16to32 {
11957 break
11958 }
11959 v_0_0 := v_0.Args[0]
11960 if v_0_0.Op != ssaop.OpAnd16 {
11961 break
11962 }
11963 v_0_0_0 := v_0_0.Args[0]
11964 v_0_0_1 := v_0_0.Args[1]
11965 for _i0 := 0; _i0 <= 1; _i0, v_0_0_0, v_0_0_1 = _i0+1, v_0_0_1, v_0_0_0 {
11966 if v_0_0_0.Op != ssaop.OpConst16 {
11967 continue
11968 }
11969 c := ssa.AuxIntToInt16(v_0_0_0.AuxInt)
11970 if v_1.Op != ssaop.OpConst32 {
11971 continue
11972 }
11973 d := ssa.AuxIntToInt32(v_1.AuxInt)
11974 if !(0 <= c && int32(c) < d) {
11975 continue
11976 }
11977 v.Reset(ssaop.OpConstBool)
11978 v.AuxInt = ssa.BoolToAuxInt(true)
11979 return true
11980 }
11981 break
11982 }
11983
11984
11985
11986 for {
11987 if v_0.Op != ssaop.OpZeroExt16to64 {
11988 break
11989 }
11990 v_0_0 := v_0.Args[0]
11991 if v_0_0.Op != ssaop.OpAnd16 {
11992 break
11993 }
11994 v_0_0_0 := v_0_0.Args[0]
11995 v_0_0_1 := v_0_0.Args[1]
11996 for _i0 := 0; _i0 <= 1; _i0, v_0_0_0, v_0_0_1 = _i0+1, v_0_0_1, v_0_0_0 {
11997 if v_0_0_0.Op != ssaop.OpConst16 {
11998 continue
11999 }
12000 c := ssa.AuxIntToInt16(v_0_0_0.AuxInt)
12001 if v_1.Op != ssaop.OpConst64 {
12002 continue
12003 }
12004 d := ssa.AuxIntToInt64(v_1.AuxInt)
12005 if !(0 <= c && int64(c) < d) {
12006 continue
12007 }
12008 v.Reset(ssaop.OpConstBool)
12009 v.AuxInt = ssa.BoolToAuxInt(true)
12010 return true
12011 }
12012 break
12013 }
12014
12015
12016
12017 for {
12018 if v_0.Op != ssaop.OpAnd32 {
12019 break
12020 }
12021 v_0_0 := v_0.Args[0]
12022 v_0_1 := v_0.Args[1]
12023 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
12024 if v_0_0.Op != ssaop.OpConst32 {
12025 continue
12026 }
12027 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
12028 if v_1.Op != ssaop.OpConst32 {
12029 continue
12030 }
12031 d := ssa.AuxIntToInt32(v_1.AuxInt)
12032 if !(0 <= c && c < d) {
12033 continue
12034 }
12035 v.Reset(ssaop.OpConstBool)
12036 v.AuxInt = ssa.BoolToAuxInt(true)
12037 return true
12038 }
12039 break
12040 }
12041
12042
12043
12044 for {
12045 if v_0.Op != ssaop.OpZeroExt32to64 {
12046 break
12047 }
12048 v_0_0 := v_0.Args[0]
12049 if v_0_0.Op != ssaop.OpAnd32 {
12050 break
12051 }
12052 v_0_0_0 := v_0_0.Args[0]
12053 v_0_0_1 := v_0_0.Args[1]
12054 for _i0 := 0; _i0 <= 1; _i0, v_0_0_0, v_0_0_1 = _i0+1, v_0_0_1, v_0_0_0 {
12055 if v_0_0_0.Op != ssaop.OpConst32 {
12056 continue
12057 }
12058 c := ssa.AuxIntToInt32(v_0_0_0.AuxInt)
12059 if v_1.Op != ssaop.OpConst64 {
12060 continue
12061 }
12062 d := ssa.AuxIntToInt64(v_1.AuxInt)
12063 if !(0 <= c && int64(c) < d) {
12064 continue
12065 }
12066 v.Reset(ssaop.OpConstBool)
12067 v.AuxInt = ssa.BoolToAuxInt(true)
12068 return true
12069 }
12070 break
12071 }
12072
12073
12074
12075 for {
12076 if v_0.Op != ssaop.OpAnd64 {
12077 break
12078 }
12079 v_0_0 := v_0.Args[0]
12080 v_0_1 := v_0.Args[1]
12081 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
12082 if v_0_0.Op != ssaop.OpConst64 {
12083 continue
12084 }
12085 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
12086 if v_1.Op != ssaop.OpConst64 {
12087 continue
12088 }
12089 d := ssa.AuxIntToInt64(v_1.AuxInt)
12090 if !(0 <= c && c < d) {
12091 continue
12092 }
12093 v.Reset(ssaop.OpConstBool)
12094 v.AuxInt = ssa.BoolToAuxInt(true)
12095 return true
12096 }
12097 break
12098 }
12099
12100
12101 for {
12102 if v_0.Op != ssaop.OpConst32 {
12103 break
12104 }
12105 c := ssa.AuxIntToInt32(v_0.AuxInt)
12106 if v_1.Op != ssaop.OpConst32 {
12107 break
12108 }
12109 d := ssa.AuxIntToInt32(v_1.AuxInt)
12110 v.Reset(ssaop.OpConstBool)
12111 v.AuxInt = ssa.BoolToAuxInt(0 <= c && c < d)
12112 return true
12113 }
12114
12115
12116 for {
12117 if v_0.Op != ssaop.OpConst64 {
12118 break
12119 }
12120 c := ssa.AuxIntToInt64(v_0.AuxInt)
12121 if v_1.Op != ssaop.OpConst64 {
12122 break
12123 }
12124 d := ssa.AuxIntToInt64(v_1.AuxInt)
12125 v.Reset(ssaop.OpConstBool)
12126 v.AuxInt = ssa.BoolToAuxInt(0 <= c && c < d)
12127 return true
12128 }
12129
12130
12131 for {
12132 if v_0.Op != ssaop.OpMod32u {
12133 break
12134 }
12135 y := v_0.Args[1]
12136 if y != v_1 {
12137 break
12138 }
12139 v.Reset(ssaop.OpConstBool)
12140 v.AuxInt = ssa.BoolToAuxInt(true)
12141 return true
12142 }
12143
12144
12145 for {
12146 if v_0.Op != ssaop.OpMod64u {
12147 break
12148 }
12149 y := v_0.Args[1]
12150 if y != v_1 {
12151 break
12152 }
12153 v.Reset(ssaop.OpConstBool)
12154 v.AuxInt = ssa.BoolToAuxInt(true)
12155 return true
12156 }
12157
12158
12159
12160 for {
12161 if v_0.Op != ssaop.OpZeroExt8to64 {
12162 break
12163 }
12164 v_0_0 := v_0.Args[0]
12165 if v_0_0.Op != ssaop.OpRsh8Ux64 {
12166 break
12167 }
12168 _ = v_0_0.Args[1]
12169 v_0_0_1 := v_0_0.Args[1]
12170 if v_0_0_1.Op != ssaop.OpConst64 {
12171 break
12172 }
12173 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
12174 if v_1.Op != ssaop.OpConst64 {
12175 break
12176 }
12177 d := ssa.AuxIntToInt64(v_1.AuxInt)
12178 if !(0 < c && c < 8 && 1<<uint(8-c)-1 < d) {
12179 break
12180 }
12181 v.Reset(ssaop.OpConstBool)
12182 v.AuxInt = ssa.BoolToAuxInt(true)
12183 return true
12184 }
12185
12186
12187
12188 for {
12189 if v_0.Op != ssaop.OpZeroExt8to32 {
12190 break
12191 }
12192 v_0_0 := v_0.Args[0]
12193 if v_0_0.Op != ssaop.OpRsh8Ux64 {
12194 break
12195 }
12196 _ = v_0_0.Args[1]
12197 v_0_0_1 := v_0_0.Args[1]
12198 if v_0_0_1.Op != ssaop.OpConst64 {
12199 break
12200 }
12201 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
12202 if v_1.Op != ssaop.OpConst32 {
12203 break
12204 }
12205 d := ssa.AuxIntToInt32(v_1.AuxInt)
12206 if !(0 < c && c < 8 && 1<<uint(8-c)-1 < d) {
12207 break
12208 }
12209 v.Reset(ssaop.OpConstBool)
12210 v.AuxInt = ssa.BoolToAuxInt(true)
12211 return true
12212 }
12213
12214
12215
12216 for {
12217 if v_0.Op != ssaop.OpZeroExt8to16 {
12218 break
12219 }
12220 v_0_0 := v_0.Args[0]
12221 if v_0_0.Op != ssaop.OpRsh8Ux64 {
12222 break
12223 }
12224 _ = v_0_0.Args[1]
12225 v_0_0_1 := v_0_0.Args[1]
12226 if v_0_0_1.Op != ssaop.OpConst64 {
12227 break
12228 }
12229 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
12230 if v_1.Op != ssaop.OpConst16 {
12231 break
12232 }
12233 d := ssa.AuxIntToInt16(v_1.AuxInt)
12234 if !(0 < c && c < 8 && 1<<uint(8-c)-1 < d) {
12235 break
12236 }
12237 v.Reset(ssaop.OpConstBool)
12238 v.AuxInt = ssa.BoolToAuxInt(true)
12239 return true
12240 }
12241
12242
12243
12244 for {
12245 if v_0.Op != ssaop.OpRsh8Ux64 {
12246 break
12247 }
12248 _ = v_0.Args[1]
12249 v_0_1 := v_0.Args[1]
12250 if v_0_1.Op != ssaop.OpConst64 {
12251 break
12252 }
12253 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
12254 if v_1.Op != ssaop.OpConst8 {
12255 break
12256 }
12257 d := ssa.AuxIntToInt8(v_1.AuxInt)
12258 if !(0 < c && c < 8 && 1<<uint(8-c)-1 < d) {
12259 break
12260 }
12261 v.Reset(ssaop.OpConstBool)
12262 v.AuxInt = ssa.BoolToAuxInt(true)
12263 return true
12264 }
12265
12266
12267
12268 for {
12269 if v_0.Op != ssaop.OpZeroExt16to64 {
12270 break
12271 }
12272 v_0_0 := v_0.Args[0]
12273 if v_0_0.Op != ssaop.OpRsh16Ux64 {
12274 break
12275 }
12276 _ = v_0_0.Args[1]
12277 v_0_0_1 := v_0_0.Args[1]
12278 if v_0_0_1.Op != ssaop.OpConst64 {
12279 break
12280 }
12281 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
12282 if v_1.Op != ssaop.OpConst64 {
12283 break
12284 }
12285 d := ssa.AuxIntToInt64(v_1.AuxInt)
12286 if !(0 < c && c < 16 && 1<<uint(16-c)-1 < d) {
12287 break
12288 }
12289 v.Reset(ssaop.OpConstBool)
12290 v.AuxInt = ssa.BoolToAuxInt(true)
12291 return true
12292 }
12293
12294
12295
12296 for {
12297 if v_0.Op != ssaop.OpZeroExt16to32 {
12298 break
12299 }
12300 v_0_0 := v_0.Args[0]
12301 if v_0_0.Op != ssaop.OpRsh16Ux64 {
12302 break
12303 }
12304 _ = v_0_0.Args[1]
12305 v_0_0_1 := v_0_0.Args[1]
12306 if v_0_0_1.Op != ssaop.OpConst64 {
12307 break
12308 }
12309 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
12310 if v_1.Op != ssaop.OpConst32 {
12311 break
12312 }
12313 d := ssa.AuxIntToInt32(v_1.AuxInt)
12314 if !(0 < c && c < 16 && 1<<uint(16-c)-1 < d) {
12315 break
12316 }
12317 v.Reset(ssaop.OpConstBool)
12318 v.AuxInt = ssa.BoolToAuxInt(true)
12319 return true
12320 }
12321
12322
12323
12324 for {
12325 if v_0.Op != ssaop.OpRsh16Ux64 {
12326 break
12327 }
12328 _ = v_0.Args[1]
12329 v_0_1 := v_0.Args[1]
12330 if v_0_1.Op != ssaop.OpConst64 {
12331 break
12332 }
12333 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
12334 if v_1.Op != ssaop.OpConst16 {
12335 break
12336 }
12337 d := ssa.AuxIntToInt16(v_1.AuxInt)
12338 if !(0 < c && c < 16 && 1<<uint(16-c)-1 < d) {
12339 break
12340 }
12341 v.Reset(ssaop.OpConstBool)
12342 v.AuxInt = ssa.BoolToAuxInt(true)
12343 return true
12344 }
12345
12346
12347
12348 for {
12349 if v_0.Op != ssaop.OpZeroExt32to64 {
12350 break
12351 }
12352 v_0_0 := v_0.Args[0]
12353 if v_0_0.Op != ssaop.OpRsh32Ux64 {
12354 break
12355 }
12356 _ = v_0_0.Args[1]
12357 v_0_0_1 := v_0_0.Args[1]
12358 if v_0_0_1.Op != ssaop.OpConst64 {
12359 break
12360 }
12361 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
12362 if v_1.Op != ssaop.OpConst64 {
12363 break
12364 }
12365 d := ssa.AuxIntToInt64(v_1.AuxInt)
12366 if !(0 < c && c < 32 && 1<<uint(32-c)-1 < d) {
12367 break
12368 }
12369 v.Reset(ssaop.OpConstBool)
12370 v.AuxInt = ssa.BoolToAuxInt(true)
12371 return true
12372 }
12373
12374
12375
12376 for {
12377 if v_0.Op != ssaop.OpRsh32Ux64 {
12378 break
12379 }
12380 _ = v_0.Args[1]
12381 v_0_1 := v_0.Args[1]
12382 if v_0_1.Op != ssaop.OpConst64 {
12383 break
12384 }
12385 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
12386 if v_1.Op != ssaop.OpConst32 {
12387 break
12388 }
12389 d := ssa.AuxIntToInt32(v_1.AuxInt)
12390 if !(0 < c && c < 32 && 1<<uint(32-c)-1 < d) {
12391 break
12392 }
12393 v.Reset(ssaop.OpConstBool)
12394 v.AuxInt = ssa.BoolToAuxInt(true)
12395 return true
12396 }
12397
12398
12399
12400 for {
12401 if v_0.Op != ssaop.OpRsh64Ux64 {
12402 break
12403 }
12404 _ = v_0.Args[1]
12405 v_0_1 := v_0.Args[1]
12406 if v_0_1.Op != ssaop.OpConst64 {
12407 break
12408 }
12409 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
12410 if v_1.Op != ssaop.OpConst64 {
12411 break
12412 }
12413 d := ssa.AuxIntToInt64(v_1.AuxInt)
12414 if !(0 < c && c < 64 && 1<<uint(64-c)-1 < d) {
12415 break
12416 }
12417 v.Reset(ssaop.OpConstBool)
12418 v.AuxInt = ssa.BoolToAuxInt(true)
12419 return true
12420 }
12421 return false
12422 }
12423 func rewriteValue_OpIsNonNil(v *ssa.Value) bool {
12424 v_0 := v.Args[0]
12425
12426
12427 for {
12428 if v_0.Op != ssaop.OpConstNil {
12429 break
12430 }
12431 v.Reset(ssaop.OpConstBool)
12432 v.AuxInt = ssa.BoolToAuxInt(false)
12433 return true
12434 }
12435
12436
12437 for {
12438 if v_0.Op != ssaop.OpConst32 {
12439 break
12440 }
12441 c := ssa.AuxIntToInt32(v_0.AuxInt)
12442 v.Reset(ssaop.OpConstBool)
12443 v.AuxInt = ssa.BoolToAuxInt(c != 0)
12444 return true
12445 }
12446
12447
12448 for {
12449 if v_0.Op != ssaop.OpConst64 {
12450 break
12451 }
12452 c := ssa.AuxIntToInt64(v_0.AuxInt)
12453 v.Reset(ssaop.OpConstBool)
12454 v.AuxInt = ssa.BoolToAuxInt(c != 0)
12455 return true
12456 }
12457
12458
12459 for {
12460 if v_0.Op != ssaop.OpAddr {
12461 break
12462 }
12463 v.Reset(ssaop.OpConstBool)
12464 v.AuxInt = ssa.BoolToAuxInt(true)
12465 return true
12466 }
12467
12468
12469 for {
12470 if v_0.Op != ssaop.OpConvert {
12471 break
12472 }
12473 v_0_0 := v_0.Args[0]
12474 if v_0_0.Op != ssaop.OpAddr {
12475 break
12476 }
12477 v.Reset(ssaop.OpConstBool)
12478 v.AuxInt = ssa.BoolToAuxInt(true)
12479 return true
12480 }
12481
12482
12483 for {
12484 if v_0.Op != ssaop.OpLocalAddr {
12485 break
12486 }
12487 v.Reset(ssaop.OpConstBool)
12488 v.AuxInt = ssa.BoolToAuxInt(true)
12489 return true
12490 }
12491 return false
12492 }
12493 func rewriteValue_OpIsSliceInBounds(v *ssa.Value) bool {
12494 v_1 := v.Args[1]
12495 v_0 := v.Args[0]
12496
12497
12498 for {
12499 x := v_0
12500 if x != v_1 {
12501 break
12502 }
12503 v.Reset(ssaop.OpConstBool)
12504 v.AuxInt = ssa.BoolToAuxInt(true)
12505 return true
12506 }
12507
12508
12509
12510 for {
12511 if v_0.Op != ssaop.OpAnd32 {
12512 break
12513 }
12514 v_0_0 := v_0.Args[0]
12515 v_0_1 := v_0.Args[1]
12516 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
12517 if v_0_0.Op != ssaop.OpConst32 {
12518 continue
12519 }
12520 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
12521 if v_1.Op != ssaop.OpConst32 {
12522 continue
12523 }
12524 d := ssa.AuxIntToInt32(v_1.AuxInt)
12525 if !(0 <= c && c <= d) {
12526 continue
12527 }
12528 v.Reset(ssaop.OpConstBool)
12529 v.AuxInt = ssa.BoolToAuxInt(true)
12530 return true
12531 }
12532 break
12533 }
12534
12535
12536
12537 for {
12538 if v_0.Op != ssaop.OpAnd64 {
12539 break
12540 }
12541 v_0_0 := v_0.Args[0]
12542 v_0_1 := v_0.Args[1]
12543 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
12544 if v_0_0.Op != ssaop.OpConst64 {
12545 continue
12546 }
12547 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
12548 if v_1.Op != ssaop.OpConst64 {
12549 continue
12550 }
12551 d := ssa.AuxIntToInt64(v_1.AuxInt)
12552 if !(0 <= c && c <= d) {
12553 continue
12554 }
12555 v.Reset(ssaop.OpConstBool)
12556 v.AuxInt = ssa.BoolToAuxInt(true)
12557 return true
12558 }
12559 break
12560 }
12561
12562
12563 for {
12564 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
12565 break
12566 }
12567 v.Reset(ssaop.OpConstBool)
12568 v.AuxInt = ssa.BoolToAuxInt(true)
12569 return true
12570 }
12571
12572
12573 for {
12574 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
12575 break
12576 }
12577 v.Reset(ssaop.OpConstBool)
12578 v.AuxInt = ssa.BoolToAuxInt(true)
12579 return true
12580 }
12581
12582
12583 for {
12584 if v_0.Op != ssaop.OpConst32 {
12585 break
12586 }
12587 c := ssa.AuxIntToInt32(v_0.AuxInt)
12588 if v_1.Op != ssaop.OpConst32 {
12589 break
12590 }
12591 d := ssa.AuxIntToInt32(v_1.AuxInt)
12592 v.Reset(ssaop.OpConstBool)
12593 v.AuxInt = ssa.BoolToAuxInt(0 <= c && c <= d)
12594 return true
12595 }
12596
12597
12598 for {
12599 if v_0.Op != ssaop.OpConst64 {
12600 break
12601 }
12602 c := ssa.AuxIntToInt64(v_0.AuxInt)
12603 if v_1.Op != ssaop.OpConst64 {
12604 break
12605 }
12606 d := ssa.AuxIntToInt64(v_1.AuxInt)
12607 v.Reset(ssaop.OpConstBool)
12608 v.AuxInt = ssa.BoolToAuxInt(0 <= c && c <= d)
12609 return true
12610 }
12611
12612
12613 for {
12614 if v_0.Op != ssaop.OpSliceLen {
12615 break
12616 }
12617 x := v_0.Args[0]
12618 if v_1.Op != ssaop.OpSliceCap || x != v_1.Args[0] {
12619 break
12620 }
12621 v.Reset(ssaop.OpConstBool)
12622 v.AuxInt = ssa.BoolToAuxInt(true)
12623 return true
12624 }
12625 return false
12626 }
12627 func rewriteValue_OpLeq16(v *ssa.Value) bool {
12628 v_1 := v.Args[1]
12629 v_0 := v.Args[0]
12630 b := v.Block
12631
12632
12633 for {
12634 if v_0.Op != ssaop.OpConst16 {
12635 break
12636 }
12637 c := ssa.AuxIntToInt16(v_0.AuxInt)
12638 if v_1.Op != ssaop.OpConst16 {
12639 break
12640 }
12641 d := ssa.AuxIntToInt16(v_1.AuxInt)
12642 v.Reset(ssaop.OpConstBool)
12643 v.AuxInt = ssa.BoolToAuxInt(c <= d)
12644 return true
12645 }
12646
12647
12648
12649 for {
12650 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 || v_1.Op != ssaop.OpAnd16 {
12651 break
12652 }
12653 _ = v_1.Args[1]
12654 v_1_0 := v_1.Args[0]
12655 v_1_1 := v_1.Args[1]
12656 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
12657 if v_1_1.Op != ssaop.OpConst16 {
12658 continue
12659 }
12660 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
12661 if !(c >= 0) {
12662 continue
12663 }
12664 v.Reset(ssaop.OpConstBool)
12665 v.AuxInt = ssa.BoolToAuxInt(true)
12666 return true
12667 }
12668 break
12669 }
12670
12671
12672
12673 for {
12674 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 || v_1.Op != ssaop.OpRsh16Ux64 {
12675 break
12676 }
12677 _ = v_1.Args[1]
12678 v_1_1 := v_1.Args[1]
12679 if v_1_1.Op != ssaop.OpConst64 {
12680 break
12681 }
12682 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
12683 if !(c > 0) {
12684 break
12685 }
12686 v.Reset(ssaop.OpConstBool)
12687 v.AuxInt = ssa.BoolToAuxInt(true)
12688 return true
12689 }
12690
12691
12692
12693 for {
12694 x := v_0
12695 if v_1.Op != ssaop.OpConst16 {
12696 break
12697 }
12698 t := v_1.Type
12699 if ssa.AuxIntToInt16(v_1.AuxInt) != 0 || !(isNonNegative(x)) {
12700 break
12701 }
12702 v.Reset(ssaop.OpEq16)
12703 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
12704 v0.AuxInt = ssa.Int16ToAuxInt(0)
12705 v.AddArg2(v0, x)
12706 return true
12707 }
12708
12709
12710 for {
12711 x := v_0
12712 if v_1.Op != ssaop.OpConst16 {
12713 break
12714 }
12715 t := v_1.Type
12716 if ssa.AuxIntToInt16(v_1.AuxInt) != -1 {
12717 break
12718 }
12719 v.Reset(ssaop.OpLess16)
12720 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
12721 v0.AuxInt = ssa.Int16ToAuxInt(0)
12722 v.AddArg2(x, v0)
12723 return true
12724 }
12725
12726
12727 for {
12728 if v_0.Op != ssaop.OpConst16 {
12729 break
12730 }
12731 t := v_0.Type
12732 if ssa.AuxIntToInt16(v_0.AuxInt) != 1 {
12733 break
12734 }
12735 x := v_1
12736 v.Reset(ssaop.OpLess16)
12737 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
12738 v0.AuxInt = ssa.Int16ToAuxInt(0)
12739 v.AddArg2(v0, x)
12740 return true
12741 }
12742
12743
12744 for {
12745 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != math.MinInt16 {
12746 break
12747 }
12748 v.Reset(ssaop.OpConstBool)
12749 v.AuxInt = ssa.BoolToAuxInt(true)
12750 return true
12751 }
12752
12753
12754 for {
12755 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != math.MaxInt16 {
12756 break
12757 }
12758 v.Reset(ssaop.OpConstBool)
12759 v.AuxInt = ssa.BoolToAuxInt(true)
12760 return true
12761 }
12762
12763
12764 for {
12765 x := v_0
12766 c := v_1
12767 if c.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(c.AuxInt) != math.MinInt16 {
12768 break
12769 }
12770 v.Reset(ssaop.OpEq16)
12771 v.AddArg2(x, c)
12772 return true
12773 }
12774
12775
12776 for {
12777 c := v_0
12778 if c.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(c.AuxInt) != math.MaxInt16 {
12779 break
12780 }
12781 x := v_1
12782 v.Reset(ssaop.OpEq16)
12783 v.AddArg2(x, c)
12784 return true
12785 }
12786 return false
12787 }
12788 func rewriteValue_OpLeq16U(v *ssa.Value) bool {
12789 v_1 := v.Args[1]
12790 v_0 := v.Args[0]
12791 b := v.Block
12792
12793
12794 for {
12795 if v_0.Op != ssaop.OpConst16 {
12796 break
12797 }
12798 c := ssa.AuxIntToInt16(v_0.AuxInt)
12799 if v_1.Op != ssaop.OpConst16 {
12800 break
12801 }
12802 d := ssa.AuxIntToInt16(v_1.AuxInt)
12803 v.Reset(ssaop.OpConstBool)
12804 v.AuxInt = ssa.BoolToAuxInt(uint16(c) <= uint16(d))
12805 return true
12806 }
12807
12808
12809 for {
12810 if v_0.Op != ssaop.OpConst16 {
12811 break
12812 }
12813 t := v_0.Type
12814 if ssa.AuxIntToInt16(v_0.AuxInt) != 1 {
12815 break
12816 }
12817 x := v_1
12818 v.Reset(ssaop.OpNeq16)
12819 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
12820 v0.AuxInt = ssa.Int16ToAuxInt(0)
12821 v.AddArg2(v0, x)
12822 return true
12823 }
12824
12825
12826 for {
12827 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
12828 break
12829 }
12830 v.Reset(ssaop.OpConstBool)
12831 v.AuxInt = ssa.BoolToAuxInt(true)
12832 return true
12833 }
12834
12835
12836 for {
12837 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != -1 {
12838 break
12839 }
12840 v.Reset(ssaop.OpConstBool)
12841 v.AuxInt = ssa.BoolToAuxInt(true)
12842 return true
12843 }
12844
12845
12846 for {
12847 x := v_0
12848 c := v_1
12849 if c.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(c.AuxInt) != 0 {
12850 break
12851 }
12852 v.Reset(ssaop.OpEq16)
12853 v.AddArg2(x, c)
12854 return true
12855 }
12856
12857
12858 for {
12859 c := v_0
12860 if c.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(c.AuxInt) != -1 {
12861 break
12862 }
12863 x := v_1
12864 v.Reset(ssaop.OpEq16)
12865 v.AddArg2(x, c)
12866 return true
12867 }
12868 return false
12869 }
12870 func rewriteValue_OpLeq32(v *ssa.Value) bool {
12871 v_1 := v.Args[1]
12872 v_0 := v.Args[0]
12873 b := v.Block
12874
12875
12876 for {
12877 if v_0.Op != ssaop.OpConst32 {
12878 break
12879 }
12880 c := ssa.AuxIntToInt32(v_0.AuxInt)
12881 if v_1.Op != ssaop.OpConst32 {
12882 break
12883 }
12884 d := ssa.AuxIntToInt32(v_1.AuxInt)
12885 v.Reset(ssaop.OpConstBool)
12886 v.AuxInt = ssa.BoolToAuxInt(c <= d)
12887 return true
12888 }
12889
12890
12891
12892 for {
12893 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 || v_1.Op != ssaop.OpAnd32 {
12894 break
12895 }
12896 _ = v_1.Args[1]
12897 v_1_0 := v_1.Args[0]
12898 v_1_1 := v_1.Args[1]
12899 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
12900 if v_1_1.Op != ssaop.OpConst32 {
12901 continue
12902 }
12903 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
12904 if !(c >= 0) {
12905 continue
12906 }
12907 v.Reset(ssaop.OpConstBool)
12908 v.AuxInt = ssa.BoolToAuxInt(true)
12909 return true
12910 }
12911 break
12912 }
12913
12914
12915
12916 for {
12917 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 || v_1.Op != ssaop.OpRsh32Ux64 {
12918 break
12919 }
12920 _ = v_1.Args[1]
12921 v_1_1 := v_1.Args[1]
12922 if v_1_1.Op != ssaop.OpConst64 {
12923 break
12924 }
12925 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
12926 if !(c > 0) {
12927 break
12928 }
12929 v.Reset(ssaop.OpConstBool)
12930 v.AuxInt = ssa.BoolToAuxInt(true)
12931 return true
12932 }
12933
12934
12935
12936 for {
12937 x := v_0
12938 if v_1.Op != ssaop.OpConst32 {
12939 break
12940 }
12941 t := v_1.Type
12942 if ssa.AuxIntToInt32(v_1.AuxInt) != 0 || !(isNonNegative(x)) {
12943 break
12944 }
12945 v.Reset(ssaop.OpEq32)
12946 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
12947 v0.AuxInt = ssa.Int32ToAuxInt(0)
12948 v.AddArg2(v0, x)
12949 return true
12950 }
12951
12952
12953 for {
12954 x := v_0
12955 if v_1.Op != ssaop.OpConst32 {
12956 break
12957 }
12958 t := v_1.Type
12959 if ssa.AuxIntToInt32(v_1.AuxInt) != -1 {
12960 break
12961 }
12962 v.Reset(ssaop.OpLess32)
12963 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
12964 v0.AuxInt = ssa.Int32ToAuxInt(0)
12965 v.AddArg2(x, v0)
12966 return true
12967 }
12968
12969
12970 for {
12971 if v_0.Op != ssaop.OpConst32 {
12972 break
12973 }
12974 t := v_0.Type
12975 if ssa.AuxIntToInt32(v_0.AuxInt) != 1 {
12976 break
12977 }
12978 x := v_1
12979 v.Reset(ssaop.OpLess32)
12980 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
12981 v0.AuxInt = ssa.Int32ToAuxInt(0)
12982 v.AddArg2(v0, x)
12983 return true
12984 }
12985
12986
12987 for {
12988 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != math.MinInt32 {
12989 break
12990 }
12991 v.Reset(ssaop.OpConstBool)
12992 v.AuxInt = ssa.BoolToAuxInt(true)
12993 return true
12994 }
12995
12996
12997 for {
12998 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != math.MaxInt32 {
12999 break
13000 }
13001 v.Reset(ssaop.OpConstBool)
13002 v.AuxInt = ssa.BoolToAuxInt(true)
13003 return true
13004 }
13005
13006
13007 for {
13008 x := v_0
13009 c := v_1
13010 if c.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(c.AuxInt) != math.MinInt32 {
13011 break
13012 }
13013 v.Reset(ssaop.OpEq32)
13014 v.AddArg2(x, c)
13015 return true
13016 }
13017
13018
13019 for {
13020 c := v_0
13021 if c.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(c.AuxInt) != math.MaxInt32 {
13022 break
13023 }
13024 x := v_1
13025 v.Reset(ssaop.OpEq32)
13026 v.AddArg2(x, c)
13027 return true
13028 }
13029 return false
13030 }
13031 func rewriteValue_OpLeq32F(v *ssa.Value) bool {
13032 v_1 := v.Args[1]
13033 v_0 := v.Args[0]
13034
13035
13036 for {
13037 if v_0.Op != ssaop.OpConst32F {
13038 break
13039 }
13040 c := ssa.AuxIntToFloat32(v_0.AuxInt)
13041 if v_1.Op != ssaop.OpConst32F {
13042 break
13043 }
13044 d := ssa.AuxIntToFloat32(v_1.AuxInt)
13045 v.Reset(ssaop.OpConstBool)
13046 v.AuxInt = ssa.BoolToAuxInt(c <= d)
13047 return true
13048 }
13049 return false
13050 }
13051 func rewriteValue_OpLeq32U(v *ssa.Value) bool {
13052 v_1 := v.Args[1]
13053 v_0 := v.Args[0]
13054 b := v.Block
13055
13056
13057 for {
13058 if v_0.Op != ssaop.OpConst32 {
13059 break
13060 }
13061 c := ssa.AuxIntToInt32(v_0.AuxInt)
13062 if v_1.Op != ssaop.OpConst32 {
13063 break
13064 }
13065 d := ssa.AuxIntToInt32(v_1.AuxInt)
13066 v.Reset(ssaop.OpConstBool)
13067 v.AuxInt = ssa.BoolToAuxInt(uint32(c) <= uint32(d))
13068 return true
13069 }
13070
13071
13072 for {
13073 if v_0.Op != ssaop.OpConst32 {
13074 break
13075 }
13076 t := v_0.Type
13077 if ssa.AuxIntToInt32(v_0.AuxInt) != 1 {
13078 break
13079 }
13080 x := v_1
13081 v.Reset(ssaop.OpNeq32)
13082 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
13083 v0.AuxInt = ssa.Int32ToAuxInt(0)
13084 v.AddArg2(v0, x)
13085 return true
13086 }
13087
13088
13089 for {
13090 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
13091 break
13092 }
13093 v.Reset(ssaop.OpConstBool)
13094 v.AuxInt = ssa.BoolToAuxInt(true)
13095 return true
13096 }
13097
13098
13099 for {
13100 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != -1 {
13101 break
13102 }
13103 v.Reset(ssaop.OpConstBool)
13104 v.AuxInt = ssa.BoolToAuxInt(true)
13105 return true
13106 }
13107
13108
13109 for {
13110 x := v_0
13111 c := v_1
13112 if c.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(c.AuxInt) != 0 {
13113 break
13114 }
13115 v.Reset(ssaop.OpEq32)
13116 v.AddArg2(x, c)
13117 return true
13118 }
13119
13120
13121 for {
13122 c := v_0
13123 if c.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(c.AuxInt) != -1 {
13124 break
13125 }
13126 x := v_1
13127 v.Reset(ssaop.OpEq32)
13128 v.AddArg2(x, c)
13129 return true
13130 }
13131 return false
13132 }
13133 func rewriteValue_OpLeq64(v *ssa.Value) bool {
13134 v_1 := v.Args[1]
13135 v_0 := v.Args[0]
13136 b := v.Block
13137
13138
13139 for {
13140 if v_0.Op != ssaop.OpConst64 {
13141 break
13142 }
13143 c := ssa.AuxIntToInt64(v_0.AuxInt)
13144 if v_1.Op != ssaop.OpConst64 {
13145 break
13146 }
13147 d := ssa.AuxIntToInt64(v_1.AuxInt)
13148 v.Reset(ssaop.OpConstBool)
13149 v.AuxInt = ssa.BoolToAuxInt(c <= d)
13150 return true
13151 }
13152
13153
13154
13155 for {
13156 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 || v_1.Op != ssaop.OpAnd64 {
13157 break
13158 }
13159 _ = v_1.Args[1]
13160 v_1_0 := v_1.Args[0]
13161 v_1_1 := v_1.Args[1]
13162 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
13163 if v_1_1.Op != ssaop.OpConst64 {
13164 continue
13165 }
13166 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
13167 if !(c >= 0) {
13168 continue
13169 }
13170 v.Reset(ssaop.OpConstBool)
13171 v.AuxInt = ssa.BoolToAuxInt(true)
13172 return true
13173 }
13174 break
13175 }
13176
13177
13178
13179 for {
13180 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 || v_1.Op != ssaop.OpRsh64Ux64 {
13181 break
13182 }
13183 _ = v_1.Args[1]
13184 v_1_1 := v_1.Args[1]
13185 if v_1_1.Op != ssaop.OpConst64 {
13186 break
13187 }
13188 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
13189 if !(c > 0) {
13190 break
13191 }
13192 v.Reset(ssaop.OpConstBool)
13193 v.AuxInt = ssa.BoolToAuxInt(true)
13194 return true
13195 }
13196
13197
13198
13199 for {
13200 x := v_0
13201 if v_1.Op != ssaop.OpConst64 {
13202 break
13203 }
13204 t := v_1.Type
13205 if ssa.AuxIntToInt64(v_1.AuxInt) != 0 || !(isNonNegative(x)) {
13206 break
13207 }
13208 v.Reset(ssaop.OpEq64)
13209 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
13210 v0.AuxInt = ssa.Int64ToAuxInt(0)
13211 v.AddArg2(v0, x)
13212 return true
13213 }
13214
13215
13216 for {
13217 x := v_0
13218 if v_1.Op != ssaop.OpConst64 {
13219 break
13220 }
13221 t := v_1.Type
13222 if ssa.AuxIntToInt64(v_1.AuxInt) != -1 {
13223 break
13224 }
13225 v.Reset(ssaop.OpLess64)
13226 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
13227 v0.AuxInt = ssa.Int64ToAuxInt(0)
13228 v.AddArg2(x, v0)
13229 return true
13230 }
13231
13232
13233 for {
13234 if v_0.Op != ssaop.OpConst64 {
13235 break
13236 }
13237 t := v_0.Type
13238 if ssa.AuxIntToInt64(v_0.AuxInt) != 1 {
13239 break
13240 }
13241 x := v_1
13242 v.Reset(ssaop.OpLess64)
13243 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
13244 v0.AuxInt = ssa.Int64ToAuxInt(0)
13245 v.AddArg2(v0, x)
13246 return true
13247 }
13248
13249
13250 for {
13251 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != math.MinInt64 {
13252 break
13253 }
13254 v.Reset(ssaop.OpConstBool)
13255 v.AuxInt = ssa.BoolToAuxInt(true)
13256 return true
13257 }
13258
13259
13260 for {
13261 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != math.MaxInt64 {
13262 break
13263 }
13264 v.Reset(ssaop.OpConstBool)
13265 v.AuxInt = ssa.BoolToAuxInt(true)
13266 return true
13267 }
13268
13269
13270 for {
13271 x := v_0
13272 c := v_1
13273 if c.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(c.AuxInt) != math.MinInt64 {
13274 break
13275 }
13276 v.Reset(ssaop.OpEq64)
13277 v.AddArg2(x, c)
13278 return true
13279 }
13280
13281
13282 for {
13283 c := v_0
13284 if c.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(c.AuxInt) != math.MaxInt64 {
13285 break
13286 }
13287 x := v_1
13288 v.Reset(ssaop.OpEq64)
13289 v.AddArg2(x, c)
13290 return true
13291 }
13292 return false
13293 }
13294 func rewriteValue_OpLeq64F(v *ssa.Value) bool {
13295 v_1 := v.Args[1]
13296 v_0 := v.Args[0]
13297
13298
13299 for {
13300 if v_0.Op != ssaop.OpConst64F {
13301 break
13302 }
13303 c := ssa.AuxIntToFloat64(v_0.AuxInt)
13304 if v_1.Op != ssaop.OpConst64F {
13305 break
13306 }
13307 d := ssa.AuxIntToFloat64(v_1.AuxInt)
13308 v.Reset(ssaop.OpConstBool)
13309 v.AuxInt = ssa.BoolToAuxInt(c <= d)
13310 return true
13311 }
13312 return false
13313 }
13314 func rewriteValue_OpLeq64U(v *ssa.Value) bool {
13315 v_1 := v.Args[1]
13316 v_0 := v.Args[0]
13317 b := v.Block
13318
13319
13320 for {
13321 if v_0.Op != ssaop.OpConst64 {
13322 break
13323 }
13324 c := ssa.AuxIntToInt64(v_0.AuxInt)
13325 if v_1.Op != ssaop.OpConst64 {
13326 break
13327 }
13328 d := ssa.AuxIntToInt64(v_1.AuxInt)
13329 v.Reset(ssaop.OpConstBool)
13330 v.AuxInt = ssa.BoolToAuxInt(uint64(c) <= uint64(d))
13331 return true
13332 }
13333
13334
13335 for {
13336 if v_0.Op != ssaop.OpConst64 {
13337 break
13338 }
13339 t := v_0.Type
13340 if ssa.AuxIntToInt64(v_0.AuxInt) != 1 {
13341 break
13342 }
13343 x := v_1
13344 v.Reset(ssaop.OpNeq64)
13345 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
13346 v0.AuxInt = ssa.Int64ToAuxInt(0)
13347 v.AddArg2(v0, x)
13348 return true
13349 }
13350
13351
13352 for {
13353 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
13354 break
13355 }
13356 v.Reset(ssaop.OpConstBool)
13357 v.AuxInt = ssa.BoolToAuxInt(true)
13358 return true
13359 }
13360
13361
13362 for {
13363 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != -1 {
13364 break
13365 }
13366 v.Reset(ssaop.OpConstBool)
13367 v.AuxInt = ssa.BoolToAuxInt(true)
13368 return true
13369 }
13370
13371
13372 for {
13373 x := v_0
13374 c := v_1
13375 if c.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(c.AuxInt) != 0 {
13376 break
13377 }
13378 v.Reset(ssaop.OpEq64)
13379 v.AddArg2(x, c)
13380 return true
13381 }
13382
13383
13384 for {
13385 c := v_0
13386 if c.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(c.AuxInt) != -1 {
13387 break
13388 }
13389 x := v_1
13390 v.Reset(ssaop.OpEq64)
13391 v.AddArg2(x, c)
13392 return true
13393 }
13394 return false
13395 }
13396 func rewriteValue_OpLeq8(v *ssa.Value) bool {
13397 v_1 := v.Args[1]
13398 v_0 := v.Args[0]
13399 b := v.Block
13400
13401
13402 for {
13403 if v_0.Op != ssaop.OpConst8 {
13404 break
13405 }
13406 c := ssa.AuxIntToInt8(v_0.AuxInt)
13407 if v_1.Op != ssaop.OpConst8 {
13408 break
13409 }
13410 d := ssa.AuxIntToInt8(v_1.AuxInt)
13411 v.Reset(ssaop.OpConstBool)
13412 v.AuxInt = ssa.BoolToAuxInt(c <= d)
13413 return true
13414 }
13415
13416
13417
13418 for {
13419 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 || v_1.Op != ssaop.OpAnd8 {
13420 break
13421 }
13422 _ = v_1.Args[1]
13423 v_1_0 := v_1.Args[0]
13424 v_1_1 := v_1.Args[1]
13425 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
13426 if v_1_1.Op != ssaop.OpConst8 {
13427 continue
13428 }
13429 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
13430 if !(c >= 0) {
13431 continue
13432 }
13433 v.Reset(ssaop.OpConstBool)
13434 v.AuxInt = ssa.BoolToAuxInt(true)
13435 return true
13436 }
13437 break
13438 }
13439
13440
13441
13442 for {
13443 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 || v_1.Op != ssaop.OpRsh8Ux64 {
13444 break
13445 }
13446 _ = v_1.Args[1]
13447 v_1_1 := v_1.Args[1]
13448 if v_1_1.Op != ssaop.OpConst64 {
13449 break
13450 }
13451 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
13452 if !(c > 0) {
13453 break
13454 }
13455 v.Reset(ssaop.OpConstBool)
13456 v.AuxInt = ssa.BoolToAuxInt(true)
13457 return true
13458 }
13459
13460
13461
13462 for {
13463 x := v_0
13464 if v_1.Op != ssaop.OpConst8 {
13465 break
13466 }
13467 t := v_1.Type
13468 if ssa.AuxIntToInt8(v_1.AuxInt) != 0 || !(isNonNegative(x)) {
13469 break
13470 }
13471 v.Reset(ssaop.OpEq8)
13472 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
13473 v0.AuxInt = ssa.Int8ToAuxInt(0)
13474 v.AddArg2(v0, x)
13475 return true
13476 }
13477
13478
13479 for {
13480 x := v_0
13481 if v_1.Op != ssaop.OpConst8 {
13482 break
13483 }
13484 t := v_1.Type
13485 if ssa.AuxIntToInt8(v_1.AuxInt) != -1 {
13486 break
13487 }
13488 v.Reset(ssaop.OpLess8)
13489 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
13490 v0.AuxInt = ssa.Int8ToAuxInt(0)
13491 v.AddArg2(x, v0)
13492 return true
13493 }
13494
13495
13496 for {
13497 if v_0.Op != ssaop.OpConst8 {
13498 break
13499 }
13500 t := v_0.Type
13501 if ssa.AuxIntToInt8(v_0.AuxInt) != 1 {
13502 break
13503 }
13504 x := v_1
13505 v.Reset(ssaop.OpLess8)
13506 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
13507 v0.AuxInt = ssa.Int8ToAuxInt(0)
13508 v.AddArg2(v0, x)
13509 return true
13510 }
13511
13512
13513 for {
13514 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != math.MinInt8 {
13515 break
13516 }
13517 v.Reset(ssaop.OpConstBool)
13518 v.AuxInt = ssa.BoolToAuxInt(true)
13519 return true
13520 }
13521
13522
13523 for {
13524 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != math.MaxInt8 {
13525 break
13526 }
13527 v.Reset(ssaop.OpConstBool)
13528 v.AuxInt = ssa.BoolToAuxInt(true)
13529 return true
13530 }
13531
13532
13533 for {
13534 x := v_0
13535 c := v_1
13536 if c.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(c.AuxInt) != math.MinInt8 {
13537 break
13538 }
13539 v.Reset(ssaop.OpEq8)
13540 v.AddArg2(x, c)
13541 return true
13542 }
13543
13544
13545 for {
13546 c := v_0
13547 if c.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(c.AuxInt) != math.MaxInt8 {
13548 break
13549 }
13550 x := v_1
13551 v.Reset(ssaop.OpEq8)
13552 v.AddArg2(x, c)
13553 return true
13554 }
13555 return false
13556 }
13557 func rewriteValue_OpLeq8U(v *ssa.Value) bool {
13558 v_1 := v.Args[1]
13559 v_0 := v.Args[0]
13560 b := v.Block
13561
13562
13563 for {
13564 if v_0.Op != ssaop.OpConst8 {
13565 break
13566 }
13567 c := ssa.AuxIntToInt8(v_0.AuxInt)
13568 if v_1.Op != ssaop.OpConst8 {
13569 break
13570 }
13571 d := ssa.AuxIntToInt8(v_1.AuxInt)
13572 v.Reset(ssaop.OpConstBool)
13573 v.AuxInt = ssa.BoolToAuxInt(uint8(c) <= uint8(d))
13574 return true
13575 }
13576
13577
13578 for {
13579 if v_0.Op != ssaop.OpConst8 {
13580 break
13581 }
13582 t := v_0.Type
13583 if ssa.AuxIntToInt8(v_0.AuxInt) != 1 {
13584 break
13585 }
13586 x := v_1
13587 v.Reset(ssaop.OpNeq8)
13588 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
13589 v0.AuxInt = ssa.Int8ToAuxInt(0)
13590 v.AddArg2(v0, x)
13591 return true
13592 }
13593
13594
13595 for {
13596 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
13597 break
13598 }
13599 v.Reset(ssaop.OpConstBool)
13600 v.AuxInt = ssa.BoolToAuxInt(true)
13601 return true
13602 }
13603
13604
13605 for {
13606 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != -1 {
13607 break
13608 }
13609 v.Reset(ssaop.OpConstBool)
13610 v.AuxInt = ssa.BoolToAuxInt(true)
13611 return true
13612 }
13613
13614
13615 for {
13616 x := v_0
13617 c := v_1
13618 if c.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(c.AuxInt) != 0 {
13619 break
13620 }
13621 v.Reset(ssaop.OpEq8)
13622 v.AddArg2(x, c)
13623 return true
13624 }
13625
13626
13627 for {
13628 c := v_0
13629 if c.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(c.AuxInt) != -1 {
13630 break
13631 }
13632 x := v_1
13633 v.Reset(ssaop.OpEq8)
13634 v.AddArg2(x, c)
13635 return true
13636 }
13637 return false
13638 }
13639 func rewriteValue_OpLess16(v *ssa.Value) bool {
13640 v_1 := v.Args[1]
13641 v_0 := v.Args[0]
13642 b := v.Block
13643
13644
13645 for {
13646 if v_0.Op != ssaop.OpConst16 {
13647 break
13648 }
13649 c := ssa.AuxIntToInt16(v_0.AuxInt)
13650 if v_1.Op != ssaop.OpConst16 {
13651 break
13652 }
13653 d := ssa.AuxIntToInt16(v_1.AuxInt)
13654 v.Reset(ssaop.OpConstBool)
13655 v.AuxInt = ssa.BoolToAuxInt(c < d)
13656 return true
13657 }
13658
13659
13660
13661 for {
13662 if v_0.Op != ssaop.OpConst16 {
13663 break
13664 }
13665 t := v_0.Type
13666 if ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
13667 break
13668 }
13669 x := v_1
13670 if !(isNonNegative(x)) {
13671 break
13672 }
13673 v.Reset(ssaop.OpNeq16)
13674 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
13675 v0.AuxInt = ssa.Int16ToAuxInt(0)
13676 v.AddArg2(v0, x)
13677 return true
13678 }
13679
13680
13681 for {
13682 x := v_0
13683 if v_1.Op != ssaop.OpConst16 {
13684 break
13685 }
13686 t := v_1.Type
13687 if ssa.AuxIntToInt16(v_1.AuxInt) != 1 {
13688 break
13689 }
13690 v.Reset(ssaop.OpLeq16)
13691 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
13692 v0.AuxInt = ssa.Int16ToAuxInt(0)
13693 v.AddArg2(x, v0)
13694 return true
13695 }
13696
13697
13698 for {
13699 if v_0.Op != ssaop.OpConst16 {
13700 break
13701 }
13702 t := v_0.Type
13703 if ssa.AuxIntToInt16(v_0.AuxInt) != -1 {
13704 break
13705 }
13706 x := v_1
13707 v.Reset(ssaop.OpLeq16)
13708 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
13709 v0.AuxInt = ssa.Int16ToAuxInt(0)
13710 v.AddArg2(v0, x)
13711 return true
13712 }
13713
13714
13715 for {
13716 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != math.MinInt16 {
13717 break
13718 }
13719 v.Reset(ssaop.OpConstBool)
13720 v.AuxInt = ssa.BoolToAuxInt(false)
13721 return true
13722 }
13723
13724
13725 for {
13726 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != math.MaxInt16 {
13727 break
13728 }
13729 v.Reset(ssaop.OpConstBool)
13730 v.AuxInt = ssa.BoolToAuxInt(false)
13731 return true
13732 }
13733
13734
13735 for {
13736 x := v_0
13737 if v_1.Op != ssaop.OpConst16 {
13738 break
13739 }
13740 t := v_1.Type
13741 if ssa.AuxIntToInt16(v_1.AuxInt) != math.MinInt16+1 {
13742 break
13743 }
13744 v.Reset(ssaop.OpEq16)
13745 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
13746 v0.AuxInt = ssa.Int16ToAuxInt(math.MinInt16)
13747 v.AddArg2(x, v0)
13748 return true
13749 }
13750
13751
13752 for {
13753 if v_0.Op != ssaop.OpConst16 {
13754 break
13755 }
13756 t := v_0.Type
13757 if ssa.AuxIntToInt16(v_0.AuxInt) != math.MaxInt16-1 {
13758 break
13759 }
13760 x := v_1
13761 v.Reset(ssaop.OpEq16)
13762 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
13763 v0.AuxInt = ssa.Int16ToAuxInt(math.MaxInt16)
13764 v.AddArg2(x, v0)
13765 return true
13766 }
13767 return false
13768 }
13769 func rewriteValue_OpLess16U(v *ssa.Value) bool {
13770 v_1 := v.Args[1]
13771 v_0 := v.Args[0]
13772 b := v.Block
13773
13774
13775 for {
13776 if v_0.Op != ssaop.OpConst16 {
13777 break
13778 }
13779 c := ssa.AuxIntToInt16(v_0.AuxInt)
13780 if v_1.Op != ssaop.OpConst16 {
13781 break
13782 }
13783 d := ssa.AuxIntToInt16(v_1.AuxInt)
13784 v.Reset(ssaop.OpConstBool)
13785 v.AuxInt = ssa.BoolToAuxInt(uint16(c) < uint16(d))
13786 return true
13787 }
13788
13789
13790 for {
13791 if v_0.Op != ssaop.OpConst16 {
13792 break
13793 }
13794 t := v_0.Type
13795 if ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
13796 break
13797 }
13798 x := v_1
13799 v.Reset(ssaop.OpNeq16)
13800 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
13801 v0.AuxInt = ssa.Int16ToAuxInt(0)
13802 v.AddArg2(v0, x)
13803 return true
13804 }
13805
13806
13807 for {
13808 x := v_0
13809 if v_1.Op != ssaop.OpConst16 {
13810 break
13811 }
13812 t := v_1.Type
13813 if ssa.AuxIntToInt16(v_1.AuxInt) != 1 {
13814 break
13815 }
13816 v.Reset(ssaop.OpEq16)
13817 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
13818 v0.AuxInt = ssa.Int16ToAuxInt(0)
13819 v.AddArg2(v0, x)
13820 return true
13821 }
13822
13823
13824 for {
13825 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != 0 {
13826 break
13827 }
13828 v.Reset(ssaop.OpConstBool)
13829 v.AuxInt = ssa.BoolToAuxInt(false)
13830 return true
13831 }
13832
13833
13834 for {
13835 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != -1 {
13836 break
13837 }
13838 v.Reset(ssaop.OpConstBool)
13839 v.AuxInt = ssa.BoolToAuxInt(false)
13840 return true
13841 }
13842
13843
13844 for {
13845 x := v_0
13846 if v_1.Op != ssaop.OpConst16 {
13847 break
13848 }
13849 t := v_1.Type
13850 if ssa.AuxIntToInt16(v_1.AuxInt) != 1 {
13851 break
13852 }
13853 v.Reset(ssaop.OpEq16)
13854 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
13855 v0.AuxInt = ssa.Int16ToAuxInt(0)
13856 v.AddArg2(x, v0)
13857 return true
13858 }
13859
13860
13861 for {
13862 if v_0.Op != ssaop.OpConst16 {
13863 break
13864 }
13865 t := v_0.Type
13866 if ssa.AuxIntToInt16(v_0.AuxInt) != -2 {
13867 break
13868 }
13869 x := v_1
13870 v.Reset(ssaop.OpEq16)
13871 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
13872 v0.AuxInt = ssa.Int16ToAuxInt(-1)
13873 v.AddArg2(x, v0)
13874 return true
13875 }
13876 return false
13877 }
13878 func rewriteValue_OpLess32(v *ssa.Value) bool {
13879 v_1 := v.Args[1]
13880 v_0 := v.Args[0]
13881 b := v.Block
13882
13883
13884 for {
13885 if v_0.Op != ssaop.OpConst32 {
13886 break
13887 }
13888 c := ssa.AuxIntToInt32(v_0.AuxInt)
13889 if v_1.Op != ssaop.OpConst32 {
13890 break
13891 }
13892 d := ssa.AuxIntToInt32(v_1.AuxInt)
13893 v.Reset(ssaop.OpConstBool)
13894 v.AuxInt = ssa.BoolToAuxInt(c < d)
13895 return true
13896 }
13897
13898
13899
13900 for {
13901 if v_0.Op != ssaop.OpConst32 {
13902 break
13903 }
13904 t := v_0.Type
13905 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
13906 break
13907 }
13908 x := v_1
13909 if !(isNonNegative(x)) {
13910 break
13911 }
13912 v.Reset(ssaop.OpNeq32)
13913 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
13914 v0.AuxInt = ssa.Int32ToAuxInt(0)
13915 v.AddArg2(v0, x)
13916 return true
13917 }
13918
13919
13920 for {
13921 x := v_0
13922 if v_1.Op != ssaop.OpConst32 {
13923 break
13924 }
13925 t := v_1.Type
13926 if ssa.AuxIntToInt32(v_1.AuxInt) != 1 {
13927 break
13928 }
13929 v.Reset(ssaop.OpLeq32)
13930 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
13931 v0.AuxInt = ssa.Int32ToAuxInt(0)
13932 v.AddArg2(x, v0)
13933 return true
13934 }
13935
13936
13937 for {
13938 if v_0.Op != ssaop.OpConst32 {
13939 break
13940 }
13941 t := v_0.Type
13942 if ssa.AuxIntToInt32(v_0.AuxInt) != -1 {
13943 break
13944 }
13945 x := v_1
13946 v.Reset(ssaop.OpLeq32)
13947 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
13948 v0.AuxInt = ssa.Int32ToAuxInt(0)
13949 v.AddArg2(v0, x)
13950 return true
13951 }
13952
13953
13954 for {
13955 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != math.MinInt32 {
13956 break
13957 }
13958 v.Reset(ssaop.OpConstBool)
13959 v.AuxInt = ssa.BoolToAuxInt(false)
13960 return true
13961 }
13962
13963
13964 for {
13965 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != math.MaxInt32 {
13966 break
13967 }
13968 v.Reset(ssaop.OpConstBool)
13969 v.AuxInt = ssa.BoolToAuxInt(false)
13970 return true
13971 }
13972
13973
13974 for {
13975 x := v_0
13976 if v_1.Op != ssaop.OpConst32 {
13977 break
13978 }
13979 t := v_1.Type
13980 if ssa.AuxIntToInt32(v_1.AuxInt) != math.MinInt32+1 {
13981 break
13982 }
13983 v.Reset(ssaop.OpEq32)
13984 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
13985 v0.AuxInt = ssa.Int32ToAuxInt(math.MinInt32)
13986 v.AddArg2(x, v0)
13987 return true
13988 }
13989
13990
13991 for {
13992 if v_0.Op != ssaop.OpConst32 {
13993 break
13994 }
13995 t := v_0.Type
13996 if ssa.AuxIntToInt32(v_0.AuxInt) != math.MaxInt32-1 {
13997 break
13998 }
13999 x := v_1
14000 v.Reset(ssaop.OpEq32)
14001 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
14002 v0.AuxInt = ssa.Int32ToAuxInt(math.MaxInt32)
14003 v.AddArg2(x, v0)
14004 return true
14005 }
14006 return false
14007 }
14008 func rewriteValue_OpLess32F(v *ssa.Value) bool {
14009 v_1 := v.Args[1]
14010 v_0 := v.Args[0]
14011
14012
14013 for {
14014 if v_0.Op != ssaop.OpConst32F {
14015 break
14016 }
14017 c := ssa.AuxIntToFloat32(v_0.AuxInt)
14018 if v_1.Op != ssaop.OpConst32F {
14019 break
14020 }
14021 d := ssa.AuxIntToFloat32(v_1.AuxInt)
14022 v.Reset(ssaop.OpConstBool)
14023 v.AuxInt = ssa.BoolToAuxInt(c < d)
14024 return true
14025 }
14026 return false
14027 }
14028 func rewriteValue_OpLess32U(v *ssa.Value) bool {
14029 v_1 := v.Args[1]
14030 v_0 := v.Args[0]
14031 b := v.Block
14032
14033
14034 for {
14035 if v_0.Op != ssaop.OpConst32 {
14036 break
14037 }
14038 c := ssa.AuxIntToInt32(v_0.AuxInt)
14039 if v_1.Op != ssaop.OpConst32 {
14040 break
14041 }
14042 d := ssa.AuxIntToInt32(v_1.AuxInt)
14043 v.Reset(ssaop.OpConstBool)
14044 v.AuxInt = ssa.BoolToAuxInt(uint32(c) < uint32(d))
14045 return true
14046 }
14047
14048
14049 for {
14050 if v_0.Op != ssaop.OpConst32 {
14051 break
14052 }
14053 t := v_0.Type
14054 if ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
14055 break
14056 }
14057 x := v_1
14058 v.Reset(ssaop.OpNeq32)
14059 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
14060 v0.AuxInt = ssa.Int32ToAuxInt(0)
14061 v.AddArg2(v0, x)
14062 return true
14063 }
14064
14065
14066 for {
14067 x := v_0
14068 if v_1.Op != ssaop.OpConst32 {
14069 break
14070 }
14071 t := v_1.Type
14072 if ssa.AuxIntToInt32(v_1.AuxInt) != 1 {
14073 break
14074 }
14075 v.Reset(ssaop.OpEq32)
14076 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
14077 v0.AuxInt = ssa.Int32ToAuxInt(0)
14078 v.AddArg2(v0, x)
14079 return true
14080 }
14081
14082
14083 for {
14084 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != 0 {
14085 break
14086 }
14087 v.Reset(ssaop.OpConstBool)
14088 v.AuxInt = ssa.BoolToAuxInt(false)
14089 return true
14090 }
14091
14092
14093 for {
14094 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != -1 {
14095 break
14096 }
14097 v.Reset(ssaop.OpConstBool)
14098 v.AuxInt = ssa.BoolToAuxInt(false)
14099 return true
14100 }
14101
14102
14103 for {
14104 x := v_0
14105 if v_1.Op != ssaop.OpConst32 {
14106 break
14107 }
14108 t := v_1.Type
14109 if ssa.AuxIntToInt32(v_1.AuxInt) != 1 {
14110 break
14111 }
14112 v.Reset(ssaop.OpEq32)
14113 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
14114 v0.AuxInt = ssa.Int32ToAuxInt(0)
14115 v.AddArg2(x, v0)
14116 return true
14117 }
14118
14119
14120 for {
14121 if v_0.Op != ssaop.OpConst32 {
14122 break
14123 }
14124 t := v_0.Type
14125 if ssa.AuxIntToInt32(v_0.AuxInt) != -2 {
14126 break
14127 }
14128 x := v_1
14129 v.Reset(ssaop.OpEq32)
14130 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
14131 v0.AuxInt = ssa.Int32ToAuxInt(-1)
14132 v.AddArg2(x, v0)
14133 return true
14134 }
14135 return false
14136 }
14137 func rewriteValue_OpLess64(v *ssa.Value) bool {
14138 v_1 := v.Args[1]
14139 v_0 := v.Args[0]
14140 b := v.Block
14141
14142
14143 for {
14144 if v_0.Op != ssaop.OpConst64 {
14145 break
14146 }
14147 c := ssa.AuxIntToInt64(v_0.AuxInt)
14148 if v_1.Op != ssaop.OpConst64 {
14149 break
14150 }
14151 d := ssa.AuxIntToInt64(v_1.AuxInt)
14152 v.Reset(ssaop.OpConstBool)
14153 v.AuxInt = ssa.BoolToAuxInt(c < d)
14154 return true
14155 }
14156
14157
14158
14159 for {
14160 if v_0.Op != ssaop.OpConst64 {
14161 break
14162 }
14163 t := v_0.Type
14164 if ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
14165 break
14166 }
14167 x := v_1
14168 if !(isNonNegative(x)) {
14169 break
14170 }
14171 v.Reset(ssaop.OpNeq64)
14172 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
14173 v0.AuxInt = ssa.Int64ToAuxInt(0)
14174 v.AddArg2(v0, x)
14175 return true
14176 }
14177
14178
14179 for {
14180 x := v_0
14181 if v_1.Op != ssaop.OpConst64 {
14182 break
14183 }
14184 t := v_1.Type
14185 if ssa.AuxIntToInt64(v_1.AuxInt) != 1 {
14186 break
14187 }
14188 v.Reset(ssaop.OpLeq64)
14189 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
14190 v0.AuxInt = ssa.Int64ToAuxInt(0)
14191 v.AddArg2(x, v0)
14192 return true
14193 }
14194
14195
14196 for {
14197 if v_0.Op != ssaop.OpConst64 {
14198 break
14199 }
14200 t := v_0.Type
14201 if ssa.AuxIntToInt64(v_0.AuxInt) != -1 {
14202 break
14203 }
14204 x := v_1
14205 v.Reset(ssaop.OpLeq64)
14206 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
14207 v0.AuxInt = ssa.Int64ToAuxInt(0)
14208 v.AddArg2(v0, x)
14209 return true
14210 }
14211
14212
14213 for {
14214 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != math.MinInt64 {
14215 break
14216 }
14217 v.Reset(ssaop.OpConstBool)
14218 v.AuxInt = ssa.BoolToAuxInt(false)
14219 return true
14220 }
14221
14222
14223 for {
14224 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != math.MaxInt64 {
14225 break
14226 }
14227 v.Reset(ssaop.OpConstBool)
14228 v.AuxInt = ssa.BoolToAuxInt(false)
14229 return true
14230 }
14231
14232
14233 for {
14234 x := v_0
14235 if v_1.Op != ssaop.OpConst64 {
14236 break
14237 }
14238 t := v_1.Type
14239 if ssa.AuxIntToInt64(v_1.AuxInt) != math.MinInt64+1 {
14240 break
14241 }
14242 v.Reset(ssaop.OpEq64)
14243 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
14244 v0.AuxInt = ssa.Int64ToAuxInt(math.MinInt64)
14245 v.AddArg2(x, v0)
14246 return true
14247 }
14248
14249
14250 for {
14251 if v_0.Op != ssaop.OpConst64 {
14252 break
14253 }
14254 t := v_0.Type
14255 if ssa.AuxIntToInt64(v_0.AuxInt) != math.MaxInt64-1 {
14256 break
14257 }
14258 x := v_1
14259 v.Reset(ssaop.OpEq64)
14260 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
14261 v0.AuxInt = ssa.Int64ToAuxInt(math.MaxInt64)
14262 v.AddArg2(x, v0)
14263 return true
14264 }
14265 return false
14266 }
14267 func rewriteValue_OpLess64F(v *ssa.Value) bool {
14268 v_1 := v.Args[1]
14269 v_0 := v.Args[0]
14270
14271
14272 for {
14273 if v_0.Op != ssaop.OpConst64F {
14274 break
14275 }
14276 c := ssa.AuxIntToFloat64(v_0.AuxInt)
14277 if v_1.Op != ssaop.OpConst64F {
14278 break
14279 }
14280 d := ssa.AuxIntToFloat64(v_1.AuxInt)
14281 v.Reset(ssaop.OpConstBool)
14282 v.AuxInt = ssa.BoolToAuxInt(c < d)
14283 return true
14284 }
14285 return false
14286 }
14287 func rewriteValue_OpLess64U(v *ssa.Value) bool {
14288 v_1 := v.Args[1]
14289 v_0 := v.Args[0]
14290 b := v.Block
14291
14292
14293 for {
14294 if v_0.Op != ssaop.OpConst64 {
14295 break
14296 }
14297 c := ssa.AuxIntToInt64(v_0.AuxInt)
14298 if v_1.Op != ssaop.OpConst64 {
14299 break
14300 }
14301 d := ssa.AuxIntToInt64(v_1.AuxInt)
14302 v.Reset(ssaop.OpConstBool)
14303 v.AuxInt = ssa.BoolToAuxInt(uint64(c) < uint64(d))
14304 return true
14305 }
14306
14307
14308 for {
14309 if v_0.Op != ssaop.OpConst64 {
14310 break
14311 }
14312 t := v_0.Type
14313 if ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
14314 break
14315 }
14316 x := v_1
14317 v.Reset(ssaop.OpNeq64)
14318 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
14319 v0.AuxInt = ssa.Int64ToAuxInt(0)
14320 v.AddArg2(v0, x)
14321 return true
14322 }
14323
14324
14325 for {
14326 x := v_0
14327 if v_1.Op != ssaop.OpConst64 {
14328 break
14329 }
14330 t := v_1.Type
14331 if ssa.AuxIntToInt64(v_1.AuxInt) != 1 {
14332 break
14333 }
14334 v.Reset(ssaop.OpEq64)
14335 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
14336 v0.AuxInt = ssa.Int64ToAuxInt(0)
14337 v.AddArg2(v0, x)
14338 return true
14339 }
14340
14341
14342 for {
14343 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
14344 break
14345 }
14346 v.Reset(ssaop.OpConstBool)
14347 v.AuxInt = ssa.BoolToAuxInt(false)
14348 return true
14349 }
14350
14351
14352 for {
14353 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != -1 {
14354 break
14355 }
14356 v.Reset(ssaop.OpConstBool)
14357 v.AuxInt = ssa.BoolToAuxInt(false)
14358 return true
14359 }
14360
14361
14362 for {
14363 x := v_0
14364 if v_1.Op != ssaop.OpConst64 {
14365 break
14366 }
14367 t := v_1.Type
14368 if ssa.AuxIntToInt64(v_1.AuxInt) != 1 {
14369 break
14370 }
14371 v.Reset(ssaop.OpEq64)
14372 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
14373 v0.AuxInt = ssa.Int64ToAuxInt(0)
14374 v.AddArg2(x, v0)
14375 return true
14376 }
14377
14378
14379 for {
14380 if v_0.Op != ssaop.OpConst64 {
14381 break
14382 }
14383 t := v_0.Type
14384 if ssa.AuxIntToInt64(v_0.AuxInt) != -2 {
14385 break
14386 }
14387 x := v_1
14388 v.Reset(ssaop.OpEq64)
14389 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
14390 v0.AuxInt = ssa.Int64ToAuxInt(-1)
14391 v.AddArg2(x, v0)
14392 return true
14393 }
14394 return false
14395 }
14396 func rewriteValue_OpLess8(v *ssa.Value) bool {
14397 v_1 := v.Args[1]
14398 v_0 := v.Args[0]
14399 b := v.Block
14400
14401
14402 for {
14403 if v_0.Op != ssaop.OpConst8 {
14404 break
14405 }
14406 c := ssa.AuxIntToInt8(v_0.AuxInt)
14407 if v_1.Op != ssaop.OpConst8 {
14408 break
14409 }
14410 d := ssa.AuxIntToInt8(v_1.AuxInt)
14411 v.Reset(ssaop.OpConstBool)
14412 v.AuxInt = ssa.BoolToAuxInt(c < d)
14413 return true
14414 }
14415
14416
14417
14418 for {
14419 if v_0.Op != ssaop.OpConst8 {
14420 break
14421 }
14422 t := v_0.Type
14423 if ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
14424 break
14425 }
14426 x := v_1
14427 if !(isNonNegative(x)) {
14428 break
14429 }
14430 v.Reset(ssaop.OpNeq8)
14431 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
14432 v0.AuxInt = ssa.Int8ToAuxInt(0)
14433 v.AddArg2(v0, x)
14434 return true
14435 }
14436
14437
14438 for {
14439 x := v_0
14440 if v_1.Op != ssaop.OpConst8 {
14441 break
14442 }
14443 t := v_1.Type
14444 if ssa.AuxIntToInt8(v_1.AuxInt) != 1 {
14445 break
14446 }
14447 v.Reset(ssaop.OpLeq8)
14448 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
14449 v0.AuxInt = ssa.Int8ToAuxInt(0)
14450 v.AddArg2(x, v0)
14451 return true
14452 }
14453
14454
14455 for {
14456 if v_0.Op != ssaop.OpConst8 {
14457 break
14458 }
14459 t := v_0.Type
14460 if ssa.AuxIntToInt8(v_0.AuxInt) != -1 {
14461 break
14462 }
14463 x := v_1
14464 v.Reset(ssaop.OpLeq8)
14465 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
14466 v0.AuxInt = ssa.Int8ToAuxInt(0)
14467 v.AddArg2(v0, x)
14468 return true
14469 }
14470
14471
14472 for {
14473 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != math.MinInt8 {
14474 break
14475 }
14476 v.Reset(ssaop.OpConstBool)
14477 v.AuxInt = ssa.BoolToAuxInt(false)
14478 return true
14479 }
14480
14481
14482 for {
14483 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != math.MaxInt8 {
14484 break
14485 }
14486 v.Reset(ssaop.OpConstBool)
14487 v.AuxInt = ssa.BoolToAuxInt(false)
14488 return true
14489 }
14490
14491
14492 for {
14493 x := v_0
14494 if v_1.Op != ssaop.OpConst8 {
14495 break
14496 }
14497 t := v_1.Type
14498 if ssa.AuxIntToInt8(v_1.AuxInt) != math.MinInt8+1 {
14499 break
14500 }
14501 v.Reset(ssaop.OpEq8)
14502 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
14503 v0.AuxInt = ssa.Int8ToAuxInt(math.MinInt8)
14504 v.AddArg2(x, v0)
14505 return true
14506 }
14507
14508
14509 for {
14510 if v_0.Op != ssaop.OpConst8 {
14511 break
14512 }
14513 t := v_0.Type
14514 if ssa.AuxIntToInt8(v_0.AuxInt) != math.MaxInt8-1 {
14515 break
14516 }
14517 x := v_1
14518 v.Reset(ssaop.OpEq8)
14519 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
14520 v0.AuxInt = ssa.Int8ToAuxInt(math.MaxInt8)
14521 v.AddArg2(x, v0)
14522 return true
14523 }
14524 return false
14525 }
14526 func rewriteValue_OpLess8U(v *ssa.Value) bool {
14527 v_1 := v.Args[1]
14528 v_0 := v.Args[0]
14529 b := v.Block
14530
14531
14532 for {
14533 if v_0.Op != ssaop.OpConst8 {
14534 break
14535 }
14536 c := ssa.AuxIntToInt8(v_0.AuxInt)
14537 if v_1.Op != ssaop.OpConst8 {
14538 break
14539 }
14540 d := ssa.AuxIntToInt8(v_1.AuxInt)
14541 v.Reset(ssaop.OpConstBool)
14542 v.AuxInt = ssa.BoolToAuxInt(uint8(c) < uint8(d))
14543 return true
14544 }
14545
14546
14547 for {
14548 if v_0.Op != ssaop.OpConst8 {
14549 break
14550 }
14551 t := v_0.Type
14552 if ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
14553 break
14554 }
14555 x := v_1
14556 v.Reset(ssaop.OpNeq8)
14557 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
14558 v0.AuxInt = ssa.Int8ToAuxInt(0)
14559 v.AddArg2(v0, x)
14560 return true
14561 }
14562
14563
14564 for {
14565 x := v_0
14566 if v_1.Op != ssaop.OpConst8 {
14567 break
14568 }
14569 t := v_1.Type
14570 if ssa.AuxIntToInt8(v_1.AuxInt) != 1 {
14571 break
14572 }
14573 v.Reset(ssaop.OpEq8)
14574 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
14575 v0.AuxInt = ssa.Int8ToAuxInt(0)
14576 v.AddArg2(v0, x)
14577 return true
14578 }
14579
14580
14581 for {
14582 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != 0 {
14583 break
14584 }
14585 v.Reset(ssaop.OpConstBool)
14586 v.AuxInt = ssa.BoolToAuxInt(false)
14587 return true
14588 }
14589
14590
14591 for {
14592 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != -1 {
14593 break
14594 }
14595 v.Reset(ssaop.OpConstBool)
14596 v.AuxInt = ssa.BoolToAuxInt(false)
14597 return true
14598 }
14599
14600
14601 for {
14602 x := v_0
14603 if v_1.Op != ssaop.OpConst8 {
14604 break
14605 }
14606 t := v_1.Type
14607 if ssa.AuxIntToInt8(v_1.AuxInt) != 1 {
14608 break
14609 }
14610 v.Reset(ssaop.OpEq8)
14611 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
14612 v0.AuxInt = ssa.Int8ToAuxInt(0)
14613 v.AddArg2(x, v0)
14614 return true
14615 }
14616
14617
14618 for {
14619 if v_0.Op != ssaop.OpConst8 {
14620 break
14621 }
14622 t := v_0.Type
14623 if ssa.AuxIntToInt8(v_0.AuxInt) != -2 {
14624 break
14625 }
14626 x := v_1
14627 v.Reset(ssaop.OpEq8)
14628 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
14629 v0.AuxInt = ssa.Int8ToAuxInt(-1)
14630 v.AddArg2(x, v0)
14631 return true
14632 }
14633 return false
14634 }
14635 func rewriteValue_OpLoad(v *ssa.Value) bool {
14636 v_1 := v.Args[1]
14637 v_0 := v.Args[0]
14638 b := v.Block
14639 config := b.Func.Config
14640 typ := &b.Func.Config.Types
14641
14642
14643
14644 for {
14645 t1 := v.Type
14646 p1 := v_0
14647 if v_1.Op != ssaop.OpStore {
14648 break
14649 }
14650 t2 := ssa.AuxToType(v_1.Aux)
14651 x := v_1.Args[1]
14652 p2 := v_1.Args[0]
14653 if !(ssa.IsSamePtr(p1, p2) && copyCompatibleType(t1, x.Type) && t1.Size() == t2.Size()) {
14654 break
14655 }
14656 v.CopyOf(x)
14657 return true
14658 }
14659
14660
14661
14662 for {
14663 t1 := v.Type
14664 p1 := v_0
14665 if v_1.Op != ssaop.OpStore {
14666 break
14667 }
14668 t2 := ssa.AuxToType(v_1.Aux)
14669 _ = v_1.Args[2]
14670 p2 := v_1.Args[0]
14671 v_1_2 := v_1.Args[2]
14672 if v_1_2.Op != ssaop.OpStore {
14673 break
14674 }
14675 t3 := ssa.AuxToType(v_1_2.Aux)
14676 x := v_1_2.Args[1]
14677 p3 := v_1_2.Args[0]
14678 if !(ssa.IsSamePtr(p1, p3) && copyCompatibleType(t1, x.Type) && t1.Size() == t3.Size() && ssa.Disjoint(p3, t3, p2, t2)) {
14679 break
14680 }
14681 v.CopyOf(x)
14682 return true
14683 }
14684
14685
14686
14687 for {
14688 t1 := v.Type
14689 p1 := v_0
14690 if v_1.Op != ssaop.OpStore {
14691 break
14692 }
14693 t2 := ssa.AuxToType(v_1.Aux)
14694 _ = v_1.Args[2]
14695 p2 := v_1.Args[0]
14696 v_1_2 := v_1.Args[2]
14697 if v_1_2.Op != ssaop.OpStore {
14698 break
14699 }
14700 t3 := ssa.AuxToType(v_1_2.Aux)
14701 _ = v_1_2.Args[2]
14702 p3 := v_1_2.Args[0]
14703 v_1_2_2 := v_1_2.Args[2]
14704 if v_1_2_2.Op != ssaop.OpStore {
14705 break
14706 }
14707 t4 := ssa.AuxToType(v_1_2_2.Aux)
14708 x := v_1_2_2.Args[1]
14709 p4 := v_1_2_2.Args[0]
14710 if !(ssa.IsSamePtr(p1, p4) && copyCompatibleType(t1, x.Type) && t1.Size() == t4.Size() && ssa.Disjoint(p4, t4, p2, t2) && ssa.Disjoint(p4, t4, p3, t3)) {
14711 break
14712 }
14713 v.CopyOf(x)
14714 return true
14715 }
14716
14717
14718
14719 for {
14720 t1 := v.Type
14721 p1 := v_0
14722 if v_1.Op != ssaop.OpStore {
14723 break
14724 }
14725 t2 := ssa.AuxToType(v_1.Aux)
14726 _ = v_1.Args[2]
14727 p2 := v_1.Args[0]
14728 v_1_2 := v_1.Args[2]
14729 if v_1_2.Op != ssaop.OpStore {
14730 break
14731 }
14732 t3 := ssa.AuxToType(v_1_2.Aux)
14733 _ = v_1_2.Args[2]
14734 p3 := v_1_2.Args[0]
14735 v_1_2_2 := v_1_2.Args[2]
14736 if v_1_2_2.Op != ssaop.OpStore {
14737 break
14738 }
14739 t4 := ssa.AuxToType(v_1_2_2.Aux)
14740 _ = v_1_2_2.Args[2]
14741 p4 := v_1_2_2.Args[0]
14742 v_1_2_2_2 := v_1_2_2.Args[2]
14743 if v_1_2_2_2.Op != ssaop.OpStore {
14744 break
14745 }
14746 t5 := ssa.AuxToType(v_1_2_2_2.Aux)
14747 x := v_1_2_2_2.Args[1]
14748 p5 := v_1_2_2_2.Args[0]
14749 if !(ssa.IsSamePtr(p1, p5) && copyCompatibleType(t1, x.Type) && t1.Size() == t5.Size() && ssa.Disjoint(p5, t5, p2, t2) && ssa.Disjoint(p5, t5, p3, t3) && ssa.Disjoint(p5, t5, p4, t4)) {
14750 break
14751 }
14752 v.CopyOf(x)
14753 return true
14754 }
14755
14756
14757
14758 for {
14759 t1 := v.Type
14760 op1 := v_0
14761 if op1.Op != ssaop.OpOffPtr {
14762 break
14763 }
14764 o1 := ssa.AuxIntToInt64(op1.AuxInt)
14765 p1 := op1.Args[0]
14766 move := v_1
14767 if move.Op != ssaop.OpMove {
14768 break
14769 }
14770 n := ssa.AuxIntToInt64(move.AuxInt)
14771 mem := move.Args[2]
14772 p2 := move.Args[0]
14773 src := move.Args[1]
14774 if !(o1 >= 0 && o1+t1.Size() <= n && ssa.IsSamePtr(p1, p2) && !ssa.IsVolatile(src)) {
14775 break
14776 }
14777 b = move.Block
14778 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, t1)
14779 v.CopyOf(v0)
14780 v1 := b.NewValue0(v.Pos, ssaop.OpOffPtr, op1.Type)
14781 v1.AuxInt = ssa.Int64ToAuxInt(o1)
14782 v1.AddArg(src)
14783 v0.AddArg2(v1, mem)
14784 return true
14785 }
14786
14787
14788
14789 for {
14790 t1 := v.Type
14791 p1 := v_0
14792 if v_1.Op != ssaop.OpStore {
14793 break
14794 }
14795 t2 := ssa.AuxToType(v_1.Aux)
14796 _ = v_1.Args[1]
14797 p2 := v_1.Args[0]
14798 v_1_1 := v_1.Args[1]
14799 if v_1_1.Op != ssaop.OpConst64 {
14800 break
14801 }
14802 x := ssa.AuxIntToInt64(v_1_1.AuxInt)
14803 if !(ssa.IsSamePtr(p1, p2) && t2.Size() == 8 && ssa.Is64BitFloat(t1) && !math.IsNaN(math.Float64frombits(uint64(x)))) {
14804 break
14805 }
14806 v.Reset(ssaop.OpConst64F)
14807 v.AuxInt = ssa.Float64ToAuxInt(math.Float64frombits(uint64(x)))
14808 return true
14809 }
14810
14811
14812
14813 for {
14814 t1 := v.Type
14815 p1 := v_0
14816 if v_1.Op != ssaop.OpStore {
14817 break
14818 }
14819 t2 := ssa.AuxToType(v_1.Aux)
14820 _ = v_1.Args[1]
14821 p2 := v_1.Args[0]
14822 v_1_1 := v_1.Args[1]
14823 if v_1_1.Op != ssaop.OpConst32 {
14824 break
14825 }
14826 x := ssa.AuxIntToInt32(v_1_1.AuxInt)
14827 if !(ssa.IsSamePtr(p1, p2) && t2.Size() == 4 && ssa.Is32BitFloat(t1) && !math.IsNaN(float64(math.Float32frombits(uint32(x))))) {
14828 break
14829 }
14830 v.Reset(ssaop.OpConst32F)
14831 v.AuxInt = ssa.Float32ToAuxInt(math.Float32frombits(uint32(x)))
14832 return true
14833 }
14834
14835
14836
14837 for {
14838 t1 := v.Type
14839 p1 := v_0
14840 if v_1.Op != ssaop.OpStore {
14841 break
14842 }
14843 t2 := ssa.AuxToType(v_1.Aux)
14844 _ = v_1.Args[1]
14845 p2 := v_1.Args[0]
14846 v_1_1 := v_1.Args[1]
14847 if v_1_1.Op != ssaop.OpConst64F {
14848 break
14849 }
14850 x := ssa.AuxIntToFloat64(v_1_1.AuxInt)
14851 if !(ssa.IsSamePtr(p1, p2) && t2.Size() == 8 && ssa.Is64BitInt(t1)) {
14852 break
14853 }
14854 v.Reset(ssaop.OpConst64)
14855 v.AuxInt = ssa.Int64ToAuxInt(int64(math.Float64bits(x)))
14856 return true
14857 }
14858
14859
14860
14861 for {
14862 t1 := v.Type
14863 p1 := v_0
14864 if v_1.Op != ssaop.OpStore {
14865 break
14866 }
14867 t2 := ssa.AuxToType(v_1.Aux)
14868 _ = v_1.Args[1]
14869 p2 := v_1.Args[0]
14870 v_1_1 := v_1.Args[1]
14871 if v_1_1.Op != ssaop.OpConst32F {
14872 break
14873 }
14874 x := ssa.AuxIntToFloat32(v_1_1.AuxInt)
14875 if !(ssa.IsSamePtr(p1, p2) && t2.Size() == 4 && ssa.Is32BitInt(t1)) {
14876 break
14877 }
14878 v.Reset(ssaop.OpConst32)
14879 v.AuxInt = ssa.Int32ToAuxInt(int32(math.Float32bits(x)))
14880 return true
14881 }
14882
14883
14884
14885 for {
14886 t1 := v.Type
14887 op1 := v_0
14888 if op1.Op != ssaop.OpOffPtr {
14889 break
14890 }
14891 o1 := ssa.AuxIntToInt64(op1.AuxInt)
14892 p1 := op1.Args[0]
14893 if v_1.Op != ssaop.OpStore {
14894 break
14895 }
14896 t2 := ssa.AuxToType(v_1.Aux)
14897 _ = v_1.Args[2]
14898 p2 := v_1.Args[0]
14899 mem := v_1.Args[2]
14900 if mem.Op != ssaop.OpZero {
14901 break
14902 }
14903 n := ssa.AuxIntToInt64(mem.AuxInt)
14904 p3 := mem.Args[0]
14905 if !(o1 >= 0 && o1+t1.Size() <= n && ssa.IsSamePtr(p1, p3) && ssa.CanSSA(t1) && ssa.Disjoint(op1, t1, p2, t2)) {
14906 break
14907 }
14908 b = mem.Block
14909 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, t1)
14910 v.CopyOf(v0)
14911 v1 := b.NewValue0(v.Pos, ssaop.OpOffPtr, op1.Type)
14912 v1.AuxInt = ssa.Int64ToAuxInt(o1)
14913 v1.AddArg(p3)
14914 v0.AddArg2(v1, mem)
14915 return true
14916 }
14917
14918
14919
14920 for {
14921 t1 := v.Type
14922 op1 := v_0
14923 if op1.Op != ssaop.OpOffPtr {
14924 break
14925 }
14926 o1 := ssa.AuxIntToInt64(op1.AuxInt)
14927 p1 := op1.Args[0]
14928 if v_1.Op != ssaop.OpStore {
14929 break
14930 }
14931 t2 := ssa.AuxToType(v_1.Aux)
14932 _ = v_1.Args[2]
14933 p2 := v_1.Args[0]
14934 v_1_2 := v_1.Args[2]
14935 if v_1_2.Op != ssaop.OpStore {
14936 break
14937 }
14938 t3 := ssa.AuxToType(v_1_2.Aux)
14939 _ = v_1_2.Args[2]
14940 p3 := v_1_2.Args[0]
14941 mem := v_1_2.Args[2]
14942 if mem.Op != ssaop.OpZero {
14943 break
14944 }
14945 n := ssa.AuxIntToInt64(mem.AuxInt)
14946 p4 := mem.Args[0]
14947 if !(o1 >= 0 && o1+t1.Size() <= n && ssa.IsSamePtr(p1, p4) && ssa.CanSSA(t1) && ssa.Disjoint(op1, t1, p2, t2) && ssa.Disjoint(op1, t1, p3, t3)) {
14948 break
14949 }
14950 b = mem.Block
14951 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, t1)
14952 v.CopyOf(v0)
14953 v1 := b.NewValue0(v.Pos, ssaop.OpOffPtr, op1.Type)
14954 v1.AuxInt = ssa.Int64ToAuxInt(o1)
14955 v1.AddArg(p4)
14956 v0.AddArg2(v1, mem)
14957 return true
14958 }
14959
14960
14961
14962 for {
14963 t1 := v.Type
14964 op1 := v_0
14965 if op1.Op != ssaop.OpOffPtr {
14966 break
14967 }
14968 o1 := ssa.AuxIntToInt64(op1.AuxInt)
14969 p1 := op1.Args[0]
14970 if v_1.Op != ssaop.OpStore {
14971 break
14972 }
14973 t2 := ssa.AuxToType(v_1.Aux)
14974 _ = v_1.Args[2]
14975 p2 := v_1.Args[0]
14976 v_1_2 := v_1.Args[2]
14977 if v_1_2.Op != ssaop.OpStore {
14978 break
14979 }
14980 t3 := ssa.AuxToType(v_1_2.Aux)
14981 _ = v_1_2.Args[2]
14982 p3 := v_1_2.Args[0]
14983 v_1_2_2 := v_1_2.Args[2]
14984 if v_1_2_2.Op != ssaop.OpStore {
14985 break
14986 }
14987 t4 := ssa.AuxToType(v_1_2_2.Aux)
14988 _ = v_1_2_2.Args[2]
14989 p4 := v_1_2_2.Args[0]
14990 mem := v_1_2_2.Args[2]
14991 if mem.Op != ssaop.OpZero {
14992 break
14993 }
14994 n := ssa.AuxIntToInt64(mem.AuxInt)
14995 p5 := mem.Args[0]
14996 if !(o1 >= 0 && o1+t1.Size() <= n && ssa.IsSamePtr(p1, p5) && ssa.CanSSA(t1) && ssa.Disjoint(op1, t1, p2, t2) && ssa.Disjoint(op1, t1, p3, t3) && ssa.Disjoint(op1, t1, p4, t4)) {
14997 break
14998 }
14999 b = mem.Block
15000 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, t1)
15001 v.CopyOf(v0)
15002 v1 := b.NewValue0(v.Pos, ssaop.OpOffPtr, op1.Type)
15003 v1.AuxInt = ssa.Int64ToAuxInt(o1)
15004 v1.AddArg(p5)
15005 v0.AddArg2(v1, mem)
15006 return true
15007 }
15008
15009
15010
15011 for {
15012 t1 := v.Type
15013 op1 := v_0
15014 if op1.Op != ssaop.OpOffPtr {
15015 break
15016 }
15017 o1 := ssa.AuxIntToInt64(op1.AuxInt)
15018 p1 := op1.Args[0]
15019 if v_1.Op != ssaop.OpStore {
15020 break
15021 }
15022 t2 := ssa.AuxToType(v_1.Aux)
15023 _ = v_1.Args[2]
15024 p2 := v_1.Args[0]
15025 v_1_2 := v_1.Args[2]
15026 if v_1_2.Op != ssaop.OpStore {
15027 break
15028 }
15029 t3 := ssa.AuxToType(v_1_2.Aux)
15030 _ = v_1_2.Args[2]
15031 p3 := v_1_2.Args[0]
15032 v_1_2_2 := v_1_2.Args[2]
15033 if v_1_2_2.Op != ssaop.OpStore {
15034 break
15035 }
15036 t4 := ssa.AuxToType(v_1_2_2.Aux)
15037 _ = v_1_2_2.Args[2]
15038 p4 := v_1_2_2.Args[0]
15039 v_1_2_2_2 := v_1_2_2.Args[2]
15040 if v_1_2_2_2.Op != ssaop.OpStore {
15041 break
15042 }
15043 t5 := ssa.AuxToType(v_1_2_2_2.Aux)
15044 _ = v_1_2_2_2.Args[2]
15045 p5 := v_1_2_2_2.Args[0]
15046 mem := v_1_2_2_2.Args[2]
15047 if mem.Op != ssaop.OpZero {
15048 break
15049 }
15050 n := ssa.AuxIntToInt64(mem.AuxInt)
15051 p6 := mem.Args[0]
15052 if !(o1 >= 0 && o1+t1.Size() <= n && ssa.IsSamePtr(p1, p6) && ssa.CanSSA(t1) && ssa.Disjoint(op1, t1, p2, t2) && ssa.Disjoint(op1, t1, p3, t3) && ssa.Disjoint(op1, t1, p4, t4) && ssa.Disjoint(op1, t1, p5, t5)) {
15053 break
15054 }
15055 b = mem.Block
15056 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, t1)
15057 v.CopyOf(v0)
15058 v1 := b.NewValue0(v.Pos, ssaop.OpOffPtr, op1.Type)
15059 v1.AuxInt = ssa.Int64ToAuxInt(o1)
15060 v1.AddArg(p6)
15061 v0.AddArg2(v1, mem)
15062 return true
15063 }
15064
15065
15066
15067 for {
15068 t1 := v.Type
15069 if v_0.Op != ssaop.OpOffPtr {
15070 break
15071 }
15072 o := ssa.AuxIntToInt64(v_0.AuxInt)
15073 p1 := v_0.Args[0]
15074 if v_1.Op != ssaop.OpZero {
15075 break
15076 }
15077 n := ssa.AuxIntToInt64(v_1.AuxInt)
15078 p2 := v_1.Args[0]
15079 if !(t1.IsBoolean() && ssa.IsSamePtr(p1, p2) && n >= o+1) {
15080 break
15081 }
15082 v.Reset(ssaop.OpConstBool)
15083 v.AuxInt = ssa.BoolToAuxInt(false)
15084 return true
15085 }
15086
15087
15088
15089 for {
15090 t1 := v.Type
15091 if v_0.Op != ssaop.OpOffPtr {
15092 break
15093 }
15094 o := ssa.AuxIntToInt64(v_0.AuxInt)
15095 p1 := v_0.Args[0]
15096 if v_1.Op != ssaop.OpZero {
15097 break
15098 }
15099 n := ssa.AuxIntToInt64(v_1.AuxInt)
15100 p2 := v_1.Args[0]
15101 if !(ssa.Is8BitInt(t1) && ssa.IsSamePtr(p1, p2) && n >= o+1) {
15102 break
15103 }
15104 v.Reset(ssaop.OpConst8)
15105 v.AuxInt = ssa.Int8ToAuxInt(0)
15106 return true
15107 }
15108
15109
15110
15111 for {
15112 t1 := v.Type
15113 if v_0.Op != ssaop.OpOffPtr {
15114 break
15115 }
15116 o := ssa.AuxIntToInt64(v_0.AuxInt)
15117 p1 := v_0.Args[0]
15118 if v_1.Op != ssaop.OpZero {
15119 break
15120 }
15121 n := ssa.AuxIntToInt64(v_1.AuxInt)
15122 p2 := v_1.Args[0]
15123 if !(ssa.Is16BitInt(t1) && ssa.IsSamePtr(p1, p2) && n >= o+2) {
15124 break
15125 }
15126 v.Reset(ssaop.OpConst16)
15127 v.AuxInt = ssa.Int16ToAuxInt(0)
15128 return true
15129 }
15130
15131
15132
15133 for {
15134 t1 := v.Type
15135 if v_0.Op != ssaop.OpOffPtr {
15136 break
15137 }
15138 o := ssa.AuxIntToInt64(v_0.AuxInt)
15139 p1 := v_0.Args[0]
15140 if v_1.Op != ssaop.OpZero {
15141 break
15142 }
15143 n := ssa.AuxIntToInt64(v_1.AuxInt)
15144 p2 := v_1.Args[0]
15145 if !(ssa.Is32BitInt(t1) && ssa.IsSamePtr(p1, p2) && n >= o+4) {
15146 break
15147 }
15148 v.Reset(ssaop.OpConst32)
15149 v.AuxInt = ssa.Int32ToAuxInt(0)
15150 return true
15151 }
15152
15153
15154
15155 for {
15156 t1 := v.Type
15157 if v_0.Op != ssaop.OpOffPtr {
15158 break
15159 }
15160 o := ssa.AuxIntToInt64(v_0.AuxInt)
15161 p1 := v_0.Args[0]
15162 if v_1.Op != ssaop.OpZero {
15163 break
15164 }
15165 n := ssa.AuxIntToInt64(v_1.AuxInt)
15166 p2 := v_1.Args[0]
15167 if !(ssa.Is64BitInt(t1) && ssa.IsSamePtr(p1, p2) && n >= o+8) {
15168 break
15169 }
15170 v.Reset(ssaop.OpConst64)
15171 v.AuxInt = ssa.Int64ToAuxInt(0)
15172 return true
15173 }
15174
15175
15176
15177 for {
15178 t1 := v.Type
15179 if v_0.Op != ssaop.OpOffPtr {
15180 break
15181 }
15182 o := ssa.AuxIntToInt64(v_0.AuxInt)
15183 p1 := v_0.Args[0]
15184 if v_1.Op != ssaop.OpZero {
15185 break
15186 }
15187 n := ssa.AuxIntToInt64(v_1.AuxInt)
15188 p2 := v_1.Args[0]
15189 if !(ssa.Is32BitFloat(t1) && ssa.IsSamePtr(p1, p2) && n >= o+4) {
15190 break
15191 }
15192 v.Reset(ssaop.OpConst32F)
15193 v.AuxInt = ssa.Float32ToAuxInt(0)
15194 return true
15195 }
15196
15197
15198
15199 for {
15200 t1 := v.Type
15201 if v_0.Op != ssaop.OpOffPtr {
15202 break
15203 }
15204 o := ssa.AuxIntToInt64(v_0.AuxInt)
15205 p1 := v_0.Args[0]
15206 if v_1.Op != ssaop.OpZero {
15207 break
15208 }
15209 n := ssa.AuxIntToInt64(v_1.AuxInt)
15210 p2 := v_1.Args[0]
15211 if !(ssa.Is64BitFloat(t1) && ssa.IsSamePtr(p1, p2) && n >= o+8) {
15212 break
15213 }
15214 v.Reset(ssaop.OpConst64F)
15215 v.AuxInt = ssa.Float64ToAuxInt(0)
15216 return true
15217 }
15218
15219
15220
15221 for {
15222 t := v.Type
15223 if !(t.IsStruct() && t.Size() > 0 && ssa.CanSSA(t) && !t.IsSIMD()) {
15224 break
15225 }
15226 v.CopyOf(rewriteStructLoad(v))
15227 return true
15228 }
15229
15230
15231
15232 for {
15233 t := v.Type
15234 ptr := v_0
15235 mem := v_1
15236 if !(t.IsArray() && t.NumElem() == 1 && t.Size() > 0 && ssa.CanSSA(t)) {
15237 break
15238 }
15239 v.Reset(ssaop.OpArrayMake1)
15240 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, t.Elem())
15241 v0.AddArg2(ptr, mem)
15242 v.AddArg(v0)
15243 return true
15244 }
15245
15246
15247
15248 for {
15249 t := v.Type
15250 if !(t.Size() == 0) {
15251 break
15252 }
15253 v.Reset(ssaop.OpEmpty)
15254 return true
15255 }
15256
15257
15258
15259 for {
15260 if v.Type != typ.Int8 {
15261 break
15262 }
15263 sptr := v_0
15264 if sptr.Op != ssaop.OpAddr {
15265 break
15266 }
15267 scon := ssa.AuxToSym(sptr.Aux)
15268 sptr_0 := sptr.Args[0]
15269 if sptr_0.Op != ssaop.OpSB {
15270 break
15271 }
15272 if !(ssa.SymIsRO(scon)) {
15273 break
15274 }
15275 v.Reset(ssaop.OpConst8)
15276 v.Type = typ.Int8
15277 v.AuxInt = ssa.Int8ToAuxInt(int8(ssa.Read8(scon, 0)))
15278 return true
15279 }
15280
15281
15282
15283 for {
15284 if v.Type != typ.Int16 {
15285 break
15286 }
15287 sptr := v_0
15288 if sptr.Op != ssaop.OpAddr {
15289 break
15290 }
15291 scon := ssa.AuxToSym(sptr.Aux)
15292 sptr_0 := sptr.Args[0]
15293 if sptr_0.Op != ssaop.OpSB {
15294 break
15295 }
15296 if !(ssa.SymIsRO(scon)) {
15297 break
15298 }
15299 v.Reset(ssaop.OpConst16)
15300 v.Type = typ.Int16
15301 v.AuxInt = ssa.Int16ToAuxInt(int16(ssa.Read16(scon, 0, config.Ctxt.Arch.ByteOrder)))
15302 return true
15303 }
15304
15305
15306
15307 for {
15308 if v.Type != typ.Int32 {
15309 break
15310 }
15311 sptr := v_0
15312 if sptr.Op != ssaop.OpAddr {
15313 break
15314 }
15315 scon := ssa.AuxToSym(sptr.Aux)
15316 sptr_0 := sptr.Args[0]
15317 if sptr_0.Op != ssaop.OpSB {
15318 break
15319 }
15320 if !(ssa.SymIsRO(scon)) {
15321 break
15322 }
15323 v.Reset(ssaop.OpConst32)
15324 v.Type = typ.Int32
15325 v.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)))
15326 return true
15327 }
15328
15329
15330
15331 for {
15332 if v.Type != typ.Int64 {
15333 break
15334 }
15335 sptr := v_0
15336 if sptr.Op != ssaop.OpAddr {
15337 break
15338 }
15339 scon := ssa.AuxToSym(sptr.Aux)
15340 sptr_0 := sptr.Args[0]
15341 if sptr_0.Op != ssaop.OpSB {
15342 break
15343 }
15344 if !(ssa.SymIsRO(scon)) {
15345 break
15346 }
15347 v.Reset(ssaop.OpConst64)
15348 v.Type = typ.Int64
15349 v.AuxInt = ssa.Int64ToAuxInt(int64(ssa.Read64(scon, 0, config.Ctxt.Arch.ByteOrder)))
15350 return true
15351 }
15352
15353
15354
15355 for {
15356 if v_0.Op != ssaop.OpAddr {
15357 break
15358 }
15359 s := ssa.AuxToSym(v_0.Aux)
15360 sb := v_0.Args[0]
15361 if !(isFixedLoad(v, s, 0)) {
15362 break
15363 }
15364 v.CopyOf(rewriteFixedLoad(v, s, sb, 0))
15365 return true
15366 }
15367
15368
15369
15370 for {
15371 if v_0.Op != ssaop.OpConvert {
15372 break
15373 }
15374 v_0_0 := v_0.Args[0]
15375 if v_0_0.Op != ssaop.OpAddr {
15376 break
15377 }
15378 s := ssa.AuxToSym(v_0_0.Aux)
15379 sb := v_0_0.Args[0]
15380 if !(isFixedLoad(v, s, 0)) {
15381 break
15382 }
15383 v.CopyOf(rewriteFixedLoad(v, s, sb, 0))
15384 return true
15385 }
15386
15387
15388
15389 for {
15390 if v_0.Op != ssaop.OpITab {
15391 break
15392 }
15393 v_0_0 := v_0.Args[0]
15394 if v_0_0.Op != ssaop.OpIMake {
15395 break
15396 }
15397 v_0_0_0 := v_0_0.Args[0]
15398 if v_0_0_0.Op != ssaop.OpAddr {
15399 break
15400 }
15401 s := ssa.AuxToSym(v_0_0_0.Aux)
15402 sb := v_0_0_0.Args[0]
15403 if !(isFixedLoad(v, s, 0)) {
15404 break
15405 }
15406 v.CopyOf(rewriteFixedLoad(v, s, sb, 0))
15407 return true
15408 }
15409
15410
15411
15412 for {
15413 if v_0.Op != ssaop.OpITab {
15414 break
15415 }
15416 v_0_0 := v_0.Args[0]
15417 if v_0_0.Op != ssaop.OpIMake {
15418 break
15419 }
15420 v_0_0_0 := v_0_0.Args[0]
15421 if v_0_0_0.Op != ssaop.OpConvert {
15422 break
15423 }
15424 v_0_0_0_0 := v_0_0_0.Args[0]
15425 if v_0_0_0_0.Op != ssaop.OpAddr {
15426 break
15427 }
15428 s := ssa.AuxToSym(v_0_0_0_0.Aux)
15429 sb := v_0_0_0_0.Args[0]
15430 if !(isFixedLoad(v, s, 0)) {
15431 break
15432 }
15433 v.CopyOf(rewriteFixedLoad(v, s, sb, 0))
15434 return true
15435 }
15436
15437
15438
15439 for {
15440 if v_0.Op != ssaop.OpOffPtr {
15441 break
15442 }
15443 off := ssa.AuxIntToInt64(v_0.AuxInt)
15444 v_0_0 := v_0.Args[0]
15445 if v_0_0.Op != ssaop.OpAddr {
15446 break
15447 }
15448 s := ssa.AuxToSym(v_0_0.Aux)
15449 sb := v_0_0.Args[0]
15450 if !(isFixedLoad(v, s, off)) {
15451 break
15452 }
15453 v.CopyOf(rewriteFixedLoad(v, s, sb, off))
15454 return true
15455 }
15456
15457
15458
15459 for {
15460 if v_0.Op != ssaop.OpOffPtr {
15461 break
15462 }
15463 off := ssa.AuxIntToInt64(v_0.AuxInt)
15464 v_0_0 := v_0.Args[0]
15465 if v_0_0.Op != ssaop.OpConvert {
15466 break
15467 }
15468 v_0_0_0 := v_0_0.Args[0]
15469 if v_0_0_0.Op != ssaop.OpAddr {
15470 break
15471 }
15472 s := ssa.AuxToSym(v_0_0_0.Aux)
15473 sb := v_0_0_0.Args[0]
15474 if !(isFixedLoad(v, s, off)) {
15475 break
15476 }
15477 v.CopyOf(rewriteFixedLoad(v, s, sb, off))
15478 return true
15479 }
15480
15481
15482
15483 for {
15484 if v_0.Op != ssaop.OpOffPtr {
15485 break
15486 }
15487 off := ssa.AuxIntToInt64(v_0.AuxInt)
15488 v_0_0 := v_0.Args[0]
15489 if v_0_0.Op != ssaop.OpITab {
15490 break
15491 }
15492 v_0_0_0 := v_0_0.Args[0]
15493 if v_0_0_0.Op != ssaop.OpIMake {
15494 break
15495 }
15496 v_0_0_0_0 := v_0_0_0.Args[0]
15497 if v_0_0_0_0.Op != ssaop.OpAddr {
15498 break
15499 }
15500 s := ssa.AuxToSym(v_0_0_0_0.Aux)
15501 sb := v_0_0_0_0.Args[0]
15502 if !(isFixedLoad(v, s, off)) {
15503 break
15504 }
15505 v.CopyOf(rewriteFixedLoad(v, s, sb, off))
15506 return true
15507 }
15508
15509
15510
15511 for {
15512 if v_0.Op != ssaop.OpOffPtr {
15513 break
15514 }
15515 off := ssa.AuxIntToInt64(v_0.AuxInt)
15516 v_0_0 := v_0.Args[0]
15517 if v_0_0.Op != ssaop.OpITab {
15518 break
15519 }
15520 v_0_0_0 := v_0_0.Args[0]
15521 if v_0_0_0.Op != ssaop.OpIMake {
15522 break
15523 }
15524 v_0_0_0_0 := v_0_0_0.Args[0]
15525 if v_0_0_0_0.Op != ssaop.OpConvert {
15526 break
15527 }
15528 v_0_0_0_0_0 := v_0_0_0_0.Args[0]
15529 if v_0_0_0_0_0.Op != ssaop.OpAddr {
15530 break
15531 }
15532 s := ssa.AuxToSym(v_0_0_0_0_0.Aux)
15533 sb := v_0_0_0_0_0.Args[0]
15534 if !(isFixedLoad(v, s, off)) {
15535 break
15536 }
15537 v.CopyOf(rewriteFixedLoad(v, s, sb, off))
15538 return true
15539 }
15540 return false
15541 }
15542 func rewriteValue_OpLsh16x16(v *ssa.Value) bool {
15543 v_1 := v.Args[1]
15544 v_0 := v.Args[0]
15545 b := v.Block
15546
15547
15548 for {
15549 x := v_0
15550 if v_1.Op != ssaop.OpConst16 {
15551 break
15552 }
15553 c := ssa.AuxIntToInt16(v_1.AuxInt)
15554 v.Reset(ssaop.OpLsh16x64)
15555 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
15556 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
15557 v.AddArg2(x, v0)
15558 return true
15559 }
15560
15561
15562 for {
15563 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
15564 break
15565 }
15566 v.Reset(ssaop.OpConst16)
15567 v.AuxInt = ssa.Int16ToAuxInt(0)
15568 return true
15569 }
15570
15571
15572
15573 for {
15574 if ssa.AuxIntToBool(v.AuxInt) != false {
15575 break
15576 }
15577 x := v_0
15578 con := v_1
15579 if con.Op != ssaop.OpConst16 {
15580 break
15581 }
15582 c := ssa.AuxIntToInt16(con.AuxInt)
15583 if !(0 < c && c < 16) {
15584 break
15585 }
15586 v.Reset(ssaop.OpLsh16x16)
15587 v.AuxInt = ssa.BoolToAuxInt(true)
15588 v.AddArg2(x, con)
15589 return true
15590 }
15591 return false
15592 }
15593 func rewriteValue_OpLsh16x32(v *ssa.Value) bool {
15594 v_1 := v.Args[1]
15595 v_0 := v.Args[0]
15596 b := v.Block
15597
15598
15599 for {
15600 x := v_0
15601 if v_1.Op != ssaop.OpConst32 {
15602 break
15603 }
15604 c := ssa.AuxIntToInt32(v_1.AuxInt)
15605 v.Reset(ssaop.OpLsh16x64)
15606 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
15607 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
15608 v.AddArg2(x, v0)
15609 return true
15610 }
15611
15612
15613 for {
15614 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
15615 break
15616 }
15617 v.Reset(ssaop.OpConst16)
15618 v.AuxInt = ssa.Int16ToAuxInt(0)
15619 return true
15620 }
15621
15622
15623
15624 for {
15625 if ssa.AuxIntToBool(v.AuxInt) != false {
15626 break
15627 }
15628 x := v_0
15629 con := v_1
15630 if con.Op != ssaop.OpConst32 {
15631 break
15632 }
15633 c := ssa.AuxIntToInt32(con.AuxInt)
15634 if !(0 < c && c < 16) {
15635 break
15636 }
15637 v.Reset(ssaop.OpLsh16x32)
15638 v.AuxInt = ssa.BoolToAuxInt(true)
15639 v.AddArg2(x, con)
15640 return true
15641 }
15642 return false
15643 }
15644 func rewriteValue_OpLsh16x64(v *ssa.Value) bool {
15645 v_1 := v.Args[1]
15646 v_0 := v.Args[0]
15647 b := v.Block
15648 typ := &b.Func.Config.Types
15649
15650
15651 for {
15652 if v_0.Op != ssaop.OpConst16 {
15653 break
15654 }
15655 c := ssa.AuxIntToInt16(v_0.AuxInt)
15656 if v_1.Op != ssaop.OpConst64 {
15657 break
15658 }
15659 d := ssa.AuxIntToInt64(v_1.AuxInt)
15660 v.Reset(ssaop.OpConst16)
15661 v.AuxInt = ssa.Int16ToAuxInt(c << uint64(d))
15662 return true
15663 }
15664
15665
15666 for {
15667 x := v_0
15668 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
15669 break
15670 }
15671 v.CopyOf(x)
15672 return true
15673 }
15674
15675
15676 for {
15677 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
15678 break
15679 }
15680 v.Reset(ssaop.OpConst16)
15681 v.AuxInt = ssa.Int16ToAuxInt(0)
15682 return true
15683 }
15684
15685
15686
15687 for {
15688 if v_1.Op != ssaop.OpConst64 {
15689 break
15690 }
15691 c := ssa.AuxIntToInt64(v_1.AuxInt)
15692 if !(uint64(c) >= 16) {
15693 break
15694 }
15695 v.Reset(ssaop.OpConst16)
15696 v.AuxInt = ssa.Int16ToAuxInt(0)
15697 return true
15698 }
15699
15700
15701
15702 for {
15703 t := v.Type
15704 if v_0.Op != ssaop.OpLsh16x64 {
15705 break
15706 }
15707 _ = v_0.Args[1]
15708 x := v_0.Args[0]
15709 v_0_1 := v_0.Args[1]
15710 if v_0_1.Op != ssaop.OpConst64 {
15711 break
15712 }
15713 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
15714 if v_1.Op != ssaop.OpConst64 {
15715 break
15716 }
15717 d := ssa.AuxIntToInt64(v_1.AuxInt)
15718 if !(!uaddOvf(c, d)) {
15719 break
15720 }
15721 v.Reset(ssaop.OpLsh16x64)
15722 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
15723 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
15724 v.AddArg2(x, v0)
15725 return true
15726 }
15727
15728
15729
15730 for {
15731 i := v_0
15732 if i.Op != ssaop.OpRsh16x64 {
15733 break
15734 }
15735 _ = i.Args[1]
15736 x := i.Args[0]
15737 i_1 := i.Args[1]
15738 if i_1.Op != ssaop.OpConst64 {
15739 break
15740 }
15741 c := ssa.AuxIntToInt64(i_1.AuxInt)
15742 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 16 && i.Uses == 1) {
15743 break
15744 }
15745 v.Reset(ssaop.OpAnd16)
15746 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, v.Type)
15747 v0.AuxInt = ssa.Int16ToAuxInt(int16(-1) << c)
15748 v.AddArg2(x, v0)
15749 return true
15750 }
15751
15752
15753
15754 for {
15755 i := v_0
15756 if i.Op != ssaop.OpRsh16Ux64 {
15757 break
15758 }
15759 _ = i.Args[1]
15760 x := i.Args[0]
15761 i_1 := i.Args[1]
15762 if i_1.Op != ssaop.OpConst64 {
15763 break
15764 }
15765 c := ssa.AuxIntToInt64(i_1.AuxInt)
15766 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 16 && i.Uses == 1) {
15767 break
15768 }
15769 v.Reset(ssaop.OpAnd16)
15770 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, v.Type)
15771 v0.AuxInt = ssa.Int16ToAuxInt(int16(-1) << c)
15772 v.AddArg2(x, v0)
15773 return true
15774 }
15775
15776
15777
15778 for {
15779 if v_0.Op != ssaop.OpRsh16Ux64 {
15780 break
15781 }
15782 _ = v_0.Args[1]
15783 v_0_0 := v_0.Args[0]
15784 if v_0_0.Op != ssaop.OpLsh16x64 {
15785 break
15786 }
15787 _ = v_0_0.Args[1]
15788 x := v_0_0.Args[0]
15789 v_0_0_1 := v_0_0.Args[1]
15790 if v_0_0_1.Op != ssaop.OpConst64 {
15791 break
15792 }
15793 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
15794 v_0_1 := v_0.Args[1]
15795 if v_0_1.Op != ssaop.OpConst64 {
15796 break
15797 }
15798 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
15799 if v_1.Op != ssaop.OpConst64 {
15800 break
15801 }
15802 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
15803 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
15804 break
15805 }
15806 v.Reset(ssaop.OpLsh16x64)
15807 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
15808 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
15809 v.AddArg2(x, v0)
15810 return true
15811 }
15812
15813
15814
15815 for {
15816 if v_0.Op != ssaop.OpAnd16 {
15817 break
15818 }
15819 _ = v_0.Args[1]
15820 v_0_0 := v_0.Args[0]
15821 v_0_1 := v_0.Args[1]
15822 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
15823 if v_0_0.Op != ssaop.OpRsh16x64 {
15824 continue
15825 }
15826 t := v_0_0.Type
15827 _ = v_0_0.Args[1]
15828 x := v_0_0.Args[0]
15829 v_0_0_1 := v_0_0.Args[1]
15830 if v_0_0_1.Op != ssaop.OpConst64 {
15831 continue
15832 }
15833 t2 := v_0_0_1.Type
15834 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
15835 if v_0_1.Op != ssaop.OpConst16 {
15836 continue
15837 }
15838 d := ssa.AuxIntToInt16(v_0_1.AuxInt)
15839 if v_1.Op != ssaop.OpConst64 {
15840 continue
15841 }
15842 e := ssa.AuxIntToInt64(v_1.AuxInt)
15843 if !(c >= e) {
15844 continue
15845 }
15846 v.Reset(ssaop.OpAnd16)
15847 v0 := b.NewValue0(v.Pos, ssaop.OpRsh16x64, t)
15848 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
15849 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
15850 v0.AddArg2(x, v1)
15851 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
15852 v2.AuxInt = ssa.Int16ToAuxInt(d << e)
15853 v.AddArg2(v0, v2)
15854 return true
15855 }
15856 break
15857 }
15858
15859
15860
15861 for {
15862 if v_0.Op != ssaop.OpAnd16 {
15863 break
15864 }
15865 _ = v_0.Args[1]
15866 v_0_0 := v_0.Args[0]
15867 v_0_1 := v_0.Args[1]
15868 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
15869 if v_0_0.Op != ssaop.OpRsh16Ux64 {
15870 continue
15871 }
15872 t := v_0_0.Type
15873 _ = v_0_0.Args[1]
15874 x := v_0_0.Args[0]
15875 v_0_0_1 := v_0_0.Args[1]
15876 if v_0_0_1.Op != ssaop.OpConst64 {
15877 continue
15878 }
15879 t2 := v_0_0_1.Type
15880 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
15881 if v_0_1.Op != ssaop.OpConst16 {
15882 continue
15883 }
15884 d := ssa.AuxIntToInt16(v_0_1.AuxInt)
15885 if v_1.Op != ssaop.OpConst64 {
15886 continue
15887 }
15888 e := ssa.AuxIntToInt64(v_1.AuxInt)
15889 if !(c >= e) {
15890 continue
15891 }
15892 v.Reset(ssaop.OpAnd16)
15893 v0 := b.NewValue0(v.Pos, ssaop.OpRsh16Ux64, t)
15894 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
15895 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
15896 v0.AddArg2(x, v1)
15897 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
15898 v2.AuxInt = ssa.Int16ToAuxInt(d << e)
15899 v.AddArg2(v0, v2)
15900 return true
15901 }
15902 break
15903 }
15904
15905
15906
15907 for {
15908 if v_0.Op != ssaop.OpAnd16 {
15909 break
15910 }
15911 _ = v_0.Args[1]
15912 v_0_0 := v_0.Args[0]
15913 v_0_1 := v_0.Args[1]
15914 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
15915 if v_0_0.Op != ssaop.OpRsh16x64 {
15916 continue
15917 }
15918 t := v_0_0.Type
15919 _ = v_0_0.Args[1]
15920 x := v_0_0.Args[0]
15921 v_0_0_1 := v_0_0.Args[1]
15922 if v_0_0_1.Op != ssaop.OpConst64 {
15923 continue
15924 }
15925 t2 := v_0_0_1.Type
15926 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
15927 if v_0_1.Op != ssaop.OpConst16 {
15928 continue
15929 }
15930 d := ssa.AuxIntToInt16(v_0_1.AuxInt)
15931 if v_1.Op != ssaop.OpConst64 {
15932 continue
15933 }
15934 e := ssa.AuxIntToInt64(v_1.AuxInt)
15935 if !(c < e) {
15936 continue
15937 }
15938 v.Reset(ssaop.OpAnd16)
15939 v0 := b.NewValue0(v.Pos, ssaop.OpLsh16x64, t)
15940 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
15941 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
15942 v0.AddArg2(x, v1)
15943 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
15944 v2.AuxInt = ssa.Int16ToAuxInt(d << e)
15945 v.AddArg2(v0, v2)
15946 return true
15947 }
15948 break
15949 }
15950
15951
15952
15953 for {
15954 if v_0.Op != ssaop.OpAnd16 {
15955 break
15956 }
15957 _ = v_0.Args[1]
15958 v_0_0 := v_0.Args[0]
15959 v_0_1 := v_0.Args[1]
15960 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
15961 if v_0_0.Op != ssaop.OpRsh16Ux64 {
15962 continue
15963 }
15964 t := v_0_0.Type
15965 _ = v_0_0.Args[1]
15966 x := v_0_0.Args[0]
15967 v_0_0_1 := v_0_0.Args[1]
15968 if v_0_0_1.Op != ssaop.OpConst64 {
15969 continue
15970 }
15971 t2 := v_0_0_1.Type
15972 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
15973 if v_0_1.Op != ssaop.OpConst16 {
15974 continue
15975 }
15976 d := ssa.AuxIntToInt16(v_0_1.AuxInt)
15977 if v_1.Op != ssaop.OpConst64 {
15978 continue
15979 }
15980 e := ssa.AuxIntToInt64(v_1.AuxInt)
15981 if !(c < e) {
15982 continue
15983 }
15984 v.Reset(ssaop.OpAnd16)
15985 v0 := b.NewValue0(v.Pos, ssaop.OpLsh16x64, t)
15986 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
15987 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
15988 v0.AddArg2(x, v1)
15989 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
15990 v2.AuxInt = ssa.Int16ToAuxInt(d << e)
15991 v.AddArg2(v0, v2)
15992 return true
15993 }
15994 break
15995 }
15996
15997
15998
15999 for {
16000 if ssa.AuxIntToBool(v.AuxInt) != false {
16001 break
16002 }
16003 x := v_0
16004 con := v_1
16005 if con.Op != ssaop.OpConst64 {
16006 break
16007 }
16008 c := ssa.AuxIntToInt64(con.AuxInt)
16009 if !(0 < c && c < 16) {
16010 break
16011 }
16012 v.Reset(ssaop.OpLsh16x64)
16013 v.AuxInt = ssa.BoolToAuxInt(true)
16014 v.AddArg2(x, con)
16015 return true
16016 }
16017 return false
16018 }
16019 func rewriteValue_OpLsh16x8(v *ssa.Value) bool {
16020 v_1 := v.Args[1]
16021 v_0 := v.Args[0]
16022 b := v.Block
16023
16024
16025 for {
16026 x := v_0
16027 if v_1.Op != ssaop.OpConst8 {
16028 break
16029 }
16030 c := ssa.AuxIntToInt8(v_1.AuxInt)
16031 v.Reset(ssaop.OpLsh16x64)
16032 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
16033 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
16034 v.AddArg2(x, v0)
16035 return true
16036 }
16037
16038
16039 for {
16040 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
16041 break
16042 }
16043 v.Reset(ssaop.OpConst16)
16044 v.AuxInt = ssa.Int16ToAuxInt(0)
16045 return true
16046 }
16047
16048
16049
16050 for {
16051 if ssa.AuxIntToBool(v.AuxInt) != false {
16052 break
16053 }
16054 x := v_0
16055 con := v_1
16056 if con.Op != ssaop.OpConst8 {
16057 break
16058 }
16059 c := ssa.AuxIntToInt8(con.AuxInt)
16060 if !(0 < c && c < 16) {
16061 break
16062 }
16063 v.Reset(ssaop.OpLsh16x8)
16064 v.AuxInt = ssa.BoolToAuxInt(true)
16065 v.AddArg2(x, con)
16066 return true
16067 }
16068 return false
16069 }
16070 func rewriteValue_OpLsh32x16(v *ssa.Value) bool {
16071 v_1 := v.Args[1]
16072 v_0 := v.Args[0]
16073 b := v.Block
16074
16075
16076 for {
16077 x := v_0
16078 if v_1.Op != ssaop.OpConst16 {
16079 break
16080 }
16081 c := ssa.AuxIntToInt16(v_1.AuxInt)
16082 v.Reset(ssaop.OpLsh32x64)
16083 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
16084 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
16085 v.AddArg2(x, v0)
16086 return true
16087 }
16088
16089
16090 for {
16091 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16092 break
16093 }
16094 v.Reset(ssaop.OpConst32)
16095 v.AuxInt = ssa.Int32ToAuxInt(0)
16096 return true
16097 }
16098
16099
16100
16101 for {
16102 if ssa.AuxIntToBool(v.AuxInt) != false {
16103 break
16104 }
16105 x := v_0
16106 con := v_1
16107 if con.Op != ssaop.OpConst16 {
16108 break
16109 }
16110 c := ssa.AuxIntToInt16(con.AuxInt)
16111 if !(0 < c && c < 32) {
16112 break
16113 }
16114 v.Reset(ssaop.OpLsh32x16)
16115 v.AuxInt = ssa.BoolToAuxInt(true)
16116 v.AddArg2(x, con)
16117 return true
16118 }
16119 return false
16120 }
16121 func rewriteValue_OpLsh32x32(v *ssa.Value) bool {
16122 v_1 := v.Args[1]
16123 v_0 := v.Args[0]
16124 b := v.Block
16125
16126
16127 for {
16128 x := v_0
16129 if v_1.Op != ssaop.OpConst32 {
16130 break
16131 }
16132 c := ssa.AuxIntToInt32(v_1.AuxInt)
16133 v.Reset(ssaop.OpLsh32x64)
16134 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
16135 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
16136 v.AddArg2(x, v0)
16137 return true
16138 }
16139
16140
16141 for {
16142 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16143 break
16144 }
16145 v.Reset(ssaop.OpConst32)
16146 v.AuxInt = ssa.Int32ToAuxInt(0)
16147 return true
16148 }
16149
16150
16151
16152 for {
16153 if ssa.AuxIntToBool(v.AuxInt) != false {
16154 break
16155 }
16156 x := v_0
16157 con := v_1
16158 if con.Op != ssaop.OpConst32 {
16159 break
16160 }
16161 c := ssa.AuxIntToInt32(con.AuxInt)
16162 if !(0 < c && c < 32) {
16163 break
16164 }
16165 v.Reset(ssaop.OpLsh32x32)
16166 v.AuxInt = ssa.BoolToAuxInt(true)
16167 v.AddArg2(x, con)
16168 return true
16169 }
16170 return false
16171 }
16172 func rewriteValue_OpLsh32x64(v *ssa.Value) bool {
16173 v_1 := v.Args[1]
16174 v_0 := v.Args[0]
16175 b := v.Block
16176 typ := &b.Func.Config.Types
16177
16178
16179 for {
16180 if v_0.Op != ssaop.OpConst32 {
16181 break
16182 }
16183 c := ssa.AuxIntToInt32(v_0.AuxInt)
16184 if v_1.Op != ssaop.OpConst64 {
16185 break
16186 }
16187 d := ssa.AuxIntToInt64(v_1.AuxInt)
16188 v.Reset(ssaop.OpConst32)
16189 v.AuxInt = ssa.Int32ToAuxInt(c << uint64(d))
16190 return true
16191 }
16192
16193
16194 for {
16195 x := v_0
16196 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
16197 break
16198 }
16199 v.CopyOf(x)
16200 return true
16201 }
16202
16203
16204 for {
16205 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16206 break
16207 }
16208 v.Reset(ssaop.OpConst32)
16209 v.AuxInt = ssa.Int32ToAuxInt(0)
16210 return true
16211 }
16212
16213
16214
16215 for {
16216 if v_1.Op != ssaop.OpConst64 {
16217 break
16218 }
16219 c := ssa.AuxIntToInt64(v_1.AuxInt)
16220 if !(uint64(c) >= 32) {
16221 break
16222 }
16223 v.Reset(ssaop.OpConst32)
16224 v.AuxInt = ssa.Int32ToAuxInt(0)
16225 return true
16226 }
16227
16228
16229
16230 for {
16231 t := v.Type
16232 if v_0.Op != ssaop.OpLsh32x64 {
16233 break
16234 }
16235 _ = v_0.Args[1]
16236 x := v_0.Args[0]
16237 v_0_1 := v_0.Args[1]
16238 if v_0_1.Op != ssaop.OpConst64 {
16239 break
16240 }
16241 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
16242 if v_1.Op != ssaop.OpConst64 {
16243 break
16244 }
16245 d := ssa.AuxIntToInt64(v_1.AuxInt)
16246 if !(!uaddOvf(c, d)) {
16247 break
16248 }
16249 v.Reset(ssaop.OpLsh32x64)
16250 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
16251 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
16252 v.AddArg2(x, v0)
16253 return true
16254 }
16255
16256
16257
16258 for {
16259 i := v_0
16260 if i.Op != ssaop.OpRsh32x64 {
16261 break
16262 }
16263 _ = i.Args[1]
16264 x := i.Args[0]
16265 i_1 := i.Args[1]
16266 if i_1.Op != ssaop.OpConst64 {
16267 break
16268 }
16269 c := ssa.AuxIntToInt64(i_1.AuxInt)
16270 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 32 && i.Uses == 1) {
16271 break
16272 }
16273 v.Reset(ssaop.OpAnd32)
16274 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, v.Type)
16275 v0.AuxInt = ssa.Int32ToAuxInt(int32(-1) << c)
16276 v.AddArg2(x, v0)
16277 return true
16278 }
16279
16280
16281
16282 for {
16283 i := v_0
16284 if i.Op != ssaop.OpRsh32Ux64 {
16285 break
16286 }
16287 _ = i.Args[1]
16288 x := i.Args[0]
16289 i_1 := i.Args[1]
16290 if i_1.Op != ssaop.OpConst64 {
16291 break
16292 }
16293 c := ssa.AuxIntToInt64(i_1.AuxInt)
16294 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 32 && i.Uses == 1) {
16295 break
16296 }
16297 v.Reset(ssaop.OpAnd32)
16298 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, v.Type)
16299 v0.AuxInt = ssa.Int32ToAuxInt(int32(-1) << c)
16300 v.AddArg2(x, v0)
16301 return true
16302 }
16303
16304
16305
16306 for {
16307 if v_0.Op != ssaop.OpRsh32Ux64 {
16308 break
16309 }
16310 _ = v_0.Args[1]
16311 v_0_0 := v_0.Args[0]
16312 if v_0_0.Op != ssaop.OpLsh32x64 {
16313 break
16314 }
16315 _ = v_0_0.Args[1]
16316 x := v_0_0.Args[0]
16317 v_0_0_1 := v_0_0.Args[1]
16318 if v_0_0_1.Op != ssaop.OpConst64 {
16319 break
16320 }
16321 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16322 v_0_1 := v_0.Args[1]
16323 if v_0_1.Op != ssaop.OpConst64 {
16324 break
16325 }
16326 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
16327 if v_1.Op != ssaop.OpConst64 {
16328 break
16329 }
16330 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
16331 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
16332 break
16333 }
16334 v.Reset(ssaop.OpLsh32x64)
16335 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
16336 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
16337 v.AddArg2(x, v0)
16338 return true
16339 }
16340
16341
16342
16343 for {
16344 if v_0.Op != ssaop.OpAnd32 {
16345 break
16346 }
16347 _ = v_0.Args[1]
16348 v_0_0 := v_0.Args[0]
16349 v_0_1 := v_0.Args[1]
16350 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16351 if v_0_0.Op != ssaop.OpRsh32x64 {
16352 continue
16353 }
16354 t := v_0_0.Type
16355 _ = v_0_0.Args[1]
16356 x := v_0_0.Args[0]
16357 v_0_0_1 := v_0_0.Args[1]
16358 if v_0_0_1.Op != ssaop.OpConst64 {
16359 continue
16360 }
16361 t2 := v_0_0_1.Type
16362 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16363 if v_0_1.Op != ssaop.OpConst32 {
16364 continue
16365 }
16366 d := ssa.AuxIntToInt32(v_0_1.AuxInt)
16367 if v_1.Op != ssaop.OpConst64 {
16368 continue
16369 }
16370 e := ssa.AuxIntToInt64(v_1.AuxInt)
16371 if !(c >= e) {
16372 continue
16373 }
16374 v.Reset(ssaop.OpAnd32)
16375 v0 := b.NewValue0(v.Pos, ssaop.OpRsh32x64, t)
16376 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
16377 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
16378 v0.AddArg2(x, v1)
16379 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
16380 v2.AuxInt = ssa.Int32ToAuxInt(d << e)
16381 v.AddArg2(v0, v2)
16382 return true
16383 }
16384 break
16385 }
16386
16387
16388
16389 for {
16390 if v_0.Op != ssaop.OpAnd32 {
16391 break
16392 }
16393 _ = v_0.Args[1]
16394 v_0_0 := v_0.Args[0]
16395 v_0_1 := v_0.Args[1]
16396 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16397 if v_0_0.Op != ssaop.OpRsh32Ux64 {
16398 continue
16399 }
16400 t := v_0_0.Type
16401 _ = v_0_0.Args[1]
16402 x := v_0_0.Args[0]
16403 v_0_0_1 := v_0_0.Args[1]
16404 if v_0_0_1.Op != ssaop.OpConst64 {
16405 continue
16406 }
16407 t2 := v_0_0_1.Type
16408 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16409 if v_0_1.Op != ssaop.OpConst32 {
16410 continue
16411 }
16412 d := ssa.AuxIntToInt32(v_0_1.AuxInt)
16413 if v_1.Op != ssaop.OpConst64 {
16414 continue
16415 }
16416 e := ssa.AuxIntToInt64(v_1.AuxInt)
16417 if !(c >= e) {
16418 continue
16419 }
16420 v.Reset(ssaop.OpAnd32)
16421 v0 := b.NewValue0(v.Pos, ssaop.OpRsh32Ux64, t)
16422 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
16423 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
16424 v0.AddArg2(x, v1)
16425 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
16426 v2.AuxInt = ssa.Int32ToAuxInt(d << e)
16427 v.AddArg2(v0, v2)
16428 return true
16429 }
16430 break
16431 }
16432
16433
16434
16435 for {
16436 if v_0.Op != ssaop.OpAnd32 {
16437 break
16438 }
16439 _ = v_0.Args[1]
16440 v_0_0 := v_0.Args[0]
16441 v_0_1 := v_0.Args[1]
16442 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16443 if v_0_0.Op != ssaop.OpRsh32x64 {
16444 continue
16445 }
16446 t := v_0_0.Type
16447 _ = v_0_0.Args[1]
16448 x := v_0_0.Args[0]
16449 v_0_0_1 := v_0_0.Args[1]
16450 if v_0_0_1.Op != ssaop.OpConst64 {
16451 continue
16452 }
16453 t2 := v_0_0_1.Type
16454 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16455 if v_0_1.Op != ssaop.OpConst32 {
16456 continue
16457 }
16458 d := ssa.AuxIntToInt32(v_0_1.AuxInt)
16459 if v_1.Op != ssaop.OpConst64 {
16460 continue
16461 }
16462 e := ssa.AuxIntToInt64(v_1.AuxInt)
16463 if !(c < e) {
16464 continue
16465 }
16466 v.Reset(ssaop.OpAnd32)
16467 v0 := b.NewValue0(v.Pos, ssaop.OpLsh32x64, t)
16468 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
16469 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
16470 v0.AddArg2(x, v1)
16471 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
16472 v2.AuxInt = ssa.Int32ToAuxInt(d << e)
16473 v.AddArg2(v0, v2)
16474 return true
16475 }
16476 break
16477 }
16478
16479
16480
16481 for {
16482 if v_0.Op != ssaop.OpAnd32 {
16483 break
16484 }
16485 _ = v_0.Args[1]
16486 v_0_0 := v_0.Args[0]
16487 v_0_1 := v_0.Args[1]
16488 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16489 if v_0_0.Op != ssaop.OpRsh32Ux64 {
16490 continue
16491 }
16492 t := v_0_0.Type
16493 _ = v_0_0.Args[1]
16494 x := v_0_0.Args[0]
16495 v_0_0_1 := v_0_0.Args[1]
16496 if v_0_0_1.Op != ssaop.OpConst64 {
16497 continue
16498 }
16499 t2 := v_0_0_1.Type
16500 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16501 if v_0_1.Op != ssaop.OpConst32 {
16502 continue
16503 }
16504 d := ssa.AuxIntToInt32(v_0_1.AuxInt)
16505 if v_1.Op != ssaop.OpConst64 {
16506 continue
16507 }
16508 e := ssa.AuxIntToInt64(v_1.AuxInt)
16509 if !(c < e) {
16510 continue
16511 }
16512 v.Reset(ssaop.OpAnd32)
16513 v0 := b.NewValue0(v.Pos, ssaop.OpLsh32x64, t)
16514 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
16515 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
16516 v0.AddArg2(x, v1)
16517 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
16518 v2.AuxInt = ssa.Int32ToAuxInt(d << e)
16519 v.AddArg2(v0, v2)
16520 return true
16521 }
16522 break
16523 }
16524
16525
16526
16527 for {
16528 if ssa.AuxIntToBool(v.AuxInt) != false {
16529 break
16530 }
16531 x := v_0
16532 con := v_1
16533 if con.Op != ssaop.OpConst64 {
16534 break
16535 }
16536 c := ssa.AuxIntToInt64(con.AuxInt)
16537 if !(0 < c && c < 32) {
16538 break
16539 }
16540 v.Reset(ssaop.OpLsh32x64)
16541 v.AuxInt = ssa.BoolToAuxInt(true)
16542 v.AddArg2(x, con)
16543 return true
16544 }
16545 return false
16546 }
16547 func rewriteValue_OpLsh32x8(v *ssa.Value) bool {
16548 v_1 := v.Args[1]
16549 v_0 := v.Args[0]
16550 b := v.Block
16551
16552
16553 for {
16554 x := v_0
16555 if v_1.Op != ssaop.OpConst8 {
16556 break
16557 }
16558 c := ssa.AuxIntToInt8(v_1.AuxInt)
16559 v.Reset(ssaop.OpLsh32x64)
16560 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
16561 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
16562 v.AddArg2(x, v0)
16563 return true
16564 }
16565
16566
16567 for {
16568 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
16569 break
16570 }
16571 v.Reset(ssaop.OpConst32)
16572 v.AuxInt = ssa.Int32ToAuxInt(0)
16573 return true
16574 }
16575
16576
16577
16578 for {
16579 if ssa.AuxIntToBool(v.AuxInt) != false {
16580 break
16581 }
16582 x := v_0
16583 con := v_1
16584 if con.Op != ssaop.OpConst8 {
16585 break
16586 }
16587 c := ssa.AuxIntToInt8(con.AuxInt)
16588 if !(0 < c && c < 32) {
16589 break
16590 }
16591 v.Reset(ssaop.OpLsh32x8)
16592 v.AuxInt = ssa.BoolToAuxInt(true)
16593 v.AddArg2(x, con)
16594 return true
16595 }
16596 return false
16597 }
16598 func rewriteValue_OpLsh64x16(v *ssa.Value) bool {
16599 v_1 := v.Args[1]
16600 v_0 := v.Args[0]
16601 b := v.Block
16602
16603
16604 for {
16605 x := v_0
16606 if v_1.Op != ssaop.OpConst16 {
16607 break
16608 }
16609 c := ssa.AuxIntToInt16(v_1.AuxInt)
16610 v.Reset(ssaop.OpLsh64x64)
16611 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
16612 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
16613 v.AddArg2(x, v0)
16614 return true
16615 }
16616
16617
16618 for {
16619 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
16620 break
16621 }
16622 v.Reset(ssaop.OpConst64)
16623 v.AuxInt = ssa.Int64ToAuxInt(0)
16624 return true
16625 }
16626
16627
16628
16629 for {
16630 if ssa.AuxIntToBool(v.AuxInt) != false {
16631 break
16632 }
16633 x := v_0
16634 con := v_1
16635 if con.Op != ssaop.OpConst16 {
16636 break
16637 }
16638 c := ssa.AuxIntToInt16(con.AuxInt)
16639 if !(0 < c && c < 64) {
16640 break
16641 }
16642 v.Reset(ssaop.OpLsh64x16)
16643 v.AuxInt = ssa.BoolToAuxInt(true)
16644 v.AddArg2(x, con)
16645 return true
16646 }
16647 return false
16648 }
16649 func rewriteValue_OpLsh64x32(v *ssa.Value) bool {
16650 v_1 := v.Args[1]
16651 v_0 := v.Args[0]
16652 b := v.Block
16653
16654
16655 for {
16656 x := v_0
16657 if v_1.Op != ssaop.OpConst32 {
16658 break
16659 }
16660 c := ssa.AuxIntToInt32(v_1.AuxInt)
16661 v.Reset(ssaop.OpLsh64x64)
16662 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
16663 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
16664 v.AddArg2(x, v0)
16665 return true
16666 }
16667
16668
16669 for {
16670 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
16671 break
16672 }
16673 v.Reset(ssaop.OpConst64)
16674 v.AuxInt = ssa.Int64ToAuxInt(0)
16675 return true
16676 }
16677
16678
16679
16680 for {
16681 if ssa.AuxIntToBool(v.AuxInt) != false {
16682 break
16683 }
16684 x := v_0
16685 con := v_1
16686 if con.Op != ssaop.OpConst32 {
16687 break
16688 }
16689 c := ssa.AuxIntToInt32(con.AuxInt)
16690 if !(0 < c && c < 64) {
16691 break
16692 }
16693 v.Reset(ssaop.OpLsh64x32)
16694 v.AuxInt = ssa.BoolToAuxInt(true)
16695 v.AddArg2(x, con)
16696 return true
16697 }
16698 return false
16699 }
16700 func rewriteValue_OpLsh64x64(v *ssa.Value) bool {
16701 v_1 := v.Args[1]
16702 v_0 := v.Args[0]
16703 b := v.Block
16704 typ := &b.Func.Config.Types
16705
16706
16707 for {
16708 if v_0.Op != ssaop.OpConst64 {
16709 break
16710 }
16711 c := ssa.AuxIntToInt64(v_0.AuxInt)
16712 if v_1.Op != ssaop.OpConst64 {
16713 break
16714 }
16715 d := ssa.AuxIntToInt64(v_1.AuxInt)
16716 v.Reset(ssaop.OpConst64)
16717 v.AuxInt = ssa.Int64ToAuxInt(c << uint64(d))
16718 return true
16719 }
16720
16721
16722 for {
16723 x := v_0
16724 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
16725 break
16726 }
16727 v.CopyOf(x)
16728 return true
16729 }
16730
16731
16732 for {
16733 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
16734 break
16735 }
16736 v.Reset(ssaop.OpConst64)
16737 v.AuxInt = ssa.Int64ToAuxInt(0)
16738 return true
16739 }
16740
16741
16742
16743 for {
16744 if v_1.Op != ssaop.OpConst64 {
16745 break
16746 }
16747 c := ssa.AuxIntToInt64(v_1.AuxInt)
16748 if !(uint64(c) >= 64) {
16749 break
16750 }
16751 v.Reset(ssaop.OpConst64)
16752 v.AuxInt = ssa.Int64ToAuxInt(0)
16753 return true
16754 }
16755
16756
16757
16758 for {
16759 t := v.Type
16760 if v_0.Op != ssaop.OpLsh64x64 {
16761 break
16762 }
16763 _ = v_0.Args[1]
16764 x := v_0.Args[0]
16765 v_0_1 := v_0.Args[1]
16766 if v_0_1.Op != ssaop.OpConst64 {
16767 break
16768 }
16769 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
16770 if v_1.Op != ssaop.OpConst64 {
16771 break
16772 }
16773 d := ssa.AuxIntToInt64(v_1.AuxInt)
16774 if !(!uaddOvf(c, d)) {
16775 break
16776 }
16777 v.Reset(ssaop.OpLsh64x64)
16778 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
16779 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
16780 v.AddArg2(x, v0)
16781 return true
16782 }
16783
16784
16785
16786 for {
16787 i := v_0
16788 if i.Op != ssaop.OpRsh64x64 {
16789 break
16790 }
16791 _ = i.Args[1]
16792 x := i.Args[0]
16793 i_1 := i.Args[1]
16794 if i_1.Op != ssaop.OpConst64 {
16795 break
16796 }
16797 c := ssa.AuxIntToInt64(i_1.AuxInt)
16798 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 64 && i.Uses == 1) {
16799 break
16800 }
16801 v.Reset(ssaop.OpAnd64)
16802 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, v.Type)
16803 v0.AuxInt = ssa.Int64ToAuxInt(int64(-1) << c)
16804 v.AddArg2(x, v0)
16805 return true
16806 }
16807
16808
16809
16810 for {
16811 i := v_0
16812 if i.Op != ssaop.OpRsh64Ux64 {
16813 break
16814 }
16815 _ = i.Args[1]
16816 x := i.Args[0]
16817 i_1 := i.Args[1]
16818 if i_1.Op != ssaop.OpConst64 {
16819 break
16820 }
16821 c := ssa.AuxIntToInt64(i_1.AuxInt)
16822 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 64 && i.Uses == 1) {
16823 break
16824 }
16825 v.Reset(ssaop.OpAnd64)
16826 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, v.Type)
16827 v0.AuxInt = ssa.Int64ToAuxInt(int64(-1) << c)
16828 v.AddArg2(x, v0)
16829 return true
16830 }
16831
16832
16833
16834 for {
16835 if v_0.Op != ssaop.OpRsh64Ux64 {
16836 break
16837 }
16838 _ = v_0.Args[1]
16839 v_0_0 := v_0.Args[0]
16840 if v_0_0.Op != ssaop.OpLsh64x64 {
16841 break
16842 }
16843 _ = v_0_0.Args[1]
16844 x := v_0_0.Args[0]
16845 v_0_0_1 := v_0_0.Args[1]
16846 if v_0_0_1.Op != ssaop.OpConst64 {
16847 break
16848 }
16849 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16850 v_0_1 := v_0.Args[1]
16851 if v_0_1.Op != ssaop.OpConst64 {
16852 break
16853 }
16854 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
16855 if v_1.Op != ssaop.OpConst64 {
16856 break
16857 }
16858 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
16859 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
16860 break
16861 }
16862 v.Reset(ssaop.OpLsh64x64)
16863 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
16864 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
16865 v.AddArg2(x, v0)
16866 return true
16867 }
16868
16869
16870
16871 for {
16872 if v_0.Op != ssaop.OpAnd64 {
16873 break
16874 }
16875 _ = v_0.Args[1]
16876 v_0_0 := v_0.Args[0]
16877 v_0_1 := v_0.Args[1]
16878 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16879 if v_0_0.Op != ssaop.OpRsh64x64 {
16880 continue
16881 }
16882 t := v_0_0.Type
16883 _ = v_0_0.Args[1]
16884 x := v_0_0.Args[0]
16885 v_0_0_1 := v_0_0.Args[1]
16886 if v_0_0_1.Op != ssaop.OpConst64 {
16887 continue
16888 }
16889 t2 := v_0_0_1.Type
16890 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16891 if v_0_1.Op != ssaop.OpConst64 {
16892 continue
16893 }
16894 d := ssa.AuxIntToInt64(v_0_1.AuxInt)
16895 if v_1.Op != ssaop.OpConst64 {
16896 continue
16897 }
16898 e := ssa.AuxIntToInt64(v_1.AuxInt)
16899 if !(c >= e) {
16900 continue
16901 }
16902 v.Reset(ssaop.OpAnd64)
16903 v0 := b.NewValue0(v.Pos, ssaop.OpRsh64x64, t)
16904 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
16905 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
16906 v0.AddArg2(x, v1)
16907 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
16908 v2.AuxInt = ssa.Int64ToAuxInt(d << e)
16909 v.AddArg2(v0, v2)
16910 return true
16911 }
16912 break
16913 }
16914
16915
16916
16917 for {
16918 if v_0.Op != ssaop.OpAnd64 {
16919 break
16920 }
16921 _ = v_0.Args[1]
16922 v_0_0 := v_0.Args[0]
16923 v_0_1 := v_0.Args[1]
16924 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16925 if v_0_0.Op != ssaop.OpRsh64Ux64 {
16926 continue
16927 }
16928 t := v_0_0.Type
16929 _ = v_0_0.Args[1]
16930 x := v_0_0.Args[0]
16931 v_0_0_1 := v_0_0.Args[1]
16932 if v_0_0_1.Op != ssaop.OpConst64 {
16933 continue
16934 }
16935 t2 := v_0_0_1.Type
16936 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16937 if v_0_1.Op != ssaop.OpConst64 {
16938 continue
16939 }
16940 d := ssa.AuxIntToInt64(v_0_1.AuxInt)
16941 if v_1.Op != ssaop.OpConst64 {
16942 continue
16943 }
16944 e := ssa.AuxIntToInt64(v_1.AuxInt)
16945 if !(c >= e) {
16946 continue
16947 }
16948 v.Reset(ssaop.OpAnd64)
16949 v0 := b.NewValue0(v.Pos, ssaop.OpRsh64Ux64, t)
16950 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
16951 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
16952 v0.AddArg2(x, v1)
16953 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
16954 v2.AuxInt = ssa.Int64ToAuxInt(d << e)
16955 v.AddArg2(v0, v2)
16956 return true
16957 }
16958 break
16959 }
16960
16961
16962
16963 for {
16964 if v_0.Op != ssaop.OpAnd64 {
16965 break
16966 }
16967 _ = v_0.Args[1]
16968 v_0_0 := v_0.Args[0]
16969 v_0_1 := v_0.Args[1]
16970 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
16971 if v_0_0.Op != ssaop.OpRsh64x64 {
16972 continue
16973 }
16974 t := v_0_0.Type
16975 _ = v_0_0.Args[1]
16976 x := v_0_0.Args[0]
16977 v_0_0_1 := v_0_0.Args[1]
16978 if v_0_0_1.Op != ssaop.OpConst64 {
16979 continue
16980 }
16981 t2 := v_0_0_1.Type
16982 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
16983 if v_0_1.Op != ssaop.OpConst64 {
16984 continue
16985 }
16986 d := ssa.AuxIntToInt64(v_0_1.AuxInt)
16987 if v_1.Op != ssaop.OpConst64 {
16988 continue
16989 }
16990 e := ssa.AuxIntToInt64(v_1.AuxInt)
16991 if !(c < e) {
16992 continue
16993 }
16994 v.Reset(ssaop.OpAnd64)
16995 v0 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, t)
16996 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
16997 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
16998 v0.AddArg2(x, v1)
16999 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
17000 v2.AuxInt = ssa.Int64ToAuxInt(d << e)
17001 v.AddArg2(v0, v2)
17002 return true
17003 }
17004 break
17005 }
17006
17007
17008
17009 for {
17010 if v_0.Op != ssaop.OpAnd64 {
17011 break
17012 }
17013 _ = v_0.Args[1]
17014 v_0_0 := v_0.Args[0]
17015 v_0_1 := v_0.Args[1]
17016 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
17017 if v_0_0.Op != ssaop.OpRsh64Ux64 {
17018 continue
17019 }
17020 t := v_0_0.Type
17021 _ = v_0_0.Args[1]
17022 x := v_0_0.Args[0]
17023 v_0_0_1 := v_0_0.Args[1]
17024 if v_0_0_1.Op != ssaop.OpConst64 {
17025 continue
17026 }
17027 t2 := v_0_0_1.Type
17028 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
17029 if v_0_1.Op != ssaop.OpConst64 {
17030 continue
17031 }
17032 d := ssa.AuxIntToInt64(v_0_1.AuxInt)
17033 if v_1.Op != ssaop.OpConst64 {
17034 continue
17035 }
17036 e := ssa.AuxIntToInt64(v_1.AuxInt)
17037 if !(c < e) {
17038 continue
17039 }
17040 v.Reset(ssaop.OpAnd64)
17041 v0 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, t)
17042 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
17043 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
17044 v0.AddArg2(x, v1)
17045 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
17046 v2.AuxInt = ssa.Int64ToAuxInt(d << e)
17047 v.AddArg2(v0, v2)
17048 return true
17049 }
17050 break
17051 }
17052
17053
17054
17055 for {
17056 if ssa.AuxIntToBool(v.AuxInt) != false {
17057 break
17058 }
17059 x := v_0
17060 con := v_1
17061 if con.Op != ssaop.OpConst64 {
17062 break
17063 }
17064 c := ssa.AuxIntToInt64(con.AuxInt)
17065 if !(0 < c && c < 64) {
17066 break
17067 }
17068 v.Reset(ssaop.OpLsh64x64)
17069 v.AuxInt = ssa.BoolToAuxInt(true)
17070 v.AddArg2(x, con)
17071 return true
17072 }
17073 return false
17074 }
17075 func rewriteValue_OpLsh64x8(v *ssa.Value) bool {
17076 v_1 := v.Args[1]
17077 v_0 := v.Args[0]
17078 b := v.Block
17079
17080
17081 for {
17082 x := v_0
17083 if v_1.Op != ssaop.OpConst8 {
17084 break
17085 }
17086 c := ssa.AuxIntToInt8(v_1.AuxInt)
17087 v.Reset(ssaop.OpLsh64x64)
17088 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
17089 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
17090 v.AddArg2(x, v0)
17091 return true
17092 }
17093
17094
17095 for {
17096 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
17097 break
17098 }
17099 v.Reset(ssaop.OpConst64)
17100 v.AuxInt = ssa.Int64ToAuxInt(0)
17101 return true
17102 }
17103
17104
17105
17106 for {
17107 if ssa.AuxIntToBool(v.AuxInt) != false {
17108 break
17109 }
17110 x := v_0
17111 con := v_1
17112 if con.Op != ssaop.OpConst8 {
17113 break
17114 }
17115 c := ssa.AuxIntToInt8(con.AuxInt)
17116 if !(0 < c && c < 64) {
17117 break
17118 }
17119 v.Reset(ssaop.OpLsh64x8)
17120 v.AuxInt = ssa.BoolToAuxInt(true)
17121 v.AddArg2(x, con)
17122 return true
17123 }
17124 return false
17125 }
17126 func rewriteValue_OpLsh8x16(v *ssa.Value) bool {
17127 v_1 := v.Args[1]
17128 v_0 := v.Args[0]
17129 b := v.Block
17130
17131
17132 for {
17133 x := v_0
17134 if v_1.Op != ssaop.OpConst16 {
17135 break
17136 }
17137 c := ssa.AuxIntToInt16(v_1.AuxInt)
17138 v.Reset(ssaop.OpLsh8x64)
17139 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
17140 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
17141 v.AddArg2(x, v0)
17142 return true
17143 }
17144
17145
17146 for {
17147 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
17148 break
17149 }
17150 v.Reset(ssaop.OpConst8)
17151 v.AuxInt = ssa.Int8ToAuxInt(0)
17152 return true
17153 }
17154
17155
17156
17157 for {
17158 if ssa.AuxIntToBool(v.AuxInt) != false {
17159 break
17160 }
17161 x := v_0
17162 con := v_1
17163 if con.Op != ssaop.OpConst16 {
17164 break
17165 }
17166 c := ssa.AuxIntToInt16(con.AuxInt)
17167 if !(0 < c && c < 8) {
17168 break
17169 }
17170 v.Reset(ssaop.OpLsh8x16)
17171 v.AuxInt = ssa.BoolToAuxInt(true)
17172 v.AddArg2(x, con)
17173 return true
17174 }
17175 return false
17176 }
17177 func rewriteValue_OpLsh8x32(v *ssa.Value) bool {
17178 v_1 := v.Args[1]
17179 v_0 := v.Args[0]
17180 b := v.Block
17181
17182
17183 for {
17184 x := v_0
17185 if v_1.Op != ssaop.OpConst32 {
17186 break
17187 }
17188 c := ssa.AuxIntToInt32(v_1.AuxInt)
17189 v.Reset(ssaop.OpLsh8x64)
17190 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
17191 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
17192 v.AddArg2(x, v0)
17193 return true
17194 }
17195
17196
17197 for {
17198 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
17199 break
17200 }
17201 v.Reset(ssaop.OpConst8)
17202 v.AuxInt = ssa.Int8ToAuxInt(0)
17203 return true
17204 }
17205
17206
17207
17208 for {
17209 if ssa.AuxIntToBool(v.AuxInt) != false {
17210 break
17211 }
17212 x := v_0
17213 con := v_1
17214 if con.Op != ssaop.OpConst32 {
17215 break
17216 }
17217 c := ssa.AuxIntToInt32(con.AuxInt)
17218 if !(0 < c && c < 8) {
17219 break
17220 }
17221 v.Reset(ssaop.OpLsh8x32)
17222 v.AuxInt = ssa.BoolToAuxInt(true)
17223 v.AddArg2(x, con)
17224 return true
17225 }
17226 return false
17227 }
17228 func rewriteValue_OpLsh8x64(v *ssa.Value) bool {
17229 v_1 := v.Args[1]
17230 v_0 := v.Args[0]
17231 b := v.Block
17232 typ := &b.Func.Config.Types
17233
17234
17235 for {
17236 if v_0.Op != ssaop.OpConst8 {
17237 break
17238 }
17239 c := ssa.AuxIntToInt8(v_0.AuxInt)
17240 if v_1.Op != ssaop.OpConst64 {
17241 break
17242 }
17243 d := ssa.AuxIntToInt64(v_1.AuxInt)
17244 v.Reset(ssaop.OpConst8)
17245 v.AuxInt = ssa.Int8ToAuxInt(c << uint64(d))
17246 return true
17247 }
17248
17249
17250 for {
17251 x := v_0
17252 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
17253 break
17254 }
17255 v.CopyOf(x)
17256 return true
17257 }
17258
17259
17260 for {
17261 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
17262 break
17263 }
17264 v.Reset(ssaop.OpConst8)
17265 v.AuxInt = ssa.Int8ToAuxInt(0)
17266 return true
17267 }
17268
17269
17270
17271 for {
17272 if v_1.Op != ssaop.OpConst64 {
17273 break
17274 }
17275 c := ssa.AuxIntToInt64(v_1.AuxInt)
17276 if !(uint64(c) >= 8) {
17277 break
17278 }
17279 v.Reset(ssaop.OpConst8)
17280 v.AuxInt = ssa.Int8ToAuxInt(0)
17281 return true
17282 }
17283
17284
17285
17286 for {
17287 t := v.Type
17288 if v_0.Op != ssaop.OpLsh8x64 {
17289 break
17290 }
17291 _ = v_0.Args[1]
17292 x := v_0.Args[0]
17293 v_0_1 := v_0.Args[1]
17294 if v_0_1.Op != ssaop.OpConst64 {
17295 break
17296 }
17297 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
17298 if v_1.Op != ssaop.OpConst64 {
17299 break
17300 }
17301 d := ssa.AuxIntToInt64(v_1.AuxInt)
17302 if !(!uaddOvf(c, d)) {
17303 break
17304 }
17305 v.Reset(ssaop.OpLsh8x64)
17306 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
17307 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
17308 v.AddArg2(x, v0)
17309 return true
17310 }
17311
17312
17313
17314 for {
17315 i := v_0
17316 if i.Op != ssaop.OpRsh8x64 {
17317 break
17318 }
17319 _ = i.Args[1]
17320 x := i.Args[0]
17321 i_1 := i.Args[1]
17322 if i_1.Op != ssaop.OpConst64 {
17323 break
17324 }
17325 c := ssa.AuxIntToInt64(i_1.AuxInt)
17326 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 8 && i.Uses == 1) {
17327 break
17328 }
17329 v.Reset(ssaop.OpAnd8)
17330 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, v.Type)
17331 v0.AuxInt = ssa.Int8ToAuxInt(int8(-1) << c)
17332 v.AddArg2(x, v0)
17333 return true
17334 }
17335
17336
17337
17338 for {
17339 i := v_0
17340 if i.Op != ssaop.OpRsh8Ux64 {
17341 break
17342 }
17343 _ = i.Args[1]
17344 x := i.Args[0]
17345 i_1 := i.Args[1]
17346 if i_1.Op != ssaop.OpConst64 {
17347 break
17348 }
17349 c := ssa.AuxIntToInt64(i_1.AuxInt)
17350 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 8 && i.Uses == 1) {
17351 break
17352 }
17353 v.Reset(ssaop.OpAnd8)
17354 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, v.Type)
17355 v0.AuxInt = ssa.Int8ToAuxInt(int8(-1) << c)
17356 v.AddArg2(x, v0)
17357 return true
17358 }
17359
17360
17361
17362 for {
17363 if v_0.Op != ssaop.OpRsh8Ux64 {
17364 break
17365 }
17366 _ = v_0.Args[1]
17367 v_0_0 := v_0.Args[0]
17368 if v_0_0.Op != ssaop.OpLsh8x64 {
17369 break
17370 }
17371 _ = v_0_0.Args[1]
17372 x := v_0_0.Args[0]
17373 v_0_0_1 := v_0_0.Args[1]
17374 if v_0_0_1.Op != ssaop.OpConst64 {
17375 break
17376 }
17377 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
17378 v_0_1 := v_0.Args[1]
17379 if v_0_1.Op != ssaop.OpConst64 {
17380 break
17381 }
17382 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
17383 if v_1.Op != ssaop.OpConst64 {
17384 break
17385 }
17386 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
17387 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
17388 break
17389 }
17390 v.Reset(ssaop.OpLsh8x64)
17391 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
17392 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
17393 v.AddArg2(x, v0)
17394 return true
17395 }
17396
17397
17398
17399 for {
17400 if v_0.Op != ssaop.OpAnd8 {
17401 break
17402 }
17403 _ = v_0.Args[1]
17404 v_0_0 := v_0.Args[0]
17405 v_0_1 := v_0.Args[1]
17406 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
17407 if v_0_0.Op != ssaop.OpRsh8x64 {
17408 continue
17409 }
17410 t := v_0_0.Type
17411 _ = v_0_0.Args[1]
17412 x := v_0_0.Args[0]
17413 v_0_0_1 := v_0_0.Args[1]
17414 if v_0_0_1.Op != ssaop.OpConst64 {
17415 continue
17416 }
17417 t2 := v_0_0_1.Type
17418 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
17419 if v_0_1.Op != ssaop.OpConst8 {
17420 continue
17421 }
17422 d := ssa.AuxIntToInt8(v_0_1.AuxInt)
17423 if v_1.Op != ssaop.OpConst64 {
17424 continue
17425 }
17426 e := ssa.AuxIntToInt64(v_1.AuxInt)
17427 if !(c >= e) {
17428 continue
17429 }
17430 v.Reset(ssaop.OpAnd8)
17431 v0 := b.NewValue0(v.Pos, ssaop.OpRsh8x64, t)
17432 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
17433 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
17434 v0.AddArg2(x, v1)
17435 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
17436 v2.AuxInt = ssa.Int8ToAuxInt(d << e)
17437 v.AddArg2(v0, v2)
17438 return true
17439 }
17440 break
17441 }
17442
17443
17444
17445 for {
17446 if v_0.Op != ssaop.OpAnd8 {
17447 break
17448 }
17449 _ = v_0.Args[1]
17450 v_0_0 := v_0.Args[0]
17451 v_0_1 := v_0.Args[1]
17452 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
17453 if v_0_0.Op != ssaop.OpRsh8Ux64 {
17454 continue
17455 }
17456 t := v_0_0.Type
17457 _ = v_0_0.Args[1]
17458 x := v_0_0.Args[0]
17459 v_0_0_1 := v_0_0.Args[1]
17460 if v_0_0_1.Op != ssaop.OpConst64 {
17461 continue
17462 }
17463 t2 := v_0_0_1.Type
17464 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
17465 if v_0_1.Op != ssaop.OpConst8 {
17466 continue
17467 }
17468 d := ssa.AuxIntToInt8(v_0_1.AuxInt)
17469 if v_1.Op != ssaop.OpConst64 {
17470 continue
17471 }
17472 e := ssa.AuxIntToInt64(v_1.AuxInt)
17473 if !(c >= e) {
17474 continue
17475 }
17476 v.Reset(ssaop.OpAnd8)
17477 v0 := b.NewValue0(v.Pos, ssaop.OpRsh8Ux64, t)
17478 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
17479 v1.AuxInt = ssa.Int64ToAuxInt(c - e)
17480 v0.AddArg2(x, v1)
17481 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
17482 v2.AuxInt = ssa.Int8ToAuxInt(d << e)
17483 v.AddArg2(v0, v2)
17484 return true
17485 }
17486 break
17487 }
17488
17489
17490
17491 for {
17492 if v_0.Op != ssaop.OpAnd8 {
17493 break
17494 }
17495 _ = v_0.Args[1]
17496 v_0_0 := v_0.Args[0]
17497 v_0_1 := v_0.Args[1]
17498 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
17499 if v_0_0.Op != ssaop.OpRsh8x64 {
17500 continue
17501 }
17502 t := v_0_0.Type
17503 _ = v_0_0.Args[1]
17504 x := v_0_0.Args[0]
17505 v_0_0_1 := v_0_0.Args[1]
17506 if v_0_0_1.Op != ssaop.OpConst64 {
17507 continue
17508 }
17509 t2 := v_0_0_1.Type
17510 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
17511 if v_0_1.Op != ssaop.OpConst8 {
17512 continue
17513 }
17514 d := ssa.AuxIntToInt8(v_0_1.AuxInt)
17515 if v_1.Op != ssaop.OpConst64 {
17516 continue
17517 }
17518 e := ssa.AuxIntToInt64(v_1.AuxInt)
17519 if !(c < e) {
17520 continue
17521 }
17522 v.Reset(ssaop.OpAnd8)
17523 v0 := b.NewValue0(v.Pos, ssaop.OpLsh8x64, t)
17524 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
17525 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
17526 v0.AddArg2(x, v1)
17527 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
17528 v2.AuxInt = ssa.Int8ToAuxInt(d << e)
17529 v.AddArg2(v0, v2)
17530 return true
17531 }
17532 break
17533 }
17534
17535
17536
17537 for {
17538 if v_0.Op != ssaop.OpAnd8 {
17539 break
17540 }
17541 _ = v_0.Args[1]
17542 v_0_0 := v_0.Args[0]
17543 v_0_1 := v_0.Args[1]
17544 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
17545 if v_0_0.Op != ssaop.OpRsh8Ux64 {
17546 continue
17547 }
17548 t := v_0_0.Type
17549 _ = v_0_0.Args[1]
17550 x := v_0_0.Args[0]
17551 v_0_0_1 := v_0_0.Args[1]
17552 if v_0_0_1.Op != ssaop.OpConst64 {
17553 continue
17554 }
17555 t2 := v_0_0_1.Type
17556 c := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
17557 if v_0_1.Op != ssaop.OpConst8 {
17558 continue
17559 }
17560 d := ssa.AuxIntToInt8(v_0_1.AuxInt)
17561 if v_1.Op != ssaop.OpConst64 {
17562 continue
17563 }
17564 e := ssa.AuxIntToInt64(v_1.AuxInt)
17565 if !(c < e) {
17566 continue
17567 }
17568 v.Reset(ssaop.OpAnd8)
17569 v0 := b.NewValue0(v.Pos, ssaop.OpLsh8x64, t)
17570 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t2)
17571 v1.AuxInt = ssa.Int64ToAuxInt(e - c)
17572 v0.AddArg2(x, v1)
17573 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
17574 v2.AuxInt = ssa.Int8ToAuxInt(d << e)
17575 v.AddArg2(v0, v2)
17576 return true
17577 }
17578 break
17579 }
17580
17581
17582
17583 for {
17584 if ssa.AuxIntToBool(v.AuxInt) != false {
17585 break
17586 }
17587 x := v_0
17588 con := v_1
17589 if con.Op != ssaop.OpConst64 {
17590 break
17591 }
17592 c := ssa.AuxIntToInt64(con.AuxInt)
17593 if !(0 < c && c < 8) {
17594 break
17595 }
17596 v.Reset(ssaop.OpLsh8x64)
17597 v.AuxInt = ssa.BoolToAuxInt(true)
17598 v.AddArg2(x, con)
17599 return true
17600 }
17601 return false
17602 }
17603 func rewriteValue_OpLsh8x8(v *ssa.Value) bool {
17604 v_1 := v.Args[1]
17605 v_0 := v.Args[0]
17606 b := v.Block
17607
17608
17609 for {
17610 x := v_0
17611 if v_1.Op != ssaop.OpConst8 {
17612 break
17613 }
17614 c := ssa.AuxIntToInt8(v_1.AuxInt)
17615 v.Reset(ssaop.OpLsh8x64)
17616 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
17617 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
17618 v.AddArg2(x, v0)
17619 return true
17620 }
17621
17622
17623 for {
17624 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
17625 break
17626 }
17627 v.Reset(ssaop.OpConst8)
17628 v.AuxInt = ssa.Int8ToAuxInt(0)
17629 return true
17630 }
17631
17632
17633
17634 for {
17635 if ssa.AuxIntToBool(v.AuxInt) != false {
17636 break
17637 }
17638 x := v_0
17639 con := v_1
17640 if con.Op != ssaop.OpConst8 {
17641 break
17642 }
17643 c := ssa.AuxIntToInt8(con.AuxInt)
17644 if !(0 < c && c < 8) {
17645 break
17646 }
17647 v.Reset(ssaop.OpLsh8x8)
17648 v.AuxInt = ssa.BoolToAuxInt(true)
17649 v.AddArg2(x, con)
17650 return true
17651 }
17652 return false
17653 }
17654 func rewriteValue_OpMemEq(v *ssa.Value) bool {
17655 v_3 := v.Args[3]
17656 v_2 := v.Args[2]
17657 v_1 := v.Args[1]
17658 v_0 := v.Args[0]
17659 b := v.Block
17660 config := b.Func.Config
17661 typ := &b.Func.Config.Types
17662
17663
17664 for {
17665 sptr := v_0
17666 tptr := v_1
17667 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 1 {
17668 break
17669 }
17670 mem := v_3
17671 v.Reset(ssaop.OpEq8)
17672 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
17673 v0.AddArg2(sptr, mem)
17674 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
17675 v1.AddArg2(tptr, mem)
17676 v.AddArg2(v0, v1)
17677 return true
17678 }
17679
17680
17681
17682 for {
17683 sptr := v_0
17684 tptr := v_1
17685 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 2 {
17686 break
17687 }
17688 mem := v_3
17689 if !(canLoadUnaligned(config)) {
17690 break
17691 }
17692 v.Reset(ssaop.OpEq16)
17693 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
17694 v0.AddArg2(sptr, mem)
17695 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
17696 v1.AddArg2(tptr, mem)
17697 v.AddArg2(v0, v1)
17698 return true
17699 }
17700
17701
17702
17703 for {
17704 sptr := v_0
17705 tptr := v_1
17706 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 4 {
17707 break
17708 }
17709 mem := v_3
17710 if !(canLoadUnaligned(config)) {
17711 break
17712 }
17713 v.Reset(ssaop.OpEq32)
17714 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
17715 v0.AddArg2(sptr, mem)
17716 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
17717 v1.AddArg2(tptr, mem)
17718 v.AddArg2(v0, v1)
17719 return true
17720 }
17721
17722
17723
17724 for {
17725 sptr := v_0
17726 tptr := v_1
17727 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 8 {
17728 break
17729 }
17730 mem := v_3
17731 if !(canLoadUnaligned(config) && config.PtrSize == 8) {
17732 break
17733 }
17734 v.Reset(ssaop.OpEq64)
17735 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int64)
17736 v0.AddArg2(sptr, mem)
17737 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int64)
17738 v1.AddArg2(tptr, mem)
17739 v.AddArg2(v0, v1)
17740 return true
17741 }
17742
17743
17744 for {
17745 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 0 {
17746 break
17747 }
17748 v.Reset(ssaop.OpConstBool)
17749 v.Type = typ.Bool
17750 v.AuxInt = ssa.BoolToAuxInt(true)
17751 return true
17752 }
17753
17754
17755
17756 for {
17757 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
17758 p := v_0
17759 q := v_1
17760 if !(ssa.IsSamePtr(p, q)) {
17761 continue
17762 }
17763 v.Reset(ssaop.OpConstBool)
17764 v.Type = typ.Bool
17765 v.AuxInt = ssa.BoolToAuxInt(true)
17766 return true
17767 }
17768 break
17769 }
17770
17771
17772
17773 for {
17774 p := v_0
17775 q := v_1
17776 if v_2.Op != ssaop.OpConst64 {
17777 break
17778 }
17779 c := ssa.AuxIntToInt64(v_2.AuxInt)
17780 mem := v_3
17781 if !((c == 3 || c == 5 || c == 9 || c == 17) && canLoadUnaligned(config) && config.RegSize == 8) {
17782 break
17783 }
17784 v.Reset(ssaop.OpAndB)
17785 v0 := b.NewValue0(v.Pos, ssaop.OpMemEq, typ.Bool)
17786 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
17787 v1.AuxInt = ssa.Int64ToAuxInt(c - 1)
17788 v0.AddArg4(p, q, v1, mem)
17789 v2 := b.NewValue0(v.Pos, ssaop.OpEq8, typ.Bool)
17790 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
17791 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, p.Type)
17792 v4.AuxInt = ssa.Int64ToAuxInt(c - 1)
17793 v4.AddArg(p)
17794 v3.AddArg2(v4, mem)
17795 v5 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
17796 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, q.Type)
17797 v6.AuxInt = ssa.Int64ToAuxInt(c - 1)
17798 v6.AddArg(q)
17799 v5.AddArg2(v6, mem)
17800 v2.AddArg2(v3, v5)
17801 v.AddArg2(v0, v2)
17802 return true
17803 }
17804
17805
17806
17807 for {
17808 p := v_0
17809 q := v_1
17810 if v_2.Op != ssaop.OpConst64 {
17811 break
17812 }
17813 c := ssa.AuxIntToInt64(v_2.AuxInt)
17814 mem := v_3
17815 if !((c == 6 || c == 10 || c == 18) && canLoadUnaligned(config) && config.RegSize == 8) {
17816 break
17817 }
17818 v.Reset(ssaop.OpAndB)
17819 v0 := b.NewValue0(v.Pos, ssaop.OpMemEq, typ.Bool)
17820 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
17821 v1.AuxInt = ssa.Int64ToAuxInt(c - 2)
17822 v0.AddArg4(p, q, v1, mem)
17823 v2 := b.NewValue0(v.Pos, ssaop.OpEq16, typ.Bool)
17824 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
17825 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, p.Type)
17826 v4.AuxInt = ssa.Int64ToAuxInt(c - 2)
17827 v4.AddArg(p)
17828 v3.AddArg2(v4, mem)
17829 v5 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
17830 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, q.Type)
17831 v6.AuxInt = ssa.Int64ToAuxInt(c - 2)
17832 v6.AddArg(q)
17833 v5.AddArg2(v6, mem)
17834 v2.AddArg2(v3, v5)
17835 v.AddArg2(v0, v2)
17836 return true
17837 }
17838
17839
17840
17841 for {
17842 p := v_0
17843 q := v_1
17844 if v_2.Op != ssaop.OpConst64 {
17845 break
17846 }
17847 c := ssa.AuxIntToInt64(v_2.AuxInt)
17848 mem := v_3
17849 if !((c == 7 || c == 11 || c == 19 || c == 20) && canLoadUnaligned(config) && config.RegSize == 8) {
17850 break
17851 }
17852 v.Reset(ssaop.OpAndB)
17853 v0 := b.NewValue0(v.Pos, ssaop.OpMemEq, typ.Bool)
17854 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
17855 v1.AuxInt = ssa.Int64ToAuxInt(min(c-3, 16))
17856 v0.AddArg4(p, q, v1, mem)
17857 v2 := b.NewValue0(v.Pos, ssaop.OpEq32, typ.Bool)
17858 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
17859 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, p.Type)
17860 v4.AuxInt = ssa.Int64ToAuxInt(c - 4)
17861 v4.AddArg(p)
17862 v3.AddArg2(v4, mem)
17863 v5 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
17864 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, q.Type)
17865 v6.AuxInt = ssa.Int64ToAuxInt(c - 4)
17866 v6.AddArg(q)
17867 v5.AddArg2(v6, mem)
17868 v2.AddArg2(v3, v5)
17869 v.AddArg2(v0, v2)
17870 return true
17871 }
17872
17873
17874
17875 for {
17876 p := v_0
17877 q := v_1
17878 if v_2.Op != ssaop.OpConst64 {
17879 break
17880 }
17881 c := ssa.AuxIntToInt64(v_2.AuxInt)
17882 mem := v_3
17883 if !(((c >= 12 && c <= 16) || (c >= 21 && c <= 24)) && canLoadUnaligned(config) && config.RegSize == 8) {
17884 break
17885 }
17886 v.Reset(ssaop.OpAndB)
17887 v0 := b.NewValue0(v.Pos, ssaop.OpMemEq, typ.Bool)
17888 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
17889 v1.AuxInt = ssa.Int64ToAuxInt(8 + int64(bool2int(c > 16))*8)
17890 v0.AddArg4(p, q, v1, mem)
17891 v2 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
17892 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int64)
17893 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, p.Type)
17894 v4.AuxInt = ssa.Int64ToAuxInt(c - 8)
17895 v4.AddArg(p)
17896 v3.AddArg2(v4, mem)
17897 v5 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int64)
17898 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, q.Type)
17899 v6.AuxInt = ssa.Int64ToAuxInt(c - 8)
17900 v6.AddArg(q)
17901 v5.AddArg2(v6, mem)
17902 v2.AddArg2(v3, v5)
17903 v.AddArg2(v0, v2)
17904 return true
17905 }
17906
17907
17908
17909 for {
17910 p := v_0
17911 q := v_1
17912 if v_2.Op != ssaop.OpConst64 {
17913 break
17914 }
17915 c := ssa.AuxIntToInt64(v_2.AuxInt)
17916 mem := v_3
17917 if !(c >= 25 && c <= 32 && canLoadUnaligned(config) && config.RegSize == 8) {
17918 break
17919 }
17920 v.Reset(ssaop.OpAndB)
17921 v0 := b.NewValue0(v.Pos, ssaop.OpMemEq, typ.Bool)
17922 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
17923 v1.AuxInt = ssa.Int64ToAuxInt(16)
17924 v0.AddArg4(p, q, v1, mem)
17925 v2 := b.NewValue0(v.Pos, ssaop.OpMemEq, typ.Bool)
17926 v3 := b.NewValue0(v.Pos, ssaop.OpOffPtr, p.Type)
17927 v3.AuxInt = ssa.Int64ToAuxInt(16)
17928 v3.AddArg(p)
17929 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, q.Type)
17930 v4.AuxInt = ssa.Int64ToAuxInt(16)
17931 v4.AddArg(q)
17932 v5 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
17933 v5.AuxInt = ssa.Int64ToAuxInt(c - 16)
17934 v2.AddArg4(v3, v4, v5, mem)
17935 v.AddArg2(v0, v2)
17936 return true
17937 }
17938 return false
17939 }
17940 func rewriteValue_OpMod16(v *ssa.Value) bool {
17941 v_1 := v.Args[1]
17942 v_0 := v.Args[0]
17943 b := v.Block
17944
17945
17946
17947 for {
17948 if v_0.Op != ssaop.OpConst16 {
17949 break
17950 }
17951 c := ssa.AuxIntToInt16(v_0.AuxInt)
17952 if v_1.Op != ssaop.OpConst16 {
17953 break
17954 }
17955 d := ssa.AuxIntToInt16(v_1.AuxInt)
17956 if !(d != 0) {
17957 break
17958 }
17959 v.Reset(ssaop.OpConst16)
17960 v.AuxInt = ssa.Int16ToAuxInt(c % d)
17961 return true
17962 }
17963
17964
17965
17966 for {
17967 t := v.Type
17968 n := v_0
17969 if v_1.Op != ssaop.OpConst16 {
17970 break
17971 }
17972 c := ssa.AuxIntToInt16(v_1.AuxInt)
17973 if !(isNonNegative(n) && ssa.IsPowerOfTwo(c)) {
17974 break
17975 }
17976 v.Reset(ssaop.OpAnd16)
17977 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
17978 v0.AuxInt = ssa.Int16ToAuxInt(c - 1)
17979 v.AddArg2(n, v0)
17980 return true
17981 }
17982
17983
17984
17985 for {
17986 t := v.Type
17987 n := v_0
17988 if v_1.Op != ssaop.OpConst16 {
17989 break
17990 }
17991 c := ssa.AuxIntToInt16(v_1.AuxInt)
17992 if !(c < 0 && c != -1<<15) {
17993 break
17994 }
17995 v.Reset(ssaop.OpMod16)
17996 v.Type = t
17997 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
17998 v0.AuxInt = ssa.Int16ToAuxInt(-c)
17999 v.AddArg2(n, v0)
18000 return true
18001 }
18002
18003
18004
18005 for {
18006 t := v.Type
18007 x := v_0
18008 if v_1.Op != ssaop.OpConst16 {
18009 break
18010 }
18011 c := ssa.AuxIntToInt16(v_1.AuxInt)
18012 if !(x.Op != ssaop.OpConst16 && (c > 0 || c == -1<<15)) {
18013 break
18014 }
18015 v.Reset(ssaop.OpSub16)
18016 v0 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
18017 v1 := b.NewValue0(v.Pos, ssaop.OpDiv16, t)
18018 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
18019 v2.AuxInt = ssa.Int16ToAuxInt(c)
18020 v1.AddArg2(x, v2)
18021 v0.AddArg2(v1, v2)
18022 v.AddArg2(x, v0)
18023 return true
18024 }
18025 return false
18026 }
18027 func rewriteValue_OpMod16u(v *ssa.Value) bool {
18028 v_1 := v.Args[1]
18029 v_0 := v.Args[0]
18030 b := v.Block
18031
18032
18033
18034 for {
18035 if v_0.Op != ssaop.OpConst16 {
18036 break
18037 }
18038 c := ssa.AuxIntToInt16(v_0.AuxInt)
18039 if v_1.Op != ssaop.OpConst16 {
18040 break
18041 }
18042 d := ssa.AuxIntToInt16(v_1.AuxInt)
18043 if !(d != 0) {
18044 break
18045 }
18046 v.Reset(ssaop.OpConst16)
18047 v.AuxInt = ssa.Int16ToAuxInt(int16(uint16(c) % uint16(d)))
18048 return true
18049 }
18050
18051
18052
18053 for {
18054 t := v.Type
18055 n := v_0
18056 if v_1.Op != ssaop.OpConst16 {
18057 break
18058 }
18059 c := ssa.AuxIntToInt16(v_1.AuxInt)
18060 if !(ssa.IsPowerOfTwo(uint16(c))) {
18061 break
18062 }
18063 v.Reset(ssaop.OpAnd16)
18064 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
18065 v0.AuxInt = ssa.Int16ToAuxInt(c - 1)
18066 v.AddArg2(n, v0)
18067 return true
18068 }
18069
18070
18071
18072 for {
18073 t := v.Type
18074 x := v_0
18075 if v_1.Op != ssaop.OpConst16 {
18076 break
18077 }
18078 c := ssa.AuxIntToInt16(v_1.AuxInt)
18079 if !(x.Op != ssaop.OpConst16 && c != 0) {
18080 break
18081 }
18082 v.Reset(ssaop.OpSub16)
18083 v0 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
18084 v1 := b.NewValue0(v.Pos, ssaop.OpDiv16u, t)
18085 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
18086 v2.AuxInt = ssa.Int16ToAuxInt(c)
18087 v1.AddArg2(x, v2)
18088 v0.AddArg2(v1, v2)
18089 v.AddArg2(x, v0)
18090 return true
18091 }
18092 return false
18093 }
18094 func rewriteValue_OpMod32(v *ssa.Value) bool {
18095 v_1 := v.Args[1]
18096 v_0 := v.Args[0]
18097 b := v.Block
18098
18099
18100
18101 for {
18102 if v_0.Op != ssaop.OpConst32 {
18103 break
18104 }
18105 c := ssa.AuxIntToInt32(v_0.AuxInt)
18106 if v_1.Op != ssaop.OpConst32 {
18107 break
18108 }
18109 d := ssa.AuxIntToInt32(v_1.AuxInt)
18110 if !(d != 0) {
18111 break
18112 }
18113 v.Reset(ssaop.OpConst32)
18114 v.AuxInt = ssa.Int32ToAuxInt(c % d)
18115 return true
18116 }
18117
18118
18119
18120 for {
18121 t := v.Type
18122 n := v_0
18123 if v_1.Op != ssaop.OpConst32 {
18124 break
18125 }
18126 c := ssa.AuxIntToInt32(v_1.AuxInt)
18127 if !(isNonNegative(n) && ssa.IsPowerOfTwo(c)) {
18128 break
18129 }
18130 v.Reset(ssaop.OpAnd32)
18131 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
18132 v0.AuxInt = ssa.Int32ToAuxInt(c - 1)
18133 v.AddArg2(n, v0)
18134 return true
18135 }
18136
18137
18138
18139 for {
18140 t := v.Type
18141 n := v_0
18142 if v_1.Op != ssaop.OpConst32 {
18143 break
18144 }
18145 c := ssa.AuxIntToInt32(v_1.AuxInt)
18146 if !(c < 0 && c != -1<<31) {
18147 break
18148 }
18149 v.Reset(ssaop.OpMod32)
18150 v.Type = t
18151 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
18152 v0.AuxInt = ssa.Int32ToAuxInt(-c)
18153 v.AddArg2(n, v0)
18154 return true
18155 }
18156
18157
18158
18159 for {
18160 t := v.Type
18161 x := v_0
18162 if v_1.Op != ssaop.OpConst32 {
18163 break
18164 }
18165 c := ssa.AuxIntToInt32(v_1.AuxInt)
18166 if !(x.Op != ssaop.OpConst32 && (c > 0 || c == -1<<31)) {
18167 break
18168 }
18169 v.Reset(ssaop.OpSub32)
18170 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
18171 v1 := b.NewValue0(v.Pos, ssaop.OpDiv32, t)
18172 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
18173 v2.AuxInt = ssa.Int32ToAuxInt(c)
18174 v1.AddArg2(x, v2)
18175 v0.AddArg2(v1, v2)
18176 v.AddArg2(x, v0)
18177 return true
18178 }
18179 return false
18180 }
18181 func rewriteValue_OpMod32u(v *ssa.Value) bool {
18182 v_1 := v.Args[1]
18183 v_0 := v.Args[0]
18184 b := v.Block
18185
18186
18187
18188 for {
18189 if v_0.Op != ssaop.OpConst32 {
18190 break
18191 }
18192 c := ssa.AuxIntToInt32(v_0.AuxInt)
18193 if v_1.Op != ssaop.OpConst32 {
18194 break
18195 }
18196 d := ssa.AuxIntToInt32(v_1.AuxInt)
18197 if !(d != 0) {
18198 break
18199 }
18200 v.Reset(ssaop.OpConst32)
18201 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) % uint32(d)))
18202 return true
18203 }
18204
18205
18206
18207 for {
18208 t := v.Type
18209 n := v_0
18210 if v_1.Op != ssaop.OpConst32 {
18211 break
18212 }
18213 c := ssa.AuxIntToInt32(v_1.AuxInt)
18214 if !(ssa.IsPowerOfTwo(uint32(c))) {
18215 break
18216 }
18217 v.Reset(ssaop.OpAnd32)
18218 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
18219 v0.AuxInt = ssa.Int32ToAuxInt(c - 1)
18220 v.AddArg2(n, v0)
18221 return true
18222 }
18223
18224
18225
18226 for {
18227 t := v.Type
18228 x := v_0
18229 if v_1.Op != ssaop.OpConst32 {
18230 break
18231 }
18232 c := ssa.AuxIntToInt32(v_1.AuxInt)
18233 if !(x.Op != ssaop.OpConst32 && c != 0) {
18234 break
18235 }
18236 v.Reset(ssaop.OpSub32)
18237 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
18238 v1 := b.NewValue0(v.Pos, ssaop.OpDiv32u, t)
18239 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
18240 v2.AuxInt = ssa.Int32ToAuxInt(c)
18241 v1.AddArg2(x, v2)
18242 v0.AddArg2(v1, v2)
18243 v.AddArg2(x, v0)
18244 return true
18245 }
18246 return false
18247 }
18248 func rewriteValue_OpMod64(v *ssa.Value) bool {
18249 v_1 := v.Args[1]
18250 v_0 := v.Args[0]
18251 b := v.Block
18252
18253
18254
18255 for {
18256 if v_0.Op != ssaop.OpConst64 {
18257 break
18258 }
18259 c := ssa.AuxIntToInt64(v_0.AuxInt)
18260 if v_1.Op != ssaop.OpConst64 {
18261 break
18262 }
18263 d := ssa.AuxIntToInt64(v_1.AuxInt)
18264 if !(d != 0) {
18265 break
18266 }
18267 v.Reset(ssaop.OpConst64)
18268 v.AuxInt = ssa.Int64ToAuxInt(c % d)
18269 return true
18270 }
18271
18272
18273
18274 for {
18275 t := v.Type
18276 n := v_0
18277 if v_1.Op != ssaop.OpConst64 {
18278 break
18279 }
18280 c := ssa.AuxIntToInt64(v_1.AuxInt)
18281 if !(isNonNegative(n) && ssa.IsPowerOfTwo(c)) {
18282 break
18283 }
18284 v.Reset(ssaop.OpAnd64)
18285 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
18286 v0.AuxInt = ssa.Int64ToAuxInt(c - 1)
18287 v.AddArg2(n, v0)
18288 return true
18289 }
18290
18291
18292
18293 for {
18294 n := v_0
18295 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != -1<<63 || !(isNonNegative(n)) {
18296 break
18297 }
18298 v.CopyOf(n)
18299 return true
18300 }
18301
18302
18303
18304 for {
18305 t := v.Type
18306 n := v_0
18307 if v_1.Op != ssaop.OpConst64 {
18308 break
18309 }
18310 c := ssa.AuxIntToInt64(v_1.AuxInt)
18311 if !(c < 0 && c != -1<<63) {
18312 break
18313 }
18314 v.Reset(ssaop.OpMod64)
18315 v.Type = t
18316 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
18317 v0.AuxInt = ssa.Int64ToAuxInt(-c)
18318 v.AddArg2(n, v0)
18319 return true
18320 }
18321
18322
18323
18324 for {
18325 t := v.Type
18326 x := v_0
18327 if v_1.Op != ssaop.OpConst64 {
18328 break
18329 }
18330 c := ssa.AuxIntToInt64(v_1.AuxInt)
18331 if !(x.Op != ssaop.OpConst64 && (c > 0 || c == -1<<63)) {
18332 break
18333 }
18334 v.Reset(ssaop.OpSub64)
18335 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
18336 v1 := b.NewValue0(v.Pos, ssaop.OpDiv64, t)
18337 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
18338 v2.AuxInt = ssa.Int64ToAuxInt(c)
18339 v1.AddArg2(x, v2)
18340 v0.AddArg2(v1, v2)
18341 v.AddArg2(x, v0)
18342 return true
18343 }
18344 return false
18345 }
18346 func rewriteValue_OpMod64u(v *ssa.Value) bool {
18347 v_1 := v.Args[1]
18348 v_0 := v.Args[0]
18349 b := v.Block
18350
18351
18352
18353 for {
18354 if v_0.Op != ssaop.OpConst64 {
18355 break
18356 }
18357 c := ssa.AuxIntToInt64(v_0.AuxInt)
18358 if v_1.Op != ssaop.OpConst64 {
18359 break
18360 }
18361 d := ssa.AuxIntToInt64(v_1.AuxInt)
18362 if !(d != 0) {
18363 break
18364 }
18365 v.Reset(ssaop.OpConst64)
18366 v.AuxInt = ssa.Int64ToAuxInt(int64(uint64(c) % uint64(d)))
18367 return true
18368 }
18369
18370
18371
18372 for {
18373 t := v.Type
18374 n := v_0
18375 if v_1.Op != ssaop.OpConst64 {
18376 break
18377 }
18378 c := ssa.AuxIntToInt64(v_1.AuxInt)
18379 if !(ssa.IsPowerOfTwo(uint64(c))) {
18380 break
18381 }
18382 v.Reset(ssaop.OpAnd64)
18383 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
18384 v0.AuxInt = ssa.Int64ToAuxInt(c - 1)
18385 v.AddArg2(n, v0)
18386 return true
18387 }
18388
18389
18390
18391 for {
18392 t := v.Type
18393 x := v_0
18394 if v_1.Op != ssaop.OpConst64 {
18395 break
18396 }
18397 c := ssa.AuxIntToInt64(v_1.AuxInt)
18398 if !(x.Op != ssaop.OpConst64 && c != 0) {
18399 break
18400 }
18401 v.Reset(ssaop.OpSub64)
18402 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
18403 v1 := b.NewValue0(v.Pos, ssaop.OpDiv64u, t)
18404 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
18405 v2.AuxInt = ssa.Int64ToAuxInt(c)
18406 v1.AddArg2(x, v2)
18407 v0.AddArg2(v1, v2)
18408 v.AddArg2(x, v0)
18409 return true
18410 }
18411 return false
18412 }
18413 func rewriteValue_OpMod8(v *ssa.Value) bool {
18414 v_1 := v.Args[1]
18415 v_0 := v.Args[0]
18416 b := v.Block
18417
18418
18419
18420 for {
18421 if v_0.Op != ssaop.OpConst8 {
18422 break
18423 }
18424 c := ssa.AuxIntToInt8(v_0.AuxInt)
18425 if v_1.Op != ssaop.OpConst8 {
18426 break
18427 }
18428 d := ssa.AuxIntToInt8(v_1.AuxInt)
18429 if !(d != 0) {
18430 break
18431 }
18432 v.Reset(ssaop.OpConst8)
18433 v.AuxInt = ssa.Int8ToAuxInt(c % d)
18434 return true
18435 }
18436
18437
18438
18439 for {
18440 t := v.Type
18441 n := v_0
18442 if v_1.Op != ssaop.OpConst8 {
18443 break
18444 }
18445 c := ssa.AuxIntToInt8(v_1.AuxInt)
18446 if !(isNonNegative(n) && ssa.IsPowerOfTwo(c)) {
18447 break
18448 }
18449 v.Reset(ssaop.OpAnd8)
18450 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
18451 v0.AuxInt = ssa.Int8ToAuxInt(c - 1)
18452 v.AddArg2(n, v0)
18453 return true
18454 }
18455
18456
18457
18458 for {
18459 t := v.Type
18460 n := v_0
18461 if v_1.Op != ssaop.OpConst8 {
18462 break
18463 }
18464 c := ssa.AuxIntToInt8(v_1.AuxInt)
18465 if !(c < 0 && c != -1<<7) {
18466 break
18467 }
18468 v.Reset(ssaop.OpMod8)
18469 v.Type = t
18470 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
18471 v0.AuxInt = ssa.Int8ToAuxInt(-c)
18472 v.AddArg2(n, v0)
18473 return true
18474 }
18475
18476
18477
18478 for {
18479 t := v.Type
18480 x := v_0
18481 if v_1.Op != ssaop.OpConst8 {
18482 break
18483 }
18484 c := ssa.AuxIntToInt8(v_1.AuxInt)
18485 if !(x.Op != ssaop.OpConst8 && (c > 0 || c == -1<<7)) {
18486 break
18487 }
18488 v.Reset(ssaop.OpSub8)
18489 v0 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
18490 v1 := b.NewValue0(v.Pos, ssaop.OpDiv8, t)
18491 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
18492 v2.AuxInt = ssa.Int8ToAuxInt(c)
18493 v1.AddArg2(x, v2)
18494 v0.AddArg2(v1, v2)
18495 v.AddArg2(x, v0)
18496 return true
18497 }
18498 return false
18499 }
18500 func rewriteValue_OpMod8u(v *ssa.Value) bool {
18501 v_1 := v.Args[1]
18502 v_0 := v.Args[0]
18503 b := v.Block
18504
18505
18506
18507 for {
18508 if v_0.Op != ssaop.OpConst8 {
18509 break
18510 }
18511 c := ssa.AuxIntToInt8(v_0.AuxInt)
18512 if v_1.Op != ssaop.OpConst8 {
18513 break
18514 }
18515 d := ssa.AuxIntToInt8(v_1.AuxInt)
18516 if !(d != 0) {
18517 break
18518 }
18519 v.Reset(ssaop.OpConst8)
18520 v.AuxInt = ssa.Int8ToAuxInt(int8(uint8(c) % uint8(d)))
18521 return true
18522 }
18523
18524
18525
18526 for {
18527 t := v.Type
18528 n := v_0
18529 if v_1.Op != ssaop.OpConst8 {
18530 break
18531 }
18532 c := ssa.AuxIntToInt8(v_1.AuxInt)
18533 if !(ssa.IsPowerOfTwo(uint8(c))) {
18534 break
18535 }
18536 v.Reset(ssaop.OpAnd8)
18537 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
18538 v0.AuxInt = ssa.Int8ToAuxInt(c - 1)
18539 v.AddArg2(n, v0)
18540 return true
18541 }
18542
18543
18544
18545 for {
18546 t := v.Type
18547 x := v_0
18548 if v_1.Op != ssaop.OpConst8 {
18549 break
18550 }
18551 c := ssa.AuxIntToInt8(v_1.AuxInt)
18552 if !(x.Op != ssaop.OpConst8 && c != 0) {
18553 break
18554 }
18555 v.Reset(ssaop.OpSub8)
18556 v0 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
18557 v1 := b.NewValue0(v.Pos, ssaop.OpDiv8u, t)
18558 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
18559 v2.AuxInt = ssa.Int8ToAuxInt(c)
18560 v1.AddArg2(x, v2)
18561 v0.AddArg2(v1, v2)
18562 v.AddArg2(x, v0)
18563 return true
18564 }
18565 return false
18566 }
18567 func rewriteValue_OpMove(v *ssa.Value) bool {
18568 v_2 := v.Args[2]
18569 v_1 := v.Args[1]
18570 v_0 := v.Args[0]
18571 b := v.Block
18572 config := b.Func.Config
18573
18574
18575
18576 for {
18577 n := ssa.AuxIntToInt64(v.AuxInt)
18578 t := ssa.AuxToType(v.Aux)
18579 dst1 := v_0
18580 src := v_1
18581 mem := v_2
18582 if mem.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem.AuxInt) != n || ssa.AuxToType(mem.Aux) != t {
18583 break
18584 }
18585 dst2 := mem.Args[0]
18586 if !(ssa.IsSamePtr(src, dst2)) {
18587 break
18588 }
18589 v.Reset(ssaop.OpZero)
18590 v.AuxInt = ssa.Int64ToAuxInt(n)
18591 v.Aux = ssa.TypeToAux(t)
18592 v.AddArg2(dst1, mem)
18593 return true
18594 }
18595
18596
18597
18598 for {
18599 n := ssa.AuxIntToInt64(v.AuxInt)
18600 t := ssa.AuxToType(v.Aux)
18601 dst1 := v_0
18602 src := v_1
18603 mem := v_2
18604 if mem.Op != ssaop.OpVarDef {
18605 break
18606 }
18607 mem_0 := mem.Args[0]
18608 if mem_0.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_0.AuxInt) != n || ssa.AuxToType(mem_0.Aux) != t {
18609 break
18610 }
18611 dst0 := mem_0.Args[0]
18612 if !(ssa.IsSamePtr(src, dst0)) {
18613 break
18614 }
18615 v.Reset(ssaop.OpZero)
18616 v.AuxInt = ssa.Int64ToAuxInt(n)
18617 v.Aux = ssa.TypeToAux(t)
18618 v.AddArg2(dst1, mem)
18619 return true
18620 }
18621
18622
18623
18624 for {
18625 n := ssa.AuxIntToInt64(v.AuxInt)
18626 t := ssa.AuxToType(v.Aux)
18627 dst := v_0
18628 if v_1.Op != ssaop.OpAddr {
18629 break
18630 }
18631 sym := ssa.AuxToSym(v_1.Aux)
18632 v_1_0 := v_1.Args[0]
18633 if v_1_0.Op != ssaop.OpSB {
18634 break
18635 }
18636 mem := v_2
18637 if !(symIsROZero(sym)) {
18638 break
18639 }
18640 v.Reset(ssaop.OpZero)
18641 v.AuxInt = ssa.Int64ToAuxInt(n)
18642 v.Aux = ssa.TypeToAux(t)
18643 v.AddArg2(dst, mem)
18644 return true
18645 }
18646
18647
18648
18649 for {
18650 n := ssa.AuxIntToInt64(v.AuxInt)
18651 t1 := ssa.AuxToType(v.Aux)
18652 dst1 := v_0
18653 src1 := v_1
18654 store := v_2
18655 if store.Op != ssaop.OpStore {
18656 break
18657 }
18658 t2 := ssa.AuxToType(store.Aux)
18659 mem := store.Args[2]
18660 op1 := store.Args[0]
18661 if op1.Op != ssaop.OpOffPtr {
18662 break
18663 }
18664 o2 := ssa.AuxIntToInt64(op1.AuxInt)
18665 dst2 := op1.Args[0]
18666 if !(ssa.IsSamePtr(dst1, dst2) && store.Uses == 1 && n >= o2+t2.Size() && ssa.Disjoint1(src1, n, op1, t2.Size()) && ssa.Clobber(store)) {
18667 break
18668 }
18669 v.Reset(ssaop.OpMove)
18670 v.AuxInt = ssa.Int64ToAuxInt(n)
18671 v.Aux = ssa.TypeToAux(t1)
18672 v.AddArg3(dst1, src1, mem)
18673 return true
18674 }
18675
18676
18677
18678 for {
18679 n := ssa.AuxIntToInt64(v.AuxInt)
18680 t := ssa.AuxToType(v.Aux)
18681 dst1 := v_0
18682 src1 := v_1
18683 move := v_2
18684 if move.Op != ssaop.OpMove || ssa.AuxIntToInt64(move.AuxInt) != n || ssa.AuxToType(move.Aux) != t {
18685 break
18686 }
18687 mem := move.Args[2]
18688 dst2 := move.Args[0]
18689 if !(move.Uses == 1 && ssa.IsSamePtr(dst1, dst2) && ssa.Disjoint1(src1, n, dst2, n) && ssa.Clobber(move)) {
18690 break
18691 }
18692 v.Reset(ssaop.OpMove)
18693 v.AuxInt = ssa.Int64ToAuxInt(n)
18694 v.Aux = ssa.TypeToAux(t)
18695 v.AddArg3(dst1, src1, mem)
18696 return true
18697 }
18698
18699
18700
18701 for {
18702 n := ssa.AuxIntToInt64(v.AuxInt)
18703 t := ssa.AuxToType(v.Aux)
18704 dst1 := v_0
18705 src1 := v_1
18706 vardef := v_2
18707 if vardef.Op != ssaop.OpVarDef {
18708 break
18709 }
18710 x := ssa.AuxToSym(vardef.Aux)
18711 move := vardef.Args[0]
18712 if move.Op != ssaop.OpMove || ssa.AuxIntToInt64(move.AuxInt) != n || ssa.AuxToType(move.Aux) != t {
18713 break
18714 }
18715 mem := move.Args[2]
18716 dst2 := move.Args[0]
18717 if !(move.Uses == 1 && vardef.Uses == 1 && ssa.IsSamePtr(dst1, dst2) && ssa.Disjoint1(src1, n, dst2, n) && ssa.Clobber(move, vardef)) {
18718 break
18719 }
18720 v.Reset(ssaop.OpMove)
18721 v.AuxInt = ssa.Int64ToAuxInt(n)
18722 v.Aux = ssa.TypeToAux(t)
18723 v0 := b.NewValue0(v.Pos, ssaop.OpVarDef, types.TypeMem)
18724 v0.Aux = ssa.SymToAux(x)
18725 v0.AddArg(mem)
18726 v.AddArg3(dst1, src1, v0)
18727 return true
18728 }
18729
18730
18731
18732 for {
18733 n := ssa.AuxIntToInt64(v.AuxInt)
18734 t := ssa.AuxToType(v.Aux)
18735 dst1 := v_0
18736 src1 := v_1
18737 zero := v_2
18738 if zero.Op != ssaop.OpZero || ssa.AuxIntToInt64(zero.AuxInt) != n || ssa.AuxToType(zero.Aux) != t {
18739 break
18740 }
18741 mem := zero.Args[1]
18742 dst2 := zero.Args[0]
18743 if !(zero.Uses == 1 && ssa.IsSamePtr(dst1, dst2) && ssa.Disjoint1(src1, n, dst2, n) && ssa.Clobber(zero)) {
18744 break
18745 }
18746 v.Reset(ssaop.OpMove)
18747 v.AuxInt = ssa.Int64ToAuxInt(n)
18748 v.Aux = ssa.TypeToAux(t)
18749 v.AddArg3(dst1, src1, mem)
18750 return true
18751 }
18752
18753
18754
18755 for {
18756 n := ssa.AuxIntToInt64(v.AuxInt)
18757 t := ssa.AuxToType(v.Aux)
18758 dst1 := v_0
18759 src1 := v_1
18760 vardef := v_2
18761 if vardef.Op != ssaop.OpVarDef {
18762 break
18763 }
18764 x := ssa.AuxToSym(vardef.Aux)
18765 zero := vardef.Args[0]
18766 if zero.Op != ssaop.OpZero || ssa.AuxIntToInt64(zero.AuxInt) != n || ssa.AuxToType(zero.Aux) != t {
18767 break
18768 }
18769 mem := zero.Args[1]
18770 dst2 := zero.Args[0]
18771 if !(zero.Uses == 1 && vardef.Uses == 1 && ssa.IsSamePtr(dst1, dst2) && ssa.Disjoint1(src1, n, dst2, n) && ssa.Clobber(zero, vardef)) {
18772 break
18773 }
18774 v.Reset(ssaop.OpMove)
18775 v.AuxInt = ssa.Int64ToAuxInt(n)
18776 v.Aux = ssa.TypeToAux(t)
18777 v0 := b.NewValue0(v.Pos, ssaop.OpVarDef, types.TypeMem)
18778 v0.Aux = ssa.SymToAux(x)
18779 v0.AddArg(mem)
18780 v.AddArg3(dst1, src1, v0)
18781 return true
18782 }
18783
18784
18785
18786 for {
18787 n := ssa.AuxIntToInt64(v.AuxInt)
18788 t1 := ssa.AuxToType(v.Aux)
18789 dst := v_0
18790 p1 := v_1
18791 mem := v_2
18792 if mem.Op != ssaop.OpStore {
18793 break
18794 }
18795 t2 := ssa.AuxToType(mem.Aux)
18796 _ = mem.Args[2]
18797 op2 := mem.Args[0]
18798 if op2.Op != ssaop.OpOffPtr {
18799 break
18800 }
18801 tt2 := op2.Type
18802 o2 := ssa.AuxIntToInt64(op2.AuxInt)
18803 p2 := op2.Args[0]
18804 d1 := mem.Args[1]
18805 mem_2 := mem.Args[2]
18806 if mem_2.Op != ssaop.OpStore {
18807 break
18808 }
18809 t3 := ssa.AuxToType(mem_2.Aux)
18810 d2 := mem_2.Args[1]
18811 op3 := mem_2.Args[0]
18812 if op3.Op != ssaop.OpOffPtr {
18813 break
18814 }
18815 tt3 := op3.Type
18816 if ssa.AuxIntToInt64(op3.AuxInt) != 0 {
18817 break
18818 }
18819 p3 := op3.Args[0]
18820 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && registerizable(b, t2) && registerizable(b, t3) && o2 == t3.Size() && n == t2.Size()+t3.Size()) {
18821 break
18822 }
18823 v.Reset(ssaop.OpStore)
18824 v.Aux = ssa.TypeToAux(t2)
18825 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
18826 v0.AuxInt = ssa.Int64ToAuxInt(o2)
18827 v0.AddArg(dst)
18828 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
18829 v1.Aux = ssa.TypeToAux(t3)
18830 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
18831 v2.AuxInt = ssa.Int64ToAuxInt(0)
18832 v2.AddArg(dst)
18833 v1.AddArg3(v2, d2, mem)
18834 v.AddArg3(v0, d1, v1)
18835 return true
18836 }
18837
18838
18839
18840 for {
18841 n := ssa.AuxIntToInt64(v.AuxInt)
18842 t1 := ssa.AuxToType(v.Aux)
18843 dst := v_0
18844 p1 := v_1
18845 mem := v_2
18846 if mem.Op != ssaop.OpStore {
18847 break
18848 }
18849 t2 := ssa.AuxToType(mem.Aux)
18850 _ = mem.Args[2]
18851 op2 := mem.Args[0]
18852 if op2.Op != ssaop.OpOffPtr {
18853 break
18854 }
18855 tt2 := op2.Type
18856 o2 := ssa.AuxIntToInt64(op2.AuxInt)
18857 p2 := op2.Args[0]
18858 d1 := mem.Args[1]
18859 mem_2 := mem.Args[2]
18860 if mem_2.Op != ssaop.OpStore {
18861 break
18862 }
18863 t3 := ssa.AuxToType(mem_2.Aux)
18864 _ = mem_2.Args[2]
18865 op3 := mem_2.Args[0]
18866 if op3.Op != ssaop.OpOffPtr {
18867 break
18868 }
18869 tt3 := op3.Type
18870 o3 := ssa.AuxIntToInt64(op3.AuxInt)
18871 p3 := op3.Args[0]
18872 d2 := mem_2.Args[1]
18873 mem_2_2 := mem_2.Args[2]
18874 if mem_2_2.Op != ssaop.OpStore {
18875 break
18876 }
18877 t4 := ssa.AuxToType(mem_2_2.Aux)
18878 d3 := mem_2_2.Args[1]
18879 op4 := mem_2_2.Args[0]
18880 if op4.Op != ssaop.OpOffPtr {
18881 break
18882 }
18883 tt4 := op4.Type
18884 if ssa.AuxIntToInt64(op4.AuxInt) != 0 {
18885 break
18886 }
18887 p4 := op4.Args[0]
18888 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.IsSamePtr(p3, p4) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && t4.Alignment() <= t1.Alignment() && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && o3 == t4.Size() && o2-o3 == t3.Size() && n == t2.Size()+t3.Size()+t4.Size()) {
18889 break
18890 }
18891 v.Reset(ssaop.OpStore)
18892 v.Aux = ssa.TypeToAux(t2)
18893 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
18894 v0.AuxInt = ssa.Int64ToAuxInt(o2)
18895 v0.AddArg(dst)
18896 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
18897 v1.Aux = ssa.TypeToAux(t3)
18898 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
18899 v2.AuxInt = ssa.Int64ToAuxInt(o3)
18900 v2.AddArg(dst)
18901 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
18902 v3.Aux = ssa.TypeToAux(t4)
18903 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
18904 v4.AuxInt = ssa.Int64ToAuxInt(0)
18905 v4.AddArg(dst)
18906 v3.AddArg3(v4, d3, mem)
18907 v1.AddArg3(v2, d2, v3)
18908 v.AddArg3(v0, d1, v1)
18909 return true
18910 }
18911
18912
18913
18914 for {
18915 n := ssa.AuxIntToInt64(v.AuxInt)
18916 t1 := ssa.AuxToType(v.Aux)
18917 dst := v_0
18918 p1 := v_1
18919 mem := v_2
18920 if mem.Op != ssaop.OpStore {
18921 break
18922 }
18923 t2 := ssa.AuxToType(mem.Aux)
18924 _ = mem.Args[2]
18925 op2 := mem.Args[0]
18926 if op2.Op != ssaop.OpOffPtr {
18927 break
18928 }
18929 tt2 := op2.Type
18930 o2 := ssa.AuxIntToInt64(op2.AuxInt)
18931 p2 := op2.Args[0]
18932 d1 := mem.Args[1]
18933 mem_2 := mem.Args[2]
18934 if mem_2.Op != ssaop.OpStore {
18935 break
18936 }
18937 t3 := ssa.AuxToType(mem_2.Aux)
18938 _ = mem_2.Args[2]
18939 op3 := mem_2.Args[0]
18940 if op3.Op != ssaop.OpOffPtr {
18941 break
18942 }
18943 tt3 := op3.Type
18944 o3 := ssa.AuxIntToInt64(op3.AuxInt)
18945 p3 := op3.Args[0]
18946 d2 := mem_2.Args[1]
18947 mem_2_2 := mem_2.Args[2]
18948 if mem_2_2.Op != ssaop.OpStore {
18949 break
18950 }
18951 t4 := ssa.AuxToType(mem_2_2.Aux)
18952 _ = mem_2_2.Args[2]
18953 op4 := mem_2_2.Args[0]
18954 if op4.Op != ssaop.OpOffPtr {
18955 break
18956 }
18957 tt4 := op4.Type
18958 o4 := ssa.AuxIntToInt64(op4.AuxInt)
18959 p4 := op4.Args[0]
18960 d3 := mem_2_2.Args[1]
18961 mem_2_2_2 := mem_2_2.Args[2]
18962 if mem_2_2_2.Op != ssaop.OpStore {
18963 break
18964 }
18965 t5 := ssa.AuxToType(mem_2_2_2.Aux)
18966 d4 := mem_2_2_2.Args[1]
18967 op5 := mem_2_2_2.Args[0]
18968 if op5.Op != ssaop.OpOffPtr {
18969 break
18970 }
18971 tt5 := op5.Type
18972 if ssa.AuxIntToInt64(op5.AuxInt) != 0 {
18973 break
18974 }
18975 p5 := op5.Args[0]
18976 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.IsSamePtr(p3, p4) && ssa.IsSamePtr(p4, p5) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && t4.Alignment() <= t1.Alignment() && t5.Alignment() <= t1.Alignment() && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && registerizable(b, t5) && o4 == t5.Size() && o3-o4 == t4.Size() && o2-o3 == t3.Size() && n == t2.Size()+t3.Size()+t4.Size()+t5.Size()) {
18977 break
18978 }
18979 v.Reset(ssaop.OpStore)
18980 v.Aux = ssa.TypeToAux(t2)
18981 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
18982 v0.AuxInt = ssa.Int64ToAuxInt(o2)
18983 v0.AddArg(dst)
18984 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
18985 v1.Aux = ssa.TypeToAux(t3)
18986 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
18987 v2.AuxInt = ssa.Int64ToAuxInt(o3)
18988 v2.AddArg(dst)
18989 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
18990 v3.Aux = ssa.TypeToAux(t4)
18991 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
18992 v4.AuxInt = ssa.Int64ToAuxInt(o4)
18993 v4.AddArg(dst)
18994 v5 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
18995 v5.Aux = ssa.TypeToAux(t5)
18996 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt5)
18997 v6.AuxInt = ssa.Int64ToAuxInt(0)
18998 v6.AddArg(dst)
18999 v5.AddArg3(v6, d4, mem)
19000 v3.AddArg3(v4, d3, v5)
19001 v1.AddArg3(v2, d2, v3)
19002 v.AddArg3(v0, d1, v1)
19003 return true
19004 }
19005
19006
19007
19008 for {
19009 n := ssa.AuxIntToInt64(v.AuxInt)
19010 t1 := ssa.AuxToType(v.Aux)
19011 dst := v_0
19012 p1 := v_1
19013 mem := v_2
19014 if mem.Op != ssaop.OpVarDef {
19015 break
19016 }
19017 mem_0 := mem.Args[0]
19018 if mem_0.Op != ssaop.OpStore {
19019 break
19020 }
19021 t2 := ssa.AuxToType(mem_0.Aux)
19022 _ = mem_0.Args[2]
19023 op2 := mem_0.Args[0]
19024 if op2.Op != ssaop.OpOffPtr {
19025 break
19026 }
19027 tt2 := op2.Type
19028 o2 := ssa.AuxIntToInt64(op2.AuxInt)
19029 p2 := op2.Args[0]
19030 d1 := mem_0.Args[1]
19031 mem_0_2 := mem_0.Args[2]
19032 if mem_0_2.Op != ssaop.OpStore {
19033 break
19034 }
19035 t3 := ssa.AuxToType(mem_0_2.Aux)
19036 d2 := mem_0_2.Args[1]
19037 op3 := mem_0_2.Args[0]
19038 if op3.Op != ssaop.OpOffPtr {
19039 break
19040 }
19041 tt3 := op3.Type
19042 if ssa.AuxIntToInt64(op3.AuxInt) != 0 {
19043 break
19044 }
19045 p3 := op3.Args[0]
19046 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && registerizable(b, t2) && registerizable(b, t3) && o2 == t3.Size() && n == t2.Size()+t3.Size()) {
19047 break
19048 }
19049 v.Reset(ssaop.OpStore)
19050 v.Aux = ssa.TypeToAux(t2)
19051 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19052 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19053 v0.AddArg(dst)
19054 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19055 v1.Aux = ssa.TypeToAux(t3)
19056 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19057 v2.AuxInt = ssa.Int64ToAuxInt(0)
19058 v2.AddArg(dst)
19059 v1.AddArg3(v2, d2, mem)
19060 v.AddArg3(v0, d1, v1)
19061 return true
19062 }
19063
19064
19065
19066 for {
19067 n := ssa.AuxIntToInt64(v.AuxInt)
19068 t1 := ssa.AuxToType(v.Aux)
19069 dst := v_0
19070 p1 := v_1
19071 mem := v_2
19072 if mem.Op != ssaop.OpVarDef {
19073 break
19074 }
19075 mem_0 := mem.Args[0]
19076 if mem_0.Op != ssaop.OpStore {
19077 break
19078 }
19079 t2 := ssa.AuxToType(mem_0.Aux)
19080 _ = mem_0.Args[2]
19081 op2 := mem_0.Args[0]
19082 if op2.Op != ssaop.OpOffPtr {
19083 break
19084 }
19085 tt2 := op2.Type
19086 o2 := ssa.AuxIntToInt64(op2.AuxInt)
19087 p2 := op2.Args[0]
19088 d1 := mem_0.Args[1]
19089 mem_0_2 := mem_0.Args[2]
19090 if mem_0_2.Op != ssaop.OpStore {
19091 break
19092 }
19093 t3 := ssa.AuxToType(mem_0_2.Aux)
19094 _ = mem_0_2.Args[2]
19095 op3 := mem_0_2.Args[0]
19096 if op3.Op != ssaop.OpOffPtr {
19097 break
19098 }
19099 tt3 := op3.Type
19100 o3 := ssa.AuxIntToInt64(op3.AuxInt)
19101 p3 := op3.Args[0]
19102 d2 := mem_0_2.Args[1]
19103 mem_0_2_2 := mem_0_2.Args[2]
19104 if mem_0_2_2.Op != ssaop.OpStore {
19105 break
19106 }
19107 t4 := ssa.AuxToType(mem_0_2_2.Aux)
19108 d3 := mem_0_2_2.Args[1]
19109 op4 := mem_0_2_2.Args[0]
19110 if op4.Op != ssaop.OpOffPtr {
19111 break
19112 }
19113 tt4 := op4.Type
19114 if ssa.AuxIntToInt64(op4.AuxInt) != 0 {
19115 break
19116 }
19117 p4 := op4.Args[0]
19118 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.IsSamePtr(p3, p4) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && t4.Alignment() <= t1.Alignment() && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && o3 == t4.Size() && o2-o3 == t3.Size() && n == t2.Size()+t3.Size()+t4.Size()) {
19119 break
19120 }
19121 v.Reset(ssaop.OpStore)
19122 v.Aux = ssa.TypeToAux(t2)
19123 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19124 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19125 v0.AddArg(dst)
19126 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19127 v1.Aux = ssa.TypeToAux(t3)
19128 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19129 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19130 v2.AddArg(dst)
19131 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19132 v3.Aux = ssa.TypeToAux(t4)
19133 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
19134 v4.AuxInt = ssa.Int64ToAuxInt(0)
19135 v4.AddArg(dst)
19136 v3.AddArg3(v4, d3, mem)
19137 v1.AddArg3(v2, d2, v3)
19138 v.AddArg3(v0, d1, v1)
19139 return true
19140 }
19141
19142
19143
19144 for {
19145 n := ssa.AuxIntToInt64(v.AuxInt)
19146 t1 := ssa.AuxToType(v.Aux)
19147 dst := v_0
19148 p1 := v_1
19149 mem := v_2
19150 if mem.Op != ssaop.OpVarDef {
19151 break
19152 }
19153 mem_0 := mem.Args[0]
19154 if mem_0.Op != ssaop.OpStore {
19155 break
19156 }
19157 t2 := ssa.AuxToType(mem_0.Aux)
19158 _ = mem_0.Args[2]
19159 op2 := mem_0.Args[0]
19160 if op2.Op != ssaop.OpOffPtr {
19161 break
19162 }
19163 tt2 := op2.Type
19164 o2 := ssa.AuxIntToInt64(op2.AuxInt)
19165 p2 := op2.Args[0]
19166 d1 := mem_0.Args[1]
19167 mem_0_2 := mem_0.Args[2]
19168 if mem_0_2.Op != ssaop.OpStore {
19169 break
19170 }
19171 t3 := ssa.AuxToType(mem_0_2.Aux)
19172 _ = mem_0_2.Args[2]
19173 op3 := mem_0_2.Args[0]
19174 if op3.Op != ssaop.OpOffPtr {
19175 break
19176 }
19177 tt3 := op3.Type
19178 o3 := ssa.AuxIntToInt64(op3.AuxInt)
19179 p3 := op3.Args[0]
19180 d2 := mem_0_2.Args[1]
19181 mem_0_2_2 := mem_0_2.Args[2]
19182 if mem_0_2_2.Op != ssaop.OpStore {
19183 break
19184 }
19185 t4 := ssa.AuxToType(mem_0_2_2.Aux)
19186 _ = mem_0_2_2.Args[2]
19187 op4 := mem_0_2_2.Args[0]
19188 if op4.Op != ssaop.OpOffPtr {
19189 break
19190 }
19191 tt4 := op4.Type
19192 o4 := ssa.AuxIntToInt64(op4.AuxInt)
19193 p4 := op4.Args[0]
19194 d3 := mem_0_2_2.Args[1]
19195 mem_0_2_2_2 := mem_0_2_2.Args[2]
19196 if mem_0_2_2_2.Op != ssaop.OpStore {
19197 break
19198 }
19199 t5 := ssa.AuxToType(mem_0_2_2_2.Aux)
19200 d4 := mem_0_2_2_2.Args[1]
19201 op5 := mem_0_2_2_2.Args[0]
19202 if op5.Op != ssaop.OpOffPtr {
19203 break
19204 }
19205 tt5 := op5.Type
19206 if ssa.AuxIntToInt64(op5.AuxInt) != 0 {
19207 break
19208 }
19209 p5 := op5.Args[0]
19210 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.IsSamePtr(p3, p4) && ssa.IsSamePtr(p4, p5) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && t4.Alignment() <= t1.Alignment() && t5.Alignment() <= t1.Alignment() && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && registerizable(b, t5) && o4 == t5.Size() && o3-o4 == t4.Size() && o2-o3 == t3.Size() && n == t2.Size()+t3.Size()+t4.Size()+t5.Size()) {
19211 break
19212 }
19213 v.Reset(ssaop.OpStore)
19214 v.Aux = ssa.TypeToAux(t2)
19215 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19216 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19217 v0.AddArg(dst)
19218 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19219 v1.Aux = ssa.TypeToAux(t3)
19220 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19221 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19222 v2.AddArg(dst)
19223 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19224 v3.Aux = ssa.TypeToAux(t4)
19225 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
19226 v4.AuxInt = ssa.Int64ToAuxInt(o4)
19227 v4.AddArg(dst)
19228 v5 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19229 v5.Aux = ssa.TypeToAux(t5)
19230 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt5)
19231 v6.AuxInt = ssa.Int64ToAuxInt(0)
19232 v6.AddArg(dst)
19233 v5.AddArg3(v6, d4, mem)
19234 v3.AddArg3(v4, d3, v5)
19235 v1.AddArg3(v2, d2, v3)
19236 v.AddArg3(v0, d1, v1)
19237 return true
19238 }
19239
19240
19241
19242 for {
19243 n := ssa.AuxIntToInt64(v.AuxInt)
19244 t1 := ssa.AuxToType(v.Aux)
19245 dst := v_0
19246 p1 := v_1
19247 mem := v_2
19248 if mem.Op != ssaop.OpStore {
19249 break
19250 }
19251 t2 := ssa.AuxToType(mem.Aux)
19252 _ = mem.Args[2]
19253 op2 := mem.Args[0]
19254 if op2.Op != ssaop.OpOffPtr {
19255 break
19256 }
19257 tt2 := op2.Type
19258 o2 := ssa.AuxIntToInt64(op2.AuxInt)
19259 p2 := op2.Args[0]
19260 d1 := mem.Args[1]
19261 mem_2 := mem.Args[2]
19262 if mem_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_2.AuxInt) != n {
19263 break
19264 }
19265 t3 := ssa.AuxToType(mem_2.Aux)
19266 p3 := mem_2.Args[0]
19267 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && registerizable(b, t2) && n >= o2+t2.Size()) {
19268 break
19269 }
19270 v.Reset(ssaop.OpStore)
19271 v.Aux = ssa.TypeToAux(t2)
19272 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19273 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19274 v0.AddArg(dst)
19275 v1 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19276 v1.AuxInt = ssa.Int64ToAuxInt(n)
19277 v1.Aux = ssa.TypeToAux(t1)
19278 v1.AddArg2(dst, mem)
19279 v.AddArg3(v0, d1, v1)
19280 return true
19281 }
19282
19283
19284
19285 for {
19286 n := ssa.AuxIntToInt64(v.AuxInt)
19287 t1 := ssa.AuxToType(v.Aux)
19288 dst := v_0
19289 p1 := v_1
19290 mem := v_2
19291 if mem.Op != ssaop.OpStore {
19292 break
19293 }
19294 t2 := ssa.AuxToType(mem.Aux)
19295 _ = mem.Args[2]
19296 mem_0 := mem.Args[0]
19297 if mem_0.Op != ssaop.OpOffPtr {
19298 break
19299 }
19300 tt2 := mem_0.Type
19301 o2 := ssa.AuxIntToInt64(mem_0.AuxInt)
19302 p2 := mem_0.Args[0]
19303 d1 := mem.Args[1]
19304 mem_2 := mem.Args[2]
19305 if mem_2.Op != ssaop.OpStore {
19306 break
19307 }
19308 t3 := ssa.AuxToType(mem_2.Aux)
19309 _ = mem_2.Args[2]
19310 mem_2_0 := mem_2.Args[0]
19311 if mem_2_0.Op != ssaop.OpOffPtr {
19312 break
19313 }
19314 tt3 := mem_2_0.Type
19315 o3 := ssa.AuxIntToInt64(mem_2_0.AuxInt)
19316 p3 := mem_2_0.Args[0]
19317 d2 := mem_2.Args[1]
19318 mem_2_2 := mem_2.Args[2]
19319 if mem_2_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_2_2.AuxInt) != n {
19320 break
19321 }
19322 t4 := ssa.AuxToType(mem_2_2.Aux)
19323 p4 := mem_2_2.Args[0]
19324 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.IsSamePtr(p3, p4) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && t4.Alignment() <= t1.Alignment() && registerizable(b, t2) && registerizable(b, t3) && n >= o2+t2.Size() && n >= o3+t3.Size()) {
19325 break
19326 }
19327 v.Reset(ssaop.OpStore)
19328 v.Aux = ssa.TypeToAux(t2)
19329 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19330 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19331 v0.AddArg(dst)
19332 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19333 v1.Aux = ssa.TypeToAux(t3)
19334 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19335 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19336 v2.AddArg(dst)
19337 v3 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19338 v3.AuxInt = ssa.Int64ToAuxInt(n)
19339 v3.Aux = ssa.TypeToAux(t1)
19340 v3.AddArg2(dst, mem)
19341 v1.AddArg3(v2, d2, v3)
19342 v.AddArg3(v0, d1, v1)
19343 return true
19344 }
19345
19346
19347
19348 for {
19349 n := ssa.AuxIntToInt64(v.AuxInt)
19350 t1 := ssa.AuxToType(v.Aux)
19351 dst := v_0
19352 p1 := v_1
19353 mem := v_2
19354 if mem.Op != ssaop.OpStore {
19355 break
19356 }
19357 t2 := ssa.AuxToType(mem.Aux)
19358 _ = mem.Args[2]
19359 mem_0 := mem.Args[0]
19360 if mem_0.Op != ssaop.OpOffPtr {
19361 break
19362 }
19363 tt2 := mem_0.Type
19364 o2 := ssa.AuxIntToInt64(mem_0.AuxInt)
19365 p2 := mem_0.Args[0]
19366 d1 := mem.Args[1]
19367 mem_2 := mem.Args[2]
19368 if mem_2.Op != ssaop.OpStore {
19369 break
19370 }
19371 t3 := ssa.AuxToType(mem_2.Aux)
19372 _ = mem_2.Args[2]
19373 mem_2_0 := mem_2.Args[0]
19374 if mem_2_0.Op != ssaop.OpOffPtr {
19375 break
19376 }
19377 tt3 := mem_2_0.Type
19378 o3 := ssa.AuxIntToInt64(mem_2_0.AuxInt)
19379 p3 := mem_2_0.Args[0]
19380 d2 := mem_2.Args[1]
19381 mem_2_2 := mem_2.Args[2]
19382 if mem_2_2.Op != ssaop.OpStore {
19383 break
19384 }
19385 t4 := ssa.AuxToType(mem_2_2.Aux)
19386 _ = mem_2_2.Args[2]
19387 mem_2_2_0 := mem_2_2.Args[0]
19388 if mem_2_2_0.Op != ssaop.OpOffPtr {
19389 break
19390 }
19391 tt4 := mem_2_2_0.Type
19392 o4 := ssa.AuxIntToInt64(mem_2_2_0.AuxInt)
19393 p4 := mem_2_2_0.Args[0]
19394 d3 := mem_2_2.Args[1]
19395 mem_2_2_2 := mem_2_2.Args[2]
19396 if mem_2_2_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_2_2_2.AuxInt) != n {
19397 break
19398 }
19399 t5 := ssa.AuxToType(mem_2_2_2.Aux)
19400 p5 := mem_2_2_2.Args[0]
19401 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.IsSamePtr(p3, p4) && ssa.IsSamePtr(p4, p5) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && t4.Alignment() <= t1.Alignment() && t5.Alignment() <= t1.Alignment() && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && n >= o2+t2.Size() && n >= o3+t3.Size() && n >= o4+t4.Size()) {
19402 break
19403 }
19404 v.Reset(ssaop.OpStore)
19405 v.Aux = ssa.TypeToAux(t2)
19406 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19407 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19408 v0.AddArg(dst)
19409 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19410 v1.Aux = ssa.TypeToAux(t3)
19411 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19412 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19413 v2.AddArg(dst)
19414 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19415 v3.Aux = ssa.TypeToAux(t4)
19416 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
19417 v4.AuxInt = ssa.Int64ToAuxInt(o4)
19418 v4.AddArg(dst)
19419 v5 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19420 v5.AuxInt = ssa.Int64ToAuxInt(n)
19421 v5.Aux = ssa.TypeToAux(t1)
19422 v5.AddArg2(dst, mem)
19423 v3.AddArg3(v4, d3, v5)
19424 v1.AddArg3(v2, d2, v3)
19425 v.AddArg3(v0, d1, v1)
19426 return true
19427 }
19428
19429
19430
19431 for {
19432 n := ssa.AuxIntToInt64(v.AuxInt)
19433 t1 := ssa.AuxToType(v.Aux)
19434 dst := v_0
19435 p1 := v_1
19436 mem := v_2
19437 if mem.Op != ssaop.OpStore {
19438 break
19439 }
19440 t2 := ssa.AuxToType(mem.Aux)
19441 _ = mem.Args[2]
19442 mem_0 := mem.Args[0]
19443 if mem_0.Op != ssaop.OpOffPtr {
19444 break
19445 }
19446 tt2 := mem_0.Type
19447 o2 := ssa.AuxIntToInt64(mem_0.AuxInt)
19448 p2 := mem_0.Args[0]
19449 d1 := mem.Args[1]
19450 mem_2 := mem.Args[2]
19451 if mem_2.Op != ssaop.OpStore {
19452 break
19453 }
19454 t3 := ssa.AuxToType(mem_2.Aux)
19455 _ = mem_2.Args[2]
19456 mem_2_0 := mem_2.Args[0]
19457 if mem_2_0.Op != ssaop.OpOffPtr {
19458 break
19459 }
19460 tt3 := mem_2_0.Type
19461 o3 := ssa.AuxIntToInt64(mem_2_0.AuxInt)
19462 p3 := mem_2_0.Args[0]
19463 d2 := mem_2.Args[1]
19464 mem_2_2 := mem_2.Args[2]
19465 if mem_2_2.Op != ssaop.OpStore {
19466 break
19467 }
19468 t4 := ssa.AuxToType(mem_2_2.Aux)
19469 _ = mem_2_2.Args[2]
19470 mem_2_2_0 := mem_2_2.Args[0]
19471 if mem_2_2_0.Op != ssaop.OpOffPtr {
19472 break
19473 }
19474 tt4 := mem_2_2_0.Type
19475 o4 := ssa.AuxIntToInt64(mem_2_2_0.AuxInt)
19476 p4 := mem_2_2_0.Args[0]
19477 d3 := mem_2_2.Args[1]
19478 mem_2_2_2 := mem_2_2.Args[2]
19479 if mem_2_2_2.Op != ssaop.OpStore {
19480 break
19481 }
19482 t5 := ssa.AuxToType(mem_2_2_2.Aux)
19483 _ = mem_2_2_2.Args[2]
19484 mem_2_2_2_0 := mem_2_2_2.Args[0]
19485 if mem_2_2_2_0.Op != ssaop.OpOffPtr {
19486 break
19487 }
19488 tt5 := mem_2_2_2_0.Type
19489 o5 := ssa.AuxIntToInt64(mem_2_2_2_0.AuxInt)
19490 p5 := mem_2_2_2_0.Args[0]
19491 d4 := mem_2_2_2.Args[1]
19492 mem_2_2_2_2 := mem_2_2_2.Args[2]
19493 if mem_2_2_2_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_2_2_2_2.AuxInt) != n {
19494 break
19495 }
19496 t6 := ssa.AuxToType(mem_2_2_2_2.Aux)
19497 p6 := mem_2_2_2_2.Args[0]
19498 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.IsSamePtr(p3, p4) && ssa.IsSamePtr(p4, p5) && ssa.IsSamePtr(p5, p6) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && t4.Alignment() <= t1.Alignment() && t5.Alignment() <= t1.Alignment() && t6.Alignment() <= t1.Alignment() && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && registerizable(b, t5) && n >= o2+t2.Size() && n >= o3+t3.Size() && n >= o4+t4.Size() && n >= o5+t5.Size()) {
19499 break
19500 }
19501 v.Reset(ssaop.OpStore)
19502 v.Aux = ssa.TypeToAux(t2)
19503 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19504 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19505 v0.AddArg(dst)
19506 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19507 v1.Aux = ssa.TypeToAux(t3)
19508 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19509 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19510 v2.AddArg(dst)
19511 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19512 v3.Aux = ssa.TypeToAux(t4)
19513 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
19514 v4.AuxInt = ssa.Int64ToAuxInt(o4)
19515 v4.AddArg(dst)
19516 v5 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19517 v5.Aux = ssa.TypeToAux(t5)
19518 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt5)
19519 v6.AuxInt = ssa.Int64ToAuxInt(o5)
19520 v6.AddArg(dst)
19521 v7 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19522 v7.AuxInt = ssa.Int64ToAuxInt(n)
19523 v7.Aux = ssa.TypeToAux(t1)
19524 v7.AddArg2(dst, mem)
19525 v5.AddArg3(v6, d4, v7)
19526 v3.AddArg3(v4, d3, v5)
19527 v1.AddArg3(v2, d2, v3)
19528 v.AddArg3(v0, d1, v1)
19529 return true
19530 }
19531
19532
19533
19534 for {
19535 n := ssa.AuxIntToInt64(v.AuxInt)
19536 t1 := ssa.AuxToType(v.Aux)
19537 dst := v_0
19538 p1 := v_1
19539 mem := v_2
19540 if mem.Op != ssaop.OpVarDef {
19541 break
19542 }
19543 mem_0 := mem.Args[0]
19544 if mem_0.Op != ssaop.OpStore {
19545 break
19546 }
19547 t2 := ssa.AuxToType(mem_0.Aux)
19548 _ = mem_0.Args[2]
19549 op2 := mem_0.Args[0]
19550 if op2.Op != ssaop.OpOffPtr {
19551 break
19552 }
19553 tt2 := op2.Type
19554 o2 := ssa.AuxIntToInt64(op2.AuxInt)
19555 p2 := op2.Args[0]
19556 d1 := mem_0.Args[1]
19557 mem_0_2 := mem_0.Args[2]
19558 if mem_0_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_0_2.AuxInt) != n {
19559 break
19560 }
19561 t3 := ssa.AuxToType(mem_0_2.Aux)
19562 p3 := mem_0_2.Args[0]
19563 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && registerizable(b, t2) && n >= o2+t2.Size()) {
19564 break
19565 }
19566 v.Reset(ssaop.OpStore)
19567 v.Aux = ssa.TypeToAux(t2)
19568 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19569 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19570 v0.AddArg(dst)
19571 v1 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19572 v1.AuxInt = ssa.Int64ToAuxInt(n)
19573 v1.Aux = ssa.TypeToAux(t1)
19574 v1.AddArg2(dst, mem)
19575 v.AddArg3(v0, d1, v1)
19576 return true
19577 }
19578
19579
19580
19581 for {
19582 n := ssa.AuxIntToInt64(v.AuxInt)
19583 t1 := ssa.AuxToType(v.Aux)
19584 dst := v_0
19585 p1 := v_1
19586 mem := v_2
19587 if mem.Op != ssaop.OpVarDef {
19588 break
19589 }
19590 mem_0 := mem.Args[0]
19591 if mem_0.Op != ssaop.OpStore {
19592 break
19593 }
19594 t2 := ssa.AuxToType(mem_0.Aux)
19595 _ = mem_0.Args[2]
19596 mem_0_0 := mem_0.Args[0]
19597 if mem_0_0.Op != ssaop.OpOffPtr {
19598 break
19599 }
19600 tt2 := mem_0_0.Type
19601 o2 := ssa.AuxIntToInt64(mem_0_0.AuxInt)
19602 p2 := mem_0_0.Args[0]
19603 d1 := mem_0.Args[1]
19604 mem_0_2 := mem_0.Args[2]
19605 if mem_0_2.Op != ssaop.OpStore {
19606 break
19607 }
19608 t3 := ssa.AuxToType(mem_0_2.Aux)
19609 _ = mem_0_2.Args[2]
19610 mem_0_2_0 := mem_0_2.Args[0]
19611 if mem_0_2_0.Op != ssaop.OpOffPtr {
19612 break
19613 }
19614 tt3 := mem_0_2_0.Type
19615 o3 := ssa.AuxIntToInt64(mem_0_2_0.AuxInt)
19616 p3 := mem_0_2_0.Args[0]
19617 d2 := mem_0_2.Args[1]
19618 mem_0_2_2 := mem_0_2.Args[2]
19619 if mem_0_2_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_0_2_2.AuxInt) != n {
19620 break
19621 }
19622 t4 := ssa.AuxToType(mem_0_2_2.Aux)
19623 p4 := mem_0_2_2.Args[0]
19624 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.IsSamePtr(p3, p4) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && t4.Alignment() <= t1.Alignment() && registerizable(b, t2) && registerizable(b, t3) && n >= o2+t2.Size() && n >= o3+t3.Size()) {
19625 break
19626 }
19627 v.Reset(ssaop.OpStore)
19628 v.Aux = ssa.TypeToAux(t2)
19629 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19630 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19631 v0.AddArg(dst)
19632 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19633 v1.Aux = ssa.TypeToAux(t3)
19634 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19635 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19636 v2.AddArg(dst)
19637 v3 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19638 v3.AuxInt = ssa.Int64ToAuxInt(n)
19639 v3.Aux = ssa.TypeToAux(t1)
19640 v3.AddArg2(dst, mem)
19641 v1.AddArg3(v2, d2, v3)
19642 v.AddArg3(v0, d1, v1)
19643 return true
19644 }
19645
19646
19647
19648 for {
19649 n := ssa.AuxIntToInt64(v.AuxInt)
19650 t1 := ssa.AuxToType(v.Aux)
19651 dst := v_0
19652 p1 := v_1
19653 mem := v_2
19654 if mem.Op != ssaop.OpVarDef {
19655 break
19656 }
19657 mem_0 := mem.Args[0]
19658 if mem_0.Op != ssaop.OpStore {
19659 break
19660 }
19661 t2 := ssa.AuxToType(mem_0.Aux)
19662 _ = mem_0.Args[2]
19663 mem_0_0 := mem_0.Args[0]
19664 if mem_0_0.Op != ssaop.OpOffPtr {
19665 break
19666 }
19667 tt2 := mem_0_0.Type
19668 o2 := ssa.AuxIntToInt64(mem_0_0.AuxInt)
19669 p2 := mem_0_0.Args[0]
19670 d1 := mem_0.Args[1]
19671 mem_0_2 := mem_0.Args[2]
19672 if mem_0_2.Op != ssaop.OpStore {
19673 break
19674 }
19675 t3 := ssa.AuxToType(mem_0_2.Aux)
19676 _ = mem_0_2.Args[2]
19677 mem_0_2_0 := mem_0_2.Args[0]
19678 if mem_0_2_0.Op != ssaop.OpOffPtr {
19679 break
19680 }
19681 tt3 := mem_0_2_0.Type
19682 o3 := ssa.AuxIntToInt64(mem_0_2_0.AuxInt)
19683 p3 := mem_0_2_0.Args[0]
19684 d2 := mem_0_2.Args[1]
19685 mem_0_2_2 := mem_0_2.Args[2]
19686 if mem_0_2_2.Op != ssaop.OpStore {
19687 break
19688 }
19689 t4 := ssa.AuxToType(mem_0_2_2.Aux)
19690 _ = mem_0_2_2.Args[2]
19691 mem_0_2_2_0 := mem_0_2_2.Args[0]
19692 if mem_0_2_2_0.Op != ssaop.OpOffPtr {
19693 break
19694 }
19695 tt4 := mem_0_2_2_0.Type
19696 o4 := ssa.AuxIntToInt64(mem_0_2_2_0.AuxInt)
19697 p4 := mem_0_2_2_0.Args[0]
19698 d3 := mem_0_2_2.Args[1]
19699 mem_0_2_2_2 := mem_0_2_2.Args[2]
19700 if mem_0_2_2_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_0_2_2_2.AuxInt) != n {
19701 break
19702 }
19703 t5 := ssa.AuxToType(mem_0_2_2_2.Aux)
19704 p5 := mem_0_2_2_2.Args[0]
19705 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.IsSamePtr(p3, p4) && ssa.IsSamePtr(p4, p5) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && t4.Alignment() <= t1.Alignment() && t5.Alignment() <= t1.Alignment() && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && n >= o2+t2.Size() && n >= o3+t3.Size() && n >= o4+t4.Size()) {
19706 break
19707 }
19708 v.Reset(ssaop.OpStore)
19709 v.Aux = ssa.TypeToAux(t2)
19710 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19711 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19712 v0.AddArg(dst)
19713 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19714 v1.Aux = ssa.TypeToAux(t3)
19715 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19716 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19717 v2.AddArg(dst)
19718 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19719 v3.Aux = ssa.TypeToAux(t4)
19720 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
19721 v4.AuxInt = ssa.Int64ToAuxInt(o4)
19722 v4.AddArg(dst)
19723 v5 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19724 v5.AuxInt = ssa.Int64ToAuxInt(n)
19725 v5.Aux = ssa.TypeToAux(t1)
19726 v5.AddArg2(dst, mem)
19727 v3.AddArg3(v4, d3, v5)
19728 v1.AddArg3(v2, d2, v3)
19729 v.AddArg3(v0, d1, v1)
19730 return true
19731 }
19732
19733
19734
19735 for {
19736 n := ssa.AuxIntToInt64(v.AuxInt)
19737 t1 := ssa.AuxToType(v.Aux)
19738 dst := v_0
19739 p1 := v_1
19740 mem := v_2
19741 if mem.Op != ssaop.OpVarDef {
19742 break
19743 }
19744 mem_0 := mem.Args[0]
19745 if mem_0.Op != ssaop.OpStore {
19746 break
19747 }
19748 t2 := ssa.AuxToType(mem_0.Aux)
19749 _ = mem_0.Args[2]
19750 mem_0_0 := mem_0.Args[0]
19751 if mem_0_0.Op != ssaop.OpOffPtr {
19752 break
19753 }
19754 tt2 := mem_0_0.Type
19755 o2 := ssa.AuxIntToInt64(mem_0_0.AuxInt)
19756 p2 := mem_0_0.Args[0]
19757 d1 := mem_0.Args[1]
19758 mem_0_2 := mem_0.Args[2]
19759 if mem_0_2.Op != ssaop.OpStore {
19760 break
19761 }
19762 t3 := ssa.AuxToType(mem_0_2.Aux)
19763 _ = mem_0_2.Args[2]
19764 mem_0_2_0 := mem_0_2.Args[0]
19765 if mem_0_2_0.Op != ssaop.OpOffPtr {
19766 break
19767 }
19768 tt3 := mem_0_2_0.Type
19769 o3 := ssa.AuxIntToInt64(mem_0_2_0.AuxInt)
19770 p3 := mem_0_2_0.Args[0]
19771 d2 := mem_0_2.Args[1]
19772 mem_0_2_2 := mem_0_2.Args[2]
19773 if mem_0_2_2.Op != ssaop.OpStore {
19774 break
19775 }
19776 t4 := ssa.AuxToType(mem_0_2_2.Aux)
19777 _ = mem_0_2_2.Args[2]
19778 mem_0_2_2_0 := mem_0_2_2.Args[0]
19779 if mem_0_2_2_0.Op != ssaop.OpOffPtr {
19780 break
19781 }
19782 tt4 := mem_0_2_2_0.Type
19783 o4 := ssa.AuxIntToInt64(mem_0_2_2_0.AuxInt)
19784 p4 := mem_0_2_2_0.Args[0]
19785 d3 := mem_0_2_2.Args[1]
19786 mem_0_2_2_2 := mem_0_2_2.Args[2]
19787 if mem_0_2_2_2.Op != ssaop.OpStore {
19788 break
19789 }
19790 t5 := ssa.AuxToType(mem_0_2_2_2.Aux)
19791 _ = mem_0_2_2_2.Args[2]
19792 mem_0_2_2_2_0 := mem_0_2_2_2.Args[0]
19793 if mem_0_2_2_2_0.Op != ssaop.OpOffPtr {
19794 break
19795 }
19796 tt5 := mem_0_2_2_2_0.Type
19797 o5 := ssa.AuxIntToInt64(mem_0_2_2_2_0.AuxInt)
19798 p5 := mem_0_2_2_2_0.Args[0]
19799 d4 := mem_0_2_2_2.Args[1]
19800 mem_0_2_2_2_2 := mem_0_2_2_2.Args[2]
19801 if mem_0_2_2_2_2.Op != ssaop.OpZero || ssa.AuxIntToInt64(mem_0_2_2_2_2.AuxInt) != n {
19802 break
19803 }
19804 t6 := ssa.AuxToType(mem_0_2_2_2_2.Aux)
19805 p6 := mem_0_2_2_2_2.Args[0]
19806 if !(ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.IsSamePtr(p3, p4) && ssa.IsSamePtr(p4, p5) && ssa.IsSamePtr(p5, p6) && t2.Alignment() <= t1.Alignment() && t3.Alignment() <= t1.Alignment() && t4.Alignment() <= t1.Alignment() && t5.Alignment() <= t1.Alignment() && t6.Alignment() <= t1.Alignment() && registerizable(b, t2) && registerizable(b, t3) && registerizable(b, t4) && registerizable(b, t5) && n >= o2+t2.Size() && n >= o3+t3.Size() && n >= o4+t4.Size() && n >= o5+t5.Size()) {
19807 break
19808 }
19809 v.Reset(ssaop.OpStore)
19810 v.Aux = ssa.TypeToAux(t2)
19811 v0 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt2)
19812 v0.AuxInt = ssa.Int64ToAuxInt(o2)
19813 v0.AddArg(dst)
19814 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19815 v1.Aux = ssa.TypeToAux(t3)
19816 v2 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt3)
19817 v2.AuxInt = ssa.Int64ToAuxInt(o3)
19818 v2.AddArg(dst)
19819 v3 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19820 v3.Aux = ssa.TypeToAux(t4)
19821 v4 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt4)
19822 v4.AuxInt = ssa.Int64ToAuxInt(o4)
19823 v4.AddArg(dst)
19824 v5 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
19825 v5.Aux = ssa.TypeToAux(t5)
19826 v6 := b.NewValue0(v.Pos, ssaop.OpOffPtr, tt5)
19827 v6.AuxInt = ssa.Int64ToAuxInt(o5)
19828 v6.AddArg(dst)
19829 v7 := b.NewValue0(v.Pos, ssaop.OpZero, types.TypeMem)
19830 v7.AuxInt = ssa.Int64ToAuxInt(n)
19831 v7.Aux = ssa.TypeToAux(t1)
19832 v7.AddArg2(dst, mem)
19833 v5.AddArg3(v6, d4, v7)
19834 v3.AddArg3(v4, d3, v5)
19835 v1.AddArg3(v2, d2, v3)
19836 v.AddArg3(v0, d1, v1)
19837 return true
19838 }
19839
19840
19841
19842 for {
19843 s := ssa.AuxIntToInt64(v.AuxInt)
19844 t1 := ssa.AuxToType(v.Aux)
19845 dst := v_0
19846 tmp1 := v_1
19847 midmem := v_2
19848 if midmem.Op != ssaop.OpMove || ssa.AuxIntToInt64(midmem.AuxInt) != s {
19849 break
19850 }
19851 t2 := ssa.AuxToType(midmem.Aux)
19852 src := midmem.Args[1]
19853 tmp2 := midmem.Args[0]
19854 if !(t1.Compare(t2) == types.CMPeq && ssa.IsSamePtr(tmp1, tmp2) && isStackPtr(src) && !ssa.IsVolatile(src) && ssa.Disjoint1(src, s, tmp2, s) && (ssa.Disjoint1(src, s, dst, s) || ssa.IsInlinableMemmove(dst, src, s, config))) {
19855 break
19856 }
19857 v.Reset(ssaop.OpMove)
19858 v.AuxInt = ssa.Int64ToAuxInt(s)
19859 v.Aux = ssa.TypeToAux(t1)
19860 v.AddArg3(dst, src, midmem)
19861 return true
19862 }
19863
19864
19865
19866 for {
19867 s := ssa.AuxIntToInt64(v.AuxInt)
19868 t1 := ssa.AuxToType(v.Aux)
19869 dst := v_0
19870 tmp1 := v_1
19871 midmem := v_2
19872 if midmem.Op != ssaop.OpVarDef {
19873 break
19874 }
19875 midmem_0 := midmem.Args[0]
19876 if midmem_0.Op != ssaop.OpMove || ssa.AuxIntToInt64(midmem_0.AuxInt) != s {
19877 break
19878 }
19879 t2 := ssa.AuxToType(midmem_0.Aux)
19880 src := midmem_0.Args[1]
19881 tmp2 := midmem_0.Args[0]
19882 if !(t1.Compare(t2) == types.CMPeq && ssa.IsSamePtr(tmp1, tmp2) && isStackPtr(src) && !ssa.IsVolatile(src) && ssa.Disjoint1(src, s, tmp2, s) && (ssa.Disjoint1(src, s, dst, s) || ssa.IsInlinableMemmove(dst, src, s, config))) {
19883 break
19884 }
19885 v.Reset(ssaop.OpMove)
19886 v.AuxInt = ssa.Int64ToAuxInt(s)
19887 v.Aux = ssa.TypeToAux(t1)
19888 v.AddArg3(dst, src, midmem)
19889 return true
19890 }
19891
19892
19893
19894 for {
19895 dst := v_0
19896 src := v_1
19897 mem := v_2
19898 if !(ssa.IsSamePtr(dst, src)) {
19899 break
19900 }
19901 v.CopyOf(mem)
19902 return true
19903 }
19904 return false
19905 }
19906 func rewriteValue_OpMul16(v *ssa.Value) bool {
19907 v_1 := v.Args[1]
19908 v_0 := v.Args[0]
19909 b := v.Block
19910 typ := &b.Func.Config.Types
19911
19912
19913 for {
19914 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
19915 if v_0.Op != ssaop.OpConst16 {
19916 continue
19917 }
19918 c := ssa.AuxIntToInt16(v_0.AuxInt)
19919 if v_1.Op != ssaop.OpConst16 {
19920 continue
19921 }
19922 d := ssa.AuxIntToInt16(v_1.AuxInt)
19923 v.Reset(ssaop.OpConst16)
19924 v.AuxInt = ssa.Int16ToAuxInt(c * d)
19925 return true
19926 }
19927 break
19928 }
19929
19930
19931 for {
19932 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
19933 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 1 {
19934 continue
19935 }
19936 x := v_1
19937 v.CopyOf(x)
19938 return true
19939 }
19940 break
19941 }
19942
19943
19944 for {
19945 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
19946 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != -1 {
19947 continue
19948 }
19949 x := v_1
19950 v.Reset(ssaop.OpNeg16)
19951 v.AddArg(x)
19952 return true
19953 }
19954 break
19955 }
19956
19957
19958 for {
19959 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
19960 if v_0.Op != ssaop.OpConst16 {
19961 continue
19962 }
19963 t := v_0.Type
19964 c := ssa.AuxIntToInt16(v_0.AuxInt)
19965 if v_1.Op != ssaop.OpNeg16 {
19966 continue
19967 }
19968 x := v_1.Args[0]
19969 v.Reset(ssaop.OpMul16)
19970 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
19971 v0.AuxInt = ssa.Int16ToAuxInt(-c)
19972 v.AddArg2(x, v0)
19973 return true
19974 }
19975 break
19976 }
19977
19978
19979 for {
19980 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
19981 if v_0.Op != ssaop.OpNeg16 {
19982 continue
19983 }
19984 x := v_0.Args[0]
19985 if v_1.Op != ssaop.OpNeg16 {
19986 continue
19987 }
19988 y := v_1.Args[0]
19989 v.Reset(ssaop.OpMul16)
19990 v.AddArg2(x, y)
19991 return true
19992 }
19993 break
19994 }
19995
19996
19997
19998 for {
19999 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20000 if v_0.Op != ssaop.OpConst16 {
20001 continue
20002 }
20003 t := v_0.Type
20004 c := ssa.AuxIntToInt16(v_0.AuxInt)
20005 if v_1.Op != ssaop.OpAdd16 || v_1.Type != t {
20006 continue
20007 }
20008 _ = v_1.Args[1]
20009 v_1_0 := v_1.Args[0]
20010 v_1_1 := v_1.Args[1]
20011 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
20012 if v_1_0.Op != ssaop.OpConst16 || v_1_0.Type != t {
20013 continue
20014 }
20015 d := ssa.AuxIntToInt16(v_1_0.AuxInt)
20016 x := v_1_1
20017 if !(!ssa.IsPowerOfTwo(c)) {
20018 continue
20019 }
20020 v.Reset(ssaop.OpAdd16)
20021 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
20022 v0.AuxInt = ssa.Int16ToAuxInt(c * d)
20023 v1 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
20024 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
20025 v2.AuxInt = ssa.Int16ToAuxInt(c)
20026 v1.AddArg2(v2, x)
20027 v.AddArg2(v0, v1)
20028 return true
20029 }
20030 }
20031 break
20032 }
20033
20034
20035 for {
20036 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20037 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
20038 continue
20039 }
20040 v.Reset(ssaop.OpConst16)
20041 v.AuxInt = ssa.Int16ToAuxInt(0)
20042 return true
20043 }
20044 break
20045 }
20046
20047
20048
20049 for {
20050 t := v.Type
20051 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20052 x := v_0
20053 if v_1.Op != ssaop.OpConst16 {
20054 continue
20055 }
20056 c := ssa.AuxIntToInt16(v_1.AuxInt)
20057 if !(ssa.IsPowerOfTwo(uint16(c)) && v.Block.Func.Pass.Name != "opt") {
20058 continue
20059 }
20060 v.Reset(ssaop.OpLsh16x64)
20061 v.Type = t
20062 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20063 v0.AuxInt = ssa.Int64ToAuxInt(ssa.Log16u(uint16(c)))
20064 v.AddArg2(x, v0)
20065 return true
20066 }
20067 break
20068 }
20069
20070
20071
20072 for {
20073 t := v.Type
20074 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20075 x := v_0
20076 if v_1.Op != ssaop.OpConst16 {
20077 continue
20078 }
20079 c := ssa.AuxIntToInt16(v_1.AuxInt)
20080 if !(ssa.IsPowerOfTwo(uint16(-c)) && v.Block.Func.Pass.Name != "opt") {
20081 continue
20082 }
20083 v.Reset(ssaop.OpNeg16)
20084 v0 := b.NewValue0(v.Pos, ssaop.OpLsh16x64, t)
20085 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20086 v1.AuxInt = ssa.Int64ToAuxInt(ssa.Log16u(uint16(-c)))
20087 v0.AddArg2(x, v1)
20088 v.AddArg(v0)
20089 return true
20090 }
20091 break
20092 }
20093
20094
20095
20096 for {
20097 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20098 if v_0.Op != ssaop.OpMul16 {
20099 continue
20100 }
20101 _ = v_0.Args[1]
20102 v_0_0 := v_0.Args[0]
20103 v_0_1 := v_0.Args[1]
20104 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
20105 i := v_0_0
20106 if i.Op != ssaop.OpConst16 {
20107 continue
20108 }
20109 t := i.Type
20110 z := v_0_1
20111 x := v_1
20112 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
20113 continue
20114 }
20115 v.Reset(ssaop.OpMul16)
20116 v0 := b.NewValue0(v.Pos, ssaop.OpMul16, t)
20117 v0.AddArg2(x, z)
20118 v.AddArg2(i, v0)
20119 return true
20120 }
20121 }
20122 break
20123 }
20124
20125
20126
20127 for {
20128 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20129 if v_0.Op != ssaop.OpConst16 {
20130 continue
20131 }
20132 t := v_0.Type
20133 c := ssa.AuxIntToInt16(v_0.AuxInt)
20134 m := v_1
20135 if m.Op != ssaop.OpMul16 {
20136 continue
20137 }
20138 _ = m.Args[1]
20139 m_0 := m.Args[0]
20140 m_1 := m.Args[1]
20141 for _i1 := 0; _i1 <= 1; _i1, m_0, m_1 = _i1+1, m_1, m_0 {
20142 if m_0.Op != ssaop.OpConst16 || m_0.Type != t {
20143 continue
20144 }
20145 d := ssa.AuxIntToInt16(m_0.AuxInt)
20146 x := m_1
20147 if !(!ssa.IsPowerOfTwo(c) || m.Uses == 1) {
20148 continue
20149 }
20150 v.Reset(ssaop.OpMul16)
20151 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
20152 v0.AuxInt = ssa.Int16ToAuxInt(c * d)
20153 v.AddArg2(v0, x)
20154 return true
20155 }
20156 }
20157 break
20158 }
20159 return false
20160 }
20161 func rewriteValue_OpMul32(v *ssa.Value) bool {
20162 v_1 := v.Args[1]
20163 v_0 := v.Args[0]
20164 b := v.Block
20165 typ := &b.Func.Config.Types
20166
20167
20168 for {
20169 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20170 if v_0.Op != ssaop.OpConst32 {
20171 continue
20172 }
20173 c := ssa.AuxIntToInt32(v_0.AuxInt)
20174 if v_1.Op != ssaop.OpConst32 {
20175 continue
20176 }
20177 d := ssa.AuxIntToInt32(v_1.AuxInt)
20178 v.Reset(ssaop.OpConst32)
20179 v.AuxInt = ssa.Int32ToAuxInt(c * d)
20180 return true
20181 }
20182 break
20183 }
20184
20185
20186 for {
20187 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20188 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 1 {
20189 continue
20190 }
20191 x := v_1
20192 v.CopyOf(x)
20193 return true
20194 }
20195 break
20196 }
20197
20198
20199 for {
20200 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20201 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != -1 {
20202 continue
20203 }
20204 x := v_1
20205 v.Reset(ssaop.OpNeg32)
20206 v.AddArg(x)
20207 return true
20208 }
20209 break
20210 }
20211
20212
20213 for {
20214 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20215 if v_0.Op != ssaop.OpConst32 {
20216 continue
20217 }
20218 t := v_0.Type
20219 c := ssa.AuxIntToInt32(v_0.AuxInt)
20220 if v_1.Op != ssaop.OpNeg32 {
20221 continue
20222 }
20223 x := v_1.Args[0]
20224 v.Reset(ssaop.OpMul32)
20225 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
20226 v0.AuxInt = ssa.Int32ToAuxInt(-c)
20227 v.AddArg2(x, v0)
20228 return true
20229 }
20230 break
20231 }
20232
20233
20234 for {
20235 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20236 if v_0.Op != ssaop.OpNeg32 {
20237 continue
20238 }
20239 x := v_0.Args[0]
20240 if v_1.Op != ssaop.OpNeg32 {
20241 continue
20242 }
20243 y := v_1.Args[0]
20244 v.Reset(ssaop.OpMul32)
20245 v.AddArg2(x, y)
20246 return true
20247 }
20248 break
20249 }
20250
20251
20252
20253 for {
20254 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20255 if v_0.Op != ssaop.OpConst32 {
20256 continue
20257 }
20258 t := v_0.Type
20259 c := ssa.AuxIntToInt32(v_0.AuxInt)
20260 if v_1.Op != ssaop.OpAdd32 || v_1.Type != t {
20261 continue
20262 }
20263 _ = v_1.Args[1]
20264 v_1_0 := v_1.Args[0]
20265 v_1_1 := v_1.Args[1]
20266 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
20267 if v_1_0.Op != ssaop.OpConst32 || v_1_0.Type != t {
20268 continue
20269 }
20270 d := ssa.AuxIntToInt32(v_1_0.AuxInt)
20271 x := v_1_1
20272 if !(!ssa.IsPowerOfTwo(c)) {
20273 continue
20274 }
20275 v.Reset(ssaop.OpAdd32)
20276 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
20277 v0.AuxInt = ssa.Int32ToAuxInt(c * d)
20278 v1 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
20279 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
20280 v2.AuxInt = ssa.Int32ToAuxInt(c)
20281 v1.AddArg2(v2, x)
20282 v.AddArg2(v0, v1)
20283 return true
20284 }
20285 }
20286 break
20287 }
20288
20289
20290 for {
20291 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20292 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20293 continue
20294 }
20295 v.Reset(ssaop.OpConst32)
20296 v.AuxInt = ssa.Int32ToAuxInt(0)
20297 return true
20298 }
20299 break
20300 }
20301
20302
20303
20304 for {
20305 t := v.Type
20306 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20307 x := v_0
20308 if v_1.Op != ssaop.OpConst32 {
20309 continue
20310 }
20311 c := ssa.AuxIntToInt32(v_1.AuxInt)
20312 if !(ssa.IsPowerOfTwo(uint32(c)) && v.Block.Func.Pass.Name != "opt") {
20313 continue
20314 }
20315 v.Reset(ssaop.OpLsh32x64)
20316 v.Type = t
20317 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20318 v0.AuxInt = ssa.Int64ToAuxInt(ssa.Log32u(uint32(c)))
20319 v.AddArg2(x, v0)
20320 return true
20321 }
20322 break
20323 }
20324
20325
20326
20327 for {
20328 t := v.Type
20329 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20330 x := v_0
20331 if v_1.Op != ssaop.OpConst32 {
20332 continue
20333 }
20334 c := ssa.AuxIntToInt32(v_1.AuxInt)
20335 if !(ssa.IsPowerOfTwo(uint32(-c)) && v.Block.Func.Pass.Name != "opt") {
20336 continue
20337 }
20338 v.Reset(ssaop.OpNeg32)
20339 v0 := b.NewValue0(v.Pos, ssaop.OpLsh32x64, t)
20340 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20341 v1.AuxInt = ssa.Int64ToAuxInt(ssa.Log32u(uint32(-c)))
20342 v0.AddArg2(x, v1)
20343 v.AddArg(v0)
20344 return true
20345 }
20346 break
20347 }
20348
20349
20350
20351 for {
20352 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20353 if v_0.Op != ssaop.OpMul32 {
20354 continue
20355 }
20356 _ = v_0.Args[1]
20357 v_0_0 := v_0.Args[0]
20358 v_0_1 := v_0.Args[1]
20359 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
20360 i := v_0_0
20361 if i.Op != ssaop.OpConst32 {
20362 continue
20363 }
20364 t := i.Type
20365 z := v_0_1
20366 x := v_1
20367 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
20368 continue
20369 }
20370 v.Reset(ssaop.OpMul32)
20371 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, t)
20372 v0.AddArg2(x, z)
20373 v.AddArg2(i, v0)
20374 return true
20375 }
20376 }
20377 break
20378 }
20379
20380
20381
20382 for {
20383 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20384 if v_0.Op != ssaop.OpConst32 {
20385 continue
20386 }
20387 t := v_0.Type
20388 c := ssa.AuxIntToInt32(v_0.AuxInt)
20389 m := v_1
20390 if m.Op != ssaop.OpMul32 {
20391 continue
20392 }
20393 _ = m.Args[1]
20394 m_0 := m.Args[0]
20395 m_1 := m.Args[1]
20396 for _i1 := 0; _i1 <= 1; _i1, m_0, m_1 = _i1+1, m_1, m_0 {
20397 if m_0.Op != ssaop.OpConst32 || m_0.Type != t {
20398 continue
20399 }
20400 d := ssa.AuxIntToInt32(m_0.AuxInt)
20401 x := m_1
20402 if !(!ssa.IsPowerOfTwo(c) || m.Uses == 1) {
20403 continue
20404 }
20405 v.Reset(ssaop.OpMul32)
20406 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
20407 v0.AuxInt = ssa.Int32ToAuxInt(c * d)
20408 v.AddArg2(v0, x)
20409 return true
20410 }
20411 }
20412 break
20413 }
20414 return false
20415 }
20416 func rewriteValue_OpMul32F(v *ssa.Value) bool {
20417 v_1 := v.Args[1]
20418 v_0 := v.Args[0]
20419
20420
20421
20422 for {
20423 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20424 if v_0.Op != ssaop.OpConst32F {
20425 continue
20426 }
20427 c := ssa.AuxIntToFloat32(v_0.AuxInt)
20428 if v_1.Op != ssaop.OpConst32F {
20429 continue
20430 }
20431 d := ssa.AuxIntToFloat32(v_1.AuxInt)
20432 if !(c*d == c*d) {
20433 continue
20434 }
20435 v.Reset(ssaop.OpConst32F)
20436 v.AuxInt = ssa.Float32ToAuxInt(c * d)
20437 return true
20438 }
20439 break
20440 }
20441
20442
20443 for {
20444 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20445 x := v_0
20446 if v_1.Op != ssaop.OpConst32F || ssa.AuxIntToFloat32(v_1.AuxInt) != 1 {
20447 continue
20448 }
20449 v.CopyOf(x)
20450 return true
20451 }
20452 break
20453 }
20454
20455
20456 for {
20457 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20458 x := v_0
20459 if v_1.Op != ssaop.OpConst32F || ssa.AuxIntToFloat32(v_1.AuxInt) != -1 {
20460 continue
20461 }
20462 v.Reset(ssaop.OpNeg32F)
20463 v.AddArg(x)
20464 return true
20465 }
20466 break
20467 }
20468
20469
20470 for {
20471 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20472 x := v_0
20473 if v_1.Op != ssaop.OpConst32F || ssa.AuxIntToFloat32(v_1.AuxInt) != 2 {
20474 continue
20475 }
20476 v.Reset(ssaop.OpAdd32F)
20477 v.AddArg2(x, x)
20478 return true
20479 }
20480 break
20481 }
20482 return false
20483 }
20484 func rewriteValue_OpMul32uhilo(v *ssa.Value) bool {
20485 v_1 := v.Args[1]
20486 v_0 := v.Args[0]
20487 b := v.Block
20488 typ := &b.Func.Config.Types
20489
20490
20491 for {
20492 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20493 if v_0.Op != ssaop.OpConst32 {
20494 continue
20495 }
20496 c := ssa.AuxIntToInt32(v_0.AuxInt)
20497 if v_1.Op != ssaop.OpConst32 {
20498 continue
20499 }
20500 d := ssa.AuxIntToInt32(v_1.AuxInt)
20501 v.Reset(ssaop.OpMakeTuple)
20502 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.UInt32)
20503 v0.AuxInt = ssa.Int32ToAuxInt(bitsMulU32(c, d).hi)
20504 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.UInt32)
20505 v1.AuxInt = ssa.Int32ToAuxInt(bitsMulU32(c, d).lo)
20506 v.AddArg2(v0, v1)
20507 return true
20508 }
20509 break
20510 }
20511 return false
20512 }
20513 func rewriteValue_OpMul32uover(v *ssa.Value) bool {
20514 v_1 := v.Args[1]
20515 v_0 := v.Args[0]
20516 b := v.Block
20517 typ := &b.Func.Config.Types
20518
20519
20520 for {
20521 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20522 if v_0.Op != ssaop.OpConst32 {
20523 continue
20524 }
20525 c := ssa.AuxIntToInt32(v_0.AuxInt)
20526 if v_1.Op != ssaop.OpConst32 {
20527 continue
20528 }
20529 d := ssa.AuxIntToInt32(v_1.AuxInt)
20530 v.Reset(ssaop.OpMakeTuple)
20531 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.UInt32)
20532 v0.AuxInt = ssa.Int32ToAuxInt(bitsMulU32(c, d).lo)
20533 v1 := b.NewValue0(v.Pos, ssaop.OpConstBool, typ.Bool)
20534 v1.AuxInt = ssa.BoolToAuxInt(bitsMulU32(c, d).hi != 0)
20535 v.AddArg2(v0, v1)
20536 return true
20537 }
20538 break
20539 }
20540
20541
20542 for {
20543 t := v.Type
20544 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20545 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 1 {
20546 continue
20547 }
20548 x := v_1
20549 v.Reset(ssaop.OpMakeTuple)
20550 v0 := b.NewValue0(v.Pos, ssaop.OpConstBool, t.FieldType(1))
20551 v0.AuxInt = ssa.BoolToAuxInt(false)
20552 v.AddArg2(x, v0)
20553 return true
20554 }
20555 break
20556 }
20557
20558
20559 for {
20560 t := v.Type
20561 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20562 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
20563 continue
20564 }
20565 v.Reset(ssaop.OpMakeTuple)
20566 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t.FieldType(0))
20567 v0.AuxInt = ssa.Int32ToAuxInt(0)
20568 v1 := b.NewValue0(v.Pos, ssaop.OpConstBool, t.FieldType(1))
20569 v1.AuxInt = ssa.BoolToAuxInt(false)
20570 v.AddArg2(v0, v1)
20571 return true
20572 }
20573 break
20574 }
20575 return false
20576 }
20577 func rewriteValue_OpMul64(v *ssa.Value) bool {
20578 v_1 := v.Args[1]
20579 v_0 := v.Args[0]
20580 b := v.Block
20581 typ := &b.Func.Config.Types
20582
20583
20584 for {
20585 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20586 if v_0.Op != ssaop.OpConst64 {
20587 continue
20588 }
20589 c := ssa.AuxIntToInt64(v_0.AuxInt)
20590 if v_1.Op != ssaop.OpConst64 {
20591 continue
20592 }
20593 d := ssa.AuxIntToInt64(v_1.AuxInt)
20594 v.Reset(ssaop.OpConst64)
20595 v.AuxInt = ssa.Int64ToAuxInt(c * d)
20596 return true
20597 }
20598 break
20599 }
20600
20601
20602 for {
20603 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20604 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 1 {
20605 continue
20606 }
20607 x := v_1
20608 v.CopyOf(x)
20609 return true
20610 }
20611 break
20612 }
20613
20614
20615 for {
20616 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20617 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != -1 {
20618 continue
20619 }
20620 x := v_1
20621 v.Reset(ssaop.OpNeg64)
20622 v.AddArg(x)
20623 return true
20624 }
20625 break
20626 }
20627
20628
20629 for {
20630 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20631 if v_0.Op != ssaop.OpConst64 {
20632 continue
20633 }
20634 t := v_0.Type
20635 c := ssa.AuxIntToInt64(v_0.AuxInt)
20636 if v_1.Op != ssaop.OpNeg64 {
20637 continue
20638 }
20639 x := v_1.Args[0]
20640 v.Reset(ssaop.OpMul64)
20641 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
20642 v0.AuxInt = ssa.Int64ToAuxInt(-c)
20643 v.AddArg2(x, v0)
20644 return true
20645 }
20646 break
20647 }
20648
20649
20650 for {
20651 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20652 if v_0.Op != ssaop.OpNeg64 {
20653 continue
20654 }
20655 x := v_0.Args[0]
20656 if v_1.Op != ssaop.OpNeg64 {
20657 continue
20658 }
20659 y := v_1.Args[0]
20660 v.Reset(ssaop.OpMul64)
20661 v.AddArg2(x, y)
20662 return true
20663 }
20664 break
20665 }
20666
20667
20668
20669 for {
20670 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20671 if v_0.Op != ssaop.OpConst64 {
20672 continue
20673 }
20674 t := v_0.Type
20675 c := ssa.AuxIntToInt64(v_0.AuxInt)
20676 if v_1.Op != ssaop.OpAdd64 || v_1.Type != t {
20677 continue
20678 }
20679 _ = v_1.Args[1]
20680 v_1_0 := v_1.Args[0]
20681 v_1_1 := v_1.Args[1]
20682 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
20683 if v_1_0.Op != ssaop.OpConst64 || v_1_0.Type != t {
20684 continue
20685 }
20686 d := ssa.AuxIntToInt64(v_1_0.AuxInt)
20687 x := v_1_1
20688 if !(!ssa.IsPowerOfTwo(c)) {
20689 continue
20690 }
20691 v.Reset(ssaop.OpAdd64)
20692 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
20693 v0.AuxInt = ssa.Int64ToAuxInt(c * d)
20694 v1 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
20695 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
20696 v2.AuxInt = ssa.Int64ToAuxInt(c)
20697 v1.AddArg2(v2, x)
20698 v.AddArg2(v0, v1)
20699 return true
20700 }
20701 }
20702 break
20703 }
20704
20705
20706 for {
20707 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20708 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
20709 continue
20710 }
20711 v.Reset(ssaop.OpConst64)
20712 v.AuxInt = ssa.Int64ToAuxInt(0)
20713 return true
20714 }
20715 break
20716 }
20717
20718
20719
20720 for {
20721 t := v.Type
20722 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20723 x := v_0
20724 if v_1.Op != ssaop.OpConst64 {
20725 continue
20726 }
20727 c := ssa.AuxIntToInt64(v_1.AuxInt)
20728 if !(ssa.IsPowerOfTwo(uint64(c)) && v.Block.Func.Pass.Name != "opt") {
20729 continue
20730 }
20731 v.Reset(ssaop.OpLsh64x64)
20732 v.Type = t
20733 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20734 v0.AuxInt = ssa.Int64ToAuxInt(ssa.Log64u(uint64(c)))
20735 v.AddArg2(x, v0)
20736 return true
20737 }
20738 break
20739 }
20740
20741
20742
20743 for {
20744 t := v.Type
20745 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20746 x := v_0
20747 if v_1.Op != ssaop.OpConst64 {
20748 continue
20749 }
20750 c := ssa.AuxIntToInt64(v_1.AuxInt)
20751 if !(ssa.IsPowerOfTwo(uint64(-c)) && v.Block.Func.Pass.Name != "opt") {
20752 continue
20753 }
20754 v.Reset(ssaop.OpNeg64)
20755 v0 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, t)
20756 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20757 v1.AuxInt = ssa.Int64ToAuxInt(ssa.Log64u(uint64(-c)))
20758 v0.AddArg2(x, v1)
20759 v.AddArg(v0)
20760 return true
20761 }
20762 break
20763 }
20764
20765
20766
20767 for {
20768 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20769 if v_0.Op != ssaop.OpMul64 {
20770 continue
20771 }
20772 _ = v_0.Args[1]
20773 v_0_0 := v_0.Args[0]
20774 v_0_1 := v_0.Args[1]
20775 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
20776 i := v_0_0
20777 if i.Op != ssaop.OpConst64 {
20778 continue
20779 }
20780 t := i.Type
20781 z := v_0_1
20782 x := v_1
20783 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
20784 continue
20785 }
20786 v.Reset(ssaop.OpMul64)
20787 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, t)
20788 v0.AddArg2(x, z)
20789 v.AddArg2(i, v0)
20790 return true
20791 }
20792 }
20793 break
20794 }
20795
20796
20797
20798 for {
20799 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20800 if v_0.Op != ssaop.OpConst64 {
20801 continue
20802 }
20803 t := v_0.Type
20804 c := ssa.AuxIntToInt64(v_0.AuxInt)
20805 m := v_1
20806 if m.Op != ssaop.OpMul64 {
20807 continue
20808 }
20809 _ = m.Args[1]
20810 m_0 := m.Args[0]
20811 m_1 := m.Args[1]
20812 for _i1 := 0; _i1 <= 1; _i1, m_0, m_1 = _i1+1, m_1, m_0 {
20813 if m_0.Op != ssaop.OpConst64 || m_0.Type != t {
20814 continue
20815 }
20816 d := ssa.AuxIntToInt64(m_0.AuxInt)
20817 x := m_1
20818 if !(!ssa.IsPowerOfTwo(c) || m.Uses == 1) {
20819 continue
20820 }
20821 v.Reset(ssaop.OpMul64)
20822 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
20823 v0.AuxInt = ssa.Int64ToAuxInt(c * d)
20824 v.AddArg2(v0, x)
20825 return true
20826 }
20827 }
20828 break
20829 }
20830 return false
20831 }
20832 func rewriteValue_OpMul64F(v *ssa.Value) bool {
20833 v_1 := v.Args[1]
20834 v_0 := v.Args[0]
20835
20836
20837
20838 for {
20839 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20840 if v_0.Op != ssaop.OpConst64F {
20841 continue
20842 }
20843 c := ssa.AuxIntToFloat64(v_0.AuxInt)
20844 if v_1.Op != ssaop.OpConst64F {
20845 continue
20846 }
20847 d := ssa.AuxIntToFloat64(v_1.AuxInt)
20848 if !(c*d == c*d) {
20849 continue
20850 }
20851 v.Reset(ssaop.OpConst64F)
20852 v.AuxInt = ssa.Float64ToAuxInt(c * d)
20853 return true
20854 }
20855 break
20856 }
20857
20858
20859 for {
20860 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20861 x := v_0
20862 if v_1.Op != ssaop.OpConst64F || ssa.AuxIntToFloat64(v_1.AuxInt) != 1 {
20863 continue
20864 }
20865 v.CopyOf(x)
20866 return true
20867 }
20868 break
20869 }
20870
20871
20872 for {
20873 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20874 x := v_0
20875 if v_1.Op != ssaop.OpConst64F || ssa.AuxIntToFloat64(v_1.AuxInt) != -1 {
20876 continue
20877 }
20878 v.Reset(ssaop.OpNeg64F)
20879 v.AddArg(x)
20880 return true
20881 }
20882 break
20883 }
20884
20885
20886 for {
20887 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20888 x := v_0
20889 if v_1.Op != ssaop.OpConst64F || ssa.AuxIntToFloat64(v_1.AuxInt) != 2 {
20890 continue
20891 }
20892 v.Reset(ssaop.OpAdd64F)
20893 v.AddArg2(x, x)
20894 return true
20895 }
20896 break
20897 }
20898 return false
20899 }
20900 func rewriteValue_OpMul64uhilo(v *ssa.Value) bool {
20901 v_1 := v.Args[1]
20902 v_0 := v.Args[0]
20903 b := v.Block
20904 typ := &b.Func.Config.Types
20905
20906
20907 for {
20908 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20909 if v_0.Op != ssaop.OpConst64 {
20910 continue
20911 }
20912 c := ssa.AuxIntToInt64(v_0.AuxInt)
20913 if v_1.Op != ssaop.OpConst64 {
20914 continue
20915 }
20916 d := ssa.AuxIntToInt64(v_1.AuxInt)
20917 v.Reset(ssaop.OpMakeTuple)
20918 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20919 v0.AuxInt = ssa.Int64ToAuxInt(bitsMulU64(c, d).hi)
20920 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20921 v1.AuxInt = ssa.Int64ToAuxInt(bitsMulU64(c, d).lo)
20922 v.AddArg2(v0, v1)
20923 return true
20924 }
20925 break
20926 }
20927
20928
20929
20930 for {
20931 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20932 x := v_0
20933 if v_1.Op != ssaop.OpConst64 {
20934 continue
20935 }
20936 c := ssa.AuxIntToInt64(v_1.AuxInt)
20937 if !(c > 0 && ssa.IsPowerOfTwo(uint64(c))) {
20938 continue
20939 }
20940 v.Reset(ssaop.OpMakeTuple)
20941 v0 := b.NewValue0(v.Pos, ssaop.OpRsh64Ux64, typ.UInt64)
20942 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20943 v1.AuxInt = ssa.Int64ToAuxInt(64 - ssa.Log64u(uint64(c)))
20944 v0.AddArg2(x, v1)
20945 v2 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.UInt64)
20946 v3 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20947 v3.AuxInt = ssa.Int64ToAuxInt(ssa.Log64u(uint64(c)))
20948 v2.AddArg2(x, v3)
20949 v.AddArg2(v0, v2)
20950 return true
20951 }
20952 break
20953 }
20954 return false
20955 }
20956 func rewriteValue_OpMul64uover(v *ssa.Value) bool {
20957 v_1 := v.Args[1]
20958 v_0 := v.Args[0]
20959 b := v.Block
20960 typ := &b.Func.Config.Types
20961
20962
20963 for {
20964 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20965 if v_0.Op != ssaop.OpConst64 {
20966 continue
20967 }
20968 c := ssa.AuxIntToInt64(v_0.AuxInt)
20969 if v_1.Op != ssaop.OpConst64 {
20970 continue
20971 }
20972 d := ssa.AuxIntToInt64(v_1.AuxInt)
20973 v.Reset(ssaop.OpMakeTuple)
20974 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
20975 v0.AuxInt = ssa.Int64ToAuxInt(bitsMulU64(c, d).lo)
20976 v1 := b.NewValue0(v.Pos, ssaop.OpConstBool, typ.Bool)
20977 v1.AuxInt = ssa.BoolToAuxInt(bitsMulU64(c, d).hi != 0)
20978 v.AddArg2(v0, v1)
20979 return true
20980 }
20981 break
20982 }
20983
20984
20985 for {
20986 t := v.Type
20987 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
20988 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 1 {
20989 continue
20990 }
20991 x := v_1
20992 v.Reset(ssaop.OpMakeTuple)
20993 v0 := b.NewValue0(v.Pos, ssaop.OpConstBool, t.FieldType(1))
20994 v0.AuxInt = ssa.BoolToAuxInt(false)
20995 v.AddArg2(x, v0)
20996 return true
20997 }
20998 break
20999 }
21000
21001
21002 for {
21003 t := v.Type
21004 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21005 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
21006 continue
21007 }
21008 v.Reset(ssaop.OpMakeTuple)
21009 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t.FieldType(0))
21010 v0.AuxInt = ssa.Int64ToAuxInt(0)
21011 v1 := b.NewValue0(v.Pos, ssaop.OpConstBool, t.FieldType(1))
21012 v1.AuxInt = ssa.BoolToAuxInt(false)
21013 v.AddArg2(v0, v1)
21014 return true
21015 }
21016 break
21017 }
21018 return false
21019 }
21020 func rewriteValue_OpMul8(v *ssa.Value) bool {
21021 v_1 := v.Args[1]
21022 v_0 := v.Args[0]
21023 b := v.Block
21024 typ := &b.Func.Config.Types
21025
21026
21027 for {
21028 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21029 if v_0.Op != ssaop.OpConst8 {
21030 continue
21031 }
21032 c := ssa.AuxIntToInt8(v_0.AuxInt)
21033 if v_1.Op != ssaop.OpConst8 {
21034 continue
21035 }
21036 d := ssa.AuxIntToInt8(v_1.AuxInt)
21037 v.Reset(ssaop.OpConst8)
21038 v.AuxInt = ssa.Int8ToAuxInt(c * d)
21039 return true
21040 }
21041 break
21042 }
21043
21044
21045 for {
21046 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21047 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 1 {
21048 continue
21049 }
21050 x := v_1
21051 v.CopyOf(x)
21052 return true
21053 }
21054 break
21055 }
21056
21057
21058 for {
21059 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21060 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != -1 {
21061 continue
21062 }
21063 x := v_1
21064 v.Reset(ssaop.OpNeg8)
21065 v.AddArg(x)
21066 return true
21067 }
21068 break
21069 }
21070
21071
21072 for {
21073 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21074 if v_0.Op != ssaop.OpConst8 {
21075 continue
21076 }
21077 t := v_0.Type
21078 c := ssa.AuxIntToInt8(v_0.AuxInt)
21079 if v_1.Op != ssaop.OpNeg8 {
21080 continue
21081 }
21082 x := v_1.Args[0]
21083 v.Reset(ssaop.OpMul8)
21084 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
21085 v0.AuxInt = ssa.Int8ToAuxInt(-c)
21086 v.AddArg2(x, v0)
21087 return true
21088 }
21089 break
21090 }
21091
21092
21093 for {
21094 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21095 if v_0.Op != ssaop.OpNeg8 {
21096 continue
21097 }
21098 x := v_0.Args[0]
21099 if v_1.Op != ssaop.OpNeg8 {
21100 continue
21101 }
21102 y := v_1.Args[0]
21103 v.Reset(ssaop.OpMul8)
21104 v.AddArg2(x, y)
21105 return true
21106 }
21107 break
21108 }
21109
21110
21111
21112 for {
21113 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21114 if v_0.Op != ssaop.OpConst8 {
21115 continue
21116 }
21117 t := v_0.Type
21118 c := ssa.AuxIntToInt8(v_0.AuxInt)
21119 if v_1.Op != ssaop.OpAdd8 || v_1.Type != t {
21120 continue
21121 }
21122 _ = v_1.Args[1]
21123 v_1_0 := v_1.Args[0]
21124 v_1_1 := v_1.Args[1]
21125 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
21126 if v_1_0.Op != ssaop.OpConst8 || v_1_0.Type != t {
21127 continue
21128 }
21129 d := ssa.AuxIntToInt8(v_1_0.AuxInt)
21130 x := v_1_1
21131 if !(!ssa.IsPowerOfTwo(c)) {
21132 continue
21133 }
21134 v.Reset(ssaop.OpAdd8)
21135 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
21136 v0.AuxInt = ssa.Int8ToAuxInt(c * d)
21137 v1 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
21138 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
21139 v2.AuxInt = ssa.Int8ToAuxInt(c)
21140 v1.AddArg2(v2, x)
21141 v.AddArg2(v0, v1)
21142 return true
21143 }
21144 }
21145 break
21146 }
21147
21148
21149 for {
21150 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21151 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
21152 continue
21153 }
21154 v.Reset(ssaop.OpConst8)
21155 v.AuxInt = ssa.Int8ToAuxInt(0)
21156 return true
21157 }
21158 break
21159 }
21160
21161
21162
21163 for {
21164 t := v.Type
21165 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21166 x := v_0
21167 if v_1.Op != ssaop.OpConst8 {
21168 continue
21169 }
21170 c := ssa.AuxIntToInt8(v_1.AuxInt)
21171 if !(ssa.IsPowerOfTwo(uint8(c)) && v.Block.Func.Pass.Name != "opt") {
21172 continue
21173 }
21174 v.Reset(ssaop.OpLsh8x64)
21175 v.Type = t
21176 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
21177 v0.AuxInt = ssa.Int64ToAuxInt(ssa.Log8u(uint8(c)))
21178 v.AddArg2(x, v0)
21179 return true
21180 }
21181 break
21182 }
21183
21184
21185
21186 for {
21187 t := v.Type
21188 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21189 x := v_0
21190 if v_1.Op != ssaop.OpConst8 {
21191 continue
21192 }
21193 c := ssa.AuxIntToInt8(v_1.AuxInt)
21194 if !(ssa.IsPowerOfTwo(uint8(-c)) && v.Block.Func.Pass.Name != "opt") {
21195 continue
21196 }
21197 v.Reset(ssaop.OpNeg8)
21198 v0 := b.NewValue0(v.Pos, ssaop.OpLsh8x64, t)
21199 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
21200 v1.AuxInt = ssa.Int64ToAuxInt(ssa.Log8u(uint8(-c)))
21201 v0.AddArg2(x, v1)
21202 v.AddArg(v0)
21203 return true
21204 }
21205 break
21206 }
21207
21208
21209
21210 for {
21211 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21212 if v_0.Op != ssaop.OpMul8 {
21213 continue
21214 }
21215 _ = v_0.Args[1]
21216 v_0_0 := v_0.Args[0]
21217 v_0_1 := v_0.Args[1]
21218 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
21219 i := v_0_0
21220 if i.Op != ssaop.OpConst8 {
21221 continue
21222 }
21223 t := i.Type
21224 z := v_0_1
21225 x := v_1
21226 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
21227 continue
21228 }
21229 v.Reset(ssaop.OpMul8)
21230 v0 := b.NewValue0(v.Pos, ssaop.OpMul8, t)
21231 v0.AddArg2(x, z)
21232 v.AddArg2(i, v0)
21233 return true
21234 }
21235 }
21236 break
21237 }
21238
21239
21240
21241 for {
21242 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21243 if v_0.Op != ssaop.OpConst8 {
21244 continue
21245 }
21246 t := v_0.Type
21247 c := ssa.AuxIntToInt8(v_0.AuxInt)
21248 m := v_1
21249 if m.Op != ssaop.OpMul8 {
21250 continue
21251 }
21252 _ = m.Args[1]
21253 m_0 := m.Args[0]
21254 m_1 := m.Args[1]
21255 for _i1 := 0; _i1 <= 1; _i1, m_0, m_1 = _i1+1, m_1, m_0 {
21256 if m_0.Op != ssaop.OpConst8 || m_0.Type != t {
21257 continue
21258 }
21259 d := ssa.AuxIntToInt8(m_0.AuxInt)
21260 x := m_1
21261 if !(!ssa.IsPowerOfTwo(c) || m.Uses == 1) {
21262 continue
21263 }
21264 v.Reset(ssaop.OpMul8)
21265 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
21266 v0.AuxInt = ssa.Int8ToAuxInt(c * d)
21267 v.AddArg2(v0, x)
21268 return true
21269 }
21270 }
21271 break
21272 }
21273 return false
21274 }
21275 func rewriteValue_OpNeg16(v *ssa.Value) bool {
21276 v_0 := v.Args[0]
21277 b := v.Block
21278
21279
21280 for {
21281 if v_0.Op != ssaop.OpConst16 {
21282 break
21283 }
21284 c := ssa.AuxIntToInt16(v_0.AuxInt)
21285 v.Reset(ssaop.OpConst16)
21286 v.AuxInt = ssa.Int16ToAuxInt(-c)
21287 return true
21288 }
21289
21290
21291 for {
21292 if v_0.Op != ssaop.OpMul16 {
21293 break
21294 }
21295 _ = v_0.Args[1]
21296 v_0_0 := v_0.Args[0]
21297 v_0_1 := v_0.Args[1]
21298 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21299 x := v_0_0
21300 if v_0_1.Op != ssaop.OpConst16 {
21301 continue
21302 }
21303 t := v_0_1.Type
21304 c := ssa.AuxIntToInt16(v_0_1.AuxInt)
21305 v.Reset(ssaop.OpMul16)
21306 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21307 v0.AuxInt = ssa.Int16ToAuxInt(-c)
21308 v.AddArg2(x, v0)
21309 return true
21310 }
21311 break
21312 }
21313
21314
21315 for {
21316 if v_0.Op != ssaop.OpMul16 {
21317 break
21318 }
21319 _ = v_0.Args[1]
21320 v_0_0 := v_0.Args[0]
21321 v_0_1 := v_0.Args[1]
21322 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21323 x := v_0_0
21324 if v_0_1.Op != ssaop.OpNeg16 {
21325 continue
21326 }
21327 y := v_0_1.Args[0]
21328 v.Reset(ssaop.OpMul16)
21329 v.AddArg2(x, y)
21330 return true
21331 }
21332 break
21333 }
21334
21335
21336 for {
21337 if v_0.Op != ssaop.OpSub16 {
21338 break
21339 }
21340 y := v_0.Args[1]
21341 x := v_0.Args[0]
21342 v.Reset(ssaop.OpSub16)
21343 v.AddArg2(y, x)
21344 return true
21345 }
21346
21347
21348 for {
21349 if v_0.Op != ssaop.OpNeg16 {
21350 break
21351 }
21352 x := v_0.Args[0]
21353 v.CopyOf(x)
21354 return true
21355 }
21356
21357
21358 for {
21359 t := v.Type
21360 if v_0.Op != ssaop.OpCom16 {
21361 break
21362 }
21363 x := v_0.Args[0]
21364 v.Reset(ssaop.OpAdd16)
21365 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21366 v0.AuxInt = ssa.Int16ToAuxInt(1)
21367 v.AddArg2(v0, x)
21368 return true
21369 }
21370 return false
21371 }
21372 func rewriteValue_OpNeg32(v *ssa.Value) bool {
21373 v_0 := v.Args[0]
21374 b := v.Block
21375
21376
21377 for {
21378 if v_0.Op != ssaop.OpConst32 {
21379 break
21380 }
21381 c := ssa.AuxIntToInt32(v_0.AuxInt)
21382 v.Reset(ssaop.OpConst32)
21383 v.AuxInt = ssa.Int32ToAuxInt(-c)
21384 return true
21385 }
21386
21387
21388 for {
21389 if v_0.Op != ssaop.OpMul32 {
21390 break
21391 }
21392 _ = v_0.Args[1]
21393 v_0_0 := v_0.Args[0]
21394 v_0_1 := v_0.Args[1]
21395 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21396 x := v_0_0
21397 if v_0_1.Op != ssaop.OpConst32 {
21398 continue
21399 }
21400 t := v_0_1.Type
21401 c := ssa.AuxIntToInt32(v_0_1.AuxInt)
21402 v.Reset(ssaop.OpMul32)
21403 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
21404 v0.AuxInt = ssa.Int32ToAuxInt(-c)
21405 v.AddArg2(x, v0)
21406 return true
21407 }
21408 break
21409 }
21410
21411
21412 for {
21413 if v_0.Op != ssaop.OpMul32 {
21414 break
21415 }
21416 _ = v_0.Args[1]
21417 v_0_0 := v_0.Args[0]
21418 v_0_1 := v_0.Args[1]
21419 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21420 x := v_0_0
21421 if v_0_1.Op != ssaop.OpNeg32 {
21422 continue
21423 }
21424 y := v_0_1.Args[0]
21425 v.Reset(ssaop.OpMul32)
21426 v.AddArg2(x, y)
21427 return true
21428 }
21429 break
21430 }
21431
21432
21433 for {
21434 if v_0.Op != ssaop.OpSub32 {
21435 break
21436 }
21437 y := v_0.Args[1]
21438 x := v_0.Args[0]
21439 v.Reset(ssaop.OpSub32)
21440 v.AddArg2(y, x)
21441 return true
21442 }
21443
21444
21445 for {
21446 if v_0.Op != ssaop.OpNeg32 {
21447 break
21448 }
21449 x := v_0.Args[0]
21450 v.CopyOf(x)
21451 return true
21452 }
21453
21454
21455 for {
21456 t := v.Type
21457 if v_0.Op != ssaop.OpCom32 {
21458 break
21459 }
21460 x := v_0.Args[0]
21461 v.Reset(ssaop.OpAdd32)
21462 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
21463 v0.AuxInt = ssa.Int32ToAuxInt(1)
21464 v.AddArg2(v0, x)
21465 return true
21466 }
21467 return false
21468 }
21469 func rewriteValue_OpNeg32F(v *ssa.Value) bool {
21470 v_0 := v.Args[0]
21471
21472
21473
21474 for {
21475 if v_0.Op != ssaop.OpConst32F {
21476 break
21477 }
21478 c := ssa.AuxIntToFloat32(v_0.AuxInt)
21479 if !(c != 0) {
21480 break
21481 }
21482 v.Reset(ssaop.OpConst32F)
21483 v.AuxInt = ssa.Float32ToAuxInt(-c)
21484 return true
21485 }
21486 return false
21487 }
21488 func rewriteValue_OpNeg64(v *ssa.Value) bool {
21489 v_0 := v.Args[0]
21490 b := v.Block
21491
21492
21493 for {
21494 if v_0.Op != ssaop.OpConst64 {
21495 break
21496 }
21497 c := ssa.AuxIntToInt64(v_0.AuxInt)
21498 v.Reset(ssaop.OpConst64)
21499 v.AuxInt = ssa.Int64ToAuxInt(-c)
21500 return true
21501 }
21502
21503
21504 for {
21505 if v_0.Op != ssaop.OpMul64 {
21506 break
21507 }
21508 _ = v_0.Args[1]
21509 v_0_0 := v_0.Args[0]
21510 v_0_1 := v_0.Args[1]
21511 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21512 x := v_0_0
21513 if v_0_1.Op != ssaop.OpConst64 {
21514 continue
21515 }
21516 t := v_0_1.Type
21517 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
21518 v.Reset(ssaop.OpMul64)
21519 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
21520 v0.AuxInt = ssa.Int64ToAuxInt(-c)
21521 v.AddArg2(x, v0)
21522 return true
21523 }
21524 break
21525 }
21526
21527
21528 for {
21529 if v_0.Op != ssaop.OpMul64 {
21530 break
21531 }
21532 _ = v_0.Args[1]
21533 v_0_0 := v_0.Args[0]
21534 v_0_1 := v_0.Args[1]
21535 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21536 x := v_0_0
21537 if v_0_1.Op != ssaop.OpNeg64 {
21538 continue
21539 }
21540 y := v_0_1.Args[0]
21541 v.Reset(ssaop.OpMul64)
21542 v.AddArg2(x, y)
21543 return true
21544 }
21545 break
21546 }
21547
21548
21549 for {
21550 if v_0.Op != ssaop.OpSub64 {
21551 break
21552 }
21553 y := v_0.Args[1]
21554 x := v_0.Args[0]
21555 v.Reset(ssaop.OpSub64)
21556 v.AddArg2(y, x)
21557 return true
21558 }
21559
21560
21561 for {
21562 if v_0.Op != ssaop.OpNeg64 {
21563 break
21564 }
21565 x := v_0.Args[0]
21566 v.CopyOf(x)
21567 return true
21568 }
21569
21570
21571 for {
21572 t := v.Type
21573 if v_0.Op != ssaop.OpCom64 {
21574 break
21575 }
21576 x := v_0.Args[0]
21577 v.Reset(ssaop.OpAdd64)
21578 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
21579 v0.AuxInt = ssa.Int64ToAuxInt(1)
21580 v.AddArg2(v0, x)
21581 return true
21582 }
21583 return false
21584 }
21585 func rewriteValue_OpNeg64F(v *ssa.Value) bool {
21586 v_0 := v.Args[0]
21587
21588
21589
21590 for {
21591 if v_0.Op != ssaop.OpConst64F {
21592 break
21593 }
21594 c := ssa.AuxIntToFloat64(v_0.AuxInt)
21595 if !(c != 0) {
21596 break
21597 }
21598 v.Reset(ssaop.OpConst64F)
21599 v.AuxInt = ssa.Float64ToAuxInt(-c)
21600 return true
21601 }
21602 return false
21603 }
21604 func rewriteValue_OpNeg8(v *ssa.Value) bool {
21605 v_0 := v.Args[0]
21606 b := v.Block
21607
21608
21609 for {
21610 if v_0.Op != ssaop.OpConst8 {
21611 break
21612 }
21613 c := ssa.AuxIntToInt8(v_0.AuxInt)
21614 v.Reset(ssaop.OpConst8)
21615 v.AuxInt = ssa.Int8ToAuxInt(-c)
21616 return true
21617 }
21618
21619
21620 for {
21621 if v_0.Op != ssaop.OpMul8 {
21622 break
21623 }
21624 _ = v_0.Args[1]
21625 v_0_0 := v_0.Args[0]
21626 v_0_1 := v_0.Args[1]
21627 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21628 x := v_0_0
21629 if v_0_1.Op != ssaop.OpConst8 {
21630 continue
21631 }
21632 t := v_0_1.Type
21633 c := ssa.AuxIntToInt8(v_0_1.AuxInt)
21634 v.Reset(ssaop.OpMul8)
21635 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
21636 v0.AuxInt = ssa.Int8ToAuxInt(-c)
21637 v.AddArg2(x, v0)
21638 return true
21639 }
21640 break
21641 }
21642
21643
21644 for {
21645 if v_0.Op != ssaop.OpMul8 {
21646 break
21647 }
21648 _ = v_0.Args[1]
21649 v_0_0 := v_0.Args[0]
21650 v_0_1 := v_0.Args[1]
21651 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
21652 x := v_0_0
21653 if v_0_1.Op != ssaop.OpNeg8 {
21654 continue
21655 }
21656 y := v_0_1.Args[0]
21657 v.Reset(ssaop.OpMul8)
21658 v.AddArg2(x, y)
21659 return true
21660 }
21661 break
21662 }
21663
21664
21665 for {
21666 if v_0.Op != ssaop.OpSub8 {
21667 break
21668 }
21669 y := v_0.Args[1]
21670 x := v_0.Args[0]
21671 v.Reset(ssaop.OpSub8)
21672 v.AddArg2(y, x)
21673 return true
21674 }
21675
21676
21677 for {
21678 if v_0.Op != ssaop.OpNeg8 {
21679 break
21680 }
21681 x := v_0.Args[0]
21682 v.CopyOf(x)
21683 return true
21684 }
21685
21686
21687 for {
21688 t := v.Type
21689 if v_0.Op != ssaop.OpCom8 {
21690 break
21691 }
21692 x := v_0.Args[0]
21693 v.Reset(ssaop.OpAdd8)
21694 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
21695 v0.AuxInt = ssa.Int8ToAuxInt(1)
21696 v.AddArg2(v0, x)
21697 return true
21698 }
21699 return false
21700 }
21701 func rewriteValue_OpNeq16(v *ssa.Value) bool {
21702 v_1 := v.Args[1]
21703 v_0 := v.Args[0]
21704 b := v.Block
21705
21706
21707 for {
21708 x := v_0
21709 if x != v_1 {
21710 break
21711 }
21712 v.Reset(ssaop.OpConstBool)
21713 v.AuxInt = ssa.BoolToAuxInt(false)
21714 return true
21715 }
21716
21717
21718
21719 for {
21720 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21721 if v_0.Op != ssaop.OpConst16 {
21722 continue
21723 }
21724 t := v_0.Type
21725 c := ssa.AuxIntToInt16(v_0.AuxInt)
21726 o := v_1
21727 if o.Op != ssaop.OpAdd16 {
21728 continue
21729 }
21730 _ = o.Args[1]
21731 o_0 := o.Args[0]
21732 o_1 := o.Args[1]
21733 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
21734 if o_0.Op != ssaop.OpConst16 {
21735 continue
21736 }
21737 d := ssa.AuxIntToInt16(o_0.AuxInt)
21738 x := o_1
21739 if !(o.Uses == 1) {
21740 continue
21741 }
21742 v.Reset(ssaop.OpNeq16)
21743 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21744 v0.AuxInt = ssa.Int16ToAuxInt(c - d)
21745 v.AddArg2(v0, x)
21746 return true
21747 }
21748 }
21749 break
21750 }
21751
21752
21753
21754 for {
21755 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21756 if v_0.Op != ssaop.OpConst16 {
21757 continue
21758 }
21759 t := v_0.Type
21760 c := ssa.AuxIntToInt16(v_0.AuxInt)
21761 o := v_1
21762 if o.Op != ssaop.OpSub16 {
21763 continue
21764 }
21765 _ = o.Args[1]
21766 x := o.Args[0]
21767 o_1 := o.Args[1]
21768 if o_1.Op != ssaop.OpConst16 {
21769 continue
21770 }
21771 d := ssa.AuxIntToInt16(o_1.AuxInt)
21772 if !(o.Uses == 1) {
21773 continue
21774 }
21775 v.Reset(ssaop.OpNeq16)
21776 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21777 v0.AuxInt = ssa.Int16ToAuxInt(c + d)
21778 v.AddArg2(v0, x)
21779 return true
21780 }
21781 break
21782 }
21783
21784
21785
21786 for {
21787 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21788 if v_0.Op != ssaop.OpConst16 {
21789 continue
21790 }
21791 t := v_0.Type
21792 c := ssa.AuxIntToInt16(v_0.AuxInt)
21793 o := v_1
21794 if o.Op != ssaop.OpSub16 {
21795 continue
21796 }
21797 x := o.Args[1]
21798 o_0 := o.Args[0]
21799 if o_0.Op != ssaop.OpConst16 {
21800 continue
21801 }
21802 d := ssa.AuxIntToInt16(o_0.AuxInt)
21803 if !(o.Uses == 1) {
21804 continue
21805 }
21806 v.Reset(ssaop.OpNeq16)
21807 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21808 v0.AuxInt = ssa.Int16ToAuxInt(d - c)
21809 v.AddArg2(v0, x)
21810 return true
21811 }
21812 break
21813 }
21814
21815
21816
21817 for {
21818 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21819 if v_0.Op != ssaop.OpConst16 {
21820 continue
21821 }
21822 t := v_0.Type
21823 c := ssa.AuxIntToInt16(v_0.AuxInt)
21824 o := v_1
21825 if o.Op != ssaop.OpXor16 {
21826 continue
21827 }
21828 _ = o.Args[1]
21829 o_0 := o.Args[0]
21830 o_1 := o.Args[1]
21831 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
21832 if o_0.Op != ssaop.OpConst16 {
21833 continue
21834 }
21835 d := ssa.AuxIntToInt16(o_0.AuxInt)
21836 x := o_1
21837 if !(o.Uses == 1) {
21838 continue
21839 }
21840 v.Reset(ssaop.OpNeq16)
21841 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21842 v0.AuxInt = ssa.Int16ToAuxInt(d ^ c)
21843 v.AddArg2(v0, x)
21844 return true
21845 }
21846 }
21847 break
21848 }
21849
21850
21851
21852 for {
21853 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21854 if v_0.Op != ssaop.OpConst16 {
21855 continue
21856 }
21857 t := v_0.Type
21858 c := ssa.AuxIntToInt16(v_0.AuxInt)
21859 o := v_1
21860 if o.Op != ssaop.OpCom16 {
21861 continue
21862 }
21863 x := o.Args[0]
21864 if !(o.Uses == 1) {
21865 continue
21866 }
21867 v.Reset(ssaop.OpNeq16)
21868 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21869 v0.AuxInt = ssa.Int16ToAuxInt(^c)
21870 v.AddArg2(v0, x)
21871 return true
21872 }
21873 break
21874 }
21875
21876
21877
21878 for {
21879 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21880 if v_0.Op != ssaop.OpConst16 {
21881 continue
21882 }
21883 t := v_0.Type
21884 c := ssa.AuxIntToInt16(v_0.AuxInt)
21885 o := v_1
21886 if o.Op != ssaop.OpNeg16 {
21887 continue
21888 }
21889 x := o.Args[0]
21890 if !(o.Uses == 1) {
21891 continue
21892 }
21893 v.Reset(ssaop.OpNeq16)
21894 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21895 v0.AuxInt = ssa.Int16ToAuxInt(-c)
21896 v.AddArg2(v0, x)
21897 return true
21898 }
21899 break
21900 }
21901
21902
21903
21904 for {
21905 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21906 if v_0.Op != ssaop.OpConst16 {
21907 continue
21908 }
21909 t := v_0.Type
21910 c := ssa.AuxIntToInt16(v_0.AuxInt)
21911 o := v_1
21912 if o.Op != ssaop.OpMul16 {
21913 continue
21914 }
21915 _ = o.Args[1]
21916 o_0 := o.Args[0]
21917 o_1 := o.Args[1]
21918 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
21919 if o_0.Op != ssaop.OpConst16 {
21920 continue
21921 }
21922 d := ssa.AuxIntToInt16(o_0.AuxInt)
21923 x := o_1
21924 if !(uint16(d)%2 == 1 && o.Uses == 1) {
21925 continue
21926 }
21927 v.Reset(ssaop.OpNeq16)
21928 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21929 v0.AuxInt = ssa.Int16ToAuxInt(int16(uint16(c) * uint16(modularMultiplicativeInverse(uint64(d)))))
21930 v.AddArg2(v0, x)
21931 return true
21932 }
21933 }
21934 break
21935 }
21936
21937
21938 for {
21939 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21940 if v_0.Op != ssaop.OpConst16 {
21941 continue
21942 }
21943 c := ssa.AuxIntToInt16(v_0.AuxInt)
21944 if v_1.Op != ssaop.OpConst16 {
21945 continue
21946 }
21947 d := ssa.AuxIntToInt16(v_1.AuxInt)
21948 v.Reset(ssaop.OpConstBool)
21949 v.AuxInt = ssa.BoolToAuxInt(c != d)
21950 return true
21951 }
21952 break
21953 }
21954
21955
21956
21957 for {
21958 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21959 s := v_0
21960 if s.Op != ssaop.OpSub16 {
21961 continue
21962 }
21963 y := s.Args[1]
21964 x := s.Args[0]
21965 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != 0 || !(s.Uses == 1) {
21966 continue
21967 }
21968 v.Reset(ssaop.OpNeq16)
21969 v.AddArg2(x, y)
21970 return true
21971 }
21972 break
21973 }
21974
21975
21976
21977 for {
21978 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
21979 if v_0.Op != ssaop.OpAnd16 {
21980 continue
21981 }
21982 t := v_0.Type
21983 _ = v_0.Args[1]
21984 v_0_0 := v_0.Args[0]
21985 v_0_1 := v_0.Args[1]
21986 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
21987 x := v_0_0
21988 if v_0_1.Op != ssaop.OpConst16 || v_0_1.Type != t {
21989 continue
21990 }
21991 y := ssa.AuxIntToInt16(v_0_1.AuxInt)
21992 if v_1.Op != ssaop.OpConst16 || v_1.Type != t || ssa.AuxIntToInt16(v_1.AuxInt) != y || !(ssa.OneBit(y)) {
21993 continue
21994 }
21995 v.Reset(ssaop.OpEq16)
21996 v0 := b.NewValue0(v.Pos, ssaop.OpAnd16, t)
21997 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
21998 v1.AuxInt = ssa.Int16ToAuxInt(y)
21999 v0.AddArg2(x, v1)
22000 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
22001 v2.AuxInt = ssa.Int16ToAuxInt(0)
22002 v.AddArg2(v0, v2)
22003 return true
22004 }
22005 }
22006 break
22007 }
22008
22009
22010 for {
22011 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22012 if v_0.Op != ssaop.OpZeroExt8to16 {
22013 continue
22014 }
22015 v_0_0 := v_0.Args[0]
22016 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
22017 continue
22018 }
22019 x := v_0_0.Args[0]
22020 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != 0 {
22021 continue
22022 }
22023 v.CopyOf(x)
22024 return true
22025 }
22026 break
22027 }
22028
22029
22030 for {
22031 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22032 if v_0.Op != ssaop.OpZeroExt8to16 {
22033 continue
22034 }
22035 v_0_0 := v_0.Args[0]
22036 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
22037 continue
22038 }
22039 x := v_0_0.Args[0]
22040 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != 1 {
22041 continue
22042 }
22043 v.Reset(ssaop.OpNot)
22044 v.AddArg(x)
22045 return true
22046 }
22047 break
22048 }
22049 return false
22050 }
22051 func rewriteValue_OpNeq32(v *ssa.Value) bool {
22052 v_1 := v.Args[1]
22053 v_0 := v.Args[0]
22054 b := v.Block
22055
22056
22057 for {
22058 x := v_0
22059 if x != v_1 {
22060 break
22061 }
22062 v.Reset(ssaop.OpConstBool)
22063 v.AuxInt = ssa.BoolToAuxInt(false)
22064 return true
22065 }
22066
22067
22068
22069 for {
22070 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22071 if v_0.Op != ssaop.OpConst32 {
22072 continue
22073 }
22074 t := v_0.Type
22075 c := ssa.AuxIntToInt32(v_0.AuxInt)
22076 o := v_1
22077 if o.Op != ssaop.OpAdd32 {
22078 continue
22079 }
22080 _ = o.Args[1]
22081 o_0 := o.Args[0]
22082 o_1 := o.Args[1]
22083 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22084 if o_0.Op != ssaop.OpConst32 {
22085 continue
22086 }
22087 d := ssa.AuxIntToInt32(o_0.AuxInt)
22088 x := o_1
22089 if !(o.Uses == 1) {
22090 continue
22091 }
22092 v.Reset(ssaop.OpNeq32)
22093 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22094 v0.AuxInt = ssa.Int32ToAuxInt(c - d)
22095 v.AddArg2(v0, x)
22096 return true
22097 }
22098 }
22099 break
22100 }
22101
22102
22103
22104 for {
22105 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22106 if v_0.Op != ssaop.OpConst32 {
22107 continue
22108 }
22109 t := v_0.Type
22110 c := ssa.AuxIntToInt32(v_0.AuxInt)
22111 o := v_1
22112 if o.Op != ssaop.OpSub32 {
22113 continue
22114 }
22115 _ = o.Args[1]
22116 x := o.Args[0]
22117 o_1 := o.Args[1]
22118 if o_1.Op != ssaop.OpConst32 {
22119 continue
22120 }
22121 d := ssa.AuxIntToInt32(o_1.AuxInt)
22122 if !(o.Uses == 1) {
22123 continue
22124 }
22125 v.Reset(ssaop.OpNeq32)
22126 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22127 v0.AuxInt = ssa.Int32ToAuxInt(c + d)
22128 v.AddArg2(v0, x)
22129 return true
22130 }
22131 break
22132 }
22133
22134
22135
22136 for {
22137 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22138 if v_0.Op != ssaop.OpConst32 {
22139 continue
22140 }
22141 t := v_0.Type
22142 c := ssa.AuxIntToInt32(v_0.AuxInt)
22143 o := v_1
22144 if o.Op != ssaop.OpSub32 {
22145 continue
22146 }
22147 x := o.Args[1]
22148 o_0 := o.Args[0]
22149 if o_0.Op != ssaop.OpConst32 {
22150 continue
22151 }
22152 d := ssa.AuxIntToInt32(o_0.AuxInt)
22153 if !(o.Uses == 1) {
22154 continue
22155 }
22156 v.Reset(ssaop.OpNeq32)
22157 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22158 v0.AuxInt = ssa.Int32ToAuxInt(d - c)
22159 v.AddArg2(v0, x)
22160 return true
22161 }
22162 break
22163 }
22164
22165
22166
22167 for {
22168 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22169 if v_0.Op != ssaop.OpConst32 {
22170 continue
22171 }
22172 t := v_0.Type
22173 c := ssa.AuxIntToInt32(v_0.AuxInt)
22174 o := v_1
22175 if o.Op != ssaop.OpXor32 {
22176 continue
22177 }
22178 _ = o.Args[1]
22179 o_0 := o.Args[0]
22180 o_1 := o.Args[1]
22181 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22182 if o_0.Op != ssaop.OpConst32 {
22183 continue
22184 }
22185 d := ssa.AuxIntToInt32(o_0.AuxInt)
22186 x := o_1
22187 if !(o.Uses == 1) {
22188 continue
22189 }
22190 v.Reset(ssaop.OpNeq32)
22191 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22192 v0.AuxInt = ssa.Int32ToAuxInt(d ^ c)
22193 v.AddArg2(v0, x)
22194 return true
22195 }
22196 }
22197 break
22198 }
22199
22200
22201
22202 for {
22203 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22204 if v_0.Op != ssaop.OpConst32 {
22205 continue
22206 }
22207 t := v_0.Type
22208 c := ssa.AuxIntToInt32(v_0.AuxInt)
22209 o := v_1
22210 if o.Op != ssaop.OpCom32 {
22211 continue
22212 }
22213 x := o.Args[0]
22214 if !(o.Uses == 1) {
22215 continue
22216 }
22217 v.Reset(ssaop.OpNeq32)
22218 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22219 v0.AuxInt = ssa.Int32ToAuxInt(^c)
22220 v.AddArg2(v0, x)
22221 return true
22222 }
22223 break
22224 }
22225
22226
22227
22228 for {
22229 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22230 if v_0.Op != ssaop.OpConst32 {
22231 continue
22232 }
22233 t := v_0.Type
22234 c := ssa.AuxIntToInt32(v_0.AuxInt)
22235 o := v_1
22236 if o.Op != ssaop.OpNeg32 {
22237 continue
22238 }
22239 x := o.Args[0]
22240 if !(o.Uses == 1) {
22241 continue
22242 }
22243 v.Reset(ssaop.OpNeq32)
22244 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22245 v0.AuxInt = ssa.Int32ToAuxInt(-c)
22246 v.AddArg2(v0, x)
22247 return true
22248 }
22249 break
22250 }
22251
22252
22253
22254 for {
22255 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22256 if v_0.Op != ssaop.OpConst32 {
22257 continue
22258 }
22259 t := v_0.Type
22260 c := ssa.AuxIntToInt32(v_0.AuxInt)
22261 o := v_1
22262 if o.Op != ssaop.OpMul32 {
22263 continue
22264 }
22265 _ = o.Args[1]
22266 o_0 := o.Args[0]
22267 o_1 := o.Args[1]
22268 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22269 if o_0.Op != ssaop.OpConst32 {
22270 continue
22271 }
22272 d := ssa.AuxIntToInt32(o_0.AuxInt)
22273 x := o_1
22274 if !(uint32(d)%2 == 1 && o.Uses == 1) {
22275 continue
22276 }
22277 v.Reset(ssaop.OpNeq32)
22278 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22279 v0.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) * uint32(modularMultiplicativeInverse(uint64(d)))))
22280 v.AddArg2(v0, x)
22281 return true
22282 }
22283 }
22284 break
22285 }
22286
22287
22288 for {
22289 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22290 if v_0.Op != ssaop.OpConst32 {
22291 continue
22292 }
22293 c := ssa.AuxIntToInt32(v_0.AuxInt)
22294 if v_1.Op != ssaop.OpConst32 {
22295 continue
22296 }
22297 d := ssa.AuxIntToInt32(v_1.AuxInt)
22298 v.Reset(ssaop.OpConstBool)
22299 v.AuxInt = ssa.BoolToAuxInt(c != d)
22300 return true
22301 }
22302 break
22303 }
22304
22305
22306
22307 for {
22308 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22309 s := v_0
22310 if s.Op != ssaop.OpSub32 {
22311 continue
22312 }
22313 y := s.Args[1]
22314 x := s.Args[0]
22315 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != 0 || !(s.Uses == 1) {
22316 continue
22317 }
22318 v.Reset(ssaop.OpNeq32)
22319 v.AddArg2(x, y)
22320 return true
22321 }
22322 break
22323 }
22324
22325
22326
22327 for {
22328 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22329 if v_0.Op != ssaop.OpAnd32 {
22330 continue
22331 }
22332 t := v_0.Type
22333 _ = v_0.Args[1]
22334 v_0_0 := v_0.Args[0]
22335 v_0_1 := v_0.Args[1]
22336 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
22337 x := v_0_0
22338 if v_0_1.Op != ssaop.OpConst32 || v_0_1.Type != t {
22339 continue
22340 }
22341 y := ssa.AuxIntToInt32(v_0_1.AuxInt)
22342 if v_1.Op != ssaop.OpConst32 || v_1.Type != t || ssa.AuxIntToInt32(v_1.AuxInt) != y || !(ssa.OneBit(y)) {
22343 continue
22344 }
22345 v.Reset(ssaop.OpEq32)
22346 v0 := b.NewValue0(v.Pos, ssaop.OpAnd32, t)
22347 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22348 v1.AuxInt = ssa.Int32ToAuxInt(y)
22349 v0.AddArg2(x, v1)
22350 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
22351 v2.AuxInt = ssa.Int32ToAuxInt(0)
22352 v.AddArg2(v0, v2)
22353 return true
22354 }
22355 }
22356 break
22357 }
22358
22359
22360 for {
22361 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22362 if v_0.Op != ssaop.OpZeroExt8to32 {
22363 continue
22364 }
22365 v_0_0 := v_0.Args[0]
22366 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
22367 continue
22368 }
22369 x := v_0_0.Args[0]
22370 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != 0 {
22371 continue
22372 }
22373 v.CopyOf(x)
22374 return true
22375 }
22376 break
22377 }
22378
22379
22380 for {
22381 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22382 if v_0.Op != ssaop.OpZeroExt8to32 {
22383 continue
22384 }
22385 v_0_0 := v_0.Args[0]
22386 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
22387 continue
22388 }
22389 x := v_0_0.Args[0]
22390 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != 1 {
22391 continue
22392 }
22393 v.Reset(ssaop.OpNot)
22394 v.AddArg(x)
22395 return true
22396 }
22397 break
22398 }
22399 return false
22400 }
22401 func rewriteValue_OpNeq32F(v *ssa.Value) bool {
22402 v_1 := v.Args[1]
22403 v_0 := v.Args[0]
22404
22405
22406 for {
22407 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22408 if v_0.Op != ssaop.OpConst32F {
22409 continue
22410 }
22411 c := ssa.AuxIntToFloat32(v_0.AuxInt)
22412 if v_1.Op != ssaop.OpConst32F {
22413 continue
22414 }
22415 d := ssa.AuxIntToFloat32(v_1.AuxInt)
22416 v.Reset(ssaop.OpConstBool)
22417 v.AuxInt = ssa.BoolToAuxInt(c != d)
22418 return true
22419 }
22420 break
22421 }
22422 return false
22423 }
22424 func rewriteValue_OpNeq64(v *ssa.Value) bool {
22425 v_1 := v.Args[1]
22426 v_0 := v.Args[0]
22427 b := v.Block
22428
22429
22430 for {
22431 x := v_0
22432 if x != v_1 {
22433 break
22434 }
22435 v.Reset(ssaop.OpConstBool)
22436 v.AuxInt = ssa.BoolToAuxInt(false)
22437 return true
22438 }
22439
22440
22441
22442 for {
22443 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22444 if v_0.Op != ssaop.OpConst64 {
22445 continue
22446 }
22447 t := v_0.Type
22448 c := ssa.AuxIntToInt64(v_0.AuxInt)
22449 o := v_1
22450 if o.Op != ssaop.OpAdd64 {
22451 continue
22452 }
22453 _ = o.Args[1]
22454 o_0 := o.Args[0]
22455 o_1 := o.Args[1]
22456 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22457 if o_0.Op != ssaop.OpConst64 {
22458 continue
22459 }
22460 d := ssa.AuxIntToInt64(o_0.AuxInt)
22461 x := o_1
22462 if !(o.Uses == 1) {
22463 continue
22464 }
22465 v.Reset(ssaop.OpNeq64)
22466 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22467 v0.AuxInt = ssa.Int64ToAuxInt(c - d)
22468 v.AddArg2(v0, x)
22469 return true
22470 }
22471 }
22472 break
22473 }
22474
22475
22476
22477 for {
22478 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22479 if v_0.Op != ssaop.OpConst64 {
22480 continue
22481 }
22482 t := v_0.Type
22483 c := ssa.AuxIntToInt64(v_0.AuxInt)
22484 o := v_1
22485 if o.Op != ssaop.OpSub64 {
22486 continue
22487 }
22488 _ = o.Args[1]
22489 x := o.Args[0]
22490 o_1 := o.Args[1]
22491 if o_1.Op != ssaop.OpConst64 {
22492 continue
22493 }
22494 d := ssa.AuxIntToInt64(o_1.AuxInt)
22495 if !(o.Uses == 1) {
22496 continue
22497 }
22498 v.Reset(ssaop.OpNeq64)
22499 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22500 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
22501 v.AddArg2(v0, x)
22502 return true
22503 }
22504 break
22505 }
22506
22507
22508
22509 for {
22510 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22511 if v_0.Op != ssaop.OpConst64 {
22512 continue
22513 }
22514 t := v_0.Type
22515 c := ssa.AuxIntToInt64(v_0.AuxInt)
22516 o := v_1
22517 if o.Op != ssaop.OpSub64 {
22518 continue
22519 }
22520 x := o.Args[1]
22521 o_0 := o.Args[0]
22522 if o_0.Op != ssaop.OpConst64 {
22523 continue
22524 }
22525 d := ssa.AuxIntToInt64(o_0.AuxInt)
22526 if !(o.Uses == 1) {
22527 continue
22528 }
22529 v.Reset(ssaop.OpNeq64)
22530 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22531 v0.AuxInt = ssa.Int64ToAuxInt(d - c)
22532 v.AddArg2(v0, x)
22533 return true
22534 }
22535 break
22536 }
22537
22538
22539
22540 for {
22541 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22542 if v_0.Op != ssaop.OpConst64 {
22543 continue
22544 }
22545 t := v_0.Type
22546 c := ssa.AuxIntToInt64(v_0.AuxInt)
22547 o := v_1
22548 if o.Op != ssaop.OpXor64 {
22549 continue
22550 }
22551 _ = o.Args[1]
22552 o_0 := o.Args[0]
22553 o_1 := o.Args[1]
22554 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22555 if o_0.Op != ssaop.OpConst64 {
22556 continue
22557 }
22558 d := ssa.AuxIntToInt64(o_0.AuxInt)
22559 x := o_1
22560 if !(o.Uses == 1) {
22561 continue
22562 }
22563 v.Reset(ssaop.OpNeq64)
22564 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22565 v0.AuxInt = ssa.Int64ToAuxInt(d ^ c)
22566 v.AddArg2(v0, x)
22567 return true
22568 }
22569 }
22570 break
22571 }
22572
22573
22574
22575 for {
22576 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22577 if v_0.Op != ssaop.OpConst64 {
22578 continue
22579 }
22580 t := v_0.Type
22581 c := ssa.AuxIntToInt64(v_0.AuxInt)
22582 o := v_1
22583 if o.Op != ssaop.OpCom64 {
22584 continue
22585 }
22586 x := o.Args[0]
22587 if !(o.Uses == 1) {
22588 continue
22589 }
22590 v.Reset(ssaop.OpNeq64)
22591 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22592 v0.AuxInt = ssa.Int64ToAuxInt(^c)
22593 v.AddArg2(v0, x)
22594 return true
22595 }
22596 break
22597 }
22598
22599
22600
22601 for {
22602 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22603 if v_0.Op != ssaop.OpConst64 {
22604 continue
22605 }
22606 t := v_0.Type
22607 c := ssa.AuxIntToInt64(v_0.AuxInt)
22608 o := v_1
22609 if o.Op != ssaop.OpNeg64 {
22610 continue
22611 }
22612 x := o.Args[0]
22613 if !(o.Uses == 1) {
22614 continue
22615 }
22616 v.Reset(ssaop.OpNeq64)
22617 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22618 v0.AuxInt = ssa.Int64ToAuxInt(-c)
22619 v.AddArg2(v0, x)
22620 return true
22621 }
22622 break
22623 }
22624
22625
22626
22627 for {
22628 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22629 if v_0.Op != ssaop.OpConst64 {
22630 continue
22631 }
22632 t := v_0.Type
22633 c := ssa.AuxIntToInt64(v_0.AuxInt)
22634 o := v_1
22635 if o.Op != ssaop.OpMul64 {
22636 continue
22637 }
22638 _ = o.Args[1]
22639 o_0 := o.Args[0]
22640 o_1 := o.Args[1]
22641 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22642 if o_0.Op != ssaop.OpConst64 {
22643 continue
22644 }
22645 d := ssa.AuxIntToInt64(o_0.AuxInt)
22646 x := o_1
22647 if !(uint64(d)%2 == 1 && o.Uses == 1) {
22648 continue
22649 }
22650 v.Reset(ssaop.OpNeq64)
22651 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22652 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint64(c) * modularMultiplicativeInverse(uint64(d))))
22653 v.AddArg2(v0, x)
22654 return true
22655 }
22656 }
22657 break
22658 }
22659
22660
22661 for {
22662 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22663 if v_0.Op != ssaop.OpConst64 {
22664 continue
22665 }
22666 c := ssa.AuxIntToInt64(v_0.AuxInt)
22667 if v_1.Op != ssaop.OpConst64 {
22668 continue
22669 }
22670 d := ssa.AuxIntToInt64(v_1.AuxInt)
22671 v.Reset(ssaop.OpConstBool)
22672 v.AuxInt = ssa.BoolToAuxInt(c != d)
22673 return true
22674 }
22675 break
22676 }
22677
22678
22679
22680 for {
22681 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22682 s := v_0
22683 if s.Op != ssaop.OpSub64 {
22684 continue
22685 }
22686 y := s.Args[1]
22687 x := s.Args[0]
22688 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 || !(s.Uses == 1) {
22689 continue
22690 }
22691 v.Reset(ssaop.OpNeq64)
22692 v.AddArg2(x, y)
22693 return true
22694 }
22695 break
22696 }
22697
22698
22699
22700 for {
22701 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22702 if v_0.Op != ssaop.OpAnd64 {
22703 continue
22704 }
22705 t := v_0.Type
22706 _ = v_0.Args[1]
22707 v_0_0 := v_0.Args[0]
22708 v_0_1 := v_0.Args[1]
22709 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
22710 x := v_0_0
22711 if v_0_1.Op != ssaop.OpConst64 || v_0_1.Type != t {
22712 continue
22713 }
22714 y := ssa.AuxIntToInt64(v_0_1.AuxInt)
22715 if v_1.Op != ssaop.OpConst64 || v_1.Type != t || ssa.AuxIntToInt64(v_1.AuxInt) != y || !(ssa.OneBit(y)) {
22716 continue
22717 }
22718 v.Reset(ssaop.OpEq64)
22719 v0 := b.NewValue0(v.Pos, ssaop.OpAnd64, t)
22720 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22721 v1.AuxInt = ssa.Int64ToAuxInt(y)
22722 v0.AddArg2(x, v1)
22723 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
22724 v2.AuxInt = ssa.Int64ToAuxInt(0)
22725 v.AddArg2(v0, v2)
22726 return true
22727 }
22728 }
22729 break
22730 }
22731
22732
22733 for {
22734 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22735 if v_0.Op != ssaop.OpZeroExt8to64 {
22736 continue
22737 }
22738 v_0_0 := v_0.Args[0]
22739 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
22740 continue
22741 }
22742 x := v_0_0.Args[0]
22743 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
22744 continue
22745 }
22746 v.CopyOf(x)
22747 return true
22748 }
22749 break
22750 }
22751
22752
22753 for {
22754 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22755 if v_0.Op != ssaop.OpZeroExt8to64 {
22756 continue
22757 }
22758 v_0_0 := v_0.Args[0]
22759 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
22760 continue
22761 }
22762 x := v_0_0.Args[0]
22763 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 1 {
22764 continue
22765 }
22766 v.Reset(ssaop.OpNot)
22767 v.AddArg(x)
22768 return true
22769 }
22770 break
22771 }
22772 return false
22773 }
22774 func rewriteValue_OpNeq64F(v *ssa.Value) bool {
22775 v_1 := v.Args[1]
22776 v_0 := v.Args[0]
22777
22778
22779 for {
22780 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22781 if v_0.Op != ssaop.OpConst64F {
22782 continue
22783 }
22784 c := ssa.AuxIntToFloat64(v_0.AuxInt)
22785 if v_1.Op != ssaop.OpConst64F {
22786 continue
22787 }
22788 d := ssa.AuxIntToFloat64(v_1.AuxInt)
22789 v.Reset(ssaop.OpConstBool)
22790 v.AuxInt = ssa.BoolToAuxInt(c != d)
22791 return true
22792 }
22793 break
22794 }
22795 return false
22796 }
22797 func rewriteValue_OpNeq8(v *ssa.Value) bool {
22798 v_1 := v.Args[1]
22799 v_0 := v.Args[0]
22800 b := v.Block
22801
22802
22803 for {
22804 x := v_0
22805 if x != v_1 {
22806 break
22807 }
22808 v.Reset(ssaop.OpConstBool)
22809 v.AuxInt = ssa.BoolToAuxInt(false)
22810 return true
22811 }
22812
22813
22814
22815 for {
22816 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22817 if v_0.Op != ssaop.OpConst8 {
22818 continue
22819 }
22820 t := v_0.Type
22821 c := ssa.AuxIntToInt8(v_0.AuxInt)
22822 o := v_1
22823 if o.Op != ssaop.OpAdd8 {
22824 continue
22825 }
22826 _ = o.Args[1]
22827 o_0 := o.Args[0]
22828 o_1 := o.Args[1]
22829 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22830 if o_0.Op != ssaop.OpConst8 {
22831 continue
22832 }
22833 d := ssa.AuxIntToInt8(o_0.AuxInt)
22834 x := o_1
22835 if !(o.Uses == 1) {
22836 continue
22837 }
22838 v.Reset(ssaop.OpNeq8)
22839 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
22840 v0.AuxInt = ssa.Int8ToAuxInt(c - d)
22841 v.AddArg2(v0, x)
22842 return true
22843 }
22844 }
22845 break
22846 }
22847
22848
22849
22850 for {
22851 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22852 if v_0.Op != ssaop.OpConst8 {
22853 continue
22854 }
22855 t := v_0.Type
22856 c := ssa.AuxIntToInt8(v_0.AuxInt)
22857 o := v_1
22858 if o.Op != ssaop.OpSub8 {
22859 continue
22860 }
22861 _ = o.Args[1]
22862 x := o.Args[0]
22863 o_1 := o.Args[1]
22864 if o_1.Op != ssaop.OpConst8 {
22865 continue
22866 }
22867 d := ssa.AuxIntToInt8(o_1.AuxInt)
22868 if !(o.Uses == 1) {
22869 continue
22870 }
22871 v.Reset(ssaop.OpNeq8)
22872 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
22873 v0.AuxInt = ssa.Int8ToAuxInt(c + d)
22874 v.AddArg2(v0, x)
22875 return true
22876 }
22877 break
22878 }
22879
22880
22881
22882 for {
22883 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22884 if v_0.Op != ssaop.OpConst8 {
22885 continue
22886 }
22887 t := v_0.Type
22888 c := ssa.AuxIntToInt8(v_0.AuxInt)
22889 o := v_1
22890 if o.Op != ssaop.OpSub8 {
22891 continue
22892 }
22893 x := o.Args[1]
22894 o_0 := o.Args[0]
22895 if o_0.Op != ssaop.OpConst8 {
22896 continue
22897 }
22898 d := ssa.AuxIntToInt8(o_0.AuxInt)
22899 if !(o.Uses == 1) {
22900 continue
22901 }
22902 v.Reset(ssaop.OpNeq8)
22903 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
22904 v0.AuxInt = ssa.Int8ToAuxInt(d - c)
22905 v.AddArg2(v0, x)
22906 return true
22907 }
22908 break
22909 }
22910
22911
22912
22913 for {
22914 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22915 if v_0.Op != ssaop.OpConst8 {
22916 continue
22917 }
22918 t := v_0.Type
22919 c := ssa.AuxIntToInt8(v_0.AuxInt)
22920 o := v_1
22921 if o.Op != ssaop.OpXor8 {
22922 continue
22923 }
22924 _ = o.Args[1]
22925 o_0 := o.Args[0]
22926 o_1 := o.Args[1]
22927 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
22928 if o_0.Op != ssaop.OpConst8 {
22929 continue
22930 }
22931 d := ssa.AuxIntToInt8(o_0.AuxInt)
22932 x := o_1
22933 if !(o.Uses == 1) {
22934 continue
22935 }
22936 v.Reset(ssaop.OpNeq8)
22937 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
22938 v0.AuxInt = ssa.Int8ToAuxInt(d ^ c)
22939 v.AddArg2(v0, x)
22940 return true
22941 }
22942 }
22943 break
22944 }
22945
22946
22947
22948 for {
22949 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22950 if v_0.Op != ssaop.OpConst8 {
22951 continue
22952 }
22953 t := v_0.Type
22954 c := ssa.AuxIntToInt8(v_0.AuxInt)
22955 o := v_1
22956 if o.Op != ssaop.OpCom8 {
22957 continue
22958 }
22959 x := o.Args[0]
22960 if !(o.Uses == 1) {
22961 continue
22962 }
22963 v.Reset(ssaop.OpNeq8)
22964 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
22965 v0.AuxInt = ssa.Int8ToAuxInt(^c)
22966 v.AddArg2(v0, x)
22967 return true
22968 }
22969 break
22970 }
22971
22972
22973
22974 for {
22975 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
22976 if v_0.Op != ssaop.OpConst8 {
22977 continue
22978 }
22979 t := v_0.Type
22980 c := ssa.AuxIntToInt8(v_0.AuxInt)
22981 o := v_1
22982 if o.Op != ssaop.OpNeg8 {
22983 continue
22984 }
22985 x := o.Args[0]
22986 if !(o.Uses == 1) {
22987 continue
22988 }
22989 v.Reset(ssaop.OpNeq8)
22990 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
22991 v0.AuxInt = ssa.Int8ToAuxInt(-c)
22992 v.AddArg2(v0, x)
22993 return true
22994 }
22995 break
22996 }
22997
22998
22999
23000 for {
23001 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23002 if v_0.Op != ssaop.OpConst8 {
23003 continue
23004 }
23005 t := v_0.Type
23006 c := ssa.AuxIntToInt8(v_0.AuxInt)
23007 o := v_1
23008 if o.Op != ssaop.OpMul8 {
23009 continue
23010 }
23011 _ = o.Args[1]
23012 o_0 := o.Args[0]
23013 o_1 := o.Args[1]
23014 for _i1 := 0; _i1 <= 1; _i1, o_0, o_1 = _i1+1, o_1, o_0 {
23015 if o_0.Op != ssaop.OpConst8 {
23016 continue
23017 }
23018 d := ssa.AuxIntToInt8(o_0.AuxInt)
23019 x := o_1
23020 if !(uint8(d)%2 == 1 && o.Uses == 1) {
23021 continue
23022 }
23023 v.Reset(ssaop.OpNeq8)
23024 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
23025 v0.AuxInt = ssa.Int8ToAuxInt(int8(uint8(c) * uint8(modularMultiplicativeInverse(uint64(d)))))
23026 v.AddArg2(v0, x)
23027 return true
23028 }
23029 }
23030 break
23031 }
23032
23033
23034 for {
23035 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23036 if v_0.Op != ssaop.OpConst8 {
23037 continue
23038 }
23039 c := ssa.AuxIntToInt8(v_0.AuxInt)
23040 if v_1.Op != ssaop.OpConst8 {
23041 continue
23042 }
23043 d := ssa.AuxIntToInt8(v_1.AuxInt)
23044 v.Reset(ssaop.OpConstBool)
23045 v.AuxInt = ssa.BoolToAuxInt(c != d)
23046 return true
23047 }
23048 break
23049 }
23050
23051
23052
23053 for {
23054 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23055 s := v_0
23056 if s.Op != ssaop.OpSub8 {
23057 continue
23058 }
23059 y := s.Args[1]
23060 x := s.Args[0]
23061 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != 0 || !(s.Uses == 1) {
23062 continue
23063 }
23064 v.Reset(ssaop.OpNeq8)
23065 v.AddArg2(x, y)
23066 return true
23067 }
23068 break
23069 }
23070
23071
23072
23073 for {
23074 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23075 if v_0.Op != ssaop.OpAnd8 {
23076 continue
23077 }
23078 t := v_0.Type
23079 _ = v_0.Args[1]
23080 v_0_0 := v_0.Args[0]
23081 v_0_1 := v_0.Args[1]
23082 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
23083 x := v_0_0
23084 if v_0_1.Op != ssaop.OpConst8 || v_0_1.Type != t {
23085 continue
23086 }
23087 y := ssa.AuxIntToInt8(v_0_1.AuxInt)
23088 if v_1.Op != ssaop.OpConst8 || v_1.Type != t || ssa.AuxIntToInt8(v_1.AuxInt) != y || !(ssa.OneBit(y)) {
23089 continue
23090 }
23091 v.Reset(ssaop.OpEq8)
23092 v0 := b.NewValue0(v.Pos, ssaop.OpAnd8, t)
23093 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
23094 v1.AuxInt = ssa.Int8ToAuxInt(y)
23095 v0.AddArg2(x, v1)
23096 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
23097 v2.AuxInt = ssa.Int8ToAuxInt(0)
23098 v.AddArg2(v0, v2)
23099 return true
23100 }
23101 }
23102 break
23103 }
23104
23105
23106 for {
23107 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23108 if v_0.Op != ssaop.OpCvtBoolToUint8 {
23109 continue
23110 }
23111 x := v_0.Args[0]
23112 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != 0 {
23113 continue
23114 }
23115 v.CopyOf(x)
23116 return true
23117 }
23118 break
23119 }
23120
23121
23122 for {
23123 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23124 if v_0.Op != ssaop.OpCvtBoolToUint8 {
23125 continue
23126 }
23127 x := v_0.Args[0]
23128 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != 1 {
23129 continue
23130 }
23131 v.Reset(ssaop.OpNot)
23132 v.AddArg(x)
23133 return true
23134 }
23135 break
23136 }
23137 return false
23138 }
23139 func rewriteValue_OpNeqB(v *ssa.Value) bool {
23140 v_1 := v.Args[1]
23141 v_0 := v.Args[0]
23142
23143
23144 for {
23145 x := v_0
23146 if x != v_1 {
23147 break
23148 }
23149 v.Reset(ssaop.OpConstBool)
23150 v.AuxInt = ssa.BoolToAuxInt(false)
23151 return true
23152 }
23153
23154
23155 for {
23156 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23157 if v_0.Op != ssaop.OpConstBool {
23158 continue
23159 }
23160 c := ssa.AuxIntToBool(v_0.AuxInt)
23161 if v_1.Op != ssaop.OpConstBool {
23162 continue
23163 }
23164 d := ssa.AuxIntToBool(v_1.AuxInt)
23165 v.Reset(ssaop.OpConstBool)
23166 v.AuxInt = ssa.BoolToAuxInt(c != d)
23167 return true
23168 }
23169 break
23170 }
23171
23172
23173 for {
23174 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23175 if v_0.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_0.AuxInt) != false {
23176 continue
23177 }
23178 x := v_1
23179 v.CopyOf(x)
23180 return true
23181 }
23182 break
23183 }
23184
23185
23186 for {
23187 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23188 if v_0.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_0.AuxInt) != true {
23189 continue
23190 }
23191 x := v_1
23192 v.Reset(ssaop.OpNot)
23193 v.AddArg(x)
23194 return true
23195 }
23196 break
23197 }
23198
23199
23200 for {
23201 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23202 if v_0.Op != ssaop.OpNot {
23203 continue
23204 }
23205 x := v_0.Args[0]
23206 y := v_1
23207 v.Reset(ssaop.OpEqB)
23208 v.AddArg2(x, y)
23209 return true
23210 }
23211 break
23212 }
23213 return false
23214 }
23215 func rewriteValue_OpNeqInter(v *ssa.Value) bool {
23216 v_1 := v.Args[1]
23217 v_0 := v.Args[0]
23218 b := v.Block
23219 typ := &b.Func.Config.Types
23220
23221
23222 for {
23223 x := v_0
23224 y := v_1
23225 v.Reset(ssaop.OpNeqPtr)
23226 v0 := b.NewValue0(v.Pos, ssaop.OpITab, typ.Uintptr)
23227 v0.AddArg(x)
23228 v1 := b.NewValue0(v.Pos, ssaop.OpITab, typ.Uintptr)
23229 v1.AddArg(y)
23230 v.AddArg2(v0, v1)
23231 return true
23232 }
23233 }
23234 func rewriteValue_OpNeqPtr(v *ssa.Value) bool {
23235 v_1 := v.Args[1]
23236 v_0 := v.Args[0]
23237
23238
23239 for {
23240 x := v_0
23241 if x != v_1 {
23242 break
23243 }
23244 v.Reset(ssaop.OpConstBool)
23245 v.AuxInt = ssa.BoolToAuxInt(false)
23246 return true
23247 }
23248
23249
23250 for {
23251 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23252 if v_0.Op != ssaop.OpAddr {
23253 continue
23254 }
23255 x := ssa.AuxToSym(v_0.Aux)
23256 if v_1.Op != ssaop.OpAddr {
23257 continue
23258 }
23259 y := ssa.AuxToSym(v_1.Aux)
23260 v.Reset(ssaop.OpConstBool)
23261 v.AuxInt = ssa.BoolToAuxInt(x != y)
23262 return true
23263 }
23264 break
23265 }
23266
23267
23268 for {
23269 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23270 if v_0.Op != ssaop.OpAddr {
23271 continue
23272 }
23273 x := ssa.AuxToSym(v_0.Aux)
23274 if v_1.Op != ssaop.OpOffPtr {
23275 continue
23276 }
23277 o := ssa.AuxIntToInt64(v_1.AuxInt)
23278 v_1_0 := v_1.Args[0]
23279 if v_1_0.Op != ssaop.OpAddr {
23280 continue
23281 }
23282 y := ssa.AuxToSym(v_1_0.Aux)
23283 v.Reset(ssaop.OpConstBool)
23284 v.AuxInt = ssa.BoolToAuxInt(x != y || o != 0)
23285 return true
23286 }
23287 break
23288 }
23289
23290
23291 for {
23292 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23293 if v_0.Op != ssaop.OpOffPtr {
23294 continue
23295 }
23296 o1 := ssa.AuxIntToInt64(v_0.AuxInt)
23297 v_0_0 := v_0.Args[0]
23298 if v_0_0.Op != ssaop.OpAddr {
23299 continue
23300 }
23301 x := ssa.AuxToSym(v_0_0.Aux)
23302 if v_1.Op != ssaop.OpOffPtr {
23303 continue
23304 }
23305 o2 := ssa.AuxIntToInt64(v_1.AuxInt)
23306 v_1_0 := v_1.Args[0]
23307 if v_1_0.Op != ssaop.OpAddr {
23308 continue
23309 }
23310 y := ssa.AuxToSym(v_1_0.Aux)
23311 v.Reset(ssaop.OpConstBool)
23312 v.AuxInt = ssa.BoolToAuxInt(x != y || o1 != o2)
23313 return true
23314 }
23315 break
23316 }
23317
23318
23319 for {
23320 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23321 if v_0.Op != ssaop.OpLocalAddr {
23322 continue
23323 }
23324 x := ssa.AuxToSym(v_0.Aux)
23325 if v_1.Op != ssaop.OpLocalAddr {
23326 continue
23327 }
23328 y := ssa.AuxToSym(v_1.Aux)
23329 v.Reset(ssaop.OpConstBool)
23330 v.AuxInt = ssa.BoolToAuxInt(x != y)
23331 return true
23332 }
23333 break
23334 }
23335
23336
23337 for {
23338 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23339 if v_0.Op != ssaop.OpLocalAddr {
23340 continue
23341 }
23342 x := ssa.AuxToSym(v_0.Aux)
23343 if v_1.Op != ssaop.OpOffPtr {
23344 continue
23345 }
23346 o := ssa.AuxIntToInt64(v_1.AuxInt)
23347 v_1_0 := v_1.Args[0]
23348 if v_1_0.Op != ssaop.OpLocalAddr {
23349 continue
23350 }
23351 y := ssa.AuxToSym(v_1_0.Aux)
23352 v.Reset(ssaop.OpConstBool)
23353 v.AuxInt = ssa.BoolToAuxInt(x != y || o != 0)
23354 return true
23355 }
23356 break
23357 }
23358
23359
23360 for {
23361 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23362 if v_0.Op != ssaop.OpOffPtr {
23363 continue
23364 }
23365 o1 := ssa.AuxIntToInt64(v_0.AuxInt)
23366 v_0_0 := v_0.Args[0]
23367 if v_0_0.Op != ssaop.OpLocalAddr {
23368 continue
23369 }
23370 x := ssa.AuxToSym(v_0_0.Aux)
23371 if v_1.Op != ssaop.OpOffPtr {
23372 continue
23373 }
23374 o2 := ssa.AuxIntToInt64(v_1.AuxInt)
23375 v_1_0 := v_1.Args[0]
23376 if v_1_0.Op != ssaop.OpLocalAddr {
23377 continue
23378 }
23379 y := ssa.AuxToSym(v_1_0.Aux)
23380 v.Reset(ssaop.OpConstBool)
23381 v.AuxInt = ssa.BoolToAuxInt(x != y || o1 != o2)
23382 return true
23383 }
23384 break
23385 }
23386
23387
23388
23389 for {
23390 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23391 if v_0.Op != ssaop.OpOffPtr {
23392 continue
23393 }
23394 o1 := ssa.AuxIntToInt64(v_0.AuxInt)
23395 p1 := v_0.Args[0]
23396 p2 := v_1
23397 if !(ssa.IsSamePtr(p1, p2)) {
23398 continue
23399 }
23400 v.Reset(ssaop.OpConstBool)
23401 v.AuxInt = ssa.BoolToAuxInt(o1 != 0)
23402 return true
23403 }
23404 break
23405 }
23406
23407
23408
23409 for {
23410 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23411 if v_0.Op != ssaop.OpOffPtr {
23412 continue
23413 }
23414 o1 := ssa.AuxIntToInt64(v_0.AuxInt)
23415 p1 := v_0.Args[0]
23416 if v_1.Op != ssaop.OpOffPtr {
23417 continue
23418 }
23419 o2 := ssa.AuxIntToInt64(v_1.AuxInt)
23420 p2 := v_1.Args[0]
23421 if !(ssa.IsSamePtr(p1, p2)) {
23422 continue
23423 }
23424 v.Reset(ssaop.OpConstBool)
23425 v.AuxInt = ssa.BoolToAuxInt(o1 != o2)
23426 return true
23427 }
23428 break
23429 }
23430
23431
23432 for {
23433 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23434 if v_0.Op != ssaop.OpConst32 {
23435 continue
23436 }
23437 c := ssa.AuxIntToInt32(v_0.AuxInt)
23438 if v_1.Op != ssaop.OpConst32 {
23439 continue
23440 }
23441 d := ssa.AuxIntToInt32(v_1.AuxInt)
23442 v.Reset(ssaop.OpConstBool)
23443 v.AuxInt = ssa.BoolToAuxInt(c != d)
23444 return true
23445 }
23446 break
23447 }
23448
23449
23450 for {
23451 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23452 if v_0.Op != ssaop.OpConst64 {
23453 continue
23454 }
23455 c := ssa.AuxIntToInt64(v_0.AuxInt)
23456 if v_1.Op != ssaop.OpConst64 {
23457 continue
23458 }
23459 d := ssa.AuxIntToInt64(v_1.AuxInt)
23460 v.Reset(ssaop.OpConstBool)
23461 v.AuxInt = ssa.BoolToAuxInt(c != d)
23462 return true
23463 }
23464 break
23465 }
23466
23467
23468 for {
23469 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23470 if v_0.Op != ssaop.OpConvert {
23471 continue
23472 }
23473 v_0_0 := v_0.Args[0]
23474 if v_0_0.Op != ssaop.OpAddr {
23475 continue
23476 }
23477 x := ssa.AuxToSym(v_0_0.Aux)
23478 if v_1.Op != ssaop.OpAddr {
23479 continue
23480 }
23481 y := ssa.AuxToSym(v_1.Aux)
23482 v.Reset(ssaop.OpConstBool)
23483 v.AuxInt = ssa.BoolToAuxInt(x != y)
23484 return true
23485 }
23486 break
23487 }
23488
23489
23490 for {
23491 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23492 if v_0.Op != ssaop.OpLocalAddr || v_1.Op != ssaop.OpAddr {
23493 continue
23494 }
23495 v.Reset(ssaop.OpConstBool)
23496 v.AuxInt = ssa.BoolToAuxInt(true)
23497 return true
23498 }
23499 break
23500 }
23501
23502
23503 for {
23504 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23505 if v_0.Op != ssaop.OpOffPtr {
23506 continue
23507 }
23508 v_0_0 := v_0.Args[0]
23509 if v_0_0.Op != ssaop.OpLocalAddr || v_1.Op != ssaop.OpAddr {
23510 continue
23511 }
23512 v.Reset(ssaop.OpConstBool)
23513 v.AuxInt = ssa.BoolToAuxInt(true)
23514 return true
23515 }
23516 break
23517 }
23518
23519
23520 for {
23521 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23522 if v_0.Op != ssaop.OpLocalAddr || v_1.Op != ssaop.OpOffPtr {
23523 continue
23524 }
23525 v_1_0 := v_1.Args[0]
23526 if v_1_0.Op != ssaop.OpAddr {
23527 continue
23528 }
23529 v.Reset(ssaop.OpConstBool)
23530 v.AuxInt = ssa.BoolToAuxInt(true)
23531 return true
23532 }
23533 break
23534 }
23535
23536
23537 for {
23538 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23539 if v_0.Op != ssaop.OpOffPtr {
23540 continue
23541 }
23542 v_0_0 := v_0.Args[0]
23543 if v_0_0.Op != ssaop.OpLocalAddr || v_1.Op != ssaop.OpOffPtr {
23544 continue
23545 }
23546 v_1_0 := v_1.Args[0]
23547 if v_1_0.Op != ssaop.OpAddr {
23548 continue
23549 }
23550 v.Reset(ssaop.OpConstBool)
23551 v.AuxInt = ssa.BoolToAuxInt(true)
23552 return true
23553 }
23554 break
23555 }
23556
23557
23558
23559 for {
23560 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23561 if v_0.Op != ssaop.OpAddPtr {
23562 continue
23563 }
23564 o1 := v_0.Args[1]
23565 p1 := v_0.Args[0]
23566 p2 := v_1
23567 if !(ssa.IsSamePtr(p1, p2)) {
23568 continue
23569 }
23570 v.Reset(ssaop.OpIsNonNil)
23571 v.AddArg(o1)
23572 return true
23573 }
23574 break
23575 }
23576
23577
23578 for {
23579 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23580 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
23581 continue
23582 }
23583 p := v_1
23584 v.Reset(ssaop.OpIsNonNil)
23585 v.AddArg(p)
23586 return true
23587 }
23588 break
23589 }
23590
23591
23592 for {
23593 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23594 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
23595 continue
23596 }
23597 p := v_1
23598 v.Reset(ssaop.OpIsNonNil)
23599 v.AddArg(p)
23600 return true
23601 }
23602 break
23603 }
23604
23605
23606 for {
23607 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
23608 if v_0.Op != ssaop.OpConstNil {
23609 continue
23610 }
23611 p := v_1
23612 v.Reset(ssaop.OpIsNonNil)
23613 v.AddArg(p)
23614 return true
23615 }
23616 break
23617 }
23618 return false
23619 }
23620 func rewriteValue_OpNeqSlice(v *ssa.Value) bool {
23621 v_1 := v.Args[1]
23622 v_0 := v.Args[0]
23623 b := v.Block
23624 typ := &b.Func.Config.Types
23625
23626
23627 for {
23628 x := v_0
23629 y := v_1
23630 v.Reset(ssaop.OpNeqPtr)
23631 v0 := b.NewValue0(v.Pos, ssaop.OpSlicePtr, typ.BytePtr)
23632 v0.AddArg(x)
23633 v1 := b.NewValue0(v.Pos, ssaop.OpSlicePtr, typ.BytePtr)
23634 v1.AddArg(y)
23635 v.AddArg2(v0, v1)
23636 return true
23637 }
23638 }
23639 func rewriteValue_OpNilCheck(v *ssa.Value) bool {
23640 v_1 := v.Args[1]
23641 v_0 := v.Args[0]
23642 b := v.Block
23643 fe := b.Func.Fe
23644
23645
23646 for {
23647 ptr := v_0
23648 if ptr.Op != ssaop.OpGetG {
23649 break
23650 }
23651 mem := ptr.Args[0]
23652 if mem != v_1 {
23653 break
23654 }
23655 v.CopyOf(ptr)
23656 return true
23657 }
23658
23659
23660
23661 for {
23662 ptr := v_0
23663 if ptr.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(ptr.AuxInt) != 0 {
23664 break
23665 }
23666 call := ptr.Args[0]
23667 if call.Op != ssaop.OpStaticLECall {
23668 break
23669 }
23670 if !(isMalloc(call.Aux) && warnRule(fe.Debug_checknil(), v, "removed nil check")) {
23671 break
23672 }
23673 v.CopyOf(ptr)
23674 return true
23675 }
23676
23677
23678
23679 for {
23680 ptr := v_0
23681 if ptr.Op != ssaop.OpOffPtr {
23682 break
23683 }
23684 ptr_0 := ptr.Args[0]
23685 if ptr_0.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(ptr_0.AuxInt) != 0 {
23686 break
23687 }
23688 call := ptr_0.Args[0]
23689 if call.Op != ssaop.OpStaticLECall {
23690 break
23691 }
23692 if !(isMalloc(call.Aux) && warnRule(fe.Debug_checknil(), v, "removed nil check")) {
23693 break
23694 }
23695 v.CopyOf(ptr)
23696 return true
23697 }
23698
23699
23700 for {
23701 ptr := v_0
23702 if ptr.Op != ssaop.OpAddr {
23703 break
23704 }
23705 ptr_0 := ptr.Args[0]
23706 if ptr_0.Op != ssaop.OpSB {
23707 break
23708 }
23709 v.CopyOf(ptr)
23710 return true
23711 }
23712
23713
23714 for {
23715 ptr := v_0
23716 if ptr.Op != ssaop.OpConvert {
23717 break
23718 }
23719 ptr_0 := ptr.Args[0]
23720 if ptr_0.Op != ssaop.OpAddr {
23721 break
23722 }
23723 ptr_0_0 := ptr_0.Args[0]
23724 if ptr_0_0.Op != ssaop.OpSB {
23725 break
23726 }
23727 v.CopyOf(ptr)
23728 return true
23729 }
23730
23731
23732
23733 for {
23734 ptr := v_0
23735 if ptr.Op != ssaop.OpLocalAddr || !(warnRule(fe.Debug_checknil(), v, "removed nil check")) {
23736 break
23737 }
23738 v.CopyOf(ptr)
23739 return true
23740 }
23741
23742
23743
23744 for {
23745 ptr := v_0
23746 if ptr.Op != ssaop.OpArg {
23747 break
23748 }
23749 sym := ssa.AuxToSym(ptr.Aux)
23750 if !(isDictArgSym(sym)) {
23751 break
23752 }
23753 v.CopyOf(ptr)
23754 return true
23755 }
23756
23757
23758 for {
23759 ptr := v_0
23760 if ptr.Op != ssaop.OpNilCheck {
23761 break
23762 }
23763 v.CopyOf(ptr)
23764 return true
23765 }
23766 return false
23767 }
23768 func rewriteValue_OpNot(v *ssa.Value) bool {
23769 v_0 := v.Args[0]
23770
23771
23772 for {
23773 if v_0.Op != ssaop.OpConstBool {
23774 break
23775 }
23776 c := ssa.AuxIntToBool(v_0.AuxInt)
23777 v.Reset(ssaop.OpConstBool)
23778 v.AuxInt = ssa.BoolToAuxInt(!c)
23779 return true
23780 }
23781
23782
23783 for {
23784 if v_0.Op != ssaop.OpEq64 {
23785 break
23786 }
23787 y := v_0.Args[1]
23788 x := v_0.Args[0]
23789 v.Reset(ssaop.OpNeq64)
23790 v.AddArg2(x, y)
23791 return true
23792 }
23793
23794
23795 for {
23796 if v_0.Op != ssaop.OpEq32 {
23797 break
23798 }
23799 y := v_0.Args[1]
23800 x := v_0.Args[0]
23801 v.Reset(ssaop.OpNeq32)
23802 v.AddArg2(x, y)
23803 return true
23804 }
23805
23806
23807 for {
23808 if v_0.Op != ssaop.OpEq16 {
23809 break
23810 }
23811 y := v_0.Args[1]
23812 x := v_0.Args[0]
23813 v.Reset(ssaop.OpNeq16)
23814 v.AddArg2(x, y)
23815 return true
23816 }
23817
23818
23819 for {
23820 if v_0.Op != ssaop.OpEq8 {
23821 break
23822 }
23823 y := v_0.Args[1]
23824 x := v_0.Args[0]
23825 v.Reset(ssaop.OpNeq8)
23826 v.AddArg2(x, y)
23827 return true
23828 }
23829
23830
23831 for {
23832 if v_0.Op != ssaop.OpEqB {
23833 break
23834 }
23835 y := v_0.Args[1]
23836 x := v_0.Args[0]
23837 v.Reset(ssaop.OpNeqB)
23838 v.AddArg2(x, y)
23839 return true
23840 }
23841
23842
23843 for {
23844 if v_0.Op != ssaop.OpEqPtr {
23845 break
23846 }
23847 y := v_0.Args[1]
23848 x := v_0.Args[0]
23849 v.Reset(ssaop.OpNeqPtr)
23850 v.AddArg2(x, y)
23851 return true
23852 }
23853
23854
23855 for {
23856 if v_0.Op != ssaop.OpEq64F {
23857 break
23858 }
23859 y := v_0.Args[1]
23860 x := v_0.Args[0]
23861 v.Reset(ssaop.OpNeq64F)
23862 v.AddArg2(x, y)
23863 return true
23864 }
23865
23866
23867 for {
23868 if v_0.Op != ssaop.OpEq32F {
23869 break
23870 }
23871 y := v_0.Args[1]
23872 x := v_0.Args[0]
23873 v.Reset(ssaop.OpNeq32F)
23874 v.AddArg2(x, y)
23875 return true
23876 }
23877
23878
23879 for {
23880 if v_0.Op != ssaop.OpNeq64 {
23881 break
23882 }
23883 y := v_0.Args[1]
23884 x := v_0.Args[0]
23885 v.Reset(ssaop.OpEq64)
23886 v.AddArg2(x, y)
23887 return true
23888 }
23889
23890
23891 for {
23892 if v_0.Op != ssaop.OpNeq32 {
23893 break
23894 }
23895 y := v_0.Args[1]
23896 x := v_0.Args[0]
23897 v.Reset(ssaop.OpEq32)
23898 v.AddArg2(x, y)
23899 return true
23900 }
23901
23902
23903 for {
23904 if v_0.Op != ssaop.OpNeq16 {
23905 break
23906 }
23907 y := v_0.Args[1]
23908 x := v_0.Args[0]
23909 v.Reset(ssaop.OpEq16)
23910 v.AddArg2(x, y)
23911 return true
23912 }
23913
23914
23915 for {
23916 if v_0.Op != ssaop.OpNeq8 {
23917 break
23918 }
23919 y := v_0.Args[1]
23920 x := v_0.Args[0]
23921 v.Reset(ssaop.OpEq8)
23922 v.AddArg2(x, y)
23923 return true
23924 }
23925
23926
23927 for {
23928 if v_0.Op != ssaop.OpNeqB {
23929 break
23930 }
23931 y := v_0.Args[1]
23932 x := v_0.Args[0]
23933 v.Reset(ssaop.OpEqB)
23934 v.AddArg2(x, y)
23935 return true
23936 }
23937
23938
23939 for {
23940 if v_0.Op != ssaop.OpNeqPtr {
23941 break
23942 }
23943 y := v_0.Args[1]
23944 x := v_0.Args[0]
23945 v.Reset(ssaop.OpEqPtr)
23946 v.AddArg2(x, y)
23947 return true
23948 }
23949
23950
23951 for {
23952 if v_0.Op != ssaop.OpNeq64F {
23953 break
23954 }
23955 y := v_0.Args[1]
23956 x := v_0.Args[0]
23957 v.Reset(ssaop.OpEq64F)
23958 v.AddArg2(x, y)
23959 return true
23960 }
23961
23962
23963 for {
23964 if v_0.Op != ssaop.OpNeq32F {
23965 break
23966 }
23967 y := v_0.Args[1]
23968 x := v_0.Args[0]
23969 v.Reset(ssaop.OpEq32F)
23970 v.AddArg2(x, y)
23971 return true
23972 }
23973
23974
23975 for {
23976 if v_0.Op != ssaop.OpLess64 {
23977 break
23978 }
23979 y := v_0.Args[1]
23980 x := v_0.Args[0]
23981 v.Reset(ssaop.OpLeq64)
23982 v.AddArg2(y, x)
23983 return true
23984 }
23985
23986
23987 for {
23988 if v_0.Op != ssaop.OpLess32 {
23989 break
23990 }
23991 y := v_0.Args[1]
23992 x := v_0.Args[0]
23993 v.Reset(ssaop.OpLeq32)
23994 v.AddArg2(y, x)
23995 return true
23996 }
23997
23998
23999 for {
24000 if v_0.Op != ssaop.OpLess16 {
24001 break
24002 }
24003 y := v_0.Args[1]
24004 x := v_0.Args[0]
24005 v.Reset(ssaop.OpLeq16)
24006 v.AddArg2(y, x)
24007 return true
24008 }
24009
24010
24011 for {
24012 if v_0.Op != ssaop.OpLess8 {
24013 break
24014 }
24015 y := v_0.Args[1]
24016 x := v_0.Args[0]
24017 v.Reset(ssaop.OpLeq8)
24018 v.AddArg2(y, x)
24019 return true
24020 }
24021
24022
24023 for {
24024 if v_0.Op != ssaop.OpLess64U {
24025 break
24026 }
24027 y := v_0.Args[1]
24028 x := v_0.Args[0]
24029 v.Reset(ssaop.OpLeq64U)
24030 v.AddArg2(y, x)
24031 return true
24032 }
24033
24034
24035 for {
24036 if v_0.Op != ssaop.OpLess32U {
24037 break
24038 }
24039 y := v_0.Args[1]
24040 x := v_0.Args[0]
24041 v.Reset(ssaop.OpLeq32U)
24042 v.AddArg2(y, x)
24043 return true
24044 }
24045
24046
24047 for {
24048 if v_0.Op != ssaop.OpLess16U {
24049 break
24050 }
24051 y := v_0.Args[1]
24052 x := v_0.Args[0]
24053 v.Reset(ssaop.OpLeq16U)
24054 v.AddArg2(y, x)
24055 return true
24056 }
24057
24058
24059 for {
24060 if v_0.Op != ssaop.OpLess8U {
24061 break
24062 }
24063 y := v_0.Args[1]
24064 x := v_0.Args[0]
24065 v.Reset(ssaop.OpLeq8U)
24066 v.AddArg2(y, x)
24067 return true
24068 }
24069
24070
24071 for {
24072 if v_0.Op != ssaop.OpLeq64 {
24073 break
24074 }
24075 y := v_0.Args[1]
24076 x := v_0.Args[0]
24077 v.Reset(ssaop.OpLess64)
24078 v.AddArg2(y, x)
24079 return true
24080 }
24081
24082
24083 for {
24084 if v_0.Op != ssaop.OpLeq32 {
24085 break
24086 }
24087 y := v_0.Args[1]
24088 x := v_0.Args[0]
24089 v.Reset(ssaop.OpLess32)
24090 v.AddArg2(y, x)
24091 return true
24092 }
24093
24094
24095 for {
24096 if v_0.Op != ssaop.OpLeq16 {
24097 break
24098 }
24099 y := v_0.Args[1]
24100 x := v_0.Args[0]
24101 v.Reset(ssaop.OpLess16)
24102 v.AddArg2(y, x)
24103 return true
24104 }
24105
24106
24107 for {
24108 if v_0.Op != ssaop.OpLeq8 {
24109 break
24110 }
24111 y := v_0.Args[1]
24112 x := v_0.Args[0]
24113 v.Reset(ssaop.OpLess8)
24114 v.AddArg2(y, x)
24115 return true
24116 }
24117
24118
24119 for {
24120 if v_0.Op != ssaop.OpLeq64U {
24121 break
24122 }
24123 y := v_0.Args[1]
24124 x := v_0.Args[0]
24125 v.Reset(ssaop.OpLess64U)
24126 v.AddArg2(y, x)
24127 return true
24128 }
24129
24130
24131 for {
24132 if v_0.Op != ssaop.OpLeq32U {
24133 break
24134 }
24135 y := v_0.Args[1]
24136 x := v_0.Args[0]
24137 v.Reset(ssaop.OpLess32U)
24138 v.AddArg2(y, x)
24139 return true
24140 }
24141
24142
24143 for {
24144 if v_0.Op != ssaop.OpLeq16U {
24145 break
24146 }
24147 y := v_0.Args[1]
24148 x := v_0.Args[0]
24149 v.Reset(ssaop.OpLess16U)
24150 v.AddArg2(y, x)
24151 return true
24152 }
24153
24154
24155 for {
24156 if v_0.Op != ssaop.OpLeq8U {
24157 break
24158 }
24159 y := v_0.Args[1]
24160 x := v_0.Args[0]
24161 v.Reset(ssaop.OpLess8U)
24162 v.AddArg2(y, x)
24163 return true
24164 }
24165 return false
24166 }
24167 func rewriteValue_OpOffPtr(v *ssa.Value) bool {
24168 v_0 := v.Args[0]
24169
24170
24171 for {
24172 x := ssa.AuxIntToInt64(v.AuxInt)
24173 if v_0.Op != ssaop.OpOffPtr {
24174 break
24175 }
24176 y := ssa.AuxIntToInt64(v_0.AuxInt)
24177 p := v_0.Args[0]
24178 v.Reset(ssaop.OpOffPtr)
24179 v.AuxInt = ssa.Int64ToAuxInt(x + y)
24180 v.AddArg(p)
24181 return true
24182 }
24183
24184
24185
24186 for {
24187 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
24188 break
24189 }
24190 p := v_0
24191 if !(v.Type.Compare(p.Type) == types.CMPeq) {
24192 break
24193 }
24194 v.CopyOf(p)
24195 return true
24196 }
24197 return false
24198 }
24199 func rewriteValue_OpOr16(v *ssa.Value) bool {
24200 v_1 := v.Args[1]
24201 v_0 := v.Args[0]
24202 b := v.Block
24203 config := b.Func.Config
24204
24205
24206 for {
24207 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24208 if v_0.Op != ssaop.OpConst16 {
24209 continue
24210 }
24211 c := ssa.AuxIntToInt16(v_0.AuxInt)
24212 if v_1.Op != ssaop.OpConst16 {
24213 continue
24214 }
24215 d := ssa.AuxIntToInt16(v_1.AuxInt)
24216 v.Reset(ssaop.OpConst16)
24217 v.AuxInt = ssa.Int16ToAuxInt(c | d)
24218 return true
24219 }
24220 break
24221 }
24222
24223
24224 for {
24225 t := v.Type
24226 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24227 if v_0.Op != ssaop.OpCom16 {
24228 continue
24229 }
24230 x := v_0.Args[0]
24231 if v_1.Op != ssaop.OpCom16 {
24232 continue
24233 }
24234 y := v_1.Args[0]
24235 v.Reset(ssaop.OpCom16)
24236 v0 := b.NewValue0(v.Pos, ssaop.OpAnd16, t)
24237 v0.AddArg2(x, y)
24238 v.AddArg(v0)
24239 return true
24240 }
24241 break
24242 }
24243
24244
24245 for {
24246 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24247 x := v_0
24248 if v_1.Op != ssaop.OpAnd16 {
24249 continue
24250 }
24251 _ = v_1.Args[1]
24252 v_1_0 := v_1.Args[0]
24253 v_1_1 := v_1.Args[1]
24254 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
24255 if x != v_1_0 {
24256 continue
24257 }
24258 v.CopyOf(x)
24259 return true
24260 }
24261 }
24262 break
24263 }
24264
24265
24266 for {
24267 x := v_0
24268 if x != v_1 {
24269 break
24270 }
24271 v.CopyOf(x)
24272 return true
24273 }
24274
24275
24276 for {
24277 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24278 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
24279 continue
24280 }
24281 x := v_1
24282 v.CopyOf(x)
24283 return true
24284 }
24285 break
24286 }
24287
24288
24289 for {
24290 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24291 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != -1 {
24292 continue
24293 }
24294 v.Reset(ssaop.OpConst16)
24295 v.AuxInt = ssa.Int16ToAuxInt(-1)
24296 return true
24297 }
24298 break
24299 }
24300
24301
24302 for {
24303 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24304 if v_0.Op != ssaop.OpCom16 {
24305 continue
24306 }
24307 x := v_0.Args[0]
24308 if x != v_1 {
24309 continue
24310 }
24311 v.Reset(ssaop.OpConst16)
24312 v.AuxInt = ssa.Int16ToAuxInt(-1)
24313 return true
24314 }
24315 break
24316 }
24317
24318
24319 for {
24320 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24321 x := v_0
24322 if v_1.Op != ssaop.OpOr16 {
24323 continue
24324 }
24325 _ = v_1.Args[1]
24326 v_1_0 := v_1.Args[0]
24327 v_1_1 := v_1.Args[1]
24328 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
24329 if x != v_1_0 {
24330 continue
24331 }
24332 y := v_1_1
24333 v.Reset(ssaop.OpOr16)
24334 v.AddArg2(x, y)
24335 return true
24336 }
24337 }
24338 break
24339 }
24340
24341
24342
24343 for {
24344 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24345 if v_0.Op != ssaop.OpAnd16 {
24346 continue
24347 }
24348 _ = v_0.Args[1]
24349 v_0_0 := v_0.Args[0]
24350 v_0_1 := v_0.Args[1]
24351 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
24352 x := v_0_0
24353 if v_0_1.Op != ssaop.OpConst16 {
24354 continue
24355 }
24356 c2 := ssa.AuxIntToInt16(v_0_1.AuxInt)
24357 if v_1.Op != ssaop.OpConst16 {
24358 continue
24359 }
24360 t := v_1.Type
24361 c1 := ssa.AuxIntToInt16(v_1.AuxInt)
24362 if !(^(c1 | c2) == 0) {
24363 continue
24364 }
24365 v.Reset(ssaop.OpOr16)
24366 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
24367 v0.AuxInt = ssa.Int16ToAuxInt(c1)
24368 v.AddArg2(v0, x)
24369 return true
24370 }
24371 }
24372 break
24373 }
24374
24375
24376
24377 for {
24378 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24379 if v_0.Op != ssaop.OpOr16 {
24380 continue
24381 }
24382 _ = v_0.Args[1]
24383 v_0_0 := v_0.Args[0]
24384 v_0_1 := v_0.Args[1]
24385 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
24386 i := v_0_0
24387 if i.Op != ssaop.OpConst16 {
24388 continue
24389 }
24390 t := i.Type
24391 z := v_0_1
24392 x := v_1
24393 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
24394 continue
24395 }
24396 v.Reset(ssaop.OpOr16)
24397 v0 := b.NewValue0(v.Pos, ssaop.OpOr16, t)
24398 v0.AddArg2(z, x)
24399 v.AddArg2(i, v0)
24400 return true
24401 }
24402 }
24403 break
24404 }
24405
24406
24407 for {
24408 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24409 if v_0.Op != ssaop.OpConst16 {
24410 continue
24411 }
24412 t := v_0.Type
24413 c := ssa.AuxIntToInt16(v_0.AuxInt)
24414 if v_1.Op != ssaop.OpOr16 {
24415 continue
24416 }
24417 _ = v_1.Args[1]
24418 v_1_0 := v_1.Args[0]
24419 v_1_1 := v_1.Args[1]
24420 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
24421 if v_1_0.Op != ssaop.OpConst16 || v_1_0.Type != t {
24422 continue
24423 }
24424 d := ssa.AuxIntToInt16(v_1_0.AuxInt)
24425 x := v_1_1
24426 v.Reset(ssaop.OpOr16)
24427 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
24428 v0.AuxInt = ssa.Int16ToAuxInt(c | d)
24429 v.AddArg2(v0, x)
24430 return true
24431 }
24432 }
24433 break
24434 }
24435
24436
24437
24438 for {
24439 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24440 if v_0.Op != ssaop.OpLsh16x64 {
24441 continue
24442 }
24443 _ = v_0.Args[1]
24444 x := v_0.Args[0]
24445 z := v_0.Args[1]
24446 if z.Op != ssaop.OpConst64 {
24447 continue
24448 }
24449 c := ssa.AuxIntToInt64(z.AuxInt)
24450 if v_1.Op != ssaop.OpRsh16Ux64 {
24451 continue
24452 }
24453 _ = v_1.Args[1]
24454 if x != v_1.Args[0] {
24455 continue
24456 }
24457 v_1_1 := v_1.Args[1]
24458 if v_1_1.Op != ssaop.OpConst64 {
24459 continue
24460 }
24461 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
24462 if !(c < 16 && d == 16-c && canRotate(config, 16)) {
24463 continue
24464 }
24465 v.Reset(ssaop.OpRotateLeft16)
24466 v.AddArg2(x, z)
24467 return true
24468 }
24469 break
24470 }
24471
24472
24473
24474 for {
24475 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24476 left := v_0
24477 if left.Op != ssaop.OpLsh16x64 {
24478 continue
24479 }
24480 y := left.Args[1]
24481 x := left.Args[0]
24482 right := v_1
24483 if right.Op != ssaop.OpRsh16Ux64 {
24484 continue
24485 }
24486 _ = right.Args[1]
24487 if x != right.Args[0] {
24488 continue
24489 }
24490 right_1 := right.Args[1]
24491 if right_1.Op != ssaop.OpSub64 {
24492 continue
24493 }
24494 _ = right_1.Args[1]
24495 right_1_0 := right_1.Args[0]
24496 if right_1_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(right_1_0.AuxInt) != 16 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
24497 continue
24498 }
24499 v.Reset(ssaop.OpRotateLeft16)
24500 v.AddArg2(x, y)
24501 return true
24502 }
24503 break
24504 }
24505
24506
24507
24508 for {
24509 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24510 left := v_0
24511 if left.Op != ssaop.OpLsh16x32 {
24512 continue
24513 }
24514 y := left.Args[1]
24515 x := left.Args[0]
24516 right := v_1
24517 if right.Op != ssaop.OpRsh16Ux32 {
24518 continue
24519 }
24520 _ = right.Args[1]
24521 if x != right.Args[0] {
24522 continue
24523 }
24524 right_1 := right.Args[1]
24525 if right_1.Op != ssaop.OpSub32 {
24526 continue
24527 }
24528 _ = right_1.Args[1]
24529 right_1_0 := right_1.Args[0]
24530 if right_1_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(right_1_0.AuxInt) != 16 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
24531 continue
24532 }
24533 v.Reset(ssaop.OpRotateLeft16)
24534 v.AddArg2(x, y)
24535 return true
24536 }
24537 break
24538 }
24539
24540
24541
24542 for {
24543 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24544 left := v_0
24545 if left.Op != ssaop.OpLsh16x16 {
24546 continue
24547 }
24548 y := left.Args[1]
24549 x := left.Args[0]
24550 right := v_1
24551 if right.Op != ssaop.OpRsh16Ux16 {
24552 continue
24553 }
24554 _ = right.Args[1]
24555 if x != right.Args[0] {
24556 continue
24557 }
24558 right_1 := right.Args[1]
24559 if right_1.Op != ssaop.OpSub16 {
24560 continue
24561 }
24562 _ = right_1.Args[1]
24563 right_1_0 := right_1.Args[0]
24564 if right_1_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(right_1_0.AuxInt) != 16 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
24565 continue
24566 }
24567 v.Reset(ssaop.OpRotateLeft16)
24568 v.AddArg2(x, y)
24569 return true
24570 }
24571 break
24572 }
24573
24574
24575
24576 for {
24577 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24578 left := v_0
24579 if left.Op != ssaop.OpLsh16x8 {
24580 continue
24581 }
24582 y := left.Args[1]
24583 x := left.Args[0]
24584 right := v_1
24585 if right.Op != ssaop.OpRsh16Ux8 {
24586 continue
24587 }
24588 _ = right.Args[1]
24589 if x != right.Args[0] {
24590 continue
24591 }
24592 right_1 := right.Args[1]
24593 if right_1.Op != ssaop.OpSub8 {
24594 continue
24595 }
24596 _ = right_1.Args[1]
24597 right_1_0 := right_1.Args[0]
24598 if right_1_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(right_1_0.AuxInt) != 16 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
24599 continue
24600 }
24601 v.Reset(ssaop.OpRotateLeft16)
24602 v.AddArg2(x, y)
24603 return true
24604 }
24605 break
24606 }
24607
24608
24609
24610 for {
24611 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24612 right := v_0
24613 if right.Op != ssaop.OpRsh16Ux64 {
24614 continue
24615 }
24616 y := right.Args[1]
24617 x := right.Args[0]
24618 left := v_1
24619 if left.Op != ssaop.OpLsh16x64 {
24620 continue
24621 }
24622 _ = left.Args[1]
24623 if x != left.Args[0] {
24624 continue
24625 }
24626 z := left.Args[1]
24627 if z.Op != ssaop.OpSub64 {
24628 continue
24629 }
24630 _ = z.Args[1]
24631 z_0 := z.Args[0]
24632 if z_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(z_0.AuxInt) != 16 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
24633 continue
24634 }
24635 v.Reset(ssaop.OpRotateLeft16)
24636 v.AddArg2(x, z)
24637 return true
24638 }
24639 break
24640 }
24641
24642
24643
24644 for {
24645 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24646 right := v_0
24647 if right.Op != ssaop.OpRsh16Ux32 {
24648 continue
24649 }
24650 y := right.Args[1]
24651 x := right.Args[0]
24652 left := v_1
24653 if left.Op != ssaop.OpLsh16x32 {
24654 continue
24655 }
24656 _ = left.Args[1]
24657 if x != left.Args[0] {
24658 continue
24659 }
24660 z := left.Args[1]
24661 if z.Op != ssaop.OpSub32 {
24662 continue
24663 }
24664 _ = z.Args[1]
24665 z_0 := z.Args[0]
24666 if z_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(z_0.AuxInt) != 16 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
24667 continue
24668 }
24669 v.Reset(ssaop.OpRotateLeft16)
24670 v.AddArg2(x, z)
24671 return true
24672 }
24673 break
24674 }
24675
24676
24677
24678 for {
24679 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24680 right := v_0
24681 if right.Op != ssaop.OpRsh16Ux16 {
24682 continue
24683 }
24684 y := right.Args[1]
24685 x := right.Args[0]
24686 left := v_1
24687 if left.Op != ssaop.OpLsh16x16 {
24688 continue
24689 }
24690 _ = left.Args[1]
24691 if x != left.Args[0] {
24692 continue
24693 }
24694 z := left.Args[1]
24695 if z.Op != ssaop.OpSub16 {
24696 continue
24697 }
24698 _ = z.Args[1]
24699 z_0 := z.Args[0]
24700 if z_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(z_0.AuxInt) != 16 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
24701 continue
24702 }
24703 v.Reset(ssaop.OpRotateLeft16)
24704 v.AddArg2(x, z)
24705 return true
24706 }
24707 break
24708 }
24709
24710
24711
24712 for {
24713 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24714 right := v_0
24715 if right.Op != ssaop.OpRsh16Ux8 {
24716 continue
24717 }
24718 y := right.Args[1]
24719 x := right.Args[0]
24720 left := v_1
24721 if left.Op != ssaop.OpLsh16x8 {
24722 continue
24723 }
24724 _ = left.Args[1]
24725 if x != left.Args[0] {
24726 continue
24727 }
24728 z := left.Args[1]
24729 if z.Op != ssaop.OpSub8 {
24730 continue
24731 }
24732 _ = z.Args[1]
24733 z_0 := z.Args[0]
24734 if z_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(z_0.AuxInt) != 16 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
24735 continue
24736 }
24737 v.Reset(ssaop.OpRotateLeft16)
24738 v.AddArg2(x, z)
24739 return true
24740 }
24741 break
24742 }
24743 return false
24744 }
24745 func rewriteValue_OpOr32(v *ssa.Value) bool {
24746 v_1 := v.Args[1]
24747 v_0 := v.Args[0]
24748 b := v.Block
24749 config := b.Func.Config
24750
24751
24752 for {
24753 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24754 if v_0.Op != ssaop.OpConst32 {
24755 continue
24756 }
24757 c := ssa.AuxIntToInt32(v_0.AuxInt)
24758 if v_1.Op != ssaop.OpConst32 {
24759 continue
24760 }
24761 d := ssa.AuxIntToInt32(v_1.AuxInt)
24762 v.Reset(ssaop.OpConst32)
24763 v.AuxInt = ssa.Int32ToAuxInt(c | d)
24764 return true
24765 }
24766 break
24767 }
24768
24769
24770 for {
24771 t := v.Type
24772 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24773 if v_0.Op != ssaop.OpCom32 {
24774 continue
24775 }
24776 x := v_0.Args[0]
24777 if v_1.Op != ssaop.OpCom32 {
24778 continue
24779 }
24780 y := v_1.Args[0]
24781 v.Reset(ssaop.OpCom32)
24782 v0 := b.NewValue0(v.Pos, ssaop.OpAnd32, t)
24783 v0.AddArg2(x, y)
24784 v.AddArg(v0)
24785 return true
24786 }
24787 break
24788 }
24789
24790
24791 for {
24792 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24793 x := v_0
24794 if v_1.Op != ssaop.OpAnd32 {
24795 continue
24796 }
24797 _ = v_1.Args[1]
24798 v_1_0 := v_1.Args[0]
24799 v_1_1 := v_1.Args[1]
24800 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
24801 if x != v_1_0 {
24802 continue
24803 }
24804 v.CopyOf(x)
24805 return true
24806 }
24807 }
24808 break
24809 }
24810
24811
24812 for {
24813 x := v_0
24814 if x != v_1 {
24815 break
24816 }
24817 v.CopyOf(x)
24818 return true
24819 }
24820
24821
24822 for {
24823 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24824 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
24825 continue
24826 }
24827 x := v_1
24828 v.CopyOf(x)
24829 return true
24830 }
24831 break
24832 }
24833
24834
24835 for {
24836 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24837 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != -1 {
24838 continue
24839 }
24840 v.Reset(ssaop.OpConst32)
24841 v.AuxInt = ssa.Int32ToAuxInt(-1)
24842 return true
24843 }
24844 break
24845 }
24846
24847
24848 for {
24849 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24850 if v_0.Op != ssaop.OpCom32 {
24851 continue
24852 }
24853 x := v_0.Args[0]
24854 if x != v_1 {
24855 continue
24856 }
24857 v.Reset(ssaop.OpConst32)
24858 v.AuxInt = ssa.Int32ToAuxInt(-1)
24859 return true
24860 }
24861 break
24862 }
24863
24864
24865 for {
24866 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24867 x := v_0
24868 if v_1.Op != ssaop.OpOr32 {
24869 continue
24870 }
24871 _ = v_1.Args[1]
24872 v_1_0 := v_1.Args[0]
24873 v_1_1 := v_1.Args[1]
24874 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
24875 if x != v_1_0 {
24876 continue
24877 }
24878 y := v_1_1
24879 v.Reset(ssaop.OpOr32)
24880 v.AddArg2(x, y)
24881 return true
24882 }
24883 }
24884 break
24885 }
24886
24887
24888
24889 for {
24890 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24891 if v_0.Op != ssaop.OpAnd32 {
24892 continue
24893 }
24894 _ = v_0.Args[1]
24895 v_0_0 := v_0.Args[0]
24896 v_0_1 := v_0.Args[1]
24897 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
24898 x := v_0_0
24899 if v_0_1.Op != ssaop.OpConst32 {
24900 continue
24901 }
24902 c2 := ssa.AuxIntToInt32(v_0_1.AuxInt)
24903 if v_1.Op != ssaop.OpConst32 {
24904 continue
24905 }
24906 t := v_1.Type
24907 c1 := ssa.AuxIntToInt32(v_1.AuxInt)
24908 if !(^(c1 | c2) == 0) {
24909 continue
24910 }
24911 v.Reset(ssaop.OpOr32)
24912 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
24913 v0.AuxInt = ssa.Int32ToAuxInt(c1)
24914 v.AddArg2(v0, x)
24915 return true
24916 }
24917 }
24918 break
24919 }
24920
24921
24922
24923 for {
24924 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24925 if v_0.Op != ssaop.OpOr32 {
24926 continue
24927 }
24928 _ = v_0.Args[1]
24929 v_0_0 := v_0.Args[0]
24930 v_0_1 := v_0.Args[1]
24931 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
24932 i := v_0_0
24933 if i.Op != ssaop.OpConst32 {
24934 continue
24935 }
24936 t := i.Type
24937 z := v_0_1
24938 x := v_1
24939 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
24940 continue
24941 }
24942 v.Reset(ssaop.OpOr32)
24943 v0 := b.NewValue0(v.Pos, ssaop.OpOr32, t)
24944 v0.AddArg2(z, x)
24945 v.AddArg2(i, v0)
24946 return true
24947 }
24948 }
24949 break
24950 }
24951
24952
24953 for {
24954 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24955 if v_0.Op != ssaop.OpConst32 {
24956 continue
24957 }
24958 t := v_0.Type
24959 c := ssa.AuxIntToInt32(v_0.AuxInt)
24960 if v_1.Op != ssaop.OpOr32 {
24961 continue
24962 }
24963 _ = v_1.Args[1]
24964 v_1_0 := v_1.Args[0]
24965 v_1_1 := v_1.Args[1]
24966 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
24967 if v_1_0.Op != ssaop.OpConst32 || v_1_0.Type != t {
24968 continue
24969 }
24970 d := ssa.AuxIntToInt32(v_1_0.AuxInt)
24971 x := v_1_1
24972 v.Reset(ssaop.OpOr32)
24973 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
24974 v0.AuxInt = ssa.Int32ToAuxInt(c | d)
24975 v.AddArg2(v0, x)
24976 return true
24977 }
24978 }
24979 break
24980 }
24981
24982
24983
24984 for {
24985 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
24986 if v_0.Op != ssaop.OpLsh32x64 {
24987 continue
24988 }
24989 _ = v_0.Args[1]
24990 x := v_0.Args[0]
24991 z := v_0.Args[1]
24992 if z.Op != ssaop.OpConst64 {
24993 continue
24994 }
24995 c := ssa.AuxIntToInt64(z.AuxInt)
24996 if v_1.Op != ssaop.OpRsh32Ux64 {
24997 continue
24998 }
24999 _ = v_1.Args[1]
25000 if x != v_1.Args[0] {
25001 continue
25002 }
25003 v_1_1 := v_1.Args[1]
25004 if v_1_1.Op != ssaop.OpConst64 {
25005 continue
25006 }
25007 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
25008 if !(c < 32 && d == 32-c && canRotate(config, 32)) {
25009 continue
25010 }
25011 v.Reset(ssaop.OpRotateLeft32)
25012 v.AddArg2(x, z)
25013 return true
25014 }
25015 break
25016 }
25017
25018
25019
25020 for {
25021 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25022 left := v_0
25023 if left.Op != ssaop.OpLsh32x64 {
25024 continue
25025 }
25026 y := left.Args[1]
25027 x := left.Args[0]
25028 right := v_1
25029 if right.Op != ssaop.OpRsh32Ux64 {
25030 continue
25031 }
25032 _ = right.Args[1]
25033 if x != right.Args[0] {
25034 continue
25035 }
25036 right_1 := right.Args[1]
25037 if right_1.Op != ssaop.OpSub64 {
25038 continue
25039 }
25040 _ = right_1.Args[1]
25041 right_1_0 := right_1.Args[0]
25042 if right_1_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(right_1_0.AuxInt) != 32 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
25043 continue
25044 }
25045 v.Reset(ssaop.OpRotateLeft32)
25046 v.AddArg2(x, y)
25047 return true
25048 }
25049 break
25050 }
25051
25052
25053
25054 for {
25055 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25056 left := v_0
25057 if left.Op != ssaop.OpLsh32x32 {
25058 continue
25059 }
25060 y := left.Args[1]
25061 x := left.Args[0]
25062 right := v_1
25063 if right.Op != ssaop.OpRsh32Ux32 {
25064 continue
25065 }
25066 _ = right.Args[1]
25067 if x != right.Args[0] {
25068 continue
25069 }
25070 right_1 := right.Args[1]
25071 if right_1.Op != ssaop.OpSub32 {
25072 continue
25073 }
25074 _ = right_1.Args[1]
25075 right_1_0 := right_1.Args[0]
25076 if right_1_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(right_1_0.AuxInt) != 32 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
25077 continue
25078 }
25079 v.Reset(ssaop.OpRotateLeft32)
25080 v.AddArg2(x, y)
25081 return true
25082 }
25083 break
25084 }
25085
25086
25087
25088 for {
25089 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25090 left := v_0
25091 if left.Op != ssaop.OpLsh32x16 {
25092 continue
25093 }
25094 y := left.Args[1]
25095 x := left.Args[0]
25096 right := v_1
25097 if right.Op != ssaop.OpRsh32Ux16 {
25098 continue
25099 }
25100 _ = right.Args[1]
25101 if x != right.Args[0] {
25102 continue
25103 }
25104 right_1 := right.Args[1]
25105 if right_1.Op != ssaop.OpSub16 {
25106 continue
25107 }
25108 _ = right_1.Args[1]
25109 right_1_0 := right_1.Args[0]
25110 if right_1_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(right_1_0.AuxInt) != 32 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
25111 continue
25112 }
25113 v.Reset(ssaop.OpRotateLeft32)
25114 v.AddArg2(x, y)
25115 return true
25116 }
25117 break
25118 }
25119
25120
25121
25122 for {
25123 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25124 left := v_0
25125 if left.Op != ssaop.OpLsh32x8 {
25126 continue
25127 }
25128 y := left.Args[1]
25129 x := left.Args[0]
25130 right := v_1
25131 if right.Op != ssaop.OpRsh32Ux8 {
25132 continue
25133 }
25134 _ = right.Args[1]
25135 if x != right.Args[0] {
25136 continue
25137 }
25138 right_1 := right.Args[1]
25139 if right_1.Op != ssaop.OpSub8 {
25140 continue
25141 }
25142 _ = right_1.Args[1]
25143 right_1_0 := right_1.Args[0]
25144 if right_1_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(right_1_0.AuxInt) != 32 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
25145 continue
25146 }
25147 v.Reset(ssaop.OpRotateLeft32)
25148 v.AddArg2(x, y)
25149 return true
25150 }
25151 break
25152 }
25153
25154
25155
25156 for {
25157 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25158 right := v_0
25159 if right.Op != ssaop.OpRsh32Ux64 {
25160 continue
25161 }
25162 y := right.Args[1]
25163 x := right.Args[0]
25164 left := v_1
25165 if left.Op != ssaop.OpLsh32x64 {
25166 continue
25167 }
25168 _ = left.Args[1]
25169 if x != left.Args[0] {
25170 continue
25171 }
25172 z := left.Args[1]
25173 if z.Op != ssaop.OpSub64 {
25174 continue
25175 }
25176 _ = z.Args[1]
25177 z_0 := z.Args[0]
25178 if z_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(z_0.AuxInt) != 32 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
25179 continue
25180 }
25181 v.Reset(ssaop.OpRotateLeft32)
25182 v.AddArg2(x, z)
25183 return true
25184 }
25185 break
25186 }
25187
25188
25189
25190 for {
25191 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25192 right := v_0
25193 if right.Op != ssaop.OpRsh32Ux32 {
25194 continue
25195 }
25196 y := right.Args[1]
25197 x := right.Args[0]
25198 left := v_1
25199 if left.Op != ssaop.OpLsh32x32 {
25200 continue
25201 }
25202 _ = left.Args[1]
25203 if x != left.Args[0] {
25204 continue
25205 }
25206 z := left.Args[1]
25207 if z.Op != ssaop.OpSub32 {
25208 continue
25209 }
25210 _ = z.Args[1]
25211 z_0 := z.Args[0]
25212 if z_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(z_0.AuxInt) != 32 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
25213 continue
25214 }
25215 v.Reset(ssaop.OpRotateLeft32)
25216 v.AddArg2(x, z)
25217 return true
25218 }
25219 break
25220 }
25221
25222
25223
25224 for {
25225 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25226 right := v_0
25227 if right.Op != ssaop.OpRsh32Ux16 {
25228 continue
25229 }
25230 y := right.Args[1]
25231 x := right.Args[0]
25232 left := v_1
25233 if left.Op != ssaop.OpLsh32x16 {
25234 continue
25235 }
25236 _ = left.Args[1]
25237 if x != left.Args[0] {
25238 continue
25239 }
25240 z := left.Args[1]
25241 if z.Op != ssaop.OpSub16 {
25242 continue
25243 }
25244 _ = z.Args[1]
25245 z_0 := z.Args[0]
25246 if z_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(z_0.AuxInt) != 32 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
25247 continue
25248 }
25249 v.Reset(ssaop.OpRotateLeft32)
25250 v.AddArg2(x, z)
25251 return true
25252 }
25253 break
25254 }
25255
25256
25257
25258 for {
25259 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25260 right := v_0
25261 if right.Op != ssaop.OpRsh32Ux8 {
25262 continue
25263 }
25264 y := right.Args[1]
25265 x := right.Args[0]
25266 left := v_1
25267 if left.Op != ssaop.OpLsh32x8 {
25268 continue
25269 }
25270 _ = left.Args[1]
25271 if x != left.Args[0] {
25272 continue
25273 }
25274 z := left.Args[1]
25275 if z.Op != ssaop.OpSub8 {
25276 continue
25277 }
25278 _ = z.Args[1]
25279 z_0 := z.Args[0]
25280 if z_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(z_0.AuxInt) != 32 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
25281 continue
25282 }
25283 v.Reset(ssaop.OpRotateLeft32)
25284 v.AddArg2(x, z)
25285 return true
25286 }
25287 break
25288 }
25289 return false
25290 }
25291 func rewriteValue_OpOr64(v *ssa.Value) bool {
25292 v_1 := v.Args[1]
25293 v_0 := v.Args[0]
25294 b := v.Block
25295 config := b.Func.Config
25296
25297
25298 for {
25299 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25300 if v_0.Op != ssaop.OpConst64 {
25301 continue
25302 }
25303 c := ssa.AuxIntToInt64(v_0.AuxInt)
25304 if v_1.Op != ssaop.OpConst64 {
25305 continue
25306 }
25307 d := ssa.AuxIntToInt64(v_1.AuxInt)
25308 v.Reset(ssaop.OpConst64)
25309 v.AuxInt = ssa.Int64ToAuxInt(c | d)
25310 return true
25311 }
25312 break
25313 }
25314
25315
25316 for {
25317 t := v.Type
25318 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25319 if v_0.Op != ssaop.OpCom64 {
25320 continue
25321 }
25322 x := v_0.Args[0]
25323 if v_1.Op != ssaop.OpCom64 {
25324 continue
25325 }
25326 y := v_1.Args[0]
25327 v.Reset(ssaop.OpCom64)
25328 v0 := b.NewValue0(v.Pos, ssaop.OpAnd64, t)
25329 v0.AddArg2(x, y)
25330 v.AddArg(v0)
25331 return true
25332 }
25333 break
25334 }
25335
25336
25337 for {
25338 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25339 x := v_0
25340 if v_1.Op != ssaop.OpAnd64 {
25341 continue
25342 }
25343 _ = v_1.Args[1]
25344 v_1_0 := v_1.Args[0]
25345 v_1_1 := v_1.Args[1]
25346 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
25347 if x != v_1_0 {
25348 continue
25349 }
25350 v.CopyOf(x)
25351 return true
25352 }
25353 }
25354 break
25355 }
25356
25357
25358 for {
25359 x := v_0
25360 if x != v_1 {
25361 break
25362 }
25363 v.CopyOf(x)
25364 return true
25365 }
25366
25367
25368 for {
25369 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25370 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
25371 continue
25372 }
25373 x := v_1
25374 v.CopyOf(x)
25375 return true
25376 }
25377 break
25378 }
25379
25380
25381 for {
25382 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25383 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != -1 {
25384 continue
25385 }
25386 v.Reset(ssaop.OpConst64)
25387 v.AuxInt = ssa.Int64ToAuxInt(-1)
25388 return true
25389 }
25390 break
25391 }
25392
25393
25394 for {
25395 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25396 if v_0.Op != ssaop.OpCom64 {
25397 continue
25398 }
25399 x := v_0.Args[0]
25400 if x != v_1 {
25401 continue
25402 }
25403 v.Reset(ssaop.OpConst64)
25404 v.AuxInt = ssa.Int64ToAuxInt(-1)
25405 return true
25406 }
25407 break
25408 }
25409
25410
25411 for {
25412 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25413 x := v_0
25414 if v_1.Op != ssaop.OpOr64 {
25415 continue
25416 }
25417 _ = v_1.Args[1]
25418 v_1_0 := v_1.Args[0]
25419 v_1_1 := v_1.Args[1]
25420 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
25421 if x != v_1_0 {
25422 continue
25423 }
25424 y := v_1_1
25425 v.Reset(ssaop.OpOr64)
25426 v.AddArg2(x, y)
25427 return true
25428 }
25429 }
25430 break
25431 }
25432
25433
25434
25435 for {
25436 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25437 if v_0.Op != ssaop.OpAnd64 {
25438 continue
25439 }
25440 _ = v_0.Args[1]
25441 v_0_0 := v_0.Args[0]
25442 v_0_1 := v_0.Args[1]
25443 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
25444 x := v_0_0
25445 if v_0_1.Op != ssaop.OpConst64 {
25446 continue
25447 }
25448 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
25449 if v_1.Op != ssaop.OpConst64 {
25450 continue
25451 }
25452 t := v_1.Type
25453 c1 := ssa.AuxIntToInt64(v_1.AuxInt)
25454 if !(^(c1 | c2) == 0) {
25455 continue
25456 }
25457 v.Reset(ssaop.OpOr64)
25458 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
25459 v0.AuxInt = ssa.Int64ToAuxInt(c1)
25460 v.AddArg2(v0, x)
25461 return true
25462 }
25463 }
25464 break
25465 }
25466
25467
25468
25469 for {
25470 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25471 if v_0.Op != ssaop.OpOr64 {
25472 continue
25473 }
25474 _ = v_0.Args[1]
25475 v_0_0 := v_0.Args[0]
25476 v_0_1 := v_0.Args[1]
25477 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
25478 i := v_0_0
25479 if i.Op != ssaop.OpConst64 {
25480 continue
25481 }
25482 t := i.Type
25483 z := v_0_1
25484 x := v_1
25485 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
25486 continue
25487 }
25488 v.Reset(ssaop.OpOr64)
25489 v0 := b.NewValue0(v.Pos, ssaop.OpOr64, t)
25490 v0.AddArg2(z, x)
25491 v.AddArg2(i, v0)
25492 return true
25493 }
25494 }
25495 break
25496 }
25497
25498
25499 for {
25500 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25501 if v_0.Op != ssaop.OpConst64 {
25502 continue
25503 }
25504 t := v_0.Type
25505 c := ssa.AuxIntToInt64(v_0.AuxInt)
25506 if v_1.Op != ssaop.OpOr64 {
25507 continue
25508 }
25509 _ = v_1.Args[1]
25510 v_1_0 := v_1.Args[0]
25511 v_1_1 := v_1.Args[1]
25512 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
25513 if v_1_0.Op != ssaop.OpConst64 || v_1_0.Type != t {
25514 continue
25515 }
25516 d := ssa.AuxIntToInt64(v_1_0.AuxInt)
25517 x := v_1_1
25518 v.Reset(ssaop.OpOr64)
25519 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
25520 v0.AuxInt = ssa.Int64ToAuxInt(c | d)
25521 v.AddArg2(v0, x)
25522 return true
25523 }
25524 }
25525 break
25526 }
25527
25528
25529
25530 for {
25531 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25532 if v_0.Op != ssaop.OpLsh64x64 {
25533 continue
25534 }
25535 _ = v_0.Args[1]
25536 x := v_0.Args[0]
25537 z := v_0.Args[1]
25538 if z.Op != ssaop.OpConst64 {
25539 continue
25540 }
25541 c := ssa.AuxIntToInt64(z.AuxInt)
25542 if v_1.Op != ssaop.OpRsh64Ux64 {
25543 continue
25544 }
25545 _ = v_1.Args[1]
25546 if x != v_1.Args[0] {
25547 continue
25548 }
25549 v_1_1 := v_1.Args[1]
25550 if v_1_1.Op != ssaop.OpConst64 {
25551 continue
25552 }
25553 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
25554 if !(c < 64 && d == 64-c && canRotate(config, 64)) {
25555 continue
25556 }
25557 v.Reset(ssaop.OpRotateLeft64)
25558 v.AddArg2(x, z)
25559 return true
25560 }
25561 break
25562 }
25563
25564
25565
25566 for {
25567 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25568 left := v_0
25569 if left.Op != ssaop.OpLsh64x64 {
25570 continue
25571 }
25572 y := left.Args[1]
25573 x := left.Args[0]
25574 right := v_1
25575 if right.Op != ssaop.OpRsh64Ux64 {
25576 continue
25577 }
25578 _ = right.Args[1]
25579 if x != right.Args[0] {
25580 continue
25581 }
25582 right_1 := right.Args[1]
25583 if right_1.Op != ssaop.OpSub64 {
25584 continue
25585 }
25586 _ = right_1.Args[1]
25587 right_1_0 := right_1.Args[0]
25588 if right_1_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(right_1_0.AuxInt) != 64 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
25589 continue
25590 }
25591 v.Reset(ssaop.OpRotateLeft64)
25592 v.AddArg2(x, y)
25593 return true
25594 }
25595 break
25596 }
25597
25598
25599
25600 for {
25601 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25602 left := v_0
25603 if left.Op != ssaop.OpLsh64x32 {
25604 continue
25605 }
25606 y := left.Args[1]
25607 x := left.Args[0]
25608 right := v_1
25609 if right.Op != ssaop.OpRsh64Ux32 {
25610 continue
25611 }
25612 _ = right.Args[1]
25613 if x != right.Args[0] {
25614 continue
25615 }
25616 right_1 := right.Args[1]
25617 if right_1.Op != ssaop.OpSub32 {
25618 continue
25619 }
25620 _ = right_1.Args[1]
25621 right_1_0 := right_1.Args[0]
25622 if right_1_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(right_1_0.AuxInt) != 64 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
25623 continue
25624 }
25625 v.Reset(ssaop.OpRotateLeft64)
25626 v.AddArg2(x, y)
25627 return true
25628 }
25629 break
25630 }
25631
25632
25633
25634 for {
25635 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25636 left := v_0
25637 if left.Op != ssaop.OpLsh64x16 {
25638 continue
25639 }
25640 y := left.Args[1]
25641 x := left.Args[0]
25642 right := v_1
25643 if right.Op != ssaop.OpRsh64Ux16 {
25644 continue
25645 }
25646 _ = right.Args[1]
25647 if x != right.Args[0] {
25648 continue
25649 }
25650 right_1 := right.Args[1]
25651 if right_1.Op != ssaop.OpSub16 {
25652 continue
25653 }
25654 _ = right_1.Args[1]
25655 right_1_0 := right_1.Args[0]
25656 if right_1_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(right_1_0.AuxInt) != 64 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
25657 continue
25658 }
25659 v.Reset(ssaop.OpRotateLeft64)
25660 v.AddArg2(x, y)
25661 return true
25662 }
25663 break
25664 }
25665
25666
25667
25668 for {
25669 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25670 left := v_0
25671 if left.Op != ssaop.OpLsh64x8 {
25672 continue
25673 }
25674 y := left.Args[1]
25675 x := left.Args[0]
25676 right := v_1
25677 if right.Op != ssaop.OpRsh64Ux8 {
25678 continue
25679 }
25680 _ = right.Args[1]
25681 if x != right.Args[0] {
25682 continue
25683 }
25684 right_1 := right.Args[1]
25685 if right_1.Op != ssaop.OpSub8 {
25686 continue
25687 }
25688 _ = right_1.Args[1]
25689 right_1_0 := right_1.Args[0]
25690 if right_1_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(right_1_0.AuxInt) != 64 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
25691 continue
25692 }
25693 v.Reset(ssaop.OpRotateLeft64)
25694 v.AddArg2(x, y)
25695 return true
25696 }
25697 break
25698 }
25699
25700
25701
25702 for {
25703 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25704 right := v_0
25705 if right.Op != ssaop.OpRsh64Ux64 {
25706 continue
25707 }
25708 y := right.Args[1]
25709 x := right.Args[0]
25710 left := v_1
25711 if left.Op != ssaop.OpLsh64x64 {
25712 continue
25713 }
25714 _ = left.Args[1]
25715 if x != left.Args[0] {
25716 continue
25717 }
25718 z := left.Args[1]
25719 if z.Op != ssaop.OpSub64 {
25720 continue
25721 }
25722 _ = z.Args[1]
25723 z_0 := z.Args[0]
25724 if z_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(z_0.AuxInt) != 64 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
25725 continue
25726 }
25727 v.Reset(ssaop.OpRotateLeft64)
25728 v.AddArg2(x, z)
25729 return true
25730 }
25731 break
25732 }
25733
25734
25735
25736 for {
25737 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25738 right := v_0
25739 if right.Op != ssaop.OpRsh64Ux32 {
25740 continue
25741 }
25742 y := right.Args[1]
25743 x := right.Args[0]
25744 left := v_1
25745 if left.Op != ssaop.OpLsh64x32 {
25746 continue
25747 }
25748 _ = left.Args[1]
25749 if x != left.Args[0] {
25750 continue
25751 }
25752 z := left.Args[1]
25753 if z.Op != ssaop.OpSub32 {
25754 continue
25755 }
25756 _ = z.Args[1]
25757 z_0 := z.Args[0]
25758 if z_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(z_0.AuxInt) != 64 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
25759 continue
25760 }
25761 v.Reset(ssaop.OpRotateLeft64)
25762 v.AddArg2(x, z)
25763 return true
25764 }
25765 break
25766 }
25767
25768
25769
25770 for {
25771 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25772 right := v_0
25773 if right.Op != ssaop.OpRsh64Ux16 {
25774 continue
25775 }
25776 y := right.Args[1]
25777 x := right.Args[0]
25778 left := v_1
25779 if left.Op != ssaop.OpLsh64x16 {
25780 continue
25781 }
25782 _ = left.Args[1]
25783 if x != left.Args[0] {
25784 continue
25785 }
25786 z := left.Args[1]
25787 if z.Op != ssaop.OpSub16 {
25788 continue
25789 }
25790 _ = z.Args[1]
25791 z_0 := z.Args[0]
25792 if z_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(z_0.AuxInt) != 64 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
25793 continue
25794 }
25795 v.Reset(ssaop.OpRotateLeft64)
25796 v.AddArg2(x, z)
25797 return true
25798 }
25799 break
25800 }
25801
25802
25803
25804 for {
25805 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25806 right := v_0
25807 if right.Op != ssaop.OpRsh64Ux8 {
25808 continue
25809 }
25810 y := right.Args[1]
25811 x := right.Args[0]
25812 left := v_1
25813 if left.Op != ssaop.OpLsh64x8 {
25814 continue
25815 }
25816 _ = left.Args[1]
25817 if x != left.Args[0] {
25818 continue
25819 }
25820 z := left.Args[1]
25821 if z.Op != ssaop.OpSub8 {
25822 continue
25823 }
25824 _ = z.Args[1]
25825 z_0 := z.Args[0]
25826 if z_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(z_0.AuxInt) != 64 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
25827 continue
25828 }
25829 v.Reset(ssaop.OpRotateLeft64)
25830 v.AddArg2(x, z)
25831 return true
25832 }
25833 break
25834 }
25835 return false
25836 }
25837 func rewriteValue_OpOr8(v *ssa.Value) bool {
25838 v_1 := v.Args[1]
25839 v_0 := v.Args[0]
25840 b := v.Block
25841 config := b.Func.Config
25842
25843
25844 for {
25845 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25846 if v_0.Op != ssaop.OpConst8 {
25847 continue
25848 }
25849 c := ssa.AuxIntToInt8(v_0.AuxInt)
25850 if v_1.Op != ssaop.OpConst8 {
25851 continue
25852 }
25853 d := ssa.AuxIntToInt8(v_1.AuxInt)
25854 v.Reset(ssaop.OpConst8)
25855 v.AuxInt = ssa.Int8ToAuxInt(c | d)
25856 return true
25857 }
25858 break
25859 }
25860
25861
25862 for {
25863 t := v.Type
25864 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25865 if v_0.Op != ssaop.OpCom8 {
25866 continue
25867 }
25868 x := v_0.Args[0]
25869 if v_1.Op != ssaop.OpCom8 {
25870 continue
25871 }
25872 y := v_1.Args[0]
25873 v.Reset(ssaop.OpCom8)
25874 v0 := b.NewValue0(v.Pos, ssaop.OpAnd8, t)
25875 v0.AddArg2(x, y)
25876 v.AddArg(v0)
25877 return true
25878 }
25879 break
25880 }
25881
25882
25883 for {
25884 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25885 x := v_0
25886 if v_1.Op != ssaop.OpAnd8 {
25887 continue
25888 }
25889 _ = v_1.Args[1]
25890 v_1_0 := v_1.Args[0]
25891 v_1_1 := v_1.Args[1]
25892 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
25893 if x != v_1_0 {
25894 continue
25895 }
25896 v.CopyOf(x)
25897 return true
25898 }
25899 }
25900 break
25901 }
25902
25903
25904 for {
25905 x := v_0
25906 if x != v_1 {
25907 break
25908 }
25909 v.CopyOf(x)
25910 return true
25911 }
25912
25913
25914 for {
25915 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25916 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
25917 continue
25918 }
25919 x := v_1
25920 v.CopyOf(x)
25921 return true
25922 }
25923 break
25924 }
25925
25926
25927 for {
25928 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25929 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != -1 {
25930 continue
25931 }
25932 v.Reset(ssaop.OpConst8)
25933 v.AuxInt = ssa.Int8ToAuxInt(-1)
25934 return true
25935 }
25936 break
25937 }
25938
25939
25940 for {
25941 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25942 if v_0.Op != ssaop.OpCom8 {
25943 continue
25944 }
25945 x := v_0.Args[0]
25946 if x != v_1 {
25947 continue
25948 }
25949 v.Reset(ssaop.OpConst8)
25950 v.AuxInt = ssa.Int8ToAuxInt(-1)
25951 return true
25952 }
25953 break
25954 }
25955
25956
25957 for {
25958 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25959 x := v_0
25960 if v_1.Op != ssaop.OpOr8 {
25961 continue
25962 }
25963 _ = v_1.Args[1]
25964 v_1_0 := v_1.Args[0]
25965 v_1_1 := v_1.Args[1]
25966 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
25967 if x != v_1_0 {
25968 continue
25969 }
25970 y := v_1_1
25971 v.Reset(ssaop.OpOr8)
25972 v.AddArg2(x, y)
25973 return true
25974 }
25975 }
25976 break
25977 }
25978
25979
25980
25981 for {
25982 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
25983 if v_0.Op != ssaop.OpAnd8 {
25984 continue
25985 }
25986 _ = v_0.Args[1]
25987 v_0_0 := v_0.Args[0]
25988 v_0_1 := v_0.Args[1]
25989 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
25990 x := v_0_0
25991 if v_0_1.Op != ssaop.OpConst8 {
25992 continue
25993 }
25994 c2 := ssa.AuxIntToInt8(v_0_1.AuxInt)
25995 if v_1.Op != ssaop.OpConst8 {
25996 continue
25997 }
25998 t := v_1.Type
25999 c1 := ssa.AuxIntToInt8(v_1.AuxInt)
26000 if !(^(c1 | c2) == 0) {
26001 continue
26002 }
26003 v.Reset(ssaop.OpOr8)
26004 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
26005 v0.AuxInt = ssa.Int8ToAuxInt(c1)
26006 v.AddArg2(v0, x)
26007 return true
26008 }
26009 }
26010 break
26011 }
26012
26013
26014
26015 for {
26016 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26017 if v_0.Op != ssaop.OpOr8 {
26018 continue
26019 }
26020 _ = v_0.Args[1]
26021 v_0_0 := v_0.Args[0]
26022 v_0_1 := v_0.Args[1]
26023 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
26024 i := v_0_0
26025 if i.Op != ssaop.OpConst8 {
26026 continue
26027 }
26028 t := i.Type
26029 z := v_0_1
26030 x := v_1
26031 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
26032 continue
26033 }
26034 v.Reset(ssaop.OpOr8)
26035 v0 := b.NewValue0(v.Pos, ssaop.OpOr8, t)
26036 v0.AddArg2(z, x)
26037 v.AddArg2(i, v0)
26038 return true
26039 }
26040 }
26041 break
26042 }
26043
26044
26045 for {
26046 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26047 if v_0.Op != ssaop.OpConst8 {
26048 continue
26049 }
26050 t := v_0.Type
26051 c := ssa.AuxIntToInt8(v_0.AuxInt)
26052 if v_1.Op != ssaop.OpOr8 {
26053 continue
26054 }
26055 _ = v_1.Args[1]
26056 v_1_0 := v_1.Args[0]
26057 v_1_1 := v_1.Args[1]
26058 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
26059 if v_1_0.Op != ssaop.OpConst8 || v_1_0.Type != t {
26060 continue
26061 }
26062 d := ssa.AuxIntToInt8(v_1_0.AuxInt)
26063 x := v_1_1
26064 v.Reset(ssaop.OpOr8)
26065 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
26066 v0.AuxInt = ssa.Int8ToAuxInt(c | d)
26067 v.AddArg2(v0, x)
26068 return true
26069 }
26070 }
26071 break
26072 }
26073
26074
26075
26076 for {
26077 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26078 if v_0.Op != ssaop.OpLsh8x64 {
26079 continue
26080 }
26081 _ = v_0.Args[1]
26082 x := v_0.Args[0]
26083 z := v_0.Args[1]
26084 if z.Op != ssaop.OpConst64 {
26085 continue
26086 }
26087 c := ssa.AuxIntToInt64(z.AuxInt)
26088 if v_1.Op != ssaop.OpRsh8Ux64 {
26089 continue
26090 }
26091 _ = v_1.Args[1]
26092 if x != v_1.Args[0] {
26093 continue
26094 }
26095 v_1_1 := v_1.Args[1]
26096 if v_1_1.Op != ssaop.OpConst64 {
26097 continue
26098 }
26099 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
26100 if !(c < 8 && d == 8-c && canRotate(config, 8)) {
26101 continue
26102 }
26103 v.Reset(ssaop.OpRotateLeft8)
26104 v.AddArg2(x, z)
26105 return true
26106 }
26107 break
26108 }
26109
26110
26111
26112 for {
26113 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26114 left := v_0
26115 if left.Op != ssaop.OpLsh8x64 {
26116 continue
26117 }
26118 y := left.Args[1]
26119 x := left.Args[0]
26120 right := v_1
26121 if right.Op != ssaop.OpRsh8Ux64 {
26122 continue
26123 }
26124 _ = right.Args[1]
26125 if x != right.Args[0] {
26126 continue
26127 }
26128 right_1 := right.Args[1]
26129 if right_1.Op != ssaop.OpSub64 {
26130 continue
26131 }
26132 _ = right_1.Args[1]
26133 right_1_0 := right_1.Args[0]
26134 if right_1_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(right_1_0.AuxInt) != 8 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
26135 continue
26136 }
26137 v.Reset(ssaop.OpRotateLeft8)
26138 v.AddArg2(x, y)
26139 return true
26140 }
26141 break
26142 }
26143
26144
26145
26146 for {
26147 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26148 left := v_0
26149 if left.Op != ssaop.OpLsh8x32 {
26150 continue
26151 }
26152 y := left.Args[1]
26153 x := left.Args[0]
26154 right := v_1
26155 if right.Op != ssaop.OpRsh8Ux32 {
26156 continue
26157 }
26158 _ = right.Args[1]
26159 if x != right.Args[0] {
26160 continue
26161 }
26162 right_1 := right.Args[1]
26163 if right_1.Op != ssaop.OpSub32 {
26164 continue
26165 }
26166 _ = right_1.Args[1]
26167 right_1_0 := right_1.Args[0]
26168 if right_1_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(right_1_0.AuxInt) != 8 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
26169 continue
26170 }
26171 v.Reset(ssaop.OpRotateLeft8)
26172 v.AddArg2(x, y)
26173 return true
26174 }
26175 break
26176 }
26177
26178
26179
26180 for {
26181 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26182 left := v_0
26183 if left.Op != ssaop.OpLsh8x16 {
26184 continue
26185 }
26186 y := left.Args[1]
26187 x := left.Args[0]
26188 right := v_1
26189 if right.Op != ssaop.OpRsh8Ux16 {
26190 continue
26191 }
26192 _ = right.Args[1]
26193 if x != right.Args[0] {
26194 continue
26195 }
26196 right_1 := right.Args[1]
26197 if right_1.Op != ssaop.OpSub16 {
26198 continue
26199 }
26200 _ = right_1.Args[1]
26201 right_1_0 := right_1.Args[0]
26202 if right_1_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(right_1_0.AuxInt) != 8 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
26203 continue
26204 }
26205 v.Reset(ssaop.OpRotateLeft8)
26206 v.AddArg2(x, y)
26207 return true
26208 }
26209 break
26210 }
26211
26212
26213
26214 for {
26215 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26216 left := v_0
26217 if left.Op != ssaop.OpLsh8x8 {
26218 continue
26219 }
26220 y := left.Args[1]
26221 x := left.Args[0]
26222 right := v_1
26223 if right.Op != ssaop.OpRsh8Ux8 {
26224 continue
26225 }
26226 _ = right.Args[1]
26227 if x != right.Args[0] {
26228 continue
26229 }
26230 right_1 := right.Args[1]
26231 if right_1.Op != ssaop.OpSub8 {
26232 continue
26233 }
26234 _ = right_1.Args[1]
26235 right_1_0 := right_1.Args[0]
26236 if right_1_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(right_1_0.AuxInt) != 8 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
26237 continue
26238 }
26239 v.Reset(ssaop.OpRotateLeft8)
26240 v.AddArg2(x, y)
26241 return true
26242 }
26243 break
26244 }
26245
26246
26247
26248 for {
26249 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26250 right := v_0
26251 if right.Op != ssaop.OpRsh8Ux64 {
26252 continue
26253 }
26254 y := right.Args[1]
26255 x := right.Args[0]
26256 left := v_1
26257 if left.Op != ssaop.OpLsh8x64 {
26258 continue
26259 }
26260 _ = left.Args[1]
26261 if x != left.Args[0] {
26262 continue
26263 }
26264 z := left.Args[1]
26265 if z.Op != ssaop.OpSub64 {
26266 continue
26267 }
26268 _ = z.Args[1]
26269 z_0 := z.Args[0]
26270 if z_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(z_0.AuxInt) != 8 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
26271 continue
26272 }
26273 v.Reset(ssaop.OpRotateLeft8)
26274 v.AddArg2(x, z)
26275 return true
26276 }
26277 break
26278 }
26279
26280
26281
26282 for {
26283 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26284 right := v_0
26285 if right.Op != ssaop.OpRsh8Ux32 {
26286 continue
26287 }
26288 y := right.Args[1]
26289 x := right.Args[0]
26290 left := v_1
26291 if left.Op != ssaop.OpLsh8x32 {
26292 continue
26293 }
26294 _ = left.Args[1]
26295 if x != left.Args[0] {
26296 continue
26297 }
26298 z := left.Args[1]
26299 if z.Op != ssaop.OpSub32 {
26300 continue
26301 }
26302 _ = z.Args[1]
26303 z_0 := z.Args[0]
26304 if z_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(z_0.AuxInt) != 8 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
26305 continue
26306 }
26307 v.Reset(ssaop.OpRotateLeft8)
26308 v.AddArg2(x, z)
26309 return true
26310 }
26311 break
26312 }
26313
26314
26315
26316 for {
26317 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26318 right := v_0
26319 if right.Op != ssaop.OpRsh8Ux16 {
26320 continue
26321 }
26322 y := right.Args[1]
26323 x := right.Args[0]
26324 left := v_1
26325 if left.Op != ssaop.OpLsh8x16 {
26326 continue
26327 }
26328 _ = left.Args[1]
26329 if x != left.Args[0] {
26330 continue
26331 }
26332 z := left.Args[1]
26333 if z.Op != ssaop.OpSub16 {
26334 continue
26335 }
26336 _ = z.Args[1]
26337 z_0 := z.Args[0]
26338 if z_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(z_0.AuxInt) != 8 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
26339 continue
26340 }
26341 v.Reset(ssaop.OpRotateLeft8)
26342 v.AddArg2(x, z)
26343 return true
26344 }
26345 break
26346 }
26347
26348
26349
26350 for {
26351 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26352 right := v_0
26353 if right.Op != ssaop.OpRsh8Ux8 {
26354 continue
26355 }
26356 y := right.Args[1]
26357 x := right.Args[0]
26358 left := v_1
26359 if left.Op != ssaop.OpLsh8x8 {
26360 continue
26361 }
26362 _ = left.Args[1]
26363 if x != left.Args[0] {
26364 continue
26365 }
26366 z := left.Args[1]
26367 if z.Op != ssaop.OpSub8 {
26368 continue
26369 }
26370 _ = z.Args[1]
26371 z_0 := z.Args[0]
26372 if z_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(z_0.AuxInt) != 8 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
26373 continue
26374 }
26375 v.Reset(ssaop.OpRotateLeft8)
26376 v.AddArg2(x, z)
26377 return true
26378 }
26379 break
26380 }
26381 return false
26382 }
26383 func rewriteValue_OpOrB(v *ssa.Value) bool {
26384 v_1 := v.Args[1]
26385 v_0 := v.Args[0]
26386 b := v.Block
26387 typ := &b.Func.Config.Types
26388
26389
26390 for {
26391 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26392 if v_0.Op != ssaop.OpConstBool {
26393 continue
26394 }
26395 c := ssa.AuxIntToBool(v_0.AuxInt)
26396 if v_1.Op != ssaop.OpConstBool {
26397 continue
26398 }
26399 d := ssa.AuxIntToBool(v_1.AuxInt)
26400 v.Reset(ssaop.OpConstBool)
26401 v.AuxInt = ssa.BoolToAuxInt(c || d)
26402 return true
26403 }
26404 break
26405 }
26406
26407
26408
26409 for {
26410 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26411 if v_0.Op != ssaop.OpLess64 {
26412 continue
26413 }
26414 x := v_0.Args[1]
26415 v_0_0 := v_0.Args[0]
26416 if v_0_0.Op != ssaop.OpConst64 {
26417 continue
26418 }
26419 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
26420 if v_1.Op != ssaop.OpLess64 {
26421 continue
26422 }
26423 _ = v_1.Args[1]
26424 if x != v_1.Args[0] {
26425 continue
26426 }
26427 v_1_1 := v_1.Args[1]
26428 if v_1_1.Op != ssaop.OpConst64 {
26429 continue
26430 }
26431 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
26432 if !(c >= d) {
26433 continue
26434 }
26435 v.Reset(ssaop.OpLess64U)
26436 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26437 v0.AuxInt = ssa.Int64ToAuxInt(c - d)
26438 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
26439 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26440 v2.AuxInt = ssa.Int64ToAuxInt(d)
26441 v1.AddArg2(x, v2)
26442 v.AddArg2(v0, v1)
26443 return true
26444 }
26445 break
26446 }
26447
26448
26449
26450 for {
26451 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26452 if v_0.Op != ssaop.OpLeq64 {
26453 continue
26454 }
26455 x := v_0.Args[1]
26456 v_0_0 := v_0.Args[0]
26457 if v_0_0.Op != ssaop.OpConst64 {
26458 continue
26459 }
26460 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
26461 if v_1.Op != ssaop.OpLess64 {
26462 continue
26463 }
26464 _ = v_1.Args[1]
26465 if x != v_1.Args[0] {
26466 continue
26467 }
26468 v_1_1 := v_1.Args[1]
26469 if v_1_1.Op != ssaop.OpConst64 {
26470 continue
26471 }
26472 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
26473 if !(c >= d) {
26474 continue
26475 }
26476 v.Reset(ssaop.OpLeq64U)
26477 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26478 v0.AuxInt = ssa.Int64ToAuxInt(c - d)
26479 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
26480 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26481 v2.AuxInt = ssa.Int64ToAuxInt(d)
26482 v1.AddArg2(x, v2)
26483 v.AddArg2(v0, v1)
26484 return true
26485 }
26486 break
26487 }
26488
26489
26490
26491 for {
26492 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26493 if v_0.Op != ssaop.OpLess32 {
26494 continue
26495 }
26496 x := v_0.Args[1]
26497 v_0_0 := v_0.Args[0]
26498 if v_0_0.Op != ssaop.OpConst32 {
26499 continue
26500 }
26501 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
26502 if v_1.Op != ssaop.OpLess32 {
26503 continue
26504 }
26505 _ = v_1.Args[1]
26506 if x != v_1.Args[0] {
26507 continue
26508 }
26509 v_1_1 := v_1.Args[1]
26510 if v_1_1.Op != ssaop.OpConst32 {
26511 continue
26512 }
26513 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
26514 if !(c >= d) {
26515 continue
26516 }
26517 v.Reset(ssaop.OpLess32U)
26518 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26519 v0.AuxInt = ssa.Int32ToAuxInt(c - d)
26520 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
26521 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26522 v2.AuxInt = ssa.Int32ToAuxInt(d)
26523 v1.AddArg2(x, v2)
26524 v.AddArg2(v0, v1)
26525 return true
26526 }
26527 break
26528 }
26529
26530
26531
26532 for {
26533 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26534 if v_0.Op != ssaop.OpLeq32 {
26535 continue
26536 }
26537 x := v_0.Args[1]
26538 v_0_0 := v_0.Args[0]
26539 if v_0_0.Op != ssaop.OpConst32 {
26540 continue
26541 }
26542 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
26543 if v_1.Op != ssaop.OpLess32 {
26544 continue
26545 }
26546 _ = v_1.Args[1]
26547 if x != v_1.Args[0] {
26548 continue
26549 }
26550 v_1_1 := v_1.Args[1]
26551 if v_1_1.Op != ssaop.OpConst32 {
26552 continue
26553 }
26554 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
26555 if !(c >= d) {
26556 continue
26557 }
26558 v.Reset(ssaop.OpLeq32U)
26559 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26560 v0.AuxInt = ssa.Int32ToAuxInt(c - d)
26561 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
26562 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26563 v2.AuxInt = ssa.Int32ToAuxInt(d)
26564 v1.AddArg2(x, v2)
26565 v.AddArg2(v0, v1)
26566 return true
26567 }
26568 break
26569 }
26570
26571
26572
26573 for {
26574 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26575 if v_0.Op != ssaop.OpLess16 {
26576 continue
26577 }
26578 x := v_0.Args[1]
26579 v_0_0 := v_0.Args[0]
26580 if v_0_0.Op != ssaop.OpConst16 {
26581 continue
26582 }
26583 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
26584 if v_1.Op != ssaop.OpLess16 {
26585 continue
26586 }
26587 _ = v_1.Args[1]
26588 if x != v_1.Args[0] {
26589 continue
26590 }
26591 v_1_1 := v_1.Args[1]
26592 if v_1_1.Op != ssaop.OpConst16 {
26593 continue
26594 }
26595 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
26596 if !(c >= d) {
26597 continue
26598 }
26599 v.Reset(ssaop.OpLess16U)
26600 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26601 v0.AuxInt = ssa.Int16ToAuxInt(c - d)
26602 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
26603 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26604 v2.AuxInt = ssa.Int16ToAuxInt(d)
26605 v1.AddArg2(x, v2)
26606 v.AddArg2(v0, v1)
26607 return true
26608 }
26609 break
26610 }
26611
26612
26613
26614 for {
26615 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26616 if v_0.Op != ssaop.OpLeq16 {
26617 continue
26618 }
26619 x := v_0.Args[1]
26620 v_0_0 := v_0.Args[0]
26621 if v_0_0.Op != ssaop.OpConst16 {
26622 continue
26623 }
26624 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
26625 if v_1.Op != ssaop.OpLess16 {
26626 continue
26627 }
26628 _ = v_1.Args[1]
26629 if x != v_1.Args[0] {
26630 continue
26631 }
26632 v_1_1 := v_1.Args[1]
26633 if v_1_1.Op != ssaop.OpConst16 {
26634 continue
26635 }
26636 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
26637 if !(c >= d) {
26638 continue
26639 }
26640 v.Reset(ssaop.OpLeq16U)
26641 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26642 v0.AuxInt = ssa.Int16ToAuxInt(c - d)
26643 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
26644 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26645 v2.AuxInt = ssa.Int16ToAuxInt(d)
26646 v1.AddArg2(x, v2)
26647 v.AddArg2(v0, v1)
26648 return true
26649 }
26650 break
26651 }
26652
26653
26654
26655 for {
26656 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26657 if v_0.Op != ssaop.OpLess8 {
26658 continue
26659 }
26660 x := v_0.Args[1]
26661 v_0_0 := v_0.Args[0]
26662 if v_0_0.Op != ssaop.OpConst8 {
26663 continue
26664 }
26665 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
26666 if v_1.Op != ssaop.OpLess8 {
26667 continue
26668 }
26669 _ = v_1.Args[1]
26670 if x != v_1.Args[0] {
26671 continue
26672 }
26673 v_1_1 := v_1.Args[1]
26674 if v_1_1.Op != ssaop.OpConst8 {
26675 continue
26676 }
26677 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
26678 if !(c >= d) {
26679 continue
26680 }
26681 v.Reset(ssaop.OpLess8U)
26682 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
26683 v0.AuxInt = ssa.Int8ToAuxInt(c - d)
26684 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
26685 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
26686 v2.AuxInt = ssa.Int8ToAuxInt(d)
26687 v1.AddArg2(x, v2)
26688 v.AddArg2(v0, v1)
26689 return true
26690 }
26691 break
26692 }
26693
26694
26695
26696 for {
26697 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26698 if v_0.Op != ssaop.OpLeq8 {
26699 continue
26700 }
26701 x := v_0.Args[1]
26702 v_0_0 := v_0.Args[0]
26703 if v_0_0.Op != ssaop.OpConst8 {
26704 continue
26705 }
26706 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
26707 if v_1.Op != ssaop.OpLess8 {
26708 continue
26709 }
26710 _ = v_1.Args[1]
26711 if x != v_1.Args[0] {
26712 continue
26713 }
26714 v_1_1 := v_1.Args[1]
26715 if v_1_1.Op != ssaop.OpConst8 {
26716 continue
26717 }
26718 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
26719 if !(c >= d) {
26720 continue
26721 }
26722 v.Reset(ssaop.OpLeq8U)
26723 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
26724 v0.AuxInt = ssa.Int8ToAuxInt(c - d)
26725 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
26726 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
26727 v2.AuxInt = ssa.Int8ToAuxInt(d)
26728 v1.AddArg2(x, v2)
26729 v.AddArg2(v0, v1)
26730 return true
26731 }
26732 break
26733 }
26734
26735
26736
26737 for {
26738 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26739 if v_0.Op != ssaop.OpLess64 {
26740 continue
26741 }
26742 x := v_0.Args[1]
26743 v_0_0 := v_0.Args[0]
26744 if v_0_0.Op != ssaop.OpConst64 {
26745 continue
26746 }
26747 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
26748 if v_1.Op != ssaop.OpLeq64 {
26749 continue
26750 }
26751 _ = v_1.Args[1]
26752 if x != v_1.Args[0] {
26753 continue
26754 }
26755 v_1_1 := v_1.Args[1]
26756 if v_1_1.Op != ssaop.OpConst64 {
26757 continue
26758 }
26759 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
26760 if !(c >= d+1 && d+1 > d) {
26761 continue
26762 }
26763 v.Reset(ssaop.OpLess64U)
26764 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26765 v0.AuxInt = ssa.Int64ToAuxInt(c - d - 1)
26766 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
26767 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26768 v2.AuxInt = ssa.Int64ToAuxInt(d + 1)
26769 v1.AddArg2(x, v2)
26770 v.AddArg2(v0, v1)
26771 return true
26772 }
26773 break
26774 }
26775
26776
26777
26778 for {
26779 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26780 if v_0.Op != ssaop.OpLeq64 {
26781 continue
26782 }
26783 x := v_0.Args[1]
26784 v_0_0 := v_0.Args[0]
26785 if v_0_0.Op != ssaop.OpConst64 {
26786 continue
26787 }
26788 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
26789 if v_1.Op != ssaop.OpLeq64 {
26790 continue
26791 }
26792 _ = v_1.Args[1]
26793 if x != v_1.Args[0] {
26794 continue
26795 }
26796 v_1_1 := v_1.Args[1]
26797 if v_1_1.Op != ssaop.OpConst64 {
26798 continue
26799 }
26800 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
26801 if !(c >= d+1 && d+1 > d) {
26802 continue
26803 }
26804 v.Reset(ssaop.OpLeq64U)
26805 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26806 v0.AuxInt = ssa.Int64ToAuxInt(c - d - 1)
26807 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
26808 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
26809 v2.AuxInt = ssa.Int64ToAuxInt(d + 1)
26810 v1.AddArg2(x, v2)
26811 v.AddArg2(v0, v1)
26812 return true
26813 }
26814 break
26815 }
26816
26817
26818
26819 for {
26820 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26821 if v_0.Op != ssaop.OpLess32 {
26822 continue
26823 }
26824 x := v_0.Args[1]
26825 v_0_0 := v_0.Args[0]
26826 if v_0_0.Op != ssaop.OpConst32 {
26827 continue
26828 }
26829 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
26830 if v_1.Op != ssaop.OpLeq32 {
26831 continue
26832 }
26833 _ = v_1.Args[1]
26834 if x != v_1.Args[0] {
26835 continue
26836 }
26837 v_1_1 := v_1.Args[1]
26838 if v_1_1.Op != ssaop.OpConst32 {
26839 continue
26840 }
26841 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
26842 if !(c >= d+1 && d+1 > d) {
26843 continue
26844 }
26845 v.Reset(ssaop.OpLess32U)
26846 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26847 v0.AuxInt = ssa.Int32ToAuxInt(c - d - 1)
26848 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
26849 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26850 v2.AuxInt = ssa.Int32ToAuxInt(d + 1)
26851 v1.AddArg2(x, v2)
26852 v.AddArg2(v0, v1)
26853 return true
26854 }
26855 break
26856 }
26857
26858
26859
26860 for {
26861 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26862 if v_0.Op != ssaop.OpLeq32 {
26863 continue
26864 }
26865 x := v_0.Args[1]
26866 v_0_0 := v_0.Args[0]
26867 if v_0_0.Op != ssaop.OpConst32 {
26868 continue
26869 }
26870 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
26871 if v_1.Op != ssaop.OpLeq32 {
26872 continue
26873 }
26874 _ = v_1.Args[1]
26875 if x != v_1.Args[0] {
26876 continue
26877 }
26878 v_1_1 := v_1.Args[1]
26879 if v_1_1.Op != ssaop.OpConst32 {
26880 continue
26881 }
26882 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
26883 if !(c >= d+1 && d+1 > d) {
26884 continue
26885 }
26886 v.Reset(ssaop.OpLeq32U)
26887 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26888 v0.AuxInt = ssa.Int32ToAuxInt(c - d - 1)
26889 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
26890 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
26891 v2.AuxInt = ssa.Int32ToAuxInt(d + 1)
26892 v1.AddArg2(x, v2)
26893 v.AddArg2(v0, v1)
26894 return true
26895 }
26896 break
26897 }
26898
26899
26900
26901 for {
26902 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26903 if v_0.Op != ssaop.OpLess16 {
26904 continue
26905 }
26906 x := v_0.Args[1]
26907 v_0_0 := v_0.Args[0]
26908 if v_0_0.Op != ssaop.OpConst16 {
26909 continue
26910 }
26911 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
26912 if v_1.Op != ssaop.OpLeq16 {
26913 continue
26914 }
26915 _ = v_1.Args[1]
26916 if x != v_1.Args[0] {
26917 continue
26918 }
26919 v_1_1 := v_1.Args[1]
26920 if v_1_1.Op != ssaop.OpConst16 {
26921 continue
26922 }
26923 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
26924 if !(c >= d+1 && d+1 > d) {
26925 continue
26926 }
26927 v.Reset(ssaop.OpLess16U)
26928 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26929 v0.AuxInt = ssa.Int16ToAuxInt(c - d - 1)
26930 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
26931 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26932 v2.AuxInt = ssa.Int16ToAuxInt(d + 1)
26933 v1.AddArg2(x, v2)
26934 v.AddArg2(v0, v1)
26935 return true
26936 }
26937 break
26938 }
26939
26940
26941
26942 for {
26943 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26944 if v_0.Op != ssaop.OpLeq16 {
26945 continue
26946 }
26947 x := v_0.Args[1]
26948 v_0_0 := v_0.Args[0]
26949 if v_0_0.Op != ssaop.OpConst16 {
26950 continue
26951 }
26952 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
26953 if v_1.Op != ssaop.OpLeq16 {
26954 continue
26955 }
26956 _ = v_1.Args[1]
26957 if x != v_1.Args[0] {
26958 continue
26959 }
26960 v_1_1 := v_1.Args[1]
26961 if v_1_1.Op != ssaop.OpConst16 {
26962 continue
26963 }
26964 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
26965 if !(c >= d+1 && d+1 > d) {
26966 continue
26967 }
26968 v.Reset(ssaop.OpLeq16U)
26969 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26970 v0.AuxInt = ssa.Int16ToAuxInt(c - d - 1)
26971 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
26972 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
26973 v2.AuxInt = ssa.Int16ToAuxInt(d + 1)
26974 v1.AddArg2(x, v2)
26975 v.AddArg2(v0, v1)
26976 return true
26977 }
26978 break
26979 }
26980
26981
26982
26983 for {
26984 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
26985 if v_0.Op != ssaop.OpLess8 {
26986 continue
26987 }
26988 x := v_0.Args[1]
26989 v_0_0 := v_0.Args[0]
26990 if v_0_0.Op != ssaop.OpConst8 {
26991 continue
26992 }
26993 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
26994 if v_1.Op != ssaop.OpLeq8 {
26995 continue
26996 }
26997 _ = v_1.Args[1]
26998 if x != v_1.Args[0] {
26999 continue
27000 }
27001 v_1_1 := v_1.Args[1]
27002 if v_1_1.Op != ssaop.OpConst8 {
27003 continue
27004 }
27005 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
27006 if !(c >= d+1 && d+1 > d) {
27007 continue
27008 }
27009 v.Reset(ssaop.OpLess8U)
27010 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27011 v0.AuxInt = ssa.Int8ToAuxInt(c - d - 1)
27012 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
27013 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27014 v2.AuxInt = ssa.Int8ToAuxInt(d + 1)
27015 v1.AddArg2(x, v2)
27016 v.AddArg2(v0, v1)
27017 return true
27018 }
27019 break
27020 }
27021
27022
27023
27024 for {
27025 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27026 if v_0.Op != ssaop.OpLeq8 {
27027 continue
27028 }
27029 x := v_0.Args[1]
27030 v_0_0 := v_0.Args[0]
27031 if v_0_0.Op != ssaop.OpConst8 {
27032 continue
27033 }
27034 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
27035 if v_1.Op != ssaop.OpLeq8 {
27036 continue
27037 }
27038 _ = v_1.Args[1]
27039 if x != v_1.Args[0] {
27040 continue
27041 }
27042 v_1_1 := v_1.Args[1]
27043 if v_1_1.Op != ssaop.OpConst8 {
27044 continue
27045 }
27046 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
27047 if !(c >= d+1 && d+1 > d) {
27048 continue
27049 }
27050 v.Reset(ssaop.OpLeq8U)
27051 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27052 v0.AuxInt = ssa.Int8ToAuxInt(c - d - 1)
27053 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
27054 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27055 v2.AuxInt = ssa.Int8ToAuxInt(d + 1)
27056 v1.AddArg2(x, v2)
27057 v.AddArg2(v0, v1)
27058 return true
27059 }
27060 break
27061 }
27062
27063
27064
27065 for {
27066 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27067 if v_0.Op != ssaop.OpLess64U {
27068 continue
27069 }
27070 x := v_0.Args[1]
27071 v_0_0 := v_0.Args[0]
27072 if v_0_0.Op != ssaop.OpConst64 {
27073 continue
27074 }
27075 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
27076 if v_1.Op != ssaop.OpLess64U {
27077 continue
27078 }
27079 _ = v_1.Args[1]
27080 if x != v_1.Args[0] {
27081 continue
27082 }
27083 v_1_1 := v_1.Args[1]
27084 if v_1_1.Op != ssaop.OpConst64 {
27085 continue
27086 }
27087 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
27088 if !(uint64(c) >= uint64(d)) {
27089 continue
27090 }
27091 v.Reset(ssaop.OpLess64U)
27092 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27093 v0.AuxInt = ssa.Int64ToAuxInt(c - d)
27094 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
27095 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27096 v2.AuxInt = ssa.Int64ToAuxInt(d)
27097 v1.AddArg2(x, v2)
27098 v.AddArg2(v0, v1)
27099 return true
27100 }
27101 break
27102 }
27103
27104
27105
27106 for {
27107 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27108 if v_0.Op != ssaop.OpLeq64U {
27109 continue
27110 }
27111 x := v_0.Args[1]
27112 v_0_0 := v_0.Args[0]
27113 if v_0_0.Op != ssaop.OpConst64 {
27114 continue
27115 }
27116 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
27117 if v_1.Op != ssaop.OpLess64U {
27118 continue
27119 }
27120 _ = v_1.Args[1]
27121 if x != v_1.Args[0] {
27122 continue
27123 }
27124 v_1_1 := v_1.Args[1]
27125 if v_1_1.Op != ssaop.OpConst64 {
27126 continue
27127 }
27128 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
27129 if !(uint64(c) >= uint64(d)) {
27130 continue
27131 }
27132 v.Reset(ssaop.OpLeq64U)
27133 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27134 v0.AuxInt = ssa.Int64ToAuxInt(c - d)
27135 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
27136 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27137 v2.AuxInt = ssa.Int64ToAuxInt(d)
27138 v1.AddArg2(x, v2)
27139 v.AddArg2(v0, v1)
27140 return true
27141 }
27142 break
27143 }
27144
27145
27146
27147 for {
27148 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27149 if v_0.Op != ssaop.OpLess32U {
27150 continue
27151 }
27152 x := v_0.Args[1]
27153 v_0_0 := v_0.Args[0]
27154 if v_0_0.Op != ssaop.OpConst32 {
27155 continue
27156 }
27157 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
27158 if v_1.Op != ssaop.OpLess32U {
27159 continue
27160 }
27161 _ = v_1.Args[1]
27162 if x != v_1.Args[0] {
27163 continue
27164 }
27165 v_1_1 := v_1.Args[1]
27166 if v_1_1.Op != ssaop.OpConst32 {
27167 continue
27168 }
27169 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
27170 if !(uint32(c) >= uint32(d)) {
27171 continue
27172 }
27173 v.Reset(ssaop.OpLess32U)
27174 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27175 v0.AuxInt = ssa.Int32ToAuxInt(c - d)
27176 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
27177 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27178 v2.AuxInt = ssa.Int32ToAuxInt(d)
27179 v1.AddArg2(x, v2)
27180 v.AddArg2(v0, v1)
27181 return true
27182 }
27183 break
27184 }
27185
27186
27187
27188 for {
27189 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27190 if v_0.Op != ssaop.OpLeq32U {
27191 continue
27192 }
27193 x := v_0.Args[1]
27194 v_0_0 := v_0.Args[0]
27195 if v_0_0.Op != ssaop.OpConst32 {
27196 continue
27197 }
27198 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
27199 if v_1.Op != ssaop.OpLess32U {
27200 continue
27201 }
27202 _ = v_1.Args[1]
27203 if x != v_1.Args[0] {
27204 continue
27205 }
27206 v_1_1 := v_1.Args[1]
27207 if v_1_1.Op != ssaop.OpConst32 {
27208 continue
27209 }
27210 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
27211 if !(uint32(c) >= uint32(d)) {
27212 continue
27213 }
27214 v.Reset(ssaop.OpLeq32U)
27215 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27216 v0.AuxInt = ssa.Int32ToAuxInt(c - d)
27217 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
27218 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27219 v2.AuxInt = ssa.Int32ToAuxInt(d)
27220 v1.AddArg2(x, v2)
27221 v.AddArg2(v0, v1)
27222 return true
27223 }
27224 break
27225 }
27226
27227
27228
27229 for {
27230 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27231 if v_0.Op != ssaop.OpLess16U {
27232 continue
27233 }
27234 x := v_0.Args[1]
27235 v_0_0 := v_0.Args[0]
27236 if v_0_0.Op != ssaop.OpConst16 {
27237 continue
27238 }
27239 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
27240 if v_1.Op != ssaop.OpLess16U {
27241 continue
27242 }
27243 _ = v_1.Args[1]
27244 if x != v_1.Args[0] {
27245 continue
27246 }
27247 v_1_1 := v_1.Args[1]
27248 if v_1_1.Op != ssaop.OpConst16 {
27249 continue
27250 }
27251 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
27252 if !(uint16(c) >= uint16(d)) {
27253 continue
27254 }
27255 v.Reset(ssaop.OpLess16U)
27256 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27257 v0.AuxInt = ssa.Int16ToAuxInt(c - d)
27258 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
27259 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27260 v2.AuxInt = ssa.Int16ToAuxInt(d)
27261 v1.AddArg2(x, v2)
27262 v.AddArg2(v0, v1)
27263 return true
27264 }
27265 break
27266 }
27267
27268
27269
27270 for {
27271 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27272 if v_0.Op != ssaop.OpLeq16U {
27273 continue
27274 }
27275 x := v_0.Args[1]
27276 v_0_0 := v_0.Args[0]
27277 if v_0_0.Op != ssaop.OpConst16 {
27278 continue
27279 }
27280 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
27281 if v_1.Op != ssaop.OpLess16U {
27282 continue
27283 }
27284 _ = v_1.Args[1]
27285 if x != v_1.Args[0] {
27286 continue
27287 }
27288 v_1_1 := v_1.Args[1]
27289 if v_1_1.Op != ssaop.OpConst16 {
27290 continue
27291 }
27292 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
27293 if !(uint16(c) >= uint16(d)) {
27294 continue
27295 }
27296 v.Reset(ssaop.OpLeq16U)
27297 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27298 v0.AuxInt = ssa.Int16ToAuxInt(c - d)
27299 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
27300 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27301 v2.AuxInt = ssa.Int16ToAuxInt(d)
27302 v1.AddArg2(x, v2)
27303 v.AddArg2(v0, v1)
27304 return true
27305 }
27306 break
27307 }
27308
27309
27310
27311 for {
27312 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27313 if v_0.Op != ssaop.OpLess8U {
27314 continue
27315 }
27316 x := v_0.Args[1]
27317 v_0_0 := v_0.Args[0]
27318 if v_0_0.Op != ssaop.OpConst8 {
27319 continue
27320 }
27321 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
27322 if v_1.Op != ssaop.OpLess8U {
27323 continue
27324 }
27325 _ = v_1.Args[1]
27326 if x != v_1.Args[0] {
27327 continue
27328 }
27329 v_1_1 := v_1.Args[1]
27330 if v_1_1.Op != ssaop.OpConst8 {
27331 continue
27332 }
27333 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
27334 if !(uint8(c) >= uint8(d)) {
27335 continue
27336 }
27337 v.Reset(ssaop.OpLess8U)
27338 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27339 v0.AuxInt = ssa.Int8ToAuxInt(c - d)
27340 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
27341 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27342 v2.AuxInt = ssa.Int8ToAuxInt(d)
27343 v1.AddArg2(x, v2)
27344 v.AddArg2(v0, v1)
27345 return true
27346 }
27347 break
27348 }
27349
27350
27351
27352 for {
27353 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27354 if v_0.Op != ssaop.OpLeq8U {
27355 continue
27356 }
27357 x := v_0.Args[1]
27358 v_0_0 := v_0.Args[0]
27359 if v_0_0.Op != ssaop.OpConst8 {
27360 continue
27361 }
27362 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
27363 if v_1.Op != ssaop.OpLess8U {
27364 continue
27365 }
27366 _ = v_1.Args[1]
27367 if x != v_1.Args[0] {
27368 continue
27369 }
27370 v_1_1 := v_1.Args[1]
27371 if v_1_1.Op != ssaop.OpConst8 {
27372 continue
27373 }
27374 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
27375 if !(uint8(c) >= uint8(d)) {
27376 continue
27377 }
27378 v.Reset(ssaop.OpLeq8U)
27379 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27380 v0.AuxInt = ssa.Int8ToAuxInt(c - d)
27381 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
27382 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27383 v2.AuxInt = ssa.Int8ToAuxInt(d)
27384 v1.AddArg2(x, v2)
27385 v.AddArg2(v0, v1)
27386 return true
27387 }
27388 break
27389 }
27390
27391
27392
27393 for {
27394 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27395 if v_0.Op != ssaop.OpLess64U {
27396 continue
27397 }
27398 x := v_0.Args[1]
27399 v_0_0 := v_0.Args[0]
27400 if v_0_0.Op != ssaop.OpConst64 {
27401 continue
27402 }
27403 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
27404 if v_1.Op != ssaop.OpLeq64U {
27405 continue
27406 }
27407 _ = v_1.Args[1]
27408 if x != v_1.Args[0] {
27409 continue
27410 }
27411 v_1_1 := v_1.Args[1]
27412 if v_1_1.Op != ssaop.OpConst64 {
27413 continue
27414 }
27415 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
27416 if !(uint64(c) >= uint64(d+1) && uint64(d+1) > uint64(d)) {
27417 continue
27418 }
27419 v.Reset(ssaop.OpLess64U)
27420 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27421 v0.AuxInt = ssa.Int64ToAuxInt(c - d - 1)
27422 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
27423 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27424 v2.AuxInt = ssa.Int64ToAuxInt(d + 1)
27425 v1.AddArg2(x, v2)
27426 v.AddArg2(v0, v1)
27427 return true
27428 }
27429 break
27430 }
27431
27432
27433
27434 for {
27435 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27436 if v_0.Op != ssaop.OpLeq64U {
27437 continue
27438 }
27439 x := v_0.Args[1]
27440 v_0_0 := v_0.Args[0]
27441 if v_0_0.Op != ssaop.OpConst64 {
27442 continue
27443 }
27444 c := ssa.AuxIntToInt64(v_0_0.AuxInt)
27445 if v_1.Op != ssaop.OpLeq64U {
27446 continue
27447 }
27448 _ = v_1.Args[1]
27449 if x != v_1.Args[0] {
27450 continue
27451 }
27452 v_1_1 := v_1.Args[1]
27453 if v_1_1.Op != ssaop.OpConst64 {
27454 continue
27455 }
27456 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
27457 if !(uint64(c) >= uint64(d+1) && uint64(d+1) > uint64(d)) {
27458 continue
27459 }
27460 v.Reset(ssaop.OpLeq64U)
27461 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27462 v0.AuxInt = ssa.Int64ToAuxInt(c - d - 1)
27463 v1 := b.NewValue0(v.Pos, ssaop.OpSub64, x.Type)
27464 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27465 v2.AuxInt = ssa.Int64ToAuxInt(d + 1)
27466 v1.AddArg2(x, v2)
27467 v.AddArg2(v0, v1)
27468 return true
27469 }
27470 break
27471 }
27472
27473
27474
27475 for {
27476 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27477 if v_0.Op != ssaop.OpLess32U {
27478 continue
27479 }
27480 x := v_0.Args[1]
27481 v_0_0 := v_0.Args[0]
27482 if v_0_0.Op != ssaop.OpConst32 {
27483 continue
27484 }
27485 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
27486 if v_1.Op != ssaop.OpLeq32U {
27487 continue
27488 }
27489 _ = v_1.Args[1]
27490 if x != v_1.Args[0] {
27491 continue
27492 }
27493 v_1_1 := v_1.Args[1]
27494 if v_1_1.Op != ssaop.OpConst32 {
27495 continue
27496 }
27497 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
27498 if !(uint32(c) >= uint32(d+1) && uint32(d+1) > uint32(d)) {
27499 continue
27500 }
27501 v.Reset(ssaop.OpLess32U)
27502 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27503 v0.AuxInt = ssa.Int32ToAuxInt(c - d - 1)
27504 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
27505 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27506 v2.AuxInt = ssa.Int32ToAuxInt(d + 1)
27507 v1.AddArg2(x, v2)
27508 v.AddArg2(v0, v1)
27509 return true
27510 }
27511 break
27512 }
27513
27514
27515
27516 for {
27517 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27518 if v_0.Op != ssaop.OpLeq32U {
27519 continue
27520 }
27521 x := v_0.Args[1]
27522 v_0_0 := v_0.Args[0]
27523 if v_0_0.Op != ssaop.OpConst32 {
27524 continue
27525 }
27526 c := ssa.AuxIntToInt32(v_0_0.AuxInt)
27527 if v_1.Op != ssaop.OpLeq32U {
27528 continue
27529 }
27530 _ = v_1.Args[1]
27531 if x != v_1.Args[0] {
27532 continue
27533 }
27534 v_1_1 := v_1.Args[1]
27535 if v_1_1.Op != ssaop.OpConst32 {
27536 continue
27537 }
27538 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
27539 if !(uint32(c) >= uint32(d+1) && uint32(d+1) > uint32(d)) {
27540 continue
27541 }
27542 v.Reset(ssaop.OpLeq32U)
27543 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27544 v0.AuxInt = ssa.Int32ToAuxInt(c - d - 1)
27545 v1 := b.NewValue0(v.Pos, ssaop.OpSub32, x.Type)
27546 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27547 v2.AuxInt = ssa.Int32ToAuxInt(d + 1)
27548 v1.AddArg2(x, v2)
27549 v.AddArg2(v0, v1)
27550 return true
27551 }
27552 break
27553 }
27554
27555
27556
27557 for {
27558 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27559 if v_0.Op != ssaop.OpLess16U {
27560 continue
27561 }
27562 x := v_0.Args[1]
27563 v_0_0 := v_0.Args[0]
27564 if v_0_0.Op != ssaop.OpConst16 {
27565 continue
27566 }
27567 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
27568 if v_1.Op != ssaop.OpLeq16U {
27569 continue
27570 }
27571 _ = v_1.Args[1]
27572 if x != v_1.Args[0] {
27573 continue
27574 }
27575 v_1_1 := v_1.Args[1]
27576 if v_1_1.Op != ssaop.OpConst16 {
27577 continue
27578 }
27579 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
27580 if !(uint16(c) >= uint16(d+1) && uint16(d+1) > uint16(d)) {
27581 continue
27582 }
27583 v.Reset(ssaop.OpLess16U)
27584 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27585 v0.AuxInt = ssa.Int16ToAuxInt(c - d - 1)
27586 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
27587 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27588 v2.AuxInt = ssa.Int16ToAuxInt(d + 1)
27589 v1.AddArg2(x, v2)
27590 v.AddArg2(v0, v1)
27591 return true
27592 }
27593 break
27594 }
27595
27596
27597
27598 for {
27599 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27600 if v_0.Op != ssaop.OpLeq16U {
27601 continue
27602 }
27603 x := v_0.Args[1]
27604 v_0_0 := v_0.Args[0]
27605 if v_0_0.Op != ssaop.OpConst16 {
27606 continue
27607 }
27608 c := ssa.AuxIntToInt16(v_0_0.AuxInt)
27609 if v_1.Op != ssaop.OpLeq16U {
27610 continue
27611 }
27612 _ = v_1.Args[1]
27613 if x != v_1.Args[0] {
27614 continue
27615 }
27616 v_1_1 := v_1.Args[1]
27617 if v_1_1.Op != ssaop.OpConst16 {
27618 continue
27619 }
27620 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
27621 if !(uint16(c) >= uint16(d+1) && uint16(d+1) > uint16(d)) {
27622 continue
27623 }
27624 v.Reset(ssaop.OpLeq16U)
27625 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27626 v0.AuxInt = ssa.Int16ToAuxInt(c - d - 1)
27627 v1 := b.NewValue0(v.Pos, ssaop.OpSub16, x.Type)
27628 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27629 v2.AuxInt = ssa.Int16ToAuxInt(d + 1)
27630 v1.AddArg2(x, v2)
27631 v.AddArg2(v0, v1)
27632 return true
27633 }
27634 break
27635 }
27636
27637
27638
27639 for {
27640 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27641 if v_0.Op != ssaop.OpLess8U {
27642 continue
27643 }
27644 x := v_0.Args[1]
27645 v_0_0 := v_0.Args[0]
27646 if v_0_0.Op != ssaop.OpConst8 {
27647 continue
27648 }
27649 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
27650 if v_1.Op != ssaop.OpLeq8U {
27651 continue
27652 }
27653 _ = v_1.Args[1]
27654 if x != v_1.Args[0] {
27655 continue
27656 }
27657 v_1_1 := v_1.Args[1]
27658 if v_1_1.Op != ssaop.OpConst8 {
27659 continue
27660 }
27661 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
27662 if !(uint8(c) >= uint8(d+1) && uint8(d+1) > uint8(d)) {
27663 continue
27664 }
27665 v.Reset(ssaop.OpLess8U)
27666 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27667 v0.AuxInt = ssa.Int8ToAuxInt(c - d - 1)
27668 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
27669 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27670 v2.AuxInt = ssa.Int8ToAuxInt(d + 1)
27671 v1.AddArg2(x, v2)
27672 v.AddArg2(v0, v1)
27673 return true
27674 }
27675 break
27676 }
27677
27678
27679
27680 for {
27681 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27682 if v_0.Op != ssaop.OpLeq8U {
27683 continue
27684 }
27685 x := v_0.Args[1]
27686 v_0_0 := v_0.Args[0]
27687 if v_0_0.Op != ssaop.OpConst8 {
27688 continue
27689 }
27690 c := ssa.AuxIntToInt8(v_0_0.AuxInt)
27691 if v_1.Op != ssaop.OpLeq8U {
27692 continue
27693 }
27694 _ = v_1.Args[1]
27695 if x != v_1.Args[0] {
27696 continue
27697 }
27698 v_1_1 := v_1.Args[1]
27699 if v_1_1.Op != ssaop.OpConst8 {
27700 continue
27701 }
27702 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
27703 if !(uint8(c) >= uint8(d+1) && uint8(d+1) > uint8(d)) {
27704 continue
27705 }
27706 v.Reset(ssaop.OpLeq8U)
27707 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27708 v0.AuxInt = ssa.Int8ToAuxInt(c - d - 1)
27709 v1 := b.NewValue0(v.Pos, ssaop.OpSub8, x.Type)
27710 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27711 v2.AuxInt = ssa.Int8ToAuxInt(d + 1)
27712 v1.AddArg2(x, v2)
27713 v.AddArg2(v0, v1)
27714 return true
27715 }
27716 break
27717 }
27718
27719
27720
27721 for {
27722 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27723 if v_0.Op != ssaop.OpEq64 {
27724 continue
27725 }
27726 _ = v_0.Args[1]
27727 v_0_0 := v_0.Args[0]
27728 v_0_1 := v_0.Args[1]
27729 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
27730 x := v_0_0
27731 cv := v_0_1
27732 if cv.Op != ssaop.OpConst64 {
27733 continue
27734 }
27735 c := ssa.AuxIntToInt64(cv.AuxInt)
27736 if v_1.Op != ssaop.OpEq64 {
27737 continue
27738 }
27739 _ = v_1.Args[1]
27740 v_1_0 := v_1.Args[0]
27741 v_1_1 := v_1.Args[1]
27742 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
27743 if x != v_1_0 || v_1_1.Op != ssaop.OpConst64 {
27744 continue
27745 }
27746 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
27747 if !(c|d == c && ssa.OneBit(c^d)) {
27748 continue
27749 }
27750 v.Reset(ssaop.OpEq64)
27751 v0 := b.NewValue0(v.Pos, ssaop.OpOr64, x.Type)
27752 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, x.Type)
27753 v1.AuxInt = ssa.Int64ToAuxInt(c ^ d)
27754 v0.AddArg2(x, v1)
27755 v.AddArg2(v0, cv)
27756 return true
27757 }
27758 }
27759 }
27760 break
27761 }
27762
27763
27764
27765 for {
27766 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27767 if v_0.Op != ssaop.OpEq32 {
27768 continue
27769 }
27770 _ = v_0.Args[1]
27771 v_0_0 := v_0.Args[0]
27772 v_0_1 := v_0.Args[1]
27773 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
27774 x := v_0_0
27775 cv := v_0_1
27776 if cv.Op != ssaop.OpConst32 {
27777 continue
27778 }
27779 c := ssa.AuxIntToInt32(cv.AuxInt)
27780 if v_1.Op != ssaop.OpEq32 {
27781 continue
27782 }
27783 _ = v_1.Args[1]
27784 v_1_0 := v_1.Args[0]
27785 v_1_1 := v_1.Args[1]
27786 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
27787 if x != v_1_0 || v_1_1.Op != ssaop.OpConst32 {
27788 continue
27789 }
27790 d := ssa.AuxIntToInt32(v_1_1.AuxInt)
27791 if !(c|d == c && ssa.OneBit(c^d)) {
27792 continue
27793 }
27794 v.Reset(ssaop.OpEq32)
27795 v0 := b.NewValue0(v.Pos, ssaop.OpOr32, x.Type)
27796 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, x.Type)
27797 v1.AuxInt = ssa.Int32ToAuxInt(c ^ d)
27798 v0.AddArg2(x, v1)
27799 v.AddArg2(v0, cv)
27800 return true
27801 }
27802 }
27803 }
27804 break
27805 }
27806
27807
27808
27809 for {
27810 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27811 if v_0.Op != ssaop.OpEq16 {
27812 continue
27813 }
27814 _ = v_0.Args[1]
27815 v_0_0 := v_0.Args[0]
27816 v_0_1 := v_0.Args[1]
27817 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
27818 x := v_0_0
27819 cv := v_0_1
27820 if cv.Op != ssaop.OpConst16 {
27821 continue
27822 }
27823 c := ssa.AuxIntToInt16(cv.AuxInt)
27824 if v_1.Op != ssaop.OpEq16 {
27825 continue
27826 }
27827 _ = v_1.Args[1]
27828 v_1_0 := v_1.Args[0]
27829 v_1_1 := v_1.Args[1]
27830 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
27831 if x != v_1_0 || v_1_1.Op != ssaop.OpConst16 {
27832 continue
27833 }
27834 d := ssa.AuxIntToInt16(v_1_1.AuxInt)
27835 if !(c|d == c && ssa.OneBit(c^d)) {
27836 continue
27837 }
27838 v.Reset(ssaop.OpEq16)
27839 v0 := b.NewValue0(v.Pos, ssaop.OpOr16, x.Type)
27840 v1 := b.NewValue0(v.Pos, ssaop.OpConst16, x.Type)
27841 v1.AuxInt = ssa.Int16ToAuxInt(c ^ d)
27842 v0.AddArg2(x, v1)
27843 v.AddArg2(v0, cv)
27844 return true
27845 }
27846 }
27847 }
27848 break
27849 }
27850
27851
27852
27853 for {
27854 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27855 if v_0.Op != ssaop.OpEq8 {
27856 continue
27857 }
27858 _ = v_0.Args[1]
27859 v_0_0 := v_0.Args[0]
27860 v_0_1 := v_0.Args[1]
27861 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
27862 x := v_0_0
27863 cv := v_0_1
27864 if cv.Op != ssaop.OpConst8 {
27865 continue
27866 }
27867 c := ssa.AuxIntToInt8(cv.AuxInt)
27868 if v_1.Op != ssaop.OpEq8 {
27869 continue
27870 }
27871 _ = v_1.Args[1]
27872 v_1_0 := v_1.Args[0]
27873 v_1_1 := v_1.Args[1]
27874 for _i2 := 0; _i2 <= 1; _i2, v_1_0, v_1_1 = _i2+1, v_1_1, v_1_0 {
27875 if x != v_1_0 || v_1_1.Op != ssaop.OpConst8 {
27876 continue
27877 }
27878 d := ssa.AuxIntToInt8(v_1_1.AuxInt)
27879 if !(c|d == c && ssa.OneBit(c^d)) {
27880 continue
27881 }
27882 v.Reset(ssaop.OpEq8)
27883 v0 := b.NewValue0(v.Pos, ssaop.OpOr8, x.Type)
27884 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, x.Type)
27885 v1.AuxInt = ssa.Int8ToAuxInt(c ^ d)
27886 v0.AddArg2(x, v1)
27887 v.AddArg2(v0, cv)
27888 return true
27889 }
27890 }
27891 }
27892 break
27893 }
27894
27895
27896 for {
27897 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27898 if v_0.Op != ssaop.OpNeq64F {
27899 continue
27900 }
27901 x := v_0.Args[1]
27902 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess64F {
27903 continue
27904 }
27905 _ = v_1.Args[1]
27906 if x != v_1.Args[0] {
27907 continue
27908 }
27909 y := v_1.Args[1]
27910 if y.Op != ssaop.OpConst64F {
27911 continue
27912 }
27913 v.Reset(ssaop.OpNot)
27914 v0 := b.NewValue0(v.Pos, ssaop.OpLeq64F, typ.Bool)
27915 v0.AddArg2(y, x)
27916 v.AddArg(v0)
27917 return true
27918 }
27919 break
27920 }
27921
27922
27923 for {
27924 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27925 if v_0.Op != ssaop.OpNeq64F {
27926 continue
27927 }
27928 x := v_0.Args[1]
27929 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq64F {
27930 continue
27931 }
27932 _ = v_1.Args[1]
27933 if x != v_1.Args[0] {
27934 continue
27935 }
27936 y := v_1.Args[1]
27937 if y.Op != ssaop.OpConst64F {
27938 continue
27939 }
27940 v.Reset(ssaop.OpNot)
27941 v0 := b.NewValue0(v.Pos, ssaop.OpLess64F, typ.Bool)
27942 v0.AddArg2(y, x)
27943 v.AddArg(v0)
27944 return true
27945 }
27946 break
27947 }
27948
27949
27950 for {
27951 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27952 if v_0.Op != ssaop.OpNeq64F {
27953 continue
27954 }
27955 x := v_0.Args[1]
27956 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess64F {
27957 continue
27958 }
27959 _ = v_1.Args[1]
27960 y := v_1.Args[0]
27961 if y.Op != ssaop.OpConst64F {
27962 continue
27963 }
27964 if x != v_1.Args[1] {
27965 continue
27966 }
27967 v.Reset(ssaop.OpNot)
27968 v0 := b.NewValue0(v.Pos, ssaop.OpLeq64F, typ.Bool)
27969 v0.AddArg2(x, y)
27970 v.AddArg(v0)
27971 return true
27972 }
27973 break
27974 }
27975
27976
27977 for {
27978 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
27979 if v_0.Op != ssaop.OpNeq64F {
27980 continue
27981 }
27982 x := v_0.Args[1]
27983 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq64F {
27984 continue
27985 }
27986 _ = v_1.Args[1]
27987 y := v_1.Args[0]
27988 if y.Op != ssaop.OpConst64F {
27989 continue
27990 }
27991 if x != v_1.Args[1] {
27992 continue
27993 }
27994 v.Reset(ssaop.OpNot)
27995 v0 := b.NewValue0(v.Pos, ssaop.OpLess64F, typ.Bool)
27996 v0.AddArg2(x, y)
27997 v.AddArg(v0)
27998 return true
27999 }
28000 break
28001 }
28002
28003
28004 for {
28005 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28006 if v_0.Op != ssaop.OpNeq32F {
28007 continue
28008 }
28009 x := v_0.Args[1]
28010 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess32F {
28011 continue
28012 }
28013 _ = v_1.Args[1]
28014 if x != v_1.Args[0] {
28015 continue
28016 }
28017 y := v_1.Args[1]
28018 if y.Op != ssaop.OpConst32F {
28019 continue
28020 }
28021 v.Reset(ssaop.OpNot)
28022 v0 := b.NewValue0(v.Pos, ssaop.OpLeq32F, typ.Bool)
28023 v0.AddArg2(y, x)
28024 v.AddArg(v0)
28025 return true
28026 }
28027 break
28028 }
28029
28030
28031 for {
28032 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28033 if v_0.Op != ssaop.OpNeq32F {
28034 continue
28035 }
28036 x := v_0.Args[1]
28037 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq32F {
28038 continue
28039 }
28040 _ = v_1.Args[1]
28041 if x != v_1.Args[0] {
28042 continue
28043 }
28044 y := v_1.Args[1]
28045 if y.Op != ssaop.OpConst32F {
28046 continue
28047 }
28048 v.Reset(ssaop.OpNot)
28049 v0 := b.NewValue0(v.Pos, ssaop.OpLess32F, typ.Bool)
28050 v0.AddArg2(y, x)
28051 v.AddArg(v0)
28052 return true
28053 }
28054 break
28055 }
28056
28057
28058 for {
28059 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28060 if v_0.Op != ssaop.OpNeq32F {
28061 continue
28062 }
28063 x := v_0.Args[1]
28064 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess32F {
28065 continue
28066 }
28067 _ = v_1.Args[1]
28068 y := v_1.Args[0]
28069 if y.Op != ssaop.OpConst32F {
28070 continue
28071 }
28072 if x != v_1.Args[1] {
28073 continue
28074 }
28075 v.Reset(ssaop.OpNot)
28076 v0 := b.NewValue0(v.Pos, ssaop.OpLeq32F, typ.Bool)
28077 v0.AddArg2(x, y)
28078 v.AddArg(v0)
28079 return true
28080 }
28081 break
28082 }
28083
28084
28085 for {
28086 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28087 if v_0.Op != ssaop.OpNeq32F {
28088 continue
28089 }
28090 x := v_0.Args[1]
28091 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq32F {
28092 continue
28093 }
28094 _ = v_1.Args[1]
28095 y := v_1.Args[0]
28096 if y.Op != ssaop.OpConst32F {
28097 continue
28098 }
28099 if x != v_1.Args[1] {
28100 continue
28101 }
28102 v.Reset(ssaop.OpNot)
28103 v0 := b.NewValue0(v.Pos, ssaop.OpLess32F, typ.Bool)
28104 v0.AddArg2(x, y)
28105 v.AddArg(v0)
28106 return true
28107 }
28108 break
28109 }
28110
28111
28112 for {
28113 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28114 if v_0.Op != ssaop.OpNeq64F {
28115 continue
28116 }
28117 x := v_0.Args[1]
28118 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess64F {
28119 continue
28120 }
28121 _ = v_1.Args[1]
28122 abs := v_1.Args[0]
28123 if abs.Op != ssaop.OpAbs || x != abs.Args[0] {
28124 continue
28125 }
28126 y := v_1.Args[1]
28127 if y.Op != ssaop.OpConst64F {
28128 continue
28129 }
28130 v.Reset(ssaop.OpNot)
28131 v0 := b.NewValue0(v.Pos, ssaop.OpLeq64F, typ.Bool)
28132 v0.AddArg2(y, abs)
28133 v.AddArg(v0)
28134 return true
28135 }
28136 break
28137 }
28138
28139
28140 for {
28141 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28142 if v_0.Op != ssaop.OpNeq64F {
28143 continue
28144 }
28145 x := v_0.Args[1]
28146 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq64F {
28147 continue
28148 }
28149 _ = v_1.Args[1]
28150 abs := v_1.Args[0]
28151 if abs.Op != ssaop.OpAbs || x != abs.Args[0] {
28152 continue
28153 }
28154 y := v_1.Args[1]
28155 if y.Op != ssaop.OpConst64F {
28156 continue
28157 }
28158 v.Reset(ssaop.OpNot)
28159 v0 := b.NewValue0(v.Pos, ssaop.OpLess64F, typ.Bool)
28160 v0.AddArg2(y, abs)
28161 v.AddArg(v0)
28162 return true
28163 }
28164 break
28165 }
28166
28167
28168 for {
28169 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28170 if v_0.Op != ssaop.OpNeq64F {
28171 continue
28172 }
28173 x := v_0.Args[1]
28174 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess64F {
28175 continue
28176 }
28177 _ = v_1.Args[1]
28178 y := v_1.Args[0]
28179 if y.Op != ssaop.OpConst64F {
28180 continue
28181 }
28182 abs := v_1.Args[1]
28183 if abs.Op != ssaop.OpAbs || x != abs.Args[0] {
28184 continue
28185 }
28186 v.Reset(ssaop.OpNot)
28187 v0 := b.NewValue0(v.Pos, ssaop.OpLeq64F, typ.Bool)
28188 v0.AddArg2(abs, y)
28189 v.AddArg(v0)
28190 return true
28191 }
28192 break
28193 }
28194
28195
28196 for {
28197 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28198 if v_0.Op != ssaop.OpNeq64F {
28199 continue
28200 }
28201 x := v_0.Args[1]
28202 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq64F {
28203 continue
28204 }
28205 _ = v_1.Args[1]
28206 y := v_1.Args[0]
28207 if y.Op != ssaop.OpConst64F {
28208 continue
28209 }
28210 abs := v_1.Args[1]
28211 if abs.Op != ssaop.OpAbs || x != abs.Args[0] {
28212 continue
28213 }
28214 v.Reset(ssaop.OpNot)
28215 v0 := b.NewValue0(v.Pos, ssaop.OpLess64F, typ.Bool)
28216 v0.AddArg2(abs, y)
28217 v.AddArg(v0)
28218 return true
28219 }
28220 break
28221 }
28222
28223
28224 for {
28225 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28226 if v_0.Op != ssaop.OpNeq64F {
28227 continue
28228 }
28229 x := v_0.Args[1]
28230 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess64F {
28231 continue
28232 }
28233 _ = v_1.Args[1]
28234 neg := v_1.Args[0]
28235 if neg.Op != ssaop.OpNeg64F || x != neg.Args[0] {
28236 continue
28237 }
28238 y := v_1.Args[1]
28239 if y.Op != ssaop.OpConst64F {
28240 continue
28241 }
28242 v.Reset(ssaop.OpNot)
28243 v0 := b.NewValue0(v.Pos, ssaop.OpLeq64F, typ.Bool)
28244 v0.AddArg2(y, neg)
28245 v.AddArg(v0)
28246 return true
28247 }
28248 break
28249 }
28250
28251
28252 for {
28253 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28254 if v_0.Op != ssaop.OpNeq64F {
28255 continue
28256 }
28257 x := v_0.Args[1]
28258 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq64F {
28259 continue
28260 }
28261 _ = v_1.Args[1]
28262 neg := v_1.Args[0]
28263 if neg.Op != ssaop.OpNeg64F || x != neg.Args[0] {
28264 continue
28265 }
28266 y := v_1.Args[1]
28267 if y.Op != ssaop.OpConst64F {
28268 continue
28269 }
28270 v.Reset(ssaop.OpNot)
28271 v0 := b.NewValue0(v.Pos, ssaop.OpLess64F, typ.Bool)
28272 v0.AddArg2(y, neg)
28273 v.AddArg(v0)
28274 return true
28275 }
28276 break
28277 }
28278
28279
28280 for {
28281 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28282 if v_0.Op != ssaop.OpNeq64F {
28283 continue
28284 }
28285 x := v_0.Args[1]
28286 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess64F {
28287 continue
28288 }
28289 _ = v_1.Args[1]
28290 y := v_1.Args[0]
28291 if y.Op != ssaop.OpConst64F {
28292 continue
28293 }
28294 neg := v_1.Args[1]
28295 if neg.Op != ssaop.OpNeg64F || x != neg.Args[0] {
28296 continue
28297 }
28298 v.Reset(ssaop.OpNot)
28299 v0 := b.NewValue0(v.Pos, ssaop.OpLeq64F, typ.Bool)
28300 v0.AddArg2(neg, y)
28301 v.AddArg(v0)
28302 return true
28303 }
28304 break
28305 }
28306
28307
28308 for {
28309 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28310 if v_0.Op != ssaop.OpNeq64F {
28311 continue
28312 }
28313 x := v_0.Args[1]
28314 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq64F {
28315 continue
28316 }
28317 _ = v_1.Args[1]
28318 y := v_1.Args[0]
28319 if y.Op != ssaop.OpConst64F {
28320 continue
28321 }
28322 neg := v_1.Args[1]
28323 if neg.Op != ssaop.OpNeg64F || x != neg.Args[0] {
28324 continue
28325 }
28326 v.Reset(ssaop.OpNot)
28327 v0 := b.NewValue0(v.Pos, ssaop.OpLess64F, typ.Bool)
28328 v0.AddArg2(neg, y)
28329 v.AddArg(v0)
28330 return true
28331 }
28332 break
28333 }
28334
28335
28336 for {
28337 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28338 if v_0.Op != ssaop.OpNeq32F {
28339 continue
28340 }
28341 x := v_0.Args[1]
28342 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess32F {
28343 continue
28344 }
28345 _ = v_1.Args[1]
28346 neg := v_1.Args[0]
28347 if neg.Op != ssaop.OpNeg32F || x != neg.Args[0] {
28348 continue
28349 }
28350 y := v_1.Args[1]
28351 if y.Op != ssaop.OpConst32F {
28352 continue
28353 }
28354 v.Reset(ssaop.OpNot)
28355 v0 := b.NewValue0(v.Pos, ssaop.OpLeq32F, typ.Bool)
28356 v0.AddArg2(y, neg)
28357 v.AddArg(v0)
28358 return true
28359 }
28360 break
28361 }
28362
28363
28364 for {
28365 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28366 if v_0.Op != ssaop.OpNeq32F {
28367 continue
28368 }
28369 x := v_0.Args[1]
28370 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq32F {
28371 continue
28372 }
28373 _ = v_1.Args[1]
28374 neg := v_1.Args[0]
28375 if neg.Op != ssaop.OpNeg32F || x != neg.Args[0] {
28376 continue
28377 }
28378 y := v_1.Args[1]
28379 if y.Op != ssaop.OpConst32F {
28380 continue
28381 }
28382 v.Reset(ssaop.OpNot)
28383 v0 := b.NewValue0(v.Pos, ssaop.OpLess32F, typ.Bool)
28384 v0.AddArg2(y, neg)
28385 v.AddArg(v0)
28386 return true
28387 }
28388 break
28389 }
28390
28391
28392 for {
28393 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28394 if v_0.Op != ssaop.OpNeq32F {
28395 continue
28396 }
28397 x := v_0.Args[1]
28398 if x != v_0.Args[0] || v_1.Op != ssaop.OpLess32F {
28399 continue
28400 }
28401 _ = v_1.Args[1]
28402 y := v_1.Args[0]
28403 if y.Op != ssaop.OpConst32F {
28404 continue
28405 }
28406 neg := v_1.Args[1]
28407 if neg.Op != ssaop.OpNeg32F || x != neg.Args[0] {
28408 continue
28409 }
28410 v.Reset(ssaop.OpNot)
28411 v0 := b.NewValue0(v.Pos, ssaop.OpLeq32F, typ.Bool)
28412 v0.AddArg2(neg, y)
28413 v.AddArg(v0)
28414 return true
28415 }
28416 break
28417 }
28418
28419
28420 for {
28421 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28422 if v_0.Op != ssaop.OpNeq32F {
28423 continue
28424 }
28425 x := v_0.Args[1]
28426 if x != v_0.Args[0] || v_1.Op != ssaop.OpLeq32F {
28427 continue
28428 }
28429 _ = v_1.Args[1]
28430 y := v_1.Args[0]
28431 if y.Op != ssaop.OpConst32F {
28432 continue
28433 }
28434 neg := v_1.Args[1]
28435 if neg.Op != ssaop.OpNeg32F || x != neg.Args[0] {
28436 continue
28437 }
28438 v.Reset(ssaop.OpNot)
28439 v0 := b.NewValue0(v.Pos, ssaop.OpLess32F, typ.Bool)
28440 v0.AddArg2(neg, y)
28441 v.AddArg(v0)
28442 return true
28443 }
28444 break
28445 }
28446
28447
28448 for {
28449 x := v_0
28450 if x != v_1 {
28451 break
28452 }
28453 v.CopyOf(x)
28454 return true
28455 }
28456
28457
28458 for {
28459 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28460 if v_0.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_0.AuxInt) != false {
28461 continue
28462 }
28463 x := v_1
28464 v.CopyOf(x)
28465 return true
28466 }
28467 break
28468 }
28469
28470
28471 for {
28472 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
28473 if v_0.Op != ssaop.OpConstBool || ssa.AuxIntToBool(v_0.AuxInt) != true {
28474 continue
28475 }
28476 v.Reset(ssaop.OpConstBool)
28477 v.AuxInt = ssa.BoolToAuxInt(true)
28478 return true
28479 }
28480 break
28481 }
28482 return false
28483 }
28484 func rewriteValue_OpPhi(v *ssa.Value) bool {
28485 b := v.Block
28486
28487
28488 for {
28489 if len(v.Args) != 2 {
28490 break
28491 }
28492 _ = v.Args[1]
28493 v_0 := v.Args[0]
28494 if v_0.Op != ssaop.OpConst8 {
28495 break
28496 }
28497 c := ssa.AuxIntToInt8(v_0.AuxInt)
28498 v_1 := v.Args[1]
28499 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != c {
28500 break
28501 }
28502 v.Reset(ssaop.OpConst8)
28503 v.AuxInt = ssa.Int8ToAuxInt(c)
28504 return true
28505 }
28506
28507
28508 for {
28509 if len(v.Args) != 2 {
28510 break
28511 }
28512 _ = v.Args[1]
28513 v_0 := v.Args[0]
28514 if v_0.Op != ssaop.OpConst16 {
28515 break
28516 }
28517 c := ssa.AuxIntToInt16(v_0.AuxInt)
28518 v_1 := v.Args[1]
28519 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != c {
28520 break
28521 }
28522 v.Reset(ssaop.OpConst16)
28523 v.AuxInt = ssa.Int16ToAuxInt(c)
28524 return true
28525 }
28526
28527
28528 for {
28529 if len(v.Args) != 2 {
28530 break
28531 }
28532 _ = v.Args[1]
28533 v_0 := v.Args[0]
28534 if v_0.Op != ssaop.OpConst32 {
28535 break
28536 }
28537 c := ssa.AuxIntToInt32(v_0.AuxInt)
28538 v_1 := v.Args[1]
28539 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != c {
28540 break
28541 }
28542 v.Reset(ssaop.OpConst32)
28543 v.AuxInt = ssa.Int32ToAuxInt(c)
28544 return true
28545 }
28546
28547
28548 for {
28549 if len(v.Args) != 2 {
28550 break
28551 }
28552 _ = v.Args[1]
28553 v_0 := v.Args[0]
28554 if v_0.Op != ssaop.OpConst64 {
28555 break
28556 }
28557 c := ssa.AuxIntToInt64(v_0.AuxInt)
28558 v_1 := v.Args[1]
28559 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c {
28560 break
28561 }
28562 v.Reset(ssaop.OpConst64)
28563 v.AuxInt = ssa.Int64ToAuxInt(c)
28564 return true
28565 }
28566
28567
28568
28569 for {
28570 if len(v.Args) != 2 {
28571 break
28572 }
28573 t := v.Type
28574 _ = v.Args[1]
28575 nx := v.Args[0]
28576 if nx.Op != ssaop.OpNot {
28577 break
28578 }
28579 x := nx.Args[0]
28580 ny := v.Args[1]
28581 if ny.Op != ssaop.OpNot {
28582 break
28583 }
28584 y := ny.Args[0]
28585 if !(nx.Uses == 1 && ny.Uses == 1) {
28586 break
28587 }
28588 v.Reset(ssaop.OpNot)
28589 v0 := b.NewValue0(v.Pos, ssaop.OpPhi, t)
28590 v0.AddArg2(x, y)
28591 v.AddArg(v0)
28592 return true
28593 }
28594 return false
28595 }
28596 func rewriteValue_OpPopCount16(v *ssa.Value) bool {
28597 v_0 := v.Args[0]
28598 b := v.Block
28599 config := b.Func.Config
28600
28601
28602
28603 for {
28604 if v_0.Op != ssaop.OpConst16 {
28605 break
28606 }
28607 c := ssa.AuxIntToInt16(v_0.AuxInt)
28608 if !(config.PtrSize == 8) {
28609 break
28610 }
28611 v.Reset(ssaop.OpConst64)
28612 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.OnesCount16(uint16(c))))
28613 return true
28614 }
28615
28616
28617
28618 for {
28619 if v_0.Op != ssaop.OpConst16 {
28620 break
28621 }
28622 c := ssa.AuxIntToInt16(v_0.AuxInt)
28623 if !(config.PtrSize == 4) {
28624 break
28625 }
28626 v.Reset(ssaop.OpConst32)
28627 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.OnesCount16(uint16(c))))
28628 return true
28629 }
28630 return false
28631 }
28632 func rewriteValue_OpPopCount32(v *ssa.Value) bool {
28633 v_0 := v.Args[0]
28634 b := v.Block
28635 config := b.Func.Config
28636
28637
28638
28639 for {
28640 if v_0.Op != ssaop.OpConst32 {
28641 break
28642 }
28643 c := ssa.AuxIntToInt32(v_0.AuxInt)
28644 if !(config.PtrSize == 8) {
28645 break
28646 }
28647 v.Reset(ssaop.OpConst64)
28648 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.OnesCount32(uint32(c))))
28649 return true
28650 }
28651
28652
28653
28654 for {
28655 if v_0.Op != ssaop.OpConst32 {
28656 break
28657 }
28658 c := ssa.AuxIntToInt32(v_0.AuxInt)
28659 if !(config.PtrSize == 4) {
28660 break
28661 }
28662 v.Reset(ssaop.OpConst32)
28663 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.OnesCount32(uint32(c))))
28664 return true
28665 }
28666 return false
28667 }
28668 func rewriteValue_OpPopCount64(v *ssa.Value) bool {
28669 v_0 := v.Args[0]
28670 b := v.Block
28671 config := b.Func.Config
28672
28673
28674
28675 for {
28676 if v_0.Op != ssaop.OpConst64 {
28677 break
28678 }
28679 c := ssa.AuxIntToInt64(v_0.AuxInt)
28680 if !(config.PtrSize == 8) {
28681 break
28682 }
28683 v.Reset(ssaop.OpConst64)
28684 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.OnesCount64(uint64(c))))
28685 return true
28686 }
28687
28688
28689
28690 for {
28691 if v_0.Op != ssaop.OpConst64 {
28692 break
28693 }
28694 c := ssa.AuxIntToInt64(v_0.AuxInt)
28695 if !(config.PtrSize == 4) {
28696 break
28697 }
28698 v.Reset(ssaop.OpConst32)
28699 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.OnesCount64(uint64(c))))
28700 return true
28701 }
28702 return false
28703 }
28704 func rewriteValue_OpPopCount8(v *ssa.Value) bool {
28705 v_0 := v.Args[0]
28706 b := v.Block
28707 config := b.Func.Config
28708
28709
28710
28711 for {
28712 if v_0.Op != ssaop.OpConst8 {
28713 break
28714 }
28715 c := ssa.AuxIntToInt8(v_0.AuxInt)
28716 if !(config.PtrSize == 8) {
28717 break
28718 }
28719 v.Reset(ssaop.OpConst64)
28720 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.OnesCount8(uint8(c))))
28721 return true
28722 }
28723
28724
28725
28726 for {
28727 if v_0.Op != ssaop.OpConst8 {
28728 break
28729 }
28730 c := ssa.AuxIntToInt8(v_0.AuxInt)
28731 if !(config.PtrSize == 4) {
28732 break
28733 }
28734 v.Reset(ssaop.OpConst32)
28735 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.OnesCount8(uint8(c))))
28736 return true
28737 }
28738 return false
28739 }
28740 func rewriteValue_OpPtrIndex(v *ssa.Value) bool {
28741 v_1 := v.Args[1]
28742 v_0 := v.Args[0]
28743 b := v.Block
28744 config := b.Func.Config
28745 typ := &b.Func.Config.Types
28746
28747
28748
28749 for {
28750 t := v.Type
28751 ptr := v_0
28752 idx := v_1
28753 if !(config.PtrSize == 4 && ssa.Is32Bit(t.Elem().Size())) {
28754 break
28755 }
28756 v.Reset(ssaop.OpAddPtr)
28757 v0 := b.NewValue0(v.Pos, ssaop.OpMul32, typ.Int)
28758 v1 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int)
28759 v1.AuxInt = ssa.Int32ToAuxInt(int32(t.Elem().Size()))
28760 v0.AddArg2(idx, v1)
28761 v.AddArg2(ptr, v0)
28762 return true
28763 }
28764
28765
28766
28767 for {
28768 t := v.Type
28769 ptr := v_0
28770 idx := v_1
28771 if !(config.PtrSize == 8) {
28772 break
28773 }
28774 v.Reset(ssaop.OpAddPtr)
28775 v0 := b.NewValue0(v.Pos, ssaop.OpMul64, typ.Int)
28776 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int)
28777 v1.AuxInt = ssa.Int64ToAuxInt(t.Elem().Size())
28778 v0.AddArg2(idx, v1)
28779 v.AddArg2(ptr, v0)
28780 return true
28781 }
28782 return false
28783 }
28784 func rewriteValue_OpRotateLeft16(v *ssa.Value) bool {
28785 v_1 := v.Args[1]
28786 v_0 := v.Args[0]
28787 b := v.Block
28788 config := b.Func.Config
28789
28790
28791 for {
28792 if v_0.Op != ssaop.OpConst16 {
28793 break
28794 }
28795 x := ssa.AuxIntToInt16(v_0.AuxInt)
28796 if v_1.Op != ssaop.OpConst64 {
28797 break
28798 }
28799 y := ssa.AuxIntToInt64(v_1.AuxInt)
28800 v.Reset(ssaop.OpConst16)
28801 v.AuxInt = ssa.Int16ToAuxInt(int16(bits.RotateLeft16(uint16(x), int(y))))
28802 return true
28803 }
28804
28805
28806 for {
28807 if v_0.Op != ssaop.OpConst16 {
28808 break
28809 }
28810 x := ssa.AuxIntToInt16(v_0.AuxInt)
28811 if v_1.Op != ssaop.OpConst32 {
28812 break
28813 }
28814 y := ssa.AuxIntToInt32(v_1.AuxInt)
28815 v.Reset(ssaop.OpConst16)
28816 v.AuxInt = ssa.Int16ToAuxInt(int16(bits.RotateLeft16(uint16(x), int(y))))
28817 return true
28818 }
28819
28820
28821
28822 for {
28823 x := v_0
28824 if v_1.Op != ssaop.OpConst16 {
28825 break
28826 }
28827 c := ssa.AuxIntToInt16(v_1.AuxInt)
28828 if !(c%16 == 0) {
28829 break
28830 }
28831 v.CopyOf(x)
28832 return true
28833 }
28834
28835
28836
28837 for {
28838 x := v_0
28839 if v_1.Op != ssaop.OpAnd64 {
28840 break
28841 }
28842 _ = v_1.Args[1]
28843 v_1_0 := v_1.Args[0]
28844 v_1_1 := v_1.Args[1]
28845 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
28846 y := v_1_0
28847 if v_1_1.Op != ssaop.OpConst64 {
28848 continue
28849 }
28850 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
28851 if !(c&15 == 15) {
28852 continue
28853 }
28854 v.Reset(ssaop.OpRotateLeft16)
28855 v.AddArg2(x, y)
28856 return true
28857 }
28858 break
28859 }
28860
28861
28862
28863 for {
28864 x := v_0
28865 if v_1.Op != ssaop.OpAnd32 {
28866 break
28867 }
28868 _ = v_1.Args[1]
28869 v_1_0 := v_1.Args[0]
28870 v_1_1 := v_1.Args[1]
28871 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
28872 y := v_1_0
28873 if v_1_1.Op != ssaop.OpConst32 {
28874 continue
28875 }
28876 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
28877 if !(c&15 == 15) {
28878 continue
28879 }
28880 v.Reset(ssaop.OpRotateLeft16)
28881 v.AddArg2(x, y)
28882 return true
28883 }
28884 break
28885 }
28886
28887
28888
28889 for {
28890 x := v_0
28891 if v_1.Op != ssaop.OpAnd16 {
28892 break
28893 }
28894 _ = v_1.Args[1]
28895 v_1_0 := v_1.Args[0]
28896 v_1_1 := v_1.Args[1]
28897 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
28898 y := v_1_0
28899 if v_1_1.Op != ssaop.OpConst16 {
28900 continue
28901 }
28902 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
28903 if !(c&15 == 15) {
28904 continue
28905 }
28906 v.Reset(ssaop.OpRotateLeft16)
28907 v.AddArg2(x, y)
28908 return true
28909 }
28910 break
28911 }
28912
28913
28914
28915 for {
28916 x := v_0
28917 if v_1.Op != ssaop.OpAnd8 {
28918 break
28919 }
28920 _ = v_1.Args[1]
28921 v_1_0 := v_1.Args[0]
28922 v_1_1 := v_1.Args[1]
28923 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
28924 y := v_1_0
28925 if v_1_1.Op != ssaop.OpConst8 {
28926 continue
28927 }
28928 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
28929 if !(c&15 == 15) {
28930 continue
28931 }
28932 v.Reset(ssaop.OpRotateLeft16)
28933 v.AddArg2(x, y)
28934 return true
28935 }
28936 break
28937 }
28938
28939
28940
28941 for {
28942 x := v_0
28943 if v_1.Op != ssaop.OpNeg64 {
28944 break
28945 }
28946 v_1_0 := v_1.Args[0]
28947 if v_1_0.Op != ssaop.OpAnd64 {
28948 break
28949 }
28950 _ = v_1_0.Args[1]
28951 v_1_0_0 := v_1_0.Args[0]
28952 v_1_0_1 := v_1_0.Args[1]
28953 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
28954 y := v_1_0_0
28955 if v_1_0_1.Op != ssaop.OpConst64 {
28956 continue
28957 }
28958 c := ssa.AuxIntToInt64(v_1_0_1.AuxInt)
28959 if !(c&15 == 15) {
28960 continue
28961 }
28962 v.Reset(ssaop.OpRotateLeft16)
28963 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
28964 v0.AddArg(y)
28965 v.AddArg2(x, v0)
28966 return true
28967 }
28968 break
28969 }
28970
28971
28972
28973 for {
28974 x := v_0
28975 if v_1.Op != ssaop.OpNeg32 {
28976 break
28977 }
28978 v_1_0 := v_1.Args[0]
28979 if v_1_0.Op != ssaop.OpAnd32 {
28980 break
28981 }
28982 _ = v_1_0.Args[1]
28983 v_1_0_0 := v_1_0.Args[0]
28984 v_1_0_1 := v_1_0.Args[1]
28985 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
28986 y := v_1_0_0
28987 if v_1_0_1.Op != ssaop.OpConst32 {
28988 continue
28989 }
28990 c := ssa.AuxIntToInt32(v_1_0_1.AuxInt)
28991 if !(c&15 == 15) {
28992 continue
28993 }
28994 v.Reset(ssaop.OpRotateLeft16)
28995 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
28996 v0.AddArg(y)
28997 v.AddArg2(x, v0)
28998 return true
28999 }
29000 break
29001 }
29002
29003
29004
29005 for {
29006 x := v_0
29007 if v_1.Op != ssaop.OpNeg16 {
29008 break
29009 }
29010 v_1_0 := v_1.Args[0]
29011 if v_1_0.Op != ssaop.OpAnd16 {
29012 break
29013 }
29014 _ = v_1_0.Args[1]
29015 v_1_0_0 := v_1_0.Args[0]
29016 v_1_0_1 := v_1_0.Args[1]
29017 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
29018 y := v_1_0_0
29019 if v_1_0_1.Op != ssaop.OpConst16 {
29020 continue
29021 }
29022 c := ssa.AuxIntToInt16(v_1_0_1.AuxInt)
29023 if !(c&15 == 15) {
29024 continue
29025 }
29026 v.Reset(ssaop.OpRotateLeft16)
29027 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
29028 v0.AddArg(y)
29029 v.AddArg2(x, v0)
29030 return true
29031 }
29032 break
29033 }
29034
29035
29036
29037 for {
29038 x := v_0
29039 if v_1.Op != ssaop.OpNeg8 {
29040 break
29041 }
29042 v_1_0 := v_1.Args[0]
29043 if v_1_0.Op != ssaop.OpAnd8 {
29044 break
29045 }
29046 _ = v_1_0.Args[1]
29047 v_1_0_0 := v_1_0.Args[0]
29048 v_1_0_1 := v_1_0.Args[1]
29049 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
29050 y := v_1_0_0
29051 if v_1_0_1.Op != ssaop.OpConst8 {
29052 continue
29053 }
29054 c := ssa.AuxIntToInt8(v_1_0_1.AuxInt)
29055 if !(c&15 == 15) {
29056 continue
29057 }
29058 v.Reset(ssaop.OpRotateLeft16)
29059 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
29060 v0.AddArg(y)
29061 v.AddArg2(x, v0)
29062 return true
29063 }
29064 break
29065 }
29066
29067
29068
29069 for {
29070 x := v_0
29071 if v_1.Op != ssaop.OpAdd64 {
29072 break
29073 }
29074 _ = v_1.Args[1]
29075 v_1_0 := v_1.Args[0]
29076 v_1_1 := v_1.Args[1]
29077 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29078 y := v_1_0
29079 if v_1_1.Op != ssaop.OpConst64 {
29080 continue
29081 }
29082 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
29083 if !(c&15 == 0) {
29084 continue
29085 }
29086 v.Reset(ssaop.OpRotateLeft16)
29087 v.AddArg2(x, y)
29088 return true
29089 }
29090 break
29091 }
29092
29093
29094
29095 for {
29096 x := v_0
29097 if v_1.Op != ssaop.OpAdd32 {
29098 break
29099 }
29100 _ = v_1.Args[1]
29101 v_1_0 := v_1.Args[0]
29102 v_1_1 := v_1.Args[1]
29103 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29104 y := v_1_0
29105 if v_1_1.Op != ssaop.OpConst32 {
29106 continue
29107 }
29108 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
29109 if !(c&15 == 0) {
29110 continue
29111 }
29112 v.Reset(ssaop.OpRotateLeft16)
29113 v.AddArg2(x, y)
29114 return true
29115 }
29116 break
29117 }
29118
29119
29120
29121 for {
29122 x := v_0
29123 if v_1.Op != ssaop.OpAdd16 {
29124 break
29125 }
29126 _ = v_1.Args[1]
29127 v_1_0 := v_1.Args[0]
29128 v_1_1 := v_1.Args[1]
29129 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29130 y := v_1_0
29131 if v_1_1.Op != ssaop.OpConst16 {
29132 continue
29133 }
29134 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
29135 if !(c&15 == 0) {
29136 continue
29137 }
29138 v.Reset(ssaop.OpRotateLeft16)
29139 v.AddArg2(x, y)
29140 return true
29141 }
29142 break
29143 }
29144
29145
29146
29147 for {
29148 x := v_0
29149 if v_1.Op != ssaop.OpAdd8 {
29150 break
29151 }
29152 _ = v_1.Args[1]
29153 v_1_0 := v_1.Args[0]
29154 v_1_1 := v_1.Args[1]
29155 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29156 y := v_1_0
29157 if v_1_1.Op != ssaop.OpConst8 {
29158 continue
29159 }
29160 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
29161 if !(c&15 == 0) {
29162 continue
29163 }
29164 v.Reset(ssaop.OpRotateLeft16)
29165 v.AddArg2(x, y)
29166 return true
29167 }
29168 break
29169 }
29170
29171
29172
29173 for {
29174 x := v_0
29175 if v_1.Op != ssaop.OpSub64 {
29176 break
29177 }
29178 y := v_1.Args[1]
29179 v_1_0 := v_1.Args[0]
29180 if v_1_0.Op != ssaop.OpConst64 {
29181 break
29182 }
29183 c := ssa.AuxIntToInt64(v_1_0.AuxInt)
29184 if !(c&15 == 0) {
29185 break
29186 }
29187 v.Reset(ssaop.OpRotateLeft16)
29188 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
29189 v0.AddArg(y)
29190 v.AddArg2(x, v0)
29191 return true
29192 }
29193
29194
29195
29196 for {
29197 x := v_0
29198 if v_1.Op != ssaop.OpSub32 {
29199 break
29200 }
29201 y := v_1.Args[1]
29202 v_1_0 := v_1.Args[0]
29203 if v_1_0.Op != ssaop.OpConst32 {
29204 break
29205 }
29206 c := ssa.AuxIntToInt32(v_1_0.AuxInt)
29207 if !(c&15 == 0) {
29208 break
29209 }
29210 v.Reset(ssaop.OpRotateLeft16)
29211 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
29212 v0.AddArg(y)
29213 v.AddArg2(x, v0)
29214 return true
29215 }
29216
29217
29218
29219 for {
29220 x := v_0
29221 if v_1.Op != ssaop.OpSub16 {
29222 break
29223 }
29224 y := v_1.Args[1]
29225 v_1_0 := v_1.Args[0]
29226 if v_1_0.Op != ssaop.OpConst16 {
29227 break
29228 }
29229 c := ssa.AuxIntToInt16(v_1_0.AuxInt)
29230 if !(c&15 == 0) {
29231 break
29232 }
29233 v.Reset(ssaop.OpRotateLeft16)
29234 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
29235 v0.AddArg(y)
29236 v.AddArg2(x, v0)
29237 return true
29238 }
29239
29240
29241
29242 for {
29243 x := v_0
29244 if v_1.Op != ssaop.OpSub8 {
29245 break
29246 }
29247 y := v_1.Args[1]
29248 v_1_0 := v_1.Args[0]
29249 if v_1_0.Op != ssaop.OpConst8 {
29250 break
29251 }
29252 c := ssa.AuxIntToInt8(v_1_0.AuxInt)
29253 if !(c&15 == 0) {
29254 break
29255 }
29256 v.Reset(ssaop.OpRotateLeft16)
29257 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
29258 v0.AddArg(y)
29259 v.AddArg2(x, v0)
29260 return true
29261 }
29262
29263
29264
29265 for {
29266 x := v_0
29267 if v_1.Op != ssaop.OpConst64 {
29268 break
29269 }
29270 t := v_1.Type
29271 c := ssa.AuxIntToInt64(v_1.AuxInt)
29272 if !(config.PtrSize == 4) {
29273 break
29274 }
29275 v.Reset(ssaop.OpRotateLeft16)
29276 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
29277 v0.AuxInt = ssa.Int32ToAuxInt(int32(c))
29278 v.AddArg2(x, v0)
29279 return true
29280 }
29281
29282
29283
29284 for {
29285 if v_0.Op != ssaop.OpRotateLeft16 {
29286 break
29287 }
29288 c := v_0.Args[1]
29289 x := v_0.Args[0]
29290 d := v_1
29291 if !(c.Type.Size() == 8 && d.Type.Size() == 8) {
29292 break
29293 }
29294 v.Reset(ssaop.OpRotateLeft16)
29295 v0 := b.NewValue0(v.Pos, ssaop.OpAdd64, c.Type)
29296 v0.AddArg2(c, d)
29297 v.AddArg2(x, v0)
29298 return true
29299 }
29300
29301
29302
29303 for {
29304 if v_0.Op != ssaop.OpRotateLeft16 {
29305 break
29306 }
29307 c := v_0.Args[1]
29308 x := v_0.Args[0]
29309 d := v_1
29310 if !(c.Type.Size() == 4 && d.Type.Size() == 4) {
29311 break
29312 }
29313 v.Reset(ssaop.OpRotateLeft16)
29314 v0 := b.NewValue0(v.Pos, ssaop.OpAdd32, c.Type)
29315 v0.AddArg2(c, d)
29316 v.AddArg2(x, v0)
29317 return true
29318 }
29319
29320
29321
29322 for {
29323 if v_0.Op != ssaop.OpRotateLeft16 {
29324 break
29325 }
29326 c := v_0.Args[1]
29327 x := v_0.Args[0]
29328 d := v_1
29329 if !(c.Type.Size() == 2 && d.Type.Size() == 2) {
29330 break
29331 }
29332 v.Reset(ssaop.OpRotateLeft16)
29333 v0 := b.NewValue0(v.Pos, ssaop.OpAdd16, c.Type)
29334 v0.AddArg2(c, d)
29335 v.AddArg2(x, v0)
29336 return true
29337 }
29338
29339
29340
29341 for {
29342 if v_0.Op != ssaop.OpRotateLeft16 {
29343 break
29344 }
29345 c := v_0.Args[1]
29346 x := v_0.Args[0]
29347 d := v_1
29348 if !(c.Type.Size() == 1 && d.Type.Size() == 1) {
29349 break
29350 }
29351 v.Reset(ssaop.OpRotateLeft16)
29352 v0 := b.NewValue0(v.Pos, ssaop.OpAdd8, c.Type)
29353 v0.AddArg2(c, d)
29354 v.AddArg2(x, v0)
29355 return true
29356 }
29357 return false
29358 }
29359 func rewriteValue_OpRotateLeft32(v *ssa.Value) bool {
29360 v_1 := v.Args[1]
29361 v_0 := v.Args[0]
29362 b := v.Block
29363 config := b.Func.Config
29364
29365
29366 for {
29367 if v_0.Op != ssaop.OpConst32 {
29368 break
29369 }
29370 x := ssa.AuxIntToInt32(v_0.AuxInt)
29371 if v_1.Op != ssaop.OpConst64 {
29372 break
29373 }
29374 y := ssa.AuxIntToInt64(v_1.AuxInt)
29375 v.Reset(ssaop.OpConst32)
29376 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.RotateLeft32(uint32(x), int(y))))
29377 return true
29378 }
29379
29380
29381 for {
29382 if v_0.Op != ssaop.OpConst32 {
29383 break
29384 }
29385 x := ssa.AuxIntToInt32(v_0.AuxInt)
29386 if v_1.Op != ssaop.OpConst32 {
29387 break
29388 }
29389 y := ssa.AuxIntToInt32(v_1.AuxInt)
29390 v.Reset(ssaop.OpConst32)
29391 v.AuxInt = ssa.Int32ToAuxInt(int32(bits.RotateLeft32(uint32(x), int(y))))
29392 return true
29393 }
29394
29395
29396
29397 for {
29398 x := v_0
29399 if v_1.Op != ssaop.OpConst32 {
29400 break
29401 }
29402 c := ssa.AuxIntToInt32(v_1.AuxInt)
29403 if !(c%32 == 0) {
29404 break
29405 }
29406 v.CopyOf(x)
29407 return true
29408 }
29409
29410
29411
29412 for {
29413 x := v_0
29414 if v_1.Op != ssaop.OpAnd64 {
29415 break
29416 }
29417 _ = v_1.Args[1]
29418 v_1_0 := v_1.Args[0]
29419 v_1_1 := v_1.Args[1]
29420 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29421 y := v_1_0
29422 if v_1_1.Op != ssaop.OpConst64 {
29423 continue
29424 }
29425 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
29426 if !(c&31 == 31) {
29427 continue
29428 }
29429 v.Reset(ssaop.OpRotateLeft32)
29430 v.AddArg2(x, y)
29431 return true
29432 }
29433 break
29434 }
29435
29436
29437
29438 for {
29439 x := v_0
29440 if v_1.Op != ssaop.OpAnd32 {
29441 break
29442 }
29443 _ = v_1.Args[1]
29444 v_1_0 := v_1.Args[0]
29445 v_1_1 := v_1.Args[1]
29446 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29447 y := v_1_0
29448 if v_1_1.Op != ssaop.OpConst32 {
29449 continue
29450 }
29451 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
29452 if !(c&31 == 31) {
29453 continue
29454 }
29455 v.Reset(ssaop.OpRotateLeft32)
29456 v.AddArg2(x, y)
29457 return true
29458 }
29459 break
29460 }
29461
29462
29463
29464 for {
29465 x := v_0
29466 if v_1.Op != ssaop.OpAnd16 {
29467 break
29468 }
29469 _ = v_1.Args[1]
29470 v_1_0 := v_1.Args[0]
29471 v_1_1 := v_1.Args[1]
29472 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29473 y := v_1_0
29474 if v_1_1.Op != ssaop.OpConst16 {
29475 continue
29476 }
29477 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
29478 if !(c&31 == 31) {
29479 continue
29480 }
29481 v.Reset(ssaop.OpRotateLeft32)
29482 v.AddArg2(x, y)
29483 return true
29484 }
29485 break
29486 }
29487
29488
29489
29490 for {
29491 x := v_0
29492 if v_1.Op != ssaop.OpAnd8 {
29493 break
29494 }
29495 _ = v_1.Args[1]
29496 v_1_0 := v_1.Args[0]
29497 v_1_1 := v_1.Args[1]
29498 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29499 y := v_1_0
29500 if v_1_1.Op != ssaop.OpConst8 {
29501 continue
29502 }
29503 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
29504 if !(c&31 == 31) {
29505 continue
29506 }
29507 v.Reset(ssaop.OpRotateLeft32)
29508 v.AddArg2(x, y)
29509 return true
29510 }
29511 break
29512 }
29513
29514
29515
29516 for {
29517 x := v_0
29518 if v_1.Op != ssaop.OpNeg64 {
29519 break
29520 }
29521 v_1_0 := v_1.Args[0]
29522 if v_1_0.Op != ssaop.OpAnd64 {
29523 break
29524 }
29525 _ = v_1_0.Args[1]
29526 v_1_0_0 := v_1_0.Args[0]
29527 v_1_0_1 := v_1_0.Args[1]
29528 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
29529 y := v_1_0_0
29530 if v_1_0_1.Op != ssaop.OpConst64 {
29531 continue
29532 }
29533 c := ssa.AuxIntToInt64(v_1_0_1.AuxInt)
29534 if !(c&31 == 31) {
29535 continue
29536 }
29537 v.Reset(ssaop.OpRotateLeft32)
29538 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
29539 v0.AddArg(y)
29540 v.AddArg2(x, v0)
29541 return true
29542 }
29543 break
29544 }
29545
29546
29547
29548 for {
29549 x := v_0
29550 if v_1.Op != ssaop.OpNeg32 {
29551 break
29552 }
29553 v_1_0 := v_1.Args[0]
29554 if v_1_0.Op != ssaop.OpAnd32 {
29555 break
29556 }
29557 _ = v_1_0.Args[1]
29558 v_1_0_0 := v_1_0.Args[0]
29559 v_1_0_1 := v_1_0.Args[1]
29560 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
29561 y := v_1_0_0
29562 if v_1_0_1.Op != ssaop.OpConst32 {
29563 continue
29564 }
29565 c := ssa.AuxIntToInt32(v_1_0_1.AuxInt)
29566 if !(c&31 == 31) {
29567 continue
29568 }
29569 v.Reset(ssaop.OpRotateLeft32)
29570 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
29571 v0.AddArg(y)
29572 v.AddArg2(x, v0)
29573 return true
29574 }
29575 break
29576 }
29577
29578
29579
29580 for {
29581 x := v_0
29582 if v_1.Op != ssaop.OpNeg16 {
29583 break
29584 }
29585 v_1_0 := v_1.Args[0]
29586 if v_1_0.Op != ssaop.OpAnd16 {
29587 break
29588 }
29589 _ = v_1_0.Args[1]
29590 v_1_0_0 := v_1_0.Args[0]
29591 v_1_0_1 := v_1_0.Args[1]
29592 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
29593 y := v_1_0_0
29594 if v_1_0_1.Op != ssaop.OpConst16 {
29595 continue
29596 }
29597 c := ssa.AuxIntToInt16(v_1_0_1.AuxInt)
29598 if !(c&31 == 31) {
29599 continue
29600 }
29601 v.Reset(ssaop.OpRotateLeft32)
29602 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
29603 v0.AddArg(y)
29604 v.AddArg2(x, v0)
29605 return true
29606 }
29607 break
29608 }
29609
29610
29611
29612 for {
29613 x := v_0
29614 if v_1.Op != ssaop.OpNeg8 {
29615 break
29616 }
29617 v_1_0 := v_1.Args[0]
29618 if v_1_0.Op != ssaop.OpAnd8 {
29619 break
29620 }
29621 _ = v_1_0.Args[1]
29622 v_1_0_0 := v_1_0.Args[0]
29623 v_1_0_1 := v_1_0.Args[1]
29624 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
29625 y := v_1_0_0
29626 if v_1_0_1.Op != ssaop.OpConst8 {
29627 continue
29628 }
29629 c := ssa.AuxIntToInt8(v_1_0_1.AuxInt)
29630 if !(c&31 == 31) {
29631 continue
29632 }
29633 v.Reset(ssaop.OpRotateLeft32)
29634 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
29635 v0.AddArg(y)
29636 v.AddArg2(x, v0)
29637 return true
29638 }
29639 break
29640 }
29641
29642
29643
29644 for {
29645 x := v_0
29646 if v_1.Op != ssaop.OpAdd64 {
29647 break
29648 }
29649 _ = v_1.Args[1]
29650 v_1_0 := v_1.Args[0]
29651 v_1_1 := v_1.Args[1]
29652 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29653 y := v_1_0
29654 if v_1_1.Op != ssaop.OpConst64 {
29655 continue
29656 }
29657 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
29658 if !(c&31 == 0) {
29659 continue
29660 }
29661 v.Reset(ssaop.OpRotateLeft32)
29662 v.AddArg2(x, y)
29663 return true
29664 }
29665 break
29666 }
29667
29668
29669
29670 for {
29671 x := v_0
29672 if v_1.Op != ssaop.OpAdd32 {
29673 break
29674 }
29675 _ = v_1.Args[1]
29676 v_1_0 := v_1.Args[0]
29677 v_1_1 := v_1.Args[1]
29678 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29679 y := v_1_0
29680 if v_1_1.Op != ssaop.OpConst32 {
29681 continue
29682 }
29683 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
29684 if !(c&31 == 0) {
29685 continue
29686 }
29687 v.Reset(ssaop.OpRotateLeft32)
29688 v.AddArg2(x, y)
29689 return true
29690 }
29691 break
29692 }
29693
29694
29695
29696 for {
29697 x := v_0
29698 if v_1.Op != ssaop.OpAdd16 {
29699 break
29700 }
29701 _ = v_1.Args[1]
29702 v_1_0 := v_1.Args[0]
29703 v_1_1 := v_1.Args[1]
29704 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29705 y := v_1_0
29706 if v_1_1.Op != ssaop.OpConst16 {
29707 continue
29708 }
29709 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
29710 if !(c&31 == 0) {
29711 continue
29712 }
29713 v.Reset(ssaop.OpRotateLeft32)
29714 v.AddArg2(x, y)
29715 return true
29716 }
29717 break
29718 }
29719
29720
29721
29722 for {
29723 x := v_0
29724 if v_1.Op != ssaop.OpAdd8 {
29725 break
29726 }
29727 _ = v_1.Args[1]
29728 v_1_0 := v_1.Args[0]
29729 v_1_1 := v_1.Args[1]
29730 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29731 y := v_1_0
29732 if v_1_1.Op != ssaop.OpConst8 {
29733 continue
29734 }
29735 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
29736 if !(c&31 == 0) {
29737 continue
29738 }
29739 v.Reset(ssaop.OpRotateLeft32)
29740 v.AddArg2(x, y)
29741 return true
29742 }
29743 break
29744 }
29745
29746
29747
29748 for {
29749 x := v_0
29750 if v_1.Op != ssaop.OpSub64 {
29751 break
29752 }
29753 y := v_1.Args[1]
29754 v_1_0 := v_1.Args[0]
29755 if v_1_0.Op != ssaop.OpConst64 {
29756 break
29757 }
29758 c := ssa.AuxIntToInt64(v_1_0.AuxInt)
29759 if !(c&31 == 0) {
29760 break
29761 }
29762 v.Reset(ssaop.OpRotateLeft32)
29763 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
29764 v0.AddArg(y)
29765 v.AddArg2(x, v0)
29766 return true
29767 }
29768
29769
29770
29771 for {
29772 x := v_0
29773 if v_1.Op != ssaop.OpSub32 {
29774 break
29775 }
29776 y := v_1.Args[1]
29777 v_1_0 := v_1.Args[0]
29778 if v_1_0.Op != ssaop.OpConst32 {
29779 break
29780 }
29781 c := ssa.AuxIntToInt32(v_1_0.AuxInt)
29782 if !(c&31 == 0) {
29783 break
29784 }
29785 v.Reset(ssaop.OpRotateLeft32)
29786 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
29787 v0.AddArg(y)
29788 v.AddArg2(x, v0)
29789 return true
29790 }
29791
29792
29793
29794 for {
29795 x := v_0
29796 if v_1.Op != ssaop.OpSub16 {
29797 break
29798 }
29799 y := v_1.Args[1]
29800 v_1_0 := v_1.Args[0]
29801 if v_1_0.Op != ssaop.OpConst16 {
29802 break
29803 }
29804 c := ssa.AuxIntToInt16(v_1_0.AuxInt)
29805 if !(c&31 == 0) {
29806 break
29807 }
29808 v.Reset(ssaop.OpRotateLeft32)
29809 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
29810 v0.AddArg(y)
29811 v.AddArg2(x, v0)
29812 return true
29813 }
29814
29815
29816
29817 for {
29818 x := v_0
29819 if v_1.Op != ssaop.OpSub8 {
29820 break
29821 }
29822 y := v_1.Args[1]
29823 v_1_0 := v_1.Args[0]
29824 if v_1_0.Op != ssaop.OpConst8 {
29825 break
29826 }
29827 c := ssa.AuxIntToInt8(v_1_0.AuxInt)
29828 if !(c&31 == 0) {
29829 break
29830 }
29831 v.Reset(ssaop.OpRotateLeft32)
29832 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
29833 v0.AddArg(y)
29834 v.AddArg2(x, v0)
29835 return true
29836 }
29837
29838
29839
29840 for {
29841 x := v_0
29842 if v_1.Op != ssaop.OpConst64 {
29843 break
29844 }
29845 t := v_1.Type
29846 c := ssa.AuxIntToInt64(v_1.AuxInt)
29847 if !(config.PtrSize == 4) {
29848 break
29849 }
29850 v.Reset(ssaop.OpRotateLeft32)
29851 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
29852 v0.AuxInt = ssa.Int32ToAuxInt(int32(c))
29853 v.AddArg2(x, v0)
29854 return true
29855 }
29856
29857
29858
29859 for {
29860 if v_0.Op != ssaop.OpRotateLeft32 {
29861 break
29862 }
29863 c := v_0.Args[1]
29864 x := v_0.Args[0]
29865 d := v_1
29866 if !(c.Type.Size() == 8 && d.Type.Size() == 8) {
29867 break
29868 }
29869 v.Reset(ssaop.OpRotateLeft32)
29870 v0 := b.NewValue0(v.Pos, ssaop.OpAdd64, c.Type)
29871 v0.AddArg2(c, d)
29872 v.AddArg2(x, v0)
29873 return true
29874 }
29875
29876
29877
29878 for {
29879 if v_0.Op != ssaop.OpRotateLeft32 {
29880 break
29881 }
29882 c := v_0.Args[1]
29883 x := v_0.Args[0]
29884 d := v_1
29885 if !(c.Type.Size() == 4 && d.Type.Size() == 4) {
29886 break
29887 }
29888 v.Reset(ssaop.OpRotateLeft32)
29889 v0 := b.NewValue0(v.Pos, ssaop.OpAdd32, c.Type)
29890 v0.AddArg2(c, d)
29891 v.AddArg2(x, v0)
29892 return true
29893 }
29894
29895
29896
29897 for {
29898 if v_0.Op != ssaop.OpRotateLeft32 {
29899 break
29900 }
29901 c := v_0.Args[1]
29902 x := v_0.Args[0]
29903 d := v_1
29904 if !(c.Type.Size() == 2 && d.Type.Size() == 2) {
29905 break
29906 }
29907 v.Reset(ssaop.OpRotateLeft32)
29908 v0 := b.NewValue0(v.Pos, ssaop.OpAdd16, c.Type)
29909 v0.AddArg2(c, d)
29910 v.AddArg2(x, v0)
29911 return true
29912 }
29913
29914
29915
29916 for {
29917 if v_0.Op != ssaop.OpRotateLeft32 {
29918 break
29919 }
29920 c := v_0.Args[1]
29921 x := v_0.Args[0]
29922 d := v_1
29923 if !(c.Type.Size() == 1 && d.Type.Size() == 1) {
29924 break
29925 }
29926 v.Reset(ssaop.OpRotateLeft32)
29927 v0 := b.NewValue0(v.Pos, ssaop.OpAdd8, c.Type)
29928 v0.AddArg2(c, d)
29929 v.AddArg2(x, v0)
29930 return true
29931 }
29932 return false
29933 }
29934 func rewriteValue_OpRotateLeft64(v *ssa.Value) bool {
29935 v_1 := v.Args[1]
29936 v_0 := v.Args[0]
29937 b := v.Block
29938 config := b.Func.Config
29939
29940
29941 for {
29942 if v_0.Op != ssaop.OpConst64 {
29943 break
29944 }
29945 x := ssa.AuxIntToInt64(v_0.AuxInt)
29946 if v_1.Op != ssaop.OpConst64 {
29947 break
29948 }
29949 y := ssa.AuxIntToInt64(v_1.AuxInt)
29950 v.Reset(ssaop.OpConst64)
29951 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.RotateLeft64(uint64(x), int(y))))
29952 return true
29953 }
29954
29955
29956 for {
29957 if v_0.Op != ssaop.OpConst64 {
29958 break
29959 }
29960 x := ssa.AuxIntToInt64(v_0.AuxInt)
29961 if v_1.Op != ssaop.OpConst32 {
29962 break
29963 }
29964 y := ssa.AuxIntToInt32(v_1.AuxInt)
29965 v.Reset(ssaop.OpConst64)
29966 v.AuxInt = ssa.Int64ToAuxInt(int64(bits.RotateLeft64(uint64(x), int(y))))
29967 return true
29968 }
29969
29970
29971
29972 for {
29973 x := v_0
29974 if v_1.Op != ssaop.OpConst64 {
29975 break
29976 }
29977 c := ssa.AuxIntToInt64(v_1.AuxInt)
29978 if !(c%64 == 0) {
29979 break
29980 }
29981 v.CopyOf(x)
29982 return true
29983 }
29984
29985
29986
29987 for {
29988 x := v_0
29989 if v_1.Op != ssaop.OpAnd64 {
29990 break
29991 }
29992 _ = v_1.Args[1]
29993 v_1_0 := v_1.Args[0]
29994 v_1_1 := v_1.Args[1]
29995 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
29996 y := v_1_0
29997 if v_1_1.Op != ssaop.OpConst64 {
29998 continue
29999 }
30000 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
30001 if !(c&63 == 63) {
30002 continue
30003 }
30004 v.Reset(ssaop.OpRotateLeft64)
30005 v.AddArg2(x, y)
30006 return true
30007 }
30008 break
30009 }
30010
30011
30012
30013 for {
30014 x := v_0
30015 if v_1.Op != ssaop.OpAnd32 {
30016 break
30017 }
30018 _ = v_1.Args[1]
30019 v_1_0 := v_1.Args[0]
30020 v_1_1 := v_1.Args[1]
30021 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30022 y := v_1_0
30023 if v_1_1.Op != ssaop.OpConst32 {
30024 continue
30025 }
30026 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
30027 if !(c&63 == 63) {
30028 continue
30029 }
30030 v.Reset(ssaop.OpRotateLeft64)
30031 v.AddArg2(x, y)
30032 return true
30033 }
30034 break
30035 }
30036
30037
30038
30039 for {
30040 x := v_0
30041 if v_1.Op != ssaop.OpAnd16 {
30042 break
30043 }
30044 _ = v_1.Args[1]
30045 v_1_0 := v_1.Args[0]
30046 v_1_1 := v_1.Args[1]
30047 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30048 y := v_1_0
30049 if v_1_1.Op != ssaop.OpConst16 {
30050 continue
30051 }
30052 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
30053 if !(c&63 == 63) {
30054 continue
30055 }
30056 v.Reset(ssaop.OpRotateLeft64)
30057 v.AddArg2(x, y)
30058 return true
30059 }
30060 break
30061 }
30062
30063
30064
30065 for {
30066 x := v_0
30067 if v_1.Op != ssaop.OpAnd8 {
30068 break
30069 }
30070 _ = v_1.Args[1]
30071 v_1_0 := v_1.Args[0]
30072 v_1_1 := v_1.Args[1]
30073 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30074 y := v_1_0
30075 if v_1_1.Op != ssaop.OpConst8 {
30076 continue
30077 }
30078 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
30079 if !(c&63 == 63) {
30080 continue
30081 }
30082 v.Reset(ssaop.OpRotateLeft64)
30083 v.AddArg2(x, y)
30084 return true
30085 }
30086 break
30087 }
30088
30089
30090
30091 for {
30092 x := v_0
30093 if v_1.Op != ssaop.OpNeg64 {
30094 break
30095 }
30096 v_1_0 := v_1.Args[0]
30097 if v_1_0.Op != ssaop.OpAnd64 {
30098 break
30099 }
30100 _ = v_1_0.Args[1]
30101 v_1_0_0 := v_1_0.Args[0]
30102 v_1_0_1 := v_1_0.Args[1]
30103 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30104 y := v_1_0_0
30105 if v_1_0_1.Op != ssaop.OpConst64 {
30106 continue
30107 }
30108 c := ssa.AuxIntToInt64(v_1_0_1.AuxInt)
30109 if !(c&63 == 63) {
30110 continue
30111 }
30112 v.Reset(ssaop.OpRotateLeft64)
30113 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
30114 v0.AddArg(y)
30115 v.AddArg2(x, v0)
30116 return true
30117 }
30118 break
30119 }
30120
30121
30122
30123 for {
30124 x := v_0
30125 if v_1.Op != ssaop.OpNeg32 {
30126 break
30127 }
30128 v_1_0 := v_1.Args[0]
30129 if v_1_0.Op != ssaop.OpAnd32 {
30130 break
30131 }
30132 _ = v_1_0.Args[1]
30133 v_1_0_0 := v_1_0.Args[0]
30134 v_1_0_1 := v_1_0.Args[1]
30135 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30136 y := v_1_0_0
30137 if v_1_0_1.Op != ssaop.OpConst32 {
30138 continue
30139 }
30140 c := ssa.AuxIntToInt32(v_1_0_1.AuxInt)
30141 if !(c&63 == 63) {
30142 continue
30143 }
30144 v.Reset(ssaop.OpRotateLeft64)
30145 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
30146 v0.AddArg(y)
30147 v.AddArg2(x, v0)
30148 return true
30149 }
30150 break
30151 }
30152
30153
30154
30155 for {
30156 x := v_0
30157 if v_1.Op != ssaop.OpNeg16 {
30158 break
30159 }
30160 v_1_0 := v_1.Args[0]
30161 if v_1_0.Op != ssaop.OpAnd16 {
30162 break
30163 }
30164 _ = v_1_0.Args[1]
30165 v_1_0_0 := v_1_0.Args[0]
30166 v_1_0_1 := v_1_0.Args[1]
30167 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30168 y := v_1_0_0
30169 if v_1_0_1.Op != ssaop.OpConst16 {
30170 continue
30171 }
30172 c := ssa.AuxIntToInt16(v_1_0_1.AuxInt)
30173 if !(c&63 == 63) {
30174 continue
30175 }
30176 v.Reset(ssaop.OpRotateLeft64)
30177 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
30178 v0.AddArg(y)
30179 v.AddArg2(x, v0)
30180 return true
30181 }
30182 break
30183 }
30184
30185
30186
30187 for {
30188 x := v_0
30189 if v_1.Op != ssaop.OpNeg8 {
30190 break
30191 }
30192 v_1_0 := v_1.Args[0]
30193 if v_1_0.Op != ssaop.OpAnd8 {
30194 break
30195 }
30196 _ = v_1_0.Args[1]
30197 v_1_0_0 := v_1_0.Args[0]
30198 v_1_0_1 := v_1_0.Args[1]
30199 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30200 y := v_1_0_0
30201 if v_1_0_1.Op != ssaop.OpConst8 {
30202 continue
30203 }
30204 c := ssa.AuxIntToInt8(v_1_0_1.AuxInt)
30205 if !(c&63 == 63) {
30206 continue
30207 }
30208 v.Reset(ssaop.OpRotateLeft64)
30209 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
30210 v0.AddArg(y)
30211 v.AddArg2(x, v0)
30212 return true
30213 }
30214 break
30215 }
30216
30217
30218
30219 for {
30220 x := v_0
30221 if v_1.Op != ssaop.OpAdd64 {
30222 break
30223 }
30224 _ = v_1.Args[1]
30225 v_1_0 := v_1.Args[0]
30226 v_1_1 := v_1.Args[1]
30227 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30228 y := v_1_0
30229 if v_1_1.Op != ssaop.OpConst64 {
30230 continue
30231 }
30232 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
30233 if !(c&63 == 0) {
30234 continue
30235 }
30236 v.Reset(ssaop.OpRotateLeft64)
30237 v.AddArg2(x, y)
30238 return true
30239 }
30240 break
30241 }
30242
30243
30244
30245 for {
30246 x := v_0
30247 if v_1.Op != ssaop.OpAdd32 {
30248 break
30249 }
30250 _ = v_1.Args[1]
30251 v_1_0 := v_1.Args[0]
30252 v_1_1 := v_1.Args[1]
30253 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30254 y := v_1_0
30255 if v_1_1.Op != ssaop.OpConst32 {
30256 continue
30257 }
30258 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
30259 if !(c&63 == 0) {
30260 continue
30261 }
30262 v.Reset(ssaop.OpRotateLeft64)
30263 v.AddArg2(x, y)
30264 return true
30265 }
30266 break
30267 }
30268
30269
30270
30271 for {
30272 x := v_0
30273 if v_1.Op != ssaop.OpAdd16 {
30274 break
30275 }
30276 _ = v_1.Args[1]
30277 v_1_0 := v_1.Args[0]
30278 v_1_1 := v_1.Args[1]
30279 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30280 y := v_1_0
30281 if v_1_1.Op != ssaop.OpConst16 {
30282 continue
30283 }
30284 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
30285 if !(c&63 == 0) {
30286 continue
30287 }
30288 v.Reset(ssaop.OpRotateLeft64)
30289 v.AddArg2(x, y)
30290 return true
30291 }
30292 break
30293 }
30294
30295
30296
30297 for {
30298 x := v_0
30299 if v_1.Op != ssaop.OpAdd8 {
30300 break
30301 }
30302 _ = v_1.Args[1]
30303 v_1_0 := v_1.Args[0]
30304 v_1_1 := v_1.Args[1]
30305 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30306 y := v_1_0
30307 if v_1_1.Op != ssaop.OpConst8 {
30308 continue
30309 }
30310 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
30311 if !(c&63 == 0) {
30312 continue
30313 }
30314 v.Reset(ssaop.OpRotateLeft64)
30315 v.AddArg2(x, y)
30316 return true
30317 }
30318 break
30319 }
30320
30321
30322
30323 for {
30324 x := v_0
30325 if v_1.Op != ssaop.OpSub64 {
30326 break
30327 }
30328 y := v_1.Args[1]
30329 v_1_0 := v_1.Args[0]
30330 if v_1_0.Op != ssaop.OpConst64 {
30331 break
30332 }
30333 c := ssa.AuxIntToInt64(v_1_0.AuxInt)
30334 if !(c&63 == 0) {
30335 break
30336 }
30337 v.Reset(ssaop.OpRotateLeft64)
30338 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
30339 v0.AddArg(y)
30340 v.AddArg2(x, v0)
30341 return true
30342 }
30343
30344
30345
30346 for {
30347 x := v_0
30348 if v_1.Op != ssaop.OpSub32 {
30349 break
30350 }
30351 y := v_1.Args[1]
30352 v_1_0 := v_1.Args[0]
30353 if v_1_0.Op != ssaop.OpConst32 {
30354 break
30355 }
30356 c := ssa.AuxIntToInt32(v_1_0.AuxInt)
30357 if !(c&63 == 0) {
30358 break
30359 }
30360 v.Reset(ssaop.OpRotateLeft64)
30361 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
30362 v0.AddArg(y)
30363 v.AddArg2(x, v0)
30364 return true
30365 }
30366
30367
30368
30369 for {
30370 x := v_0
30371 if v_1.Op != ssaop.OpSub16 {
30372 break
30373 }
30374 y := v_1.Args[1]
30375 v_1_0 := v_1.Args[0]
30376 if v_1_0.Op != ssaop.OpConst16 {
30377 break
30378 }
30379 c := ssa.AuxIntToInt16(v_1_0.AuxInt)
30380 if !(c&63 == 0) {
30381 break
30382 }
30383 v.Reset(ssaop.OpRotateLeft64)
30384 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
30385 v0.AddArg(y)
30386 v.AddArg2(x, v0)
30387 return true
30388 }
30389
30390
30391
30392 for {
30393 x := v_0
30394 if v_1.Op != ssaop.OpSub8 {
30395 break
30396 }
30397 y := v_1.Args[1]
30398 v_1_0 := v_1.Args[0]
30399 if v_1_0.Op != ssaop.OpConst8 {
30400 break
30401 }
30402 c := ssa.AuxIntToInt8(v_1_0.AuxInt)
30403 if !(c&63 == 0) {
30404 break
30405 }
30406 v.Reset(ssaop.OpRotateLeft64)
30407 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
30408 v0.AddArg(y)
30409 v.AddArg2(x, v0)
30410 return true
30411 }
30412
30413
30414
30415 for {
30416 x := v_0
30417 if v_1.Op != ssaop.OpConst64 {
30418 break
30419 }
30420 t := v_1.Type
30421 c := ssa.AuxIntToInt64(v_1.AuxInt)
30422 if !(config.PtrSize == 4) {
30423 break
30424 }
30425 v.Reset(ssaop.OpRotateLeft64)
30426 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
30427 v0.AuxInt = ssa.Int32ToAuxInt(int32(c))
30428 v.AddArg2(x, v0)
30429 return true
30430 }
30431
30432
30433
30434 for {
30435 if v_0.Op != ssaop.OpRotateLeft64 {
30436 break
30437 }
30438 c := v_0.Args[1]
30439 x := v_0.Args[0]
30440 d := v_1
30441 if !(c.Type.Size() == 8 && d.Type.Size() == 8) {
30442 break
30443 }
30444 v.Reset(ssaop.OpRotateLeft64)
30445 v0 := b.NewValue0(v.Pos, ssaop.OpAdd64, c.Type)
30446 v0.AddArg2(c, d)
30447 v.AddArg2(x, v0)
30448 return true
30449 }
30450
30451
30452
30453 for {
30454 if v_0.Op != ssaop.OpRotateLeft64 {
30455 break
30456 }
30457 c := v_0.Args[1]
30458 x := v_0.Args[0]
30459 d := v_1
30460 if !(c.Type.Size() == 4 && d.Type.Size() == 4) {
30461 break
30462 }
30463 v.Reset(ssaop.OpRotateLeft64)
30464 v0 := b.NewValue0(v.Pos, ssaop.OpAdd32, c.Type)
30465 v0.AddArg2(c, d)
30466 v.AddArg2(x, v0)
30467 return true
30468 }
30469
30470
30471
30472 for {
30473 if v_0.Op != ssaop.OpRotateLeft64 {
30474 break
30475 }
30476 c := v_0.Args[1]
30477 x := v_0.Args[0]
30478 d := v_1
30479 if !(c.Type.Size() == 2 && d.Type.Size() == 2) {
30480 break
30481 }
30482 v.Reset(ssaop.OpRotateLeft64)
30483 v0 := b.NewValue0(v.Pos, ssaop.OpAdd16, c.Type)
30484 v0.AddArg2(c, d)
30485 v.AddArg2(x, v0)
30486 return true
30487 }
30488
30489
30490
30491 for {
30492 if v_0.Op != ssaop.OpRotateLeft64 {
30493 break
30494 }
30495 c := v_0.Args[1]
30496 x := v_0.Args[0]
30497 d := v_1
30498 if !(c.Type.Size() == 1 && d.Type.Size() == 1) {
30499 break
30500 }
30501 v.Reset(ssaop.OpRotateLeft64)
30502 v0 := b.NewValue0(v.Pos, ssaop.OpAdd8, c.Type)
30503 v0.AddArg2(c, d)
30504 v.AddArg2(x, v0)
30505 return true
30506 }
30507 return false
30508 }
30509 func rewriteValue_OpRotateLeft8(v *ssa.Value) bool {
30510 v_1 := v.Args[1]
30511 v_0 := v.Args[0]
30512 b := v.Block
30513 config := b.Func.Config
30514
30515
30516 for {
30517 if v_0.Op != ssaop.OpConst8 {
30518 break
30519 }
30520 x := ssa.AuxIntToInt8(v_0.AuxInt)
30521 if v_1.Op != ssaop.OpConst64 {
30522 break
30523 }
30524 y := ssa.AuxIntToInt64(v_1.AuxInt)
30525 v.Reset(ssaop.OpConst8)
30526 v.AuxInt = ssa.Int8ToAuxInt(int8(bits.RotateLeft8(uint8(x), int(y))))
30527 return true
30528 }
30529
30530
30531 for {
30532 if v_0.Op != ssaop.OpConst8 {
30533 break
30534 }
30535 x := ssa.AuxIntToInt8(v_0.AuxInt)
30536 if v_1.Op != ssaop.OpConst32 {
30537 break
30538 }
30539 y := ssa.AuxIntToInt32(v_1.AuxInt)
30540 v.Reset(ssaop.OpConst8)
30541 v.AuxInt = ssa.Int8ToAuxInt(int8(bits.RotateLeft8(uint8(x), int(y))))
30542 return true
30543 }
30544
30545
30546
30547 for {
30548 x := v_0
30549 if v_1.Op != ssaop.OpConst8 {
30550 break
30551 }
30552 c := ssa.AuxIntToInt8(v_1.AuxInt)
30553 if !(c%8 == 0) {
30554 break
30555 }
30556 v.CopyOf(x)
30557 return true
30558 }
30559
30560
30561
30562 for {
30563 x := v_0
30564 if v_1.Op != ssaop.OpAnd64 {
30565 break
30566 }
30567 _ = v_1.Args[1]
30568 v_1_0 := v_1.Args[0]
30569 v_1_1 := v_1.Args[1]
30570 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30571 y := v_1_0
30572 if v_1_1.Op != ssaop.OpConst64 {
30573 continue
30574 }
30575 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
30576 if !(c&7 == 7) {
30577 continue
30578 }
30579 v.Reset(ssaop.OpRotateLeft8)
30580 v.AddArg2(x, y)
30581 return true
30582 }
30583 break
30584 }
30585
30586
30587
30588 for {
30589 x := v_0
30590 if v_1.Op != ssaop.OpAnd32 {
30591 break
30592 }
30593 _ = v_1.Args[1]
30594 v_1_0 := v_1.Args[0]
30595 v_1_1 := v_1.Args[1]
30596 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30597 y := v_1_0
30598 if v_1_1.Op != ssaop.OpConst32 {
30599 continue
30600 }
30601 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
30602 if !(c&7 == 7) {
30603 continue
30604 }
30605 v.Reset(ssaop.OpRotateLeft8)
30606 v.AddArg2(x, y)
30607 return true
30608 }
30609 break
30610 }
30611
30612
30613
30614 for {
30615 x := v_0
30616 if v_1.Op != ssaop.OpAnd16 {
30617 break
30618 }
30619 _ = v_1.Args[1]
30620 v_1_0 := v_1.Args[0]
30621 v_1_1 := v_1.Args[1]
30622 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30623 y := v_1_0
30624 if v_1_1.Op != ssaop.OpConst16 {
30625 continue
30626 }
30627 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
30628 if !(c&7 == 7) {
30629 continue
30630 }
30631 v.Reset(ssaop.OpRotateLeft8)
30632 v.AddArg2(x, y)
30633 return true
30634 }
30635 break
30636 }
30637
30638
30639
30640 for {
30641 x := v_0
30642 if v_1.Op != ssaop.OpAnd8 {
30643 break
30644 }
30645 _ = v_1.Args[1]
30646 v_1_0 := v_1.Args[0]
30647 v_1_1 := v_1.Args[1]
30648 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30649 y := v_1_0
30650 if v_1_1.Op != ssaop.OpConst8 {
30651 continue
30652 }
30653 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
30654 if !(c&7 == 7) {
30655 continue
30656 }
30657 v.Reset(ssaop.OpRotateLeft8)
30658 v.AddArg2(x, y)
30659 return true
30660 }
30661 break
30662 }
30663
30664
30665
30666 for {
30667 x := v_0
30668 if v_1.Op != ssaop.OpNeg64 {
30669 break
30670 }
30671 v_1_0 := v_1.Args[0]
30672 if v_1_0.Op != ssaop.OpAnd64 {
30673 break
30674 }
30675 _ = v_1_0.Args[1]
30676 v_1_0_0 := v_1_0.Args[0]
30677 v_1_0_1 := v_1_0.Args[1]
30678 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30679 y := v_1_0_0
30680 if v_1_0_1.Op != ssaop.OpConst64 {
30681 continue
30682 }
30683 c := ssa.AuxIntToInt64(v_1_0_1.AuxInt)
30684 if !(c&7 == 7) {
30685 continue
30686 }
30687 v.Reset(ssaop.OpRotateLeft8)
30688 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
30689 v0.AddArg(y)
30690 v.AddArg2(x, v0)
30691 return true
30692 }
30693 break
30694 }
30695
30696
30697
30698 for {
30699 x := v_0
30700 if v_1.Op != ssaop.OpNeg32 {
30701 break
30702 }
30703 v_1_0 := v_1.Args[0]
30704 if v_1_0.Op != ssaop.OpAnd32 {
30705 break
30706 }
30707 _ = v_1_0.Args[1]
30708 v_1_0_0 := v_1_0.Args[0]
30709 v_1_0_1 := v_1_0.Args[1]
30710 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30711 y := v_1_0_0
30712 if v_1_0_1.Op != ssaop.OpConst32 {
30713 continue
30714 }
30715 c := ssa.AuxIntToInt32(v_1_0_1.AuxInt)
30716 if !(c&7 == 7) {
30717 continue
30718 }
30719 v.Reset(ssaop.OpRotateLeft8)
30720 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
30721 v0.AddArg(y)
30722 v.AddArg2(x, v0)
30723 return true
30724 }
30725 break
30726 }
30727
30728
30729
30730 for {
30731 x := v_0
30732 if v_1.Op != ssaop.OpNeg16 {
30733 break
30734 }
30735 v_1_0 := v_1.Args[0]
30736 if v_1_0.Op != ssaop.OpAnd16 {
30737 break
30738 }
30739 _ = v_1_0.Args[1]
30740 v_1_0_0 := v_1_0.Args[0]
30741 v_1_0_1 := v_1_0.Args[1]
30742 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30743 y := v_1_0_0
30744 if v_1_0_1.Op != ssaop.OpConst16 {
30745 continue
30746 }
30747 c := ssa.AuxIntToInt16(v_1_0_1.AuxInt)
30748 if !(c&7 == 7) {
30749 continue
30750 }
30751 v.Reset(ssaop.OpRotateLeft8)
30752 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
30753 v0.AddArg(y)
30754 v.AddArg2(x, v0)
30755 return true
30756 }
30757 break
30758 }
30759
30760
30761
30762 for {
30763 x := v_0
30764 if v_1.Op != ssaop.OpNeg8 {
30765 break
30766 }
30767 v_1_0 := v_1.Args[0]
30768 if v_1_0.Op != ssaop.OpAnd8 {
30769 break
30770 }
30771 _ = v_1_0.Args[1]
30772 v_1_0_0 := v_1_0.Args[0]
30773 v_1_0_1 := v_1_0.Args[1]
30774 for _i0 := 0; _i0 <= 1; _i0, v_1_0_0, v_1_0_1 = _i0+1, v_1_0_1, v_1_0_0 {
30775 y := v_1_0_0
30776 if v_1_0_1.Op != ssaop.OpConst8 {
30777 continue
30778 }
30779 c := ssa.AuxIntToInt8(v_1_0_1.AuxInt)
30780 if !(c&7 == 7) {
30781 continue
30782 }
30783 v.Reset(ssaop.OpRotateLeft8)
30784 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
30785 v0.AddArg(y)
30786 v.AddArg2(x, v0)
30787 return true
30788 }
30789 break
30790 }
30791
30792
30793
30794 for {
30795 x := v_0
30796 if v_1.Op != ssaop.OpAdd64 {
30797 break
30798 }
30799 _ = v_1.Args[1]
30800 v_1_0 := v_1.Args[0]
30801 v_1_1 := v_1.Args[1]
30802 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30803 y := v_1_0
30804 if v_1_1.Op != ssaop.OpConst64 {
30805 continue
30806 }
30807 c := ssa.AuxIntToInt64(v_1_1.AuxInt)
30808 if !(c&7 == 0) {
30809 continue
30810 }
30811 v.Reset(ssaop.OpRotateLeft8)
30812 v.AddArg2(x, y)
30813 return true
30814 }
30815 break
30816 }
30817
30818
30819
30820 for {
30821 x := v_0
30822 if v_1.Op != ssaop.OpAdd32 {
30823 break
30824 }
30825 _ = v_1.Args[1]
30826 v_1_0 := v_1.Args[0]
30827 v_1_1 := v_1.Args[1]
30828 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30829 y := v_1_0
30830 if v_1_1.Op != ssaop.OpConst32 {
30831 continue
30832 }
30833 c := ssa.AuxIntToInt32(v_1_1.AuxInt)
30834 if !(c&7 == 0) {
30835 continue
30836 }
30837 v.Reset(ssaop.OpRotateLeft8)
30838 v.AddArg2(x, y)
30839 return true
30840 }
30841 break
30842 }
30843
30844
30845
30846 for {
30847 x := v_0
30848 if v_1.Op != ssaop.OpAdd16 {
30849 break
30850 }
30851 _ = v_1.Args[1]
30852 v_1_0 := v_1.Args[0]
30853 v_1_1 := v_1.Args[1]
30854 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30855 y := v_1_0
30856 if v_1_1.Op != ssaop.OpConst16 {
30857 continue
30858 }
30859 c := ssa.AuxIntToInt16(v_1_1.AuxInt)
30860 if !(c&7 == 0) {
30861 continue
30862 }
30863 v.Reset(ssaop.OpRotateLeft8)
30864 v.AddArg2(x, y)
30865 return true
30866 }
30867 break
30868 }
30869
30870
30871
30872 for {
30873 x := v_0
30874 if v_1.Op != ssaop.OpAdd8 {
30875 break
30876 }
30877 _ = v_1.Args[1]
30878 v_1_0 := v_1.Args[0]
30879 v_1_1 := v_1.Args[1]
30880 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
30881 y := v_1_0
30882 if v_1_1.Op != ssaop.OpConst8 {
30883 continue
30884 }
30885 c := ssa.AuxIntToInt8(v_1_1.AuxInt)
30886 if !(c&7 == 0) {
30887 continue
30888 }
30889 v.Reset(ssaop.OpRotateLeft8)
30890 v.AddArg2(x, y)
30891 return true
30892 }
30893 break
30894 }
30895
30896
30897
30898 for {
30899 x := v_0
30900 if v_1.Op != ssaop.OpSub64 {
30901 break
30902 }
30903 y := v_1.Args[1]
30904 v_1_0 := v_1.Args[0]
30905 if v_1_0.Op != ssaop.OpConst64 {
30906 break
30907 }
30908 c := ssa.AuxIntToInt64(v_1_0.AuxInt)
30909 if !(c&7 == 0) {
30910 break
30911 }
30912 v.Reset(ssaop.OpRotateLeft8)
30913 v0 := b.NewValue0(v.Pos, ssaop.OpNeg64, y.Type)
30914 v0.AddArg(y)
30915 v.AddArg2(x, v0)
30916 return true
30917 }
30918
30919
30920
30921 for {
30922 x := v_0
30923 if v_1.Op != ssaop.OpSub32 {
30924 break
30925 }
30926 y := v_1.Args[1]
30927 v_1_0 := v_1.Args[0]
30928 if v_1_0.Op != ssaop.OpConst32 {
30929 break
30930 }
30931 c := ssa.AuxIntToInt32(v_1_0.AuxInt)
30932 if !(c&7 == 0) {
30933 break
30934 }
30935 v.Reset(ssaop.OpRotateLeft8)
30936 v0 := b.NewValue0(v.Pos, ssaop.OpNeg32, y.Type)
30937 v0.AddArg(y)
30938 v.AddArg2(x, v0)
30939 return true
30940 }
30941
30942
30943
30944 for {
30945 x := v_0
30946 if v_1.Op != ssaop.OpSub16 {
30947 break
30948 }
30949 y := v_1.Args[1]
30950 v_1_0 := v_1.Args[0]
30951 if v_1_0.Op != ssaop.OpConst16 {
30952 break
30953 }
30954 c := ssa.AuxIntToInt16(v_1_0.AuxInt)
30955 if !(c&7 == 0) {
30956 break
30957 }
30958 v.Reset(ssaop.OpRotateLeft8)
30959 v0 := b.NewValue0(v.Pos, ssaop.OpNeg16, y.Type)
30960 v0.AddArg(y)
30961 v.AddArg2(x, v0)
30962 return true
30963 }
30964
30965
30966
30967 for {
30968 x := v_0
30969 if v_1.Op != ssaop.OpSub8 {
30970 break
30971 }
30972 y := v_1.Args[1]
30973 v_1_0 := v_1.Args[0]
30974 if v_1_0.Op != ssaop.OpConst8 {
30975 break
30976 }
30977 c := ssa.AuxIntToInt8(v_1_0.AuxInt)
30978 if !(c&7 == 0) {
30979 break
30980 }
30981 v.Reset(ssaop.OpRotateLeft8)
30982 v0 := b.NewValue0(v.Pos, ssaop.OpNeg8, y.Type)
30983 v0.AddArg(y)
30984 v.AddArg2(x, v0)
30985 return true
30986 }
30987
30988
30989
30990 for {
30991 x := v_0
30992 if v_1.Op != ssaop.OpConst64 {
30993 break
30994 }
30995 t := v_1.Type
30996 c := ssa.AuxIntToInt64(v_1.AuxInt)
30997 if !(config.PtrSize == 4) {
30998 break
30999 }
31000 v.Reset(ssaop.OpRotateLeft8)
31001 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
31002 v0.AuxInt = ssa.Int32ToAuxInt(int32(c))
31003 v.AddArg2(x, v0)
31004 return true
31005 }
31006
31007
31008
31009 for {
31010 if v_0.Op != ssaop.OpRotateLeft8 {
31011 break
31012 }
31013 c := v_0.Args[1]
31014 x := v_0.Args[0]
31015 d := v_1
31016 if !(c.Type.Size() == 8 && d.Type.Size() == 8) {
31017 break
31018 }
31019 v.Reset(ssaop.OpRotateLeft8)
31020 v0 := b.NewValue0(v.Pos, ssaop.OpAdd64, c.Type)
31021 v0.AddArg2(c, d)
31022 v.AddArg2(x, v0)
31023 return true
31024 }
31025
31026
31027
31028 for {
31029 if v_0.Op != ssaop.OpRotateLeft8 {
31030 break
31031 }
31032 c := v_0.Args[1]
31033 x := v_0.Args[0]
31034 d := v_1
31035 if !(c.Type.Size() == 4 && d.Type.Size() == 4) {
31036 break
31037 }
31038 v.Reset(ssaop.OpRotateLeft8)
31039 v0 := b.NewValue0(v.Pos, ssaop.OpAdd32, c.Type)
31040 v0.AddArg2(c, d)
31041 v.AddArg2(x, v0)
31042 return true
31043 }
31044
31045
31046
31047 for {
31048 if v_0.Op != ssaop.OpRotateLeft8 {
31049 break
31050 }
31051 c := v_0.Args[1]
31052 x := v_0.Args[0]
31053 d := v_1
31054 if !(c.Type.Size() == 2 && d.Type.Size() == 2) {
31055 break
31056 }
31057 v.Reset(ssaop.OpRotateLeft8)
31058 v0 := b.NewValue0(v.Pos, ssaop.OpAdd16, c.Type)
31059 v0.AddArg2(c, d)
31060 v.AddArg2(x, v0)
31061 return true
31062 }
31063
31064
31065
31066 for {
31067 if v_0.Op != ssaop.OpRotateLeft8 {
31068 break
31069 }
31070 c := v_0.Args[1]
31071 x := v_0.Args[0]
31072 d := v_1
31073 if !(c.Type.Size() == 1 && d.Type.Size() == 1) {
31074 break
31075 }
31076 v.Reset(ssaop.OpRotateLeft8)
31077 v0 := b.NewValue0(v.Pos, ssaop.OpAdd8, c.Type)
31078 v0.AddArg2(c, d)
31079 v.AddArg2(x, v0)
31080 return true
31081 }
31082 return false
31083 }
31084 func rewriteValue_OpRound32F(v *ssa.Value) bool {
31085 v_0 := v.Args[0]
31086
31087
31088 for {
31089 x := v_0
31090 if x.Op != ssaop.OpConst32F {
31091 break
31092 }
31093 v.CopyOf(x)
31094 return true
31095 }
31096 return false
31097 }
31098 func rewriteValue_OpRound64F(v *ssa.Value) bool {
31099 v_0 := v.Args[0]
31100
31101
31102 for {
31103 x := v_0
31104 if x.Op != ssaop.OpConst64F {
31105 break
31106 }
31107 v.CopyOf(x)
31108 return true
31109 }
31110 return false
31111 }
31112 func rewriteValue_OpRoundToEven(v *ssa.Value) bool {
31113 v_0 := v.Args[0]
31114
31115
31116 for {
31117 if v_0.Op != ssaop.OpConst64F {
31118 break
31119 }
31120 c := ssa.AuxIntToFloat64(v_0.AuxInt)
31121 v.Reset(ssaop.OpConst64F)
31122 v.AuxInt = ssa.Float64ToAuxInt(math.RoundToEven(c))
31123 return true
31124 }
31125 return false
31126 }
31127 func rewriteValue_OpRsh16Ux16(v *ssa.Value) bool {
31128 v_1 := v.Args[1]
31129 v_0 := v.Args[0]
31130 b := v.Block
31131
31132
31133 for {
31134 x := v_0
31135 if v_1.Op != ssaop.OpConst16 {
31136 break
31137 }
31138 c := ssa.AuxIntToInt16(v_1.AuxInt)
31139 v.Reset(ssaop.OpRsh16Ux64)
31140 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31141 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
31142 v.AddArg2(x, v0)
31143 return true
31144 }
31145
31146
31147 for {
31148 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31149 break
31150 }
31151 v.Reset(ssaop.OpConst16)
31152 v.AuxInt = ssa.Int16ToAuxInt(0)
31153 return true
31154 }
31155
31156
31157
31158 for {
31159 if ssa.AuxIntToBool(v.AuxInt) != false {
31160 break
31161 }
31162 x := v_0
31163 con := v_1
31164 if con.Op != ssaop.OpConst16 {
31165 break
31166 }
31167 c := ssa.AuxIntToInt16(con.AuxInt)
31168 if !(0 < c && c < 16) {
31169 break
31170 }
31171 v.Reset(ssaop.OpRsh16Ux16)
31172 v.AuxInt = ssa.BoolToAuxInt(true)
31173 v.AddArg2(x, con)
31174 return true
31175 }
31176 return false
31177 }
31178 func rewriteValue_OpRsh16Ux32(v *ssa.Value) bool {
31179 v_1 := v.Args[1]
31180 v_0 := v.Args[0]
31181 b := v.Block
31182
31183
31184 for {
31185 x := v_0
31186 if v_1.Op != ssaop.OpConst32 {
31187 break
31188 }
31189 c := ssa.AuxIntToInt32(v_1.AuxInt)
31190 v.Reset(ssaop.OpRsh16Ux64)
31191 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31192 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
31193 v.AddArg2(x, v0)
31194 return true
31195 }
31196
31197
31198 for {
31199 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31200 break
31201 }
31202 v.Reset(ssaop.OpConst16)
31203 v.AuxInt = ssa.Int16ToAuxInt(0)
31204 return true
31205 }
31206
31207
31208
31209 for {
31210 if ssa.AuxIntToBool(v.AuxInt) != false {
31211 break
31212 }
31213 x := v_0
31214 con := v_1
31215 if con.Op != ssaop.OpConst32 {
31216 break
31217 }
31218 c := ssa.AuxIntToInt32(con.AuxInt)
31219 if !(0 < c && c < 16) {
31220 break
31221 }
31222 v.Reset(ssaop.OpRsh16Ux32)
31223 v.AuxInt = ssa.BoolToAuxInt(true)
31224 v.AddArg2(x, con)
31225 return true
31226 }
31227 return false
31228 }
31229 func rewriteValue_OpRsh16Ux64(v *ssa.Value) bool {
31230 v_1 := v.Args[1]
31231 v_0 := v.Args[0]
31232 b := v.Block
31233 typ := &b.Func.Config.Types
31234
31235
31236 for {
31237 if v_0.Op != ssaop.OpConst16 {
31238 break
31239 }
31240 c := ssa.AuxIntToInt16(v_0.AuxInt)
31241 if v_1.Op != ssaop.OpConst64 {
31242 break
31243 }
31244 d := ssa.AuxIntToInt64(v_1.AuxInt)
31245 v.Reset(ssaop.OpConst16)
31246 v.AuxInt = ssa.Int16ToAuxInt(int16(uint16(c) >> uint64(d)))
31247 return true
31248 }
31249
31250
31251 for {
31252 x := v_0
31253 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
31254 break
31255 }
31256 v.CopyOf(x)
31257 return true
31258 }
31259
31260
31261 for {
31262 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31263 break
31264 }
31265 v.Reset(ssaop.OpConst16)
31266 v.AuxInt = ssa.Int16ToAuxInt(0)
31267 return true
31268 }
31269
31270
31271
31272 for {
31273 if v_1.Op != ssaop.OpConst64 {
31274 break
31275 }
31276 c := ssa.AuxIntToInt64(v_1.AuxInt)
31277 if !(uint64(c) >= 16) {
31278 break
31279 }
31280 v.Reset(ssaop.OpConst16)
31281 v.AuxInt = ssa.Int16ToAuxInt(0)
31282 return true
31283 }
31284
31285
31286
31287 for {
31288 t := v.Type
31289 if v_0.Op != ssaop.OpRsh16Ux64 {
31290 break
31291 }
31292 _ = v_0.Args[1]
31293 x := v_0.Args[0]
31294 v_0_1 := v_0.Args[1]
31295 if v_0_1.Op != ssaop.OpConst64 {
31296 break
31297 }
31298 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
31299 if v_1.Op != ssaop.OpConst64 {
31300 break
31301 }
31302 d := ssa.AuxIntToInt64(v_1.AuxInt)
31303 if !(!uaddOvf(c, d)) {
31304 break
31305 }
31306 v.Reset(ssaop.OpRsh16Ux64)
31307 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
31308 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
31309 v.AddArg2(x, v0)
31310 return true
31311 }
31312
31313
31314 for {
31315 if v_0.Op != ssaop.OpRsh16x64 {
31316 break
31317 }
31318 x := v_0.Args[0]
31319 if v_1.Op != ssaop.OpConst64 {
31320 break
31321 }
31322 t := v_1.Type
31323 if ssa.AuxIntToInt64(v_1.AuxInt) != 15 {
31324 break
31325 }
31326 v.Reset(ssaop.OpRsh16Ux64)
31327 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
31328 v0.AuxInt = ssa.Int64ToAuxInt(15)
31329 v.AddArg2(x, v0)
31330 return true
31331 }
31332
31333
31334
31335 for {
31336 i := v_0
31337 if i.Op != ssaop.OpLsh16x64 {
31338 break
31339 }
31340 _ = i.Args[1]
31341 x := i.Args[0]
31342 i_1 := i.Args[1]
31343 if i_1.Op != ssaop.OpConst64 {
31344 break
31345 }
31346 c := ssa.AuxIntToInt64(i_1.AuxInt)
31347 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 16 && i.Uses == 1) {
31348 break
31349 }
31350 v.Reset(ssaop.OpAnd16)
31351 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, v.Type)
31352 v0.AuxInt = ssa.Int16ToAuxInt(int16(^uint16(0) >> c))
31353 v.AddArg2(x, v0)
31354 return true
31355 }
31356
31357
31358
31359 for {
31360 if v_0.Op != ssaop.OpLsh16x64 {
31361 break
31362 }
31363 _ = v_0.Args[1]
31364 v_0_0 := v_0.Args[0]
31365 if v_0_0.Op != ssaop.OpRsh16Ux64 {
31366 break
31367 }
31368 _ = v_0_0.Args[1]
31369 x := v_0_0.Args[0]
31370 v_0_0_1 := v_0_0.Args[1]
31371 if v_0_0_1.Op != ssaop.OpConst64 {
31372 break
31373 }
31374 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
31375 v_0_1 := v_0.Args[1]
31376 if v_0_1.Op != ssaop.OpConst64 {
31377 break
31378 }
31379 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
31380 if v_1.Op != ssaop.OpConst64 {
31381 break
31382 }
31383 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
31384 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
31385 break
31386 }
31387 v.Reset(ssaop.OpRsh16Ux64)
31388 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
31389 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
31390 v.AddArg2(x, v0)
31391 return true
31392 }
31393
31394
31395 for {
31396 if v_0.Op != ssaop.OpLsh16x64 {
31397 break
31398 }
31399 _ = v_0.Args[1]
31400 x := v_0.Args[0]
31401 v_0_1 := v_0.Args[1]
31402 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 8 || v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 8 {
31403 break
31404 }
31405 v.Reset(ssaop.OpZeroExt8to16)
31406 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc16to8, typ.UInt8)
31407 v0.AddArg(x)
31408 v.AddArg(v0)
31409 return true
31410 }
31411
31412
31413
31414 for {
31415 if ssa.AuxIntToBool(v.AuxInt) != false {
31416 break
31417 }
31418 x := v_0
31419 con := v_1
31420 if con.Op != ssaop.OpConst64 {
31421 break
31422 }
31423 c := ssa.AuxIntToInt64(con.AuxInt)
31424 if !(0 < c && c < 16) {
31425 break
31426 }
31427 v.Reset(ssaop.OpRsh16Ux64)
31428 v.AuxInt = ssa.BoolToAuxInt(true)
31429 v.AddArg2(x, con)
31430 return true
31431 }
31432 return false
31433 }
31434 func rewriteValue_OpRsh16Ux8(v *ssa.Value) bool {
31435 v_1 := v.Args[1]
31436 v_0 := v.Args[0]
31437 b := v.Block
31438
31439
31440 for {
31441 x := v_0
31442 if v_1.Op != ssaop.OpConst8 {
31443 break
31444 }
31445 c := ssa.AuxIntToInt8(v_1.AuxInt)
31446 v.Reset(ssaop.OpRsh16Ux64)
31447 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31448 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
31449 v.AddArg2(x, v0)
31450 return true
31451 }
31452
31453
31454 for {
31455 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31456 break
31457 }
31458 v.Reset(ssaop.OpConst16)
31459 v.AuxInt = ssa.Int16ToAuxInt(0)
31460 return true
31461 }
31462
31463
31464
31465 for {
31466 if ssa.AuxIntToBool(v.AuxInt) != false {
31467 break
31468 }
31469 x := v_0
31470 con := v_1
31471 if con.Op != ssaop.OpConst8 {
31472 break
31473 }
31474 c := ssa.AuxIntToInt8(con.AuxInt)
31475 if !(0 < c && c < 16) {
31476 break
31477 }
31478 v.Reset(ssaop.OpRsh16Ux8)
31479 v.AuxInt = ssa.BoolToAuxInt(true)
31480 v.AddArg2(x, con)
31481 return true
31482 }
31483 return false
31484 }
31485 func rewriteValue_OpRsh16x16(v *ssa.Value) bool {
31486 v_1 := v.Args[1]
31487 v_0 := v.Args[0]
31488 b := v.Block
31489
31490
31491 for {
31492 x := v_0
31493 if v_1.Op != ssaop.OpConst16 {
31494 break
31495 }
31496 c := ssa.AuxIntToInt16(v_1.AuxInt)
31497 v.Reset(ssaop.OpRsh16x64)
31498 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31499 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
31500 v.AddArg2(x, v0)
31501 return true
31502 }
31503
31504
31505 for {
31506 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31507 break
31508 }
31509 v.Reset(ssaop.OpConst16)
31510 v.AuxInt = ssa.Int16ToAuxInt(0)
31511 return true
31512 }
31513
31514
31515
31516 for {
31517 if ssa.AuxIntToBool(v.AuxInt) != false {
31518 break
31519 }
31520 x := v_0
31521 con := v_1
31522 if con.Op != ssaop.OpConst16 {
31523 break
31524 }
31525 c := ssa.AuxIntToInt16(con.AuxInt)
31526 if !(0 < c && c < 16) {
31527 break
31528 }
31529 v.Reset(ssaop.OpRsh16x16)
31530 v.AuxInt = ssa.BoolToAuxInt(true)
31531 v.AddArg2(x, con)
31532 return true
31533 }
31534 return false
31535 }
31536 func rewriteValue_OpRsh16x32(v *ssa.Value) bool {
31537 v_1 := v.Args[1]
31538 v_0 := v.Args[0]
31539 b := v.Block
31540
31541
31542 for {
31543 x := v_0
31544 if v_1.Op != ssaop.OpConst32 {
31545 break
31546 }
31547 c := ssa.AuxIntToInt32(v_1.AuxInt)
31548 v.Reset(ssaop.OpRsh16x64)
31549 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31550 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
31551 v.AddArg2(x, v0)
31552 return true
31553 }
31554
31555
31556 for {
31557 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31558 break
31559 }
31560 v.Reset(ssaop.OpConst16)
31561 v.AuxInt = ssa.Int16ToAuxInt(0)
31562 return true
31563 }
31564
31565
31566
31567 for {
31568 if ssa.AuxIntToBool(v.AuxInt) != false {
31569 break
31570 }
31571 x := v_0
31572 con := v_1
31573 if con.Op != ssaop.OpConst32 {
31574 break
31575 }
31576 c := ssa.AuxIntToInt32(con.AuxInt)
31577 if !(0 < c && c < 16) {
31578 break
31579 }
31580 v.Reset(ssaop.OpRsh16x32)
31581 v.AuxInt = ssa.BoolToAuxInt(true)
31582 v.AddArg2(x, con)
31583 return true
31584 }
31585 return false
31586 }
31587 func rewriteValue_OpRsh16x64(v *ssa.Value) bool {
31588 v_1 := v.Args[1]
31589 v_0 := v.Args[0]
31590 b := v.Block
31591 typ := &b.Func.Config.Types
31592
31593
31594 for {
31595 if v_0.Op != ssaop.OpConst16 {
31596 break
31597 }
31598 c := ssa.AuxIntToInt16(v_0.AuxInt)
31599 if v_1.Op != ssaop.OpConst64 {
31600 break
31601 }
31602 d := ssa.AuxIntToInt64(v_1.AuxInt)
31603 v.Reset(ssaop.OpConst16)
31604 v.AuxInt = ssa.Int16ToAuxInt(c >> uint64(d))
31605 return true
31606 }
31607
31608
31609 for {
31610 x := v_0
31611 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
31612 break
31613 }
31614 v.CopyOf(x)
31615 return true
31616 }
31617
31618
31619 for {
31620 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31621 break
31622 }
31623 v.Reset(ssaop.OpConst16)
31624 v.AuxInt = ssa.Int16ToAuxInt(0)
31625 return true
31626 }
31627
31628
31629
31630 for {
31631 t := v.Type
31632 if v_0.Op != ssaop.OpRsh16x64 {
31633 break
31634 }
31635 _ = v_0.Args[1]
31636 x := v_0.Args[0]
31637 v_0_1 := v_0.Args[1]
31638 if v_0_1.Op != ssaop.OpConst64 {
31639 break
31640 }
31641 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
31642 if v_1.Op != ssaop.OpConst64 {
31643 break
31644 }
31645 d := ssa.AuxIntToInt64(v_1.AuxInt)
31646 if !(!uaddOvf(c, d)) {
31647 break
31648 }
31649 v.Reset(ssaop.OpRsh16x64)
31650 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
31651 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
31652 v.AddArg2(x, v0)
31653 return true
31654 }
31655
31656
31657 for {
31658 if v_0.Op != ssaop.OpLsh16x64 {
31659 break
31660 }
31661 _ = v_0.Args[1]
31662 x := v_0.Args[0]
31663 v_0_1 := v_0.Args[1]
31664 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 8 || v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 8 {
31665 break
31666 }
31667 v.Reset(ssaop.OpSignExt8to16)
31668 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc16to8, typ.Int8)
31669 v0.AddArg(x)
31670 v.AddArg(v0)
31671 return true
31672 }
31673
31674
31675
31676 for {
31677 if ssa.AuxIntToBool(v.AuxInt) != false {
31678 break
31679 }
31680 x := v_0
31681 con := v_1
31682 if con.Op != ssaop.OpConst64 {
31683 break
31684 }
31685 c := ssa.AuxIntToInt64(con.AuxInt)
31686 if !(0 < c && c < 16) {
31687 break
31688 }
31689 v.Reset(ssaop.OpRsh16x64)
31690 v.AuxInt = ssa.BoolToAuxInt(true)
31691 v.AddArg2(x, con)
31692 return true
31693 }
31694 return false
31695 }
31696 func rewriteValue_OpRsh16x8(v *ssa.Value) bool {
31697 v_1 := v.Args[1]
31698 v_0 := v.Args[0]
31699 b := v.Block
31700
31701
31702 for {
31703 x := v_0
31704 if v_1.Op != ssaop.OpConst8 {
31705 break
31706 }
31707 c := ssa.AuxIntToInt8(v_1.AuxInt)
31708 v.Reset(ssaop.OpRsh16x64)
31709 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31710 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
31711 v.AddArg2(x, v0)
31712 return true
31713 }
31714
31715
31716 for {
31717 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
31718 break
31719 }
31720 v.Reset(ssaop.OpConst16)
31721 v.AuxInt = ssa.Int16ToAuxInt(0)
31722 return true
31723 }
31724
31725
31726
31727 for {
31728 if ssa.AuxIntToBool(v.AuxInt) != false {
31729 break
31730 }
31731 x := v_0
31732 con := v_1
31733 if con.Op != ssaop.OpConst8 {
31734 break
31735 }
31736 c := ssa.AuxIntToInt8(con.AuxInt)
31737 if !(0 < c && c < 16) {
31738 break
31739 }
31740 v.Reset(ssaop.OpRsh16x8)
31741 v.AuxInt = ssa.BoolToAuxInt(true)
31742 v.AddArg2(x, con)
31743 return true
31744 }
31745 return false
31746 }
31747 func rewriteValue_OpRsh32Ux16(v *ssa.Value) bool {
31748 v_1 := v.Args[1]
31749 v_0 := v.Args[0]
31750 b := v.Block
31751
31752
31753 for {
31754 x := v_0
31755 if v_1.Op != ssaop.OpConst16 {
31756 break
31757 }
31758 c := ssa.AuxIntToInt16(v_1.AuxInt)
31759 v.Reset(ssaop.OpRsh32Ux64)
31760 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31761 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
31762 v.AddArg2(x, v0)
31763 return true
31764 }
31765
31766
31767 for {
31768 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
31769 break
31770 }
31771 v.Reset(ssaop.OpConst32)
31772 v.AuxInt = ssa.Int32ToAuxInt(0)
31773 return true
31774 }
31775
31776
31777
31778 for {
31779 if ssa.AuxIntToBool(v.AuxInt) != false {
31780 break
31781 }
31782 x := v_0
31783 con := v_1
31784 if con.Op != ssaop.OpConst16 {
31785 break
31786 }
31787 c := ssa.AuxIntToInt16(con.AuxInt)
31788 if !(0 < c && c < 32) {
31789 break
31790 }
31791 v.Reset(ssaop.OpRsh32Ux16)
31792 v.AuxInt = ssa.BoolToAuxInt(true)
31793 v.AddArg2(x, con)
31794 return true
31795 }
31796 return false
31797 }
31798 func rewriteValue_OpRsh32Ux32(v *ssa.Value) bool {
31799 v_1 := v.Args[1]
31800 v_0 := v.Args[0]
31801 b := v.Block
31802
31803
31804 for {
31805 x := v_0
31806 if v_1.Op != ssaop.OpConst32 {
31807 break
31808 }
31809 c := ssa.AuxIntToInt32(v_1.AuxInt)
31810 v.Reset(ssaop.OpRsh32Ux64)
31811 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
31812 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
31813 v.AddArg2(x, v0)
31814 return true
31815 }
31816
31817
31818 for {
31819 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
31820 break
31821 }
31822 v.Reset(ssaop.OpConst32)
31823 v.AuxInt = ssa.Int32ToAuxInt(0)
31824 return true
31825 }
31826
31827
31828
31829 for {
31830 if ssa.AuxIntToBool(v.AuxInt) != false {
31831 break
31832 }
31833 x := v_0
31834 con := v_1
31835 if con.Op != ssaop.OpConst32 {
31836 break
31837 }
31838 c := ssa.AuxIntToInt32(con.AuxInt)
31839 if !(0 < c && c < 32) {
31840 break
31841 }
31842 v.Reset(ssaop.OpRsh32Ux32)
31843 v.AuxInt = ssa.BoolToAuxInt(true)
31844 v.AddArg2(x, con)
31845 return true
31846 }
31847 return false
31848 }
31849 func rewriteValue_OpRsh32Ux64(v *ssa.Value) bool {
31850 v_1 := v.Args[1]
31851 v_0 := v.Args[0]
31852 b := v.Block
31853 typ := &b.Func.Config.Types
31854
31855
31856 for {
31857 if v_0.Op != ssaop.OpConst32 {
31858 break
31859 }
31860 c := ssa.AuxIntToInt32(v_0.AuxInt)
31861 if v_1.Op != ssaop.OpConst64 {
31862 break
31863 }
31864 d := ssa.AuxIntToInt64(v_1.AuxInt)
31865 v.Reset(ssaop.OpConst32)
31866 v.AuxInt = ssa.Int32ToAuxInt(int32(uint32(c) >> uint64(d)))
31867 return true
31868 }
31869
31870
31871 for {
31872 x := v_0
31873 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
31874 break
31875 }
31876 v.CopyOf(x)
31877 return true
31878 }
31879
31880
31881 for {
31882 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
31883 break
31884 }
31885 v.Reset(ssaop.OpConst32)
31886 v.AuxInt = ssa.Int32ToAuxInt(0)
31887 return true
31888 }
31889
31890
31891
31892 for {
31893 if v_1.Op != ssaop.OpConst64 {
31894 break
31895 }
31896 c := ssa.AuxIntToInt64(v_1.AuxInt)
31897 if !(uint64(c) >= 32) {
31898 break
31899 }
31900 v.Reset(ssaop.OpConst32)
31901 v.AuxInt = ssa.Int32ToAuxInt(0)
31902 return true
31903 }
31904
31905
31906
31907 for {
31908 t := v.Type
31909 if v_0.Op != ssaop.OpRsh32Ux64 {
31910 break
31911 }
31912 _ = v_0.Args[1]
31913 x := v_0.Args[0]
31914 v_0_1 := v_0.Args[1]
31915 if v_0_1.Op != ssaop.OpConst64 {
31916 break
31917 }
31918 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
31919 if v_1.Op != ssaop.OpConst64 {
31920 break
31921 }
31922 d := ssa.AuxIntToInt64(v_1.AuxInt)
31923 if !(!uaddOvf(c, d)) {
31924 break
31925 }
31926 v.Reset(ssaop.OpRsh32Ux64)
31927 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
31928 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
31929 v.AddArg2(x, v0)
31930 return true
31931 }
31932
31933
31934 for {
31935 if v_0.Op != ssaop.OpRsh32x64 {
31936 break
31937 }
31938 x := v_0.Args[0]
31939 if v_1.Op != ssaop.OpConst64 {
31940 break
31941 }
31942 t := v_1.Type
31943 if ssa.AuxIntToInt64(v_1.AuxInt) != 31 {
31944 break
31945 }
31946 v.Reset(ssaop.OpRsh32Ux64)
31947 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
31948 v0.AuxInt = ssa.Int64ToAuxInt(31)
31949 v.AddArg2(x, v0)
31950 return true
31951 }
31952
31953
31954
31955 for {
31956 i := v_0
31957 if i.Op != ssaop.OpLsh32x64 {
31958 break
31959 }
31960 _ = i.Args[1]
31961 x := i.Args[0]
31962 i_1 := i.Args[1]
31963 if i_1.Op != ssaop.OpConst64 {
31964 break
31965 }
31966 c := ssa.AuxIntToInt64(i_1.AuxInt)
31967 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 32 && i.Uses == 1) {
31968 break
31969 }
31970 v.Reset(ssaop.OpAnd32)
31971 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, v.Type)
31972 v0.AuxInt = ssa.Int32ToAuxInt(int32(^uint32(0) >> c))
31973 v.AddArg2(x, v0)
31974 return true
31975 }
31976
31977
31978
31979 for {
31980 if v_0.Op != ssaop.OpLsh32x64 {
31981 break
31982 }
31983 _ = v_0.Args[1]
31984 v_0_0 := v_0.Args[0]
31985 if v_0_0.Op != ssaop.OpRsh32Ux64 {
31986 break
31987 }
31988 _ = v_0_0.Args[1]
31989 x := v_0_0.Args[0]
31990 v_0_0_1 := v_0_0.Args[1]
31991 if v_0_0_1.Op != ssaop.OpConst64 {
31992 break
31993 }
31994 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
31995 v_0_1 := v_0.Args[1]
31996 if v_0_1.Op != ssaop.OpConst64 {
31997 break
31998 }
31999 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
32000 if v_1.Op != ssaop.OpConst64 {
32001 break
32002 }
32003 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
32004 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
32005 break
32006 }
32007 v.Reset(ssaop.OpRsh32Ux64)
32008 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
32009 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
32010 v.AddArg2(x, v0)
32011 return true
32012 }
32013
32014
32015 for {
32016 if v_0.Op != ssaop.OpLsh32x64 {
32017 break
32018 }
32019 _ = v_0.Args[1]
32020 x := v_0.Args[0]
32021 v_0_1 := v_0.Args[1]
32022 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 24 || v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 24 {
32023 break
32024 }
32025 v.Reset(ssaop.OpZeroExt8to32)
32026 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc32to8, typ.UInt8)
32027 v0.AddArg(x)
32028 v.AddArg(v0)
32029 return true
32030 }
32031
32032
32033 for {
32034 if v_0.Op != ssaop.OpLsh32x64 {
32035 break
32036 }
32037 _ = v_0.Args[1]
32038 x := v_0.Args[0]
32039 v_0_1 := v_0.Args[1]
32040 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 16 || v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 16 {
32041 break
32042 }
32043 v.Reset(ssaop.OpZeroExt16to32)
32044 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc32to16, typ.UInt16)
32045 v0.AddArg(x)
32046 v.AddArg(v0)
32047 return true
32048 }
32049
32050
32051
32052 for {
32053 if ssa.AuxIntToBool(v.AuxInt) != false {
32054 break
32055 }
32056 x := v_0
32057 con := v_1
32058 if con.Op != ssaop.OpConst64 {
32059 break
32060 }
32061 c := ssa.AuxIntToInt64(con.AuxInt)
32062 if !(0 < c && c < 32) {
32063 break
32064 }
32065 v.Reset(ssaop.OpRsh32Ux64)
32066 v.AuxInt = ssa.BoolToAuxInt(true)
32067 v.AddArg2(x, con)
32068 return true
32069 }
32070 return false
32071 }
32072 func rewriteValue_OpRsh32Ux8(v *ssa.Value) bool {
32073 v_1 := v.Args[1]
32074 v_0 := v.Args[0]
32075 b := v.Block
32076
32077
32078 for {
32079 x := v_0
32080 if v_1.Op != ssaop.OpConst8 {
32081 break
32082 }
32083 c := ssa.AuxIntToInt8(v_1.AuxInt)
32084 v.Reset(ssaop.OpRsh32Ux64)
32085 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32086 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
32087 v.AddArg2(x, v0)
32088 return true
32089 }
32090
32091
32092 for {
32093 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
32094 break
32095 }
32096 v.Reset(ssaop.OpConst32)
32097 v.AuxInt = ssa.Int32ToAuxInt(0)
32098 return true
32099 }
32100
32101
32102
32103 for {
32104 if ssa.AuxIntToBool(v.AuxInt) != false {
32105 break
32106 }
32107 x := v_0
32108 con := v_1
32109 if con.Op != ssaop.OpConst8 {
32110 break
32111 }
32112 c := ssa.AuxIntToInt8(con.AuxInt)
32113 if !(0 < c && c < 32) {
32114 break
32115 }
32116 v.Reset(ssaop.OpRsh32Ux8)
32117 v.AuxInt = ssa.BoolToAuxInt(true)
32118 v.AddArg2(x, con)
32119 return true
32120 }
32121 return false
32122 }
32123 func rewriteValue_OpRsh32x16(v *ssa.Value) bool {
32124 v_1 := v.Args[1]
32125 v_0 := v.Args[0]
32126 b := v.Block
32127
32128
32129 for {
32130 x := v_0
32131 if v_1.Op != ssaop.OpConst16 {
32132 break
32133 }
32134 c := ssa.AuxIntToInt16(v_1.AuxInt)
32135 v.Reset(ssaop.OpRsh32x64)
32136 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32137 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
32138 v.AddArg2(x, v0)
32139 return true
32140 }
32141
32142
32143 for {
32144 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
32145 break
32146 }
32147 v.Reset(ssaop.OpConst32)
32148 v.AuxInt = ssa.Int32ToAuxInt(0)
32149 return true
32150 }
32151
32152
32153
32154 for {
32155 if ssa.AuxIntToBool(v.AuxInt) != false {
32156 break
32157 }
32158 x := v_0
32159 con := v_1
32160 if con.Op != ssaop.OpConst16 {
32161 break
32162 }
32163 c := ssa.AuxIntToInt16(con.AuxInt)
32164 if !(0 < c && c < 32) {
32165 break
32166 }
32167 v.Reset(ssaop.OpRsh32x16)
32168 v.AuxInt = ssa.BoolToAuxInt(true)
32169 v.AddArg2(x, con)
32170 return true
32171 }
32172 return false
32173 }
32174 func rewriteValue_OpRsh32x32(v *ssa.Value) bool {
32175 v_1 := v.Args[1]
32176 v_0 := v.Args[0]
32177 b := v.Block
32178
32179
32180 for {
32181 x := v_0
32182 if v_1.Op != ssaop.OpConst32 {
32183 break
32184 }
32185 c := ssa.AuxIntToInt32(v_1.AuxInt)
32186 v.Reset(ssaop.OpRsh32x64)
32187 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32188 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
32189 v.AddArg2(x, v0)
32190 return true
32191 }
32192
32193
32194 for {
32195 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
32196 break
32197 }
32198 v.Reset(ssaop.OpConst32)
32199 v.AuxInt = ssa.Int32ToAuxInt(0)
32200 return true
32201 }
32202
32203
32204
32205 for {
32206 if ssa.AuxIntToBool(v.AuxInt) != false {
32207 break
32208 }
32209 x := v_0
32210 con := v_1
32211 if con.Op != ssaop.OpConst32 {
32212 break
32213 }
32214 c := ssa.AuxIntToInt32(con.AuxInt)
32215 if !(0 < c && c < 32) {
32216 break
32217 }
32218 v.Reset(ssaop.OpRsh32x32)
32219 v.AuxInt = ssa.BoolToAuxInt(true)
32220 v.AddArg2(x, con)
32221 return true
32222 }
32223 return false
32224 }
32225 func rewriteValue_OpRsh32x64(v *ssa.Value) bool {
32226 v_1 := v.Args[1]
32227 v_0 := v.Args[0]
32228 b := v.Block
32229 typ := &b.Func.Config.Types
32230
32231
32232 for {
32233 if v_0.Op != ssaop.OpConst32 {
32234 break
32235 }
32236 c := ssa.AuxIntToInt32(v_0.AuxInt)
32237 if v_1.Op != ssaop.OpConst64 {
32238 break
32239 }
32240 d := ssa.AuxIntToInt64(v_1.AuxInt)
32241 v.Reset(ssaop.OpConst32)
32242 v.AuxInt = ssa.Int32ToAuxInt(c >> uint64(d))
32243 return true
32244 }
32245
32246
32247 for {
32248 x := v_0
32249 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
32250 break
32251 }
32252 v.CopyOf(x)
32253 return true
32254 }
32255
32256
32257 for {
32258 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
32259 break
32260 }
32261 v.Reset(ssaop.OpConst32)
32262 v.AuxInt = ssa.Int32ToAuxInt(0)
32263 return true
32264 }
32265
32266
32267
32268 for {
32269 t := v.Type
32270 if v_0.Op != ssaop.OpRsh32x64 {
32271 break
32272 }
32273 _ = v_0.Args[1]
32274 x := v_0.Args[0]
32275 v_0_1 := v_0.Args[1]
32276 if v_0_1.Op != ssaop.OpConst64 {
32277 break
32278 }
32279 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
32280 if v_1.Op != ssaop.OpConst64 {
32281 break
32282 }
32283 d := ssa.AuxIntToInt64(v_1.AuxInt)
32284 if !(!uaddOvf(c, d)) {
32285 break
32286 }
32287 v.Reset(ssaop.OpRsh32x64)
32288 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
32289 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
32290 v.AddArg2(x, v0)
32291 return true
32292 }
32293
32294
32295 for {
32296 if v_0.Op != ssaop.OpLsh32x64 {
32297 break
32298 }
32299 _ = v_0.Args[1]
32300 x := v_0.Args[0]
32301 v_0_1 := v_0.Args[1]
32302 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 24 || v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 24 {
32303 break
32304 }
32305 v.Reset(ssaop.OpSignExt8to32)
32306 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc32to8, typ.Int8)
32307 v0.AddArg(x)
32308 v.AddArg(v0)
32309 return true
32310 }
32311
32312
32313 for {
32314 if v_0.Op != ssaop.OpLsh32x64 {
32315 break
32316 }
32317 _ = v_0.Args[1]
32318 x := v_0.Args[0]
32319 v_0_1 := v_0.Args[1]
32320 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 16 || v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 16 {
32321 break
32322 }
32323 v.Reset(ssaop.OpSignExt16to32)
32324 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc32to16, typ.Int16)
32325 v0.AddArg(x)
32326 v.AddArg(v0)
32327 return true
32328 }
32329
32330
32331
32332 for {
32333 if ssa.AuxIntToBool(v.AuxInt) != false {
32334 break
32335 }
32336 x := v_0
32337 con := v_1
32338 if con.Op != ssaop.OpConst64 {
32339 break
32340 }
32341 c := ssa.AuxIntToInt64(con.AuxInt)
32342 if !(0 < c && c < 32) {
32343 break
32344 }
32345 v.Reset(ssaop.OpRsh32x64)
32346 v.AuxInt = ssa.BoolToAuxInt(true)
32347 v.AddArg2(x, con)
32348 return true
32349 }
32350 return false
32351 }
32352 func rewriteValue_OpRsh32x8(v *ssa.Value) bool {
32353 v_1 := v.Args[1]
32354 v_0 := v.Args[0]
32355 b := v.Block
32356
32357
32358 for {
32359 x := v_0
32360 if v_1.Op != ssaop.OpConst8 {
32361 break
32362 }
32363 c := ssa.AuxIntToInt8(v_1.AuxInt)
32364 v.Reset(ssaop.OpRsh32x64)
32365 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32366 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
32367 v.AddArg2(x, v0)
32368 return true
32369 }
32370
32371
32372 for {
32373 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
32374 break
32375 }
32376 v.Reset(ssaop.OpConst32)
32377 v.AuxInt = ssa.Int32ToAuxInt(0)
32378 return true
32379 }
32380
32381
32382
32383 for {
32384 if ssa.AuxIntToBool(v.AuxInt) != false {
32385 break
32386 }
32387 x := v_0
32388 con := v_1
32389 if con.Op != ssaop.OpConst8 {
32390 break
32391 }
32392 c := ssa.AuxIntToInt8(con.AuxInt)
32393 if !(0 < c && c < 32) {
32394 break
32395 }
32396 v.Reset(ssaop.OpRsh32x8)
32397 v.AuxInt = ssa.BoolToAuxInt(true)
32398 v.AddArg2(x, con)
32399 return true
32400 }
32401 return false
32402 }
32403 func rewriteValue_OpRsh64Ux16(v *ssa.Value) bool {
32404 v_1 := v.Args[1]
32405 v_0 := v.Args[0]
32406 b := v.Block
32407
32408
32409 for {
32410 x := v_0
32411 if v_1.Op != ssaop.OpConst16 {
32412 break
32413 }
32414 c := ssa.AuxIntToInt16(v_1.AuxInt)
32415 v.Reset(ssaop.OpRsh64Ux64)
32416 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32417 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
32418 v.AddArg2(x, v0)
32419 return true
32420 }
32421
32422
32423 for {
32424 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
32425 break
32426 }
32427 v.Reset(ssaop.OpConst64)
32428 v.AuxInt = ssa.Int64ToAuxInt(0)
32429 return true
32430 }
32431
32432
32433
32434 for {
32435 if ssa.AuxIntToBool(v.AuxInt) != false {
32436 break
32437 }
32438 x := v_0
32439 con := v_1
32440 if con.Op != ssaop.OpConst16 {
32441 break
32442 }
32443 c := ssa.AuxIntToInt16(con.AuxInt)
32444 if !(0 < c && c < 64) {
32445 break
32446 }
32447 v.Reset(ssaop.OpRsh64Ux16)
32448 v.AuxInt = ssa.BoolToAuxInt(true)
32449 v.AddArg2(x, con)
32450 return true
32451 }
32452 return false
32453 }
32454 func rewriteValue_OpRsh64Ux32(v *ssa.Value) bool {
32455 v_1 := v.Args[1]
32456 v_0 := v.Args[0]
32457 b := v.Block
32458
32459
32460 for {
32461 x := v_0
32462 if v_1.Op != ssaop.OpConst32 {
32463 break
32464 }
32465 c := ssa.AuxIntToInt32(v_1.AuxInt)
32466 v.Reset(ssaop.OpRsh64Ux64)
32467 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32468 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
32469 v.AddArg2(x, v0)
32470 return true
32471 }
32472
32473
32474 for {
32475 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
32476 break
32477 }
32478 v.Reset(ssaop.OpConst64)
32479 v.AuxInt = ssa.Int64ToAuxInt(0)
32480 return true
32481 }
32482
32483
32484
32485 for {
32486 if ssa.AuxIntToBool(v.AuxInt) != false {
32487 break
32488 }
32489 x := v_0
32490 con := v_1
32491 if con.Op != ssaop.OpConst32 {
32492 break
32493 }
32494 c := ssa.AuxIntToInt32(con.AuxInt)
32495 if !(0 < c && c < 64) {
32496 break
32497 }
32498 v.Reset(ssaop.OpRsh64Ux32)
32499 v.AuxInt = ssa.BoolToAuxInt(true)
32500 v.AddArg2(x, con)
32501 return true
32502 }
32503 return false
32504 }
32505 func rewriteValue_OpRsh64Ux64(v *ssa.Value) bool {
32506 v_1 := v.Args[1]
32507 v_0 := v.Args[0]
32508 b := v.Block
32509 typ := &b.Func.Config.Types
32510
32511
32512 for {
32513 if v_0.Op != ssaop.OpConst64 {
32514 break
32515 }
32516 c := ssa.AuxIntToInt64(v_0.AuxInt)
32517 if v_1.Op != ssaop.OpConst64 {
32518 break
32519 }
32520 d := ssa.AuxIntToInt64(v_1.AuxInt)
32521 v.Reset(ssaop.OpConst64)
32522 v.AuxInt = ssa.Int64ToAuxInt(int64(uint64(c) >> uint64(d)))
32523 return true
32524 }
32525
32526
32527 for {
32528 x := v_0
32529 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
32530 break
32531 }
32532 v.CopyOf(x)
32533 return true
32534 }
32535
32536
32537 for {
32538 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
32539 break
32540 }
32541 v.Reset(ssaop.OpConst64)
32542 v.AuxInt = ssa.Int64ToAuxInt(0)
32543 return true
32544 }
32545
32546
32547
32548 for {
32549 if v_1.Op != ssaop.OpConst64 {
32550 break
32551 }
32552 c := ssa.AuxIntToInt64(v_1.AuxInt)
32553 if !(uint64(c) >= 64) {
32554 break
32555 }
32556 v.Reset(ssaop.OpConst64)
32557 v.AuxInt = ssa.Int64ToAuxInt(0)
32558 return true
32559 }
32560
32561
32562
32563 for {
32564 t := v.Type
32565 if v_0.Op != ssaop.OpRsh64Ux64 {
32566 break
32567 }
32568 _ = v_0.Args[1]
32569 x := v_0.Args[0]
32570 v_0_1 := v_0.Args[1]
32571 if v_0_1.Op != ssaop.OpConst64 {
32572 break
32573 }
32574 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
32575 if v_1.Op != ssaop.OpConst64 {
32576 break
32577 }
32578 d := ssa.AuxIntToInt64(v_1.AuxInt)
32579 if !(!uaddOvf(c, d)) {
32580 break
32581 }
32582 v.Reset(ssaop.OpRsh64Ux64)
32583 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
32584 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
32585 v.AddArg2(x, v0)
32586 return true
32587 }
32588
32589
32590 for {
32591 if v_0.Op != ssaop.OpRsh64x64 {
32592 break
32593 }
32594 x := v_0.Args[0]
32595 if v_1.Op != ssaop.OpConst64 {
32596 break
32597 }
32598 t := v_1.Type
32599 if ssa.AuxIntToInt64(v_1.AuxInt) != 63 {
32600 break
32601 }
32602 v.Reset(ssaop.OpRsh64Ux64)
32603 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
32604 v0.AuxInt = ssa.Int64ToAuxInt(63)
32605 v.AddArg2(x, v0)
32606 return true
32607 }
32608
32609
32610
32611 for {
32612 i := v_0
32613 if i.Op != ssaop.OpLsh64x64 {
32614 break
32615 }
32616 _ = i.Args[1]
32617 x := i.Args[0]
32618 i_1 := i.Args[1]
32619 if i_1.Op != ssaop.OpConst64 {
32620 break
32621 }
32622 c := ssa.AuxIntToInt64(i_1.AuxInt)
32623 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 64 && i.Uses == 1) {
32624 break
32625 }
32626 v.Reset(ssaop.OpAnd64)
32627 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, v.Type)
32628 v0.AuxInt = ssa.Int64ToAuxInt(int64(^uint64(0) >> c))
32629 v.AddArg2(x, v0)
32630 return true
32631 }
32632
32633
32634
32635 for {
32636 if v_0.Op != ssaop.OpLsh64x64 {
32637 break
32638 }
32639 _ = v_0.Args[1]
32640 v_0_0 := v_0.Args[0]
32641 if v_0_0.Op != ssaop.OpRsh64Ux64 {
32642 break
32643 }
32644 _ = v_0_0.Args[1]
32645 x := v_0_0.Args[0]
32646 v_0_0_1 := v_0_0.Args[1]
32647 if v_0_0_1.Op != ssaop.OpConst64 {
32648 break
32649 }
32650 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
32651 v_0_1 := v_0.Args[1]
32652 if v_0_1.Op != ssaop.OpConst64 {
32653 break
32654 }
32655 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
32656 if v_1.Op != ssaop.OpConst64 {
32657 break
32658 }
32659 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
32660 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
32661 break
32662 }
32663 v.Reset(ssaop.OpRsh64Ux64)
32664 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
32665 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
32666 v.AddArg2(x, v0)
32667 return true
32668 }
32669
32670
32671 for {
32672 if v_0.Op != ssaop.OpLsh64x64 {
32673 break
32674 }
32675 _ = v_0.Args[1]
32676 x := v_0.Args[0]
32677 v_0_1 := v_0.Args[1]
32678 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 56 || v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 56 {
32679 break
32680 }
32681 v.Reset(ssaop.OpZeroExt8to64)
32682 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc64to8, typ.UInt8)
32683 v0.AddArg(x)
32684 v.AddArg(v0)
32685 return true
32686 }
32687
32688
32689 for {
32690 if v_0.Op != ssaop.OpLsh64x64 {
32691 break
32692 }
32693 _ = v_0.Args[1]
32694 x := v_0.Args[0]
32695 v_0_1 := v_0.Args[1]
32696 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 48 || v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 48 {
32697 break
32698 }
32699 v.Reset(ssaop.OpZeroExt16to64)
32700 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc64to16, typ.UInt16)
32701 v0.AddArg(x)
32702 v.AddArg(v0)
32703 return true
32704 }
32705
32706
32707 for {
32708 if v_0.Op != ssaop.OpLsh64x64 {
32709 break
32710 }
32711 _ = v_0.Args[1]
32712 x := v_0.Args[0]
32713 v_0_1 := v_0.Args[1]
32714 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 32 || v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 32 {
32715 break
32716 }
32717 v.Reset(ssaop.OpZeroExt32to64)
32718 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc64to32, typ.UInt32)
32719 v0.AddArg(x)
32720 v.AddArg(v0)
32721 return true
32722 }
32723
32724
32725
32726 for {
32727 if ssa.AuxIntToBool(v.AuxInt) != false {
32728 break
32729 }
32730 x := v_0
32731 con := v_1
32732 if con.Op != ssaop.OpConst64 {
32733 break
32734 }
32735 c := ssa.AuxIntToInt64(con.AuxInt)
32736 if !(0 < c && c < 64) {
32737 break
32738 }
32739 v.Reset(ssaop.OpRsh64Ux64)
32740 v.AuxInt = ssa.BoolToAuxInt(true)
32741 v.AddArg2(x, con)
32742 return true
32743 }
32744 return false
32745 }
32746 func rewriteValue_OpRsh64Ux8(v *ssa.Value) bool {
32747 v_1 := v.Args[1]
32748 v_0 := v.Args[0]
32749 b := v.Block
32750
32751
32752 for {
32753 x := v_0
32754 if v_1.Op != ssaop.OpConst8 {
32755 break
32756 }
32757 c := ssa.AuxIntToInt8(v_1.AuxInt)
32758 v.Reset(ssaop.OpRsh64Ux64)
32759 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32760 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
32761 v.AddArg2(x, v0)
32762 return true
32763 }
32764
32765
32766 for {
32767 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
32768 break
32769 }
32770 v.Reset(ssaop.OpConst64)
32771 v.AuxInt = ssa.Int64ToAuxInt(0)
32772 return true
32773 }
32774
32775
32776
32777 for {
32778 if ssa.AuxIntToBool(v.AuxInt) != false {
32779 break
32780 }
32781 x := v_0
32782 con := v_1
32783 if con.Op != ssaop.OpConst8 {
32784 break
32785 }
32786 c := ssa.AuxIntToInt8(con.AuxInt)
32787 if !(0 < c && c < 64) {
32788 break
32789 }
32790 v.Reset(ssaop.OpRsh64Ux8)
32791 v.AuxInt = ssa.BoolToAuxInt(true)
32792 v.AddArg2(x, con)
32793 return true
32794 }
32795 return false
32796 }
32797 func rewriteValue_OpRsh64x16(v *ssa.Value) bool {
32798 v_1 := v.Args[1]
32799 v_0 := v.Args[0]
32800 b := v.Block
32801
32802
32803 for {
32804 x := v_0
32805 if v_1.Op != ssaop.OpConst16 {
32806 break
32807 }
32808 c := ssa.AuxIntToInt16(v_1.AuxInt)
32809 v.Reset(ssaop.OpRsh64x64)
32810 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32811 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
32812 v.AddArg2(x, v0)
32813 return true
32814 }
32815
32816
32817 for {
32818 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
32819 break
32820 }
32821 v.Reset(ssaop.OpConst64)
32822 v.AuxInt = ssa.Int64ToAuxInt(0)
32823 return true
32824 }
32825
32826
32827
32828 for {
32829 if ssa.AuxIntToBool(v.AuxInt) != false {
32830 break
32831 }
32832 x := v_0
32833 con := v_1
32834 if con.Op != ssaop.OpConst16 {
32835 break
32836 }
32837 c := ssa.AuxIntToInt16(con.AuxInt)
32838 if !(0 < c && c < 64) {
32839 break
32840 }
32841 v.Reset(ssaop.OpRsh64x16)
32842 v.AuxInt = ssa.BoolToAuxInt(true)
32843 v.AddArg2(x, con)
32844 return true
32845 }
32846 return false
32847 }
32848 func rewriteValue_OpRsh64x32(v *ssa.Value) bool {
32849 v_1 := v.Args[1]
32850 v_0 := v.Args[0]
32851 b := v.Block
32852
32853
32854 for {
32855 x := v_0
32856 if v_1.Op != ssaop.OpConst32 {
32857 break
32858 }
32859 c := ssa.AuxIntToInt32(v_1.AuxInt)
32860 v.Reset(ssaop.OpRsh64x64)
32861 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
32862 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
32863 v.AddArg2(x, v0)
32864 return true
32865 }
32866
32867
32868 for {
32869 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
32870 break
32871 }
32872 v.Reset(ssaop.OpConst64)
32873 v.AuxInt = ssa.Int64ToAuxInt(0)
32874 return true
32875 }
32876
32877
32878
32879 for {
32880 if ssa.AuxIntToBool(v.AuxInt) != false {
32881 break
32882 }
32883 x := v_0
32884 con := v_1
32885 if con.Op != ssaop.OpConst32 {
32886 break
32887 }
32888 c := ssa.AuxIntToInt32(con.AuxInt)
32889 if !(0 < c && c < 64) {
32890 break
32891 }
32892 v.Reset(ssaop.OpRsh64x32)
32893 v.AuxInt = ssa.BoolToAuxInt(true)
32894 v.AddArg2(x, con)
32895 return true
32896 }
32897 return false
32898 }
32899 func rewriteValue_OpRsh64x64(v *ssa.Value) bool {
32900 v_1 := v.Args[1]
32901 v_0 := v.Args[0]
32902 b := v.Block
32903 typ := &b.Func.Config.Types
32904
32905
32906 for {
32907 if v_0.Op != ssaop.OpConst64 {
32908 break
32909 }
32910 c := ssa.AuxIntToInt64(v_0.AuxInt)
32911 if v_1.Op != ssaop.OpConst64 {
32912 break
32913 }
32914 d := ssa.AuxIntToInt64(v_1.AuxInt)
32915 v.Reset(ssaop.OpConst64)
32916 v.AuxInt = ssa.Int64ToAuxInt(c >> uint64(d))
32917 return true
32918 }
32919
32920
32921 for {
32922 x := v_0
32923 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
32924 break
32925 }
32926 v.CopyOf(x)
32927 return true
32928 }
32929
32930
32931 for {
32932 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
32933 break
32934 }
32935 v.Reset(ssaop.OpConst64)
32936 v.AuxInt = ssa.Int64ToAuxInt(0)
32937 return true
32938 }
32939
32940
32941
32942 for {
32943 t := v.Type
32944 if v_0.Op != ssaop.OpRsh64x64 {
32945 break
32946 }
32947 _ = v_0.Args[1]
32948 x := v_0.Args[0]
32949 v_0_1 := v_0.Args[1]
32950 if v_0_1.Op != ssaop.OpConst64 {
32951 break
32952 }
32953 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
32954 if v_1.Op != ssaop.OpConst64 {
32955 break
32956 }
32957 d := ssa.AuxIntToInt64(v_1.AuxInt)
32958 if !(!uaddOvf(c, d)) {
32959 break
32960 }
32961 v.Reset(ssaop.OpRsh64x64)
32962 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
32963 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
32964 v.AddArg2(x, v0)
32965 return true
32966 }
32967
32968
32969 for {
32970 if v_0.Op != ssaop.OpLsh64x64 {
32971 break
32972 }
32973 _ = v_0.Args[1]
32974 x := v_0.Args[0]
32975 v_0_1 := v_0.Args[1]
32976 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 56 || v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 56 {
32977 break
32978 }
32979 v.Reset(ssaop.OpSignExt8to64)
32980 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc64to8, typ.Int8)
32981 v0.AddArg(x)
32982 v.AddArg(v0)
32983 return true
32984 }
32985
32986
32987 for {
32988 if v_0.Op != ssaop.OpLsh64x64 {
32989 break
32990 }
32991 _ = v_0.Args[1]
32992 x := v_0.Args[0]
32993 v_0_1 := v_0.Args[1]
32994 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 48 || v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 48 {
32995 break
32996 }
32997 v.Reset(ssaop.OpSignExt16to64)
32998 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc64to16, typ.Int16)
32999 v0.AddArg(x)
33000 v.AddArg(v0)
33001 return true
33002 }
33003
33004
33005 for {
33006 if v_0.Op != ssaop.OpLsh64x64 {
33007 break
33008 }
33009 _ = v_0.Args[1]
33010 x := v_0.Args[0]
33011 v_0_1 := v_0.Args[1]
33012 if v_0_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0_1.AuxInt) != 32 || v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 32 {
33013 break
33014 }
33015 v.Reset(ssaop.OpSignExt32to64)
33016 v0 := b.NewValue0(v.Pos, ssaop.OpTrunc64to32, typ.Int32)
33017 v0.AddArg(x)
33018 v.AddArg(v0)
33019 return true
33020 }
33021
33022
33023
33024 for {
33025 if ssa.AuxIntToBool(v.AuxInt) != false {
33026 break
33027 }
33028 x := v_0
33029 con := v_1
33030 if con.Op != ssaop.OpConst64 {
33031 break
33032 }
33033 c := ssa.AuxIntToInt64(con.AuxInt)
33034 if !(0 < c && c < 64) {
33035 break
33036 }
33037 v.Reset(ssaop.OpRsh64x64)
33038 v.AuxInt = ssa.BoolToAuxInt(true)
33039 v.AddArg2(x, con)
33040 return true
33041 }
33042 return false
33043 }
33044 func rewriteValue_OpRsh64x8(v *ssa.Value) bool {
33045 v_1 := v.Args[1]
33046 v_0 := v.Args[0]
33047 b := v.Block
33048
33049
33050 for {
33051 x := v_0
33052 if v_1.Op != ssaop.OpConst8 {
33053 break
33054 }
33055 c := ssa.AuxIntToInt8(v_1.AuxInt)
33056 v.Reset(ssaop.OpRsh64x64)
33057 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
33058 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
33059 v.AddArg2(x, v0)
33060 return true
33061 }
33062
33063
33064 for {
33065 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
33066 break
33067 }
33068 v.Reset(ssaop.OpConst64)
33069 v.AuxInt = ssa.Int64ToAuxInt(0)
33070 return true
33071 }
33072
33073
33074
33075 for {
33076 if ssa.AuxIntToBool(v.AuxInt) != false {
33077 break
33078 }
33079 x := v_0
33080 con := v_1
33081 if con.Op != ssaop.OpConst8 {
33082 break
33083 }
33084 c := ssa.AuxIntToInt8(con.AuxInt)
33085 if !(0 < c && c < 64) {
33086 break
33087 }
33088 v.Reset(ssaop.OpRsh64x8)
33089 v.AuxInt = ssa.BoolToAuxInt(true)
33090 v.AddArg2(x, con)
33091 return true
33092 }
33093 return false
33094 }
33095 func rewriteValue_OpRsh8Ux16(v *ssa.Value) bool {
33096 v_1 := v.Args[1]
33097 v_0 := v.Args[0]
33098 b := v.Block
33099
33100
33101 for {
33102 x := v_0
33103 if v_1.Op != ssaop.OpConst16 {
33104 break
33105 }
33106 c := ssa.AuxIntToInt16(v_1.AuxInt)
33107 v.Reset(ssaop.OpRsh8Ux64)
33108 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
33109 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
33110 v.AddArg2(x, v0)
33111 return true
33112 }
33113
33114
33115 for {
33116 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33117 break
33118 }
33119 v.Reset(ssaop.OpConst8)
33120 v.AuxInt = ssa.Int8ToAuxInt(0)
33121 return true
33122 }
33123
33124
33125
33126 for {
33127 if ssa.AuxIntToBool(v.AuxInt) != false {
33128 break
33129 }
33130 x := v_0
33131 con := v_1
33132 if con.Op != ssaop.OpConst16 {
33133 break
33134 }
33135 c := ssa.AuxIntToInt16(con.AuxInt)
33136 if !(0 < c && c < 8) {
33137 break
33138 }
33139 v.Reset(ssaop.OpRsh8Ux16)
33140 v.AuxInt = ssa.BoolToAuxInt(true)
33141 v.AddArg2(x, con)
33142 return true
33143 }
33144 return false
33145 }
33146 func rewriteValue_OpRsh8Ux32(v *ssa.Value) bool {
33147 v_1 := v.Args[1]
33148 v_0 := v.Args[0]
33149 b := v.Block
33150
33151
33152 for {
33153 x := v_0
33154 if v_1.Op != ssaop.OpConst32 {
33155 break
33156 }
33157 c := ssa.AuxIntToInt32(v_1.AuxInt)
33158 v.Reset(ssaop.OpRsh8Ux64)
33159 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
33160 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
33161 v.AddArg2(x, v0)
33162 return true
33163 }
33164
33165
33166 for {
33167 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33168 break
33169 }
33170 v.Reset(ssaop.OpConst8)
33171 v.AuxInt = ssa.Int8ToAuxInt(0)
33172 return true
33173 }
33174
33175
33176
33177 for {
33178 if ssa.AuxIntToBool(v.AuxInt) != false {
33179 break
33180 }
33181 x := v_0
33182 con := v_1
33183 if con.Op != ssaop.OpConst32 {
33184 break
33185 }
33186 c := ssa.AuxIntToInt32(con.AuxInt)
33187 if !(0 < c && c < 8) {
33188 break
33189 }
33190 v.Reset(ssaop.OpRsh8Ux32)
33191 v.AuxInt = ssa.BoolToAuxInt(true)
33192 v.AddArg2(x, con)
33193 return true
33194 }
33195 return false
33196 }
33197 func rewriteValue_OpRsh8Ux64(v *ssa.Value) bool {
33198 v_1 := v.Args[1]
33199 v_0 := v.Args[0]
33200 b := v.Block
33201 typ := &b.Func.Config.Types
33202
33203
33204 for {
33205 if v_0.Op != ssaop.OpConst8 {
33206 break
33207 }
33208 c := ssa.AuxIntToInt8(v_0.AuxInt)
33209 if v_1.Op != ssaop.OpConst64 {
33210 break
33211 }
33212 d := ssa.AuxIntToInt64(v_1.AuxInt)
33213 v.Reset(ssaop.OpConst8)
33214 v.AuxInt = ssa.Int8ToAuxInt(int8(uint8(c) >> uint64(d)))
33215 return true
33216 }
33217
33218
33219 for {
33220 x := v_0
33221 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
33222 break
33223 }
33224 v.CopyOf(x)
33225 return true
33226 }
33227
33228
33229 for {
33230 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33231 break
33232 }
33233 v.Reset(ssaop.OpConst8)
33234 v.AuxInt = ssa.Int8ToAuxInt(0)
33235 return true
33236 }
33237
33238
33239
33240 for {
33241 if v_1.Op != ssaop.OpConst64 {
33242 break
33243 }
33244 c := ssa.AuxIntToInt64(v_1.AuxInt)
33245 if !(uint64(c) >= 8) {
33246 break
33247 }
33248 v.Reset(ssaop.OpConst8)
33249 v.AuxInt = ssa.Int8ToAuxInt(0)
33250 return true
33251 }
33252
33253
33254
33255 for {
33256 t := v.Type
33257 if v_0.Op != ssaop.OpRsh8Ux64 {
33258 break
33259 }
33260 _ = v_0.Args[1]
33261 x := v_0.Args[0]
33262 v_0_1 := v_0.Args[1]
33263 if v_0_1.Op != ssaop.OpConst64 {
33264 break
33265 }
33266 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
33267 if v_1.Op != ssaop.OpConst64 {
33268 break
33269 }
33270 d := ssa.AuxIntToInt64(v_1.AuxInt)
33271 if !(!uaddOvf(c, d)) {
33272 break
33273 }
33274 v.Reset(ssaop.OpRsh8Ux64)
33275 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
33276 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
33277 v.AddArg2(x, v0)
33278 return true
33279 }
33280
33281
33282 for {
33283 if v_0.Op != ssaop.OpRsh8x64 {
33284 break
33285 }
33286 x := v_0.Args[0]
33287 if v_1.Op != ssaop.OpConst64 {
33288 break
33289 }
33290 t := v_1.Type
33291 if ssa.AuxIntToInt64(v_1.AuxInt) != 7 {
33292 break
33293 }
33294 v.Reset(ssaop.OpRsh8Ux64)
33295 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
33296 v0.AuxInt = ssa.Int64ToAuxInt(7)
33297 v.AddArg2(x, v0)
33298 return true
33299 }
33300
33301
33302
33303 for {
33304 i := v_0
33305 if i.Op != ssaop.OpLsh8x64 {
33306 break
33307 }
33308 _ = i.Args[1]
33309 x := i.Args[0]
33310 i_1 := i.Args[1]
33311 if i_1.Op != ssaop.OpConst64 {
33312 break
33313 }
33314 c := ssa.AuxIntToInt64(i_1.AuxInt)
33315 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != c || !(c >= 0 && c < 8 && i.Uses == 1) {
33316 break
33317 }
33318 v.Reset(ssaop.OpAnd8)
33319 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, v.Type)
33320 v0.AuxInt = ssa.Int8ToAuxInt(int8(^uint8(0) >> c))
33321 v.AddArg2(x, v0)
33322 return true
33323 }
33324
33325
33326
33327 for {
33328 if v_0.Op != ssaop.OpLsh8x64 {
33329 break
33330 }
33331 _ = v_0.Args[1]
33332 v_0_0 := v_0.Args[0]
33333 if v_0_0.Op != ssaop.OpRsh8Ux64 {
33334 break
33335 }
33336 _ = v_0_0.Args[1]
33337 x := v_0_0.Args[0]
33338 v_0_0_1 := v_0_0.Args[1]
33339 if v_0_0_1.Op != ssaop.OpConst64 {
33340 break
33341 }
33342 c1 := ssa.AuxIntToInt64(v_0_0_1.AuxInt)
33343 v_0_1 := v_0.Args[1]
33344 if v_0_1.Op != ssaop.OpConst64 {
33345 break
33346 }
33347 c2 := ssa.AuxIntToInt64(v_0_1.AuxInt)
33348 if v_1.Op != ssaop.OpConst64 {
33349 break
33350 }
33351 c3 := ssa.AuxIntToInt64(v_1.AuxInt)
33352 if !(uint64(c1) >= uint64(c2) && uint64(c3) >= uint64(c2) && !uaddOvf(c1-c2, c3)) {
33353 break
33354 }
33355 v.Reset(ssaop.OpRsh8Ux64)
33356 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.UInt64)
33357 v0.AuxInt = ssa.Int64ToAuxInt(c1 - c2 + c3)
33358 v.AddArg2(x, v0)
33359 return true
33360 }
33361
33362
33363
33364 for {
33365 if ssa.AuxIntToBool(v.AuxInt) != false {
33366 break
33367 }
33368 x := v_0
33369 con := v_1
33370 if con.Op != ssaop.OpConst64 {
33371 break
33372 }
33373 c := ssa.AuxIntToInt64(con.AuxInt)
33374 if !(0 < c && c < 8) {
33375 break
33376 }
33377 v.Reset(ssaop.OpRsh8Ux64)
33378 v.AuxInt = ssa.BoolToAuxInt(true)
33379 v.AddArg2(x, con)
33380 return true
33381 }
33382 return false
33383 }
33384 func rewriteValue_OpRsh8Ux8(v *ssa.Value) bool {
33385 v_1 := v.Args[1]
33386 v_0 := v.Args[0]
33387 b := v.Block
33388
33389
33390 for {
33391 x := v_0
33392 if v_1.Op != ssaop.OpConst8 {
33393 break
33394 }
33395 c := ssa.AuxIntToInt8(v_1.AuxInt)
33396 v.Reset(ssaop.OpRsh8Ux64)
33397 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
33398 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
33399 v.AddArg2(x, v0)
33400 return true
33401 }
33402
33403
33404 for {
33405 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33406 break
33407 }
33408 v.Reset(ssaop.OpConst8)
33409 v.AuxInt = ssa.Int8ToAuxInt(0)
33410 return true
33411 }
33412
33413
33414
33415 for {
33416 if ssa.AuxIntToBool(v.AuxInt) != false {
33417 break
33418 }
33419 x := v_0
33420 con := v_1
33421 if con.Op != ssaop.OpConst8 {
33422 break
33423 }
33424 c := ssa.AuxIntToInt8(con.AuxInt)
33425 if !(0 < c && c < 8) {
33426 break
33427 }
33428 v.Reset(ssaop.OpRsh8Ux8)
33429 v.AuxInt = ssa.BoolToAuxInt(true)
33430 v.AddArg2(x, con)
33431 return true
33432 }
33433 return false
33434 }
33435 func rewriteValue_OpRsh8x16(v *ssa.Value) bool {
33436 v_1 := v.Args[1]
33437 v_0 := v.Args[0]
33438 b := v.Block
33439
33440
33441 for {
33442 x := v_0
33443 if v_1.Op != ssaop.OpConst16 {
33444 break
33445 }
33446 c := ssa.AuxIntToInt16(v_1.AuxInt)
33447 v.Reset(ssaop.OpRsh8x64)
33448 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
33449 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
33450 v.AddArg2(x, v0)
33451 return true
33452 }
33453
33454
33455 for {
33456 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33457 break
33458 }
33459 v.Reset(ssaop.OpConst8)
33460 v.AuxInt = ssa.Int8ToAuxInt(0)
33461 return true
33462 }
33463
33464
33465
33466 for {
33467 if ssa.AuxIntToBool(v.AuxInt) != false {
33468 break
33469 }
33470 x := v_0
33471 con := v_1
33472 if con.Op != ssaop.OpConst16 {
33473 break
33474 }
33475 c := ssa.AuxIntToInt16(con.AuxInt)
33476 if !(0 < c && c < 8) {
33477 break
33478 }
33479 v.Reset(ssaop.OpRsh8x16)
33480 v.AuxInt = ssa.BoolToAuxInt(true)
33481 v.AddArg2(x, con)
33482 return true
33483 }
33484 return false
33485 }
33486 func rewriteValue_OpRsh8x32(v *ssa.Value) bool {
33487 v_1 := v.Args[1]
33488 v_0 := v.Args[0]
33489 b := v.Block
33490
33491
33492 for {
33493 x := v_0
33494 if v_1.Op != ssaop.OpConst32 {
33495 break
33496 }
33497 c := ssa.AuxIntToInt32(v_1.AuxInt)
33498 v.Reset(ssaop.OpRsh8x64)
33499 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
33500 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
33501 v.AddArg2(x, v0)
33502 return true
33503 }
33504
33505
33506 for {
33507 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33508 break
33509 }
33510 v.Reset(ssaop.OpConst8)
33511 v.AuxInt = ssa.Int8ToAuxInt(0)
33512 return true
33513 }
33514
33515
33516
33517 for {
33518 if ssa.AuxIntToBool(v.AuxInt) != false {
33519 break
33520 }
33521 x := v_0
33522 con := v_1
33523 if con.Op != ssaop.OpConst32 {
33524 break
33525 }
33526 c := ssa.AuxIntToInt32(con.AuxInt)
33527 if !(0 < c && c < 8) {
33528 break
33529 }
33530 v.Reset(ssaop.OpRsh8x32)
33531 v.AuxInt = ssa.BoolToAuxInt(true)
33532 v.AddArg2(x, con)
33533 return true
33534 }
33535 return false
33536 }
33537 func rewriteValue_OpRsh8x64(v *ssa.Value) bool {
33538 v_1 := v.Args[1]
33539 v_0 := v.Args[0]
33540 b := v.Block
33541
33542
33543 for {
33544 if v_0.Op != ssaop.OpConst8 {
33545 break
33546 }
33547 c := ssa.AuxIntToInt8(v_0.AuxInt)
33548 if v_1.Op != ssaop.OpConst64 {
33549 break
33550 }
33551 d := ssa.AuxIntToInt64(v_1.AuxInt)
33552 v.Reset(ssaop.OpConst8)
33553 v.AuxInt = ssa.Int8ToAuxInt(c >> uint64(d))
33554 return true
33555 }
33556
33557
33558 for {
33559 x := v_0
33560 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
33561 break
33562 }
33563 v.CopyOf(x)
33564 return true
33565 }
33566
33567
33568 for {
33569 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33570 break
33571 }
33572 v.Reset(ssaop.OpConst8)
33573 v.AuxInt = ssa.Int8ToAuxInt(0)
33574 return true
33575 }
33576
33577
33578
33579 for {
33580 t := v.Type
33581 if v_0.Op != ssaop.OpRsh8x64 {
33582 break
33583 }
33584 _ = v_0.Args[1]
33585 x := v_0.Args[0]
33586 v_0_1 := v_0.Args[1]
33587 if v_0_1.Op != ssaop.OpConst64 {
33588 break
33589 }
33590 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
33591 if v_1.Op != ssaop.OpConst64 {
33592 break
33593 }
33594 d := ssa.AuxIntToInt64(v_1.AuxInt)
33595 if !(!uaddOvf(c, d)) {
33596 break
33597 }
33598 v.Reset(ssaop.OpRsh8x64)
33599 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
33600 v0.AuxInt = ssa.Int64ToAuxInt(c + d)
33601 v.AddArg2(x, v0)
33602 return true
33603 }
33604
33605
33606
33607 for {
33608 if ssa.AuxIntToBool(v.AuxInt) != false {
33609 break
33610 }
33611 x := v_0
33612 con := v_1
33613 if con.Op != ssaop.OpConst64 {
33614 break
33615 }
33616 c := ssa.AuxIntToInt64(con.AuxInt)
33617 if !(0 < c && c < 8) {
33618 break
33619 }
33620 v.Reset(ssaop.OpRsh8x64)
33621 v.AuxInt = ssa.BoolToAuxInt(true)
33622 v.AddArg2(x, con)
33623 return true
33624 }
33625 return false
33626 }
33627 func rewriteValue_OpRsh8x8(v *ssa.Value) bool {
33628 v_1 := v.Args[1]
33629 v_0 := v.Args[0]
33630 b := v.Block
33631
33632
33633 for {
33634 x := v_0
33635 if v_1.Op != ssaop.OpConst8 {
33636 break
33637 }
33638 c := ssa.AuxIntToInt8(v_1.AuxInt)
33639 v.Reset(ssaop.OpRsh8x64)
33640 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, types.Types[types.TUINT64])
33641 v0.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
33642 v.AddArg2(x, v0)
33643 return true
33644 }
33645
33646
33647 for {
33648 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
33649 break
33650 }
33651 v.Reset(ssaop.OpConst8)
33652 v.AuxInt = ssa.Int8ToAuxInt(0)
33653 return true
33654 }
33655
33656
33657
33658 for {
33659 if ssa.AuxIntToBool(v.AuxInt) != false {
33660 break
33661 }
33662 x := v_0
33663 con := v_1
33664 if con.Op != ssaop.OpConst8 {
33665 break
33666 }
33667 c := ssa.AuxIntToInt8(con.AuxInt)
33668 if !(0 < c && c < 8) {
33669 break
33670 }
33671 v.Reset(ssaop.OpRsh8x8)
33672 v.AuxInt = ssa.BoolToAuxInt(true)
33673 v.AddArg2(x, con)
33674 return true
33675 }
33676 return false
33677 }
33678 func rewriteValue_OpSelect0(v *ssa.Value) bool {
33679 v_0 := v.Args[0]
33680
33681
33682
33683 for {
33684 a := v_0
33685 if a.Op != ssaop.OpAdd64carry {
33686 break
33687 }
33688 _ = a.Args[2]
33689 x := a.Args[0]
33690 y := a.Args[1]
33691 a_2 := a.Args[2]
33692 if a_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(a_2.AuxInt) != 0 || !(a.Uses == 1) {
33693 break
33694 }
33695 v.Reset(ssaop.OpAdd64)
33696 v.AddArg2(x, y)
33697 return true
33698 }
33699
33700
33701 for {
33702 if v_0.Op != ssaop.OpMakeTuple {
33703 break
33704 }
33705 x := v_0.Args[0]
33706 v.CopyOf(x)
33707 return true
33708 }
33709 return false
33710 }
33711 func rewriteValue_OpSelect1(v *ssa.Value) bool {
33712 v_0 := v.Args[0]
33713
33714
33715 for {
33716 if v_0.Op != ssaop.OpMakeTuple {
33717 break
33718 }
33719 y := v_0.Args[1]
33720 v.CopyOf(y)
33721 return true
33722 }
33723 return false
33724 }
33725 func rewriteValue_OpSelectN(v *ssa.Value) bool {
33726 v_0 := v.Args[0]
33727 b := v.Block
33728 config := b.Func.Config
33729 typ := &b.Func.Config.Types
33730
33731
33732 for {
33733 n := ssa.AuxIntToInt64(v.AuxInt)
33734 m := v_0
33735 if m.Op != ssaop.OpMakeResult {
33736 break
33737 }
33738 v.CopyOf(m.Args[n])
33739 return true
33740 }
33741
33742
33743
33744 for {
33745 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33746 break
33747 }
33748 call := v_0
33749 if call.Op != ssaop.OpStaticCall || len(call.Args) != 3 {
33750 break
33751 }
33752 sym := ssa.AuxToCall(call.Aux)
33753 mem := call.Args[2]
33754 sptr := call.Args[0]
33755 call_1 := call.Args[1]
33756 if call_1.Op != ssaop.OpConst64 {
33757 break
33758 }
33759 c := ssa.AuxIntToInt64(call_1.AuxInt)
33760 if !(isInlinableMemclr(config, int64(c)) && ssa.IsSameCall(sym, "runtime.memclrNoHeapPointers") && call.Uses == 1 && ssa.Clobber(call)) {
33761 break
33762 }
33763 v.Reset(ssaop.OpZero)
33764 v.AuxInt = ssa.Int64ToAuxInt(int64(c))
33765 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
33766 v.AddArg2(sptr, mem)
33767 return true
33768 }
33769
33770
33771
33772 for {
33773 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33774 break
33775 }
33776 call := v_0
33777 if call.Op != ssaop.OpStaticCall || len(call.Args) != 3 {
33778 break
33779 }
33780 sym := ssa.AuxToCall(call.Aux)
33781 mem := call.Args[2]
33782 sptr := call.Args[0]
33783 call_1 := call.Args[1]
33784 if call_1.Op != ssaop.OpConst32 {
33785 break
33786 }
33787 c := ssa.AuxIntToInt32(call_1.AuxInt)
33788 if !(isInlinableMemclr(config, int64(c)) && ssa.IsSameCall(sym, "runtime.memclrNoHeapPointers") && call.Uses == 1 && ssa.Clobber(call)) {
33789 break
33790 }
33791 v.Reset(ssaop.OpZero)
33792 v.AuxInt = ssa.Int64ToAuxInt(int64(c))
33793 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
33794 v.AddArg2(sptr, mem)
33795 return true
33796 }
33797
33798
33799
33800 for {
33801 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33802 break
33803 }
33804 call := v_0
33805 if call.Op != ssaop.OpStaticCall || len(call.Args) != 1 {
33806 break
33807 }
33808 sym := ssa.AuxToCall(call.Aux)
33809 s1 := call.Args[0]
33810 if s1.Op != ssaop.OpStore {
33811 break
33812 }
33813 _ = s1.Args[2]
33814 s1_1 := s1.Args[1]
33815 if s1_1.Op != ssaop.OpConst64 {
33816 break
33817 }
33818 sz := ssa.AuxIntToInt64(s1_1.AuxInt)
33819 s2 := s1.Args[2]
33820 if s2.Op != ssaop.OpStore {
33821 break
33822 }
33823 _ = s2.Args[2]
33824 src := s2.Args[1]
33825 s3 := s2.Args[2]
33826 if s3.Op != ssaop.OpStore {
33827 break
33828 }
33829 mem := s3.Args[2]
33830 dst := s3.Args[1]
33831 if !(sz >= 0 && ssa.IsSameCall(sym, "runtime.memmove") && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && ssa.IsInlinableMemmove(dst, src, int64(sz), config) && ssa.Clobber(s1, s2, s3, call)) {
33832 break
33833 }
33834 v.Reset(ssaop.OpMove)
33835 v.AuxInt = ssa.Int64ToAuxInt(int64(sz))
33836 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
33837 v.AddArg3(dst, src, mem)
33838 return true
33839 }
33840
33841
33842
33843 for {
33844 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33845 break
33846 }
33847 call := v_0
33848 if call.Op != ssaop.OpStaticCall || len(call.Args) != 1 {
33849 break
33850 }
33851 sym := ssa.AuxToCall(call.Aux)
33852 s1 := call.Args[0]
33853 if s1.Op != ssaop.OpStore {
33854 break
33855 }
33856 _ = s1.Args[2]
33857 s1_1 := s1.Args[1]
33858 if s1_1.Op != ssaop.OpConst32 {
33859 break
33860 }
33861 sz := ssa.AuxIntToInt32(s1_1.AuxInt)
33862 s2 := s1.Args[2]
33863 if s2.Op != ssaop.OpStore {
33864 break
33865 }
33866 _ = s2.Args[2]
33867 src := s2.Args[1]
33868 s3 := s2.Args[2]
33869 if s3.Op != ssaop.OpStore {
33870 break
33871 }
33872 mem := s3.Args[2]
33873 dst := s3.Args[1]
33874 if !(sz >= 0 && ssa.IsSameCall(sym, "runtime.memmove") && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && ssa.IsInlinableMemmove(dst, src, int64(sz), config) && ssa.Clobber(s1, s2, s3, call)) {
33875 break
33876 }
33877 v.Reset(ssaop.OpMove)
33878 v.AuxInt = ssa.Int64ToAuxInt(int64(sz))
33879 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
33880 v.AddArg3(dst, src, mem)
33881 return true
33882 }
33883
33884
33885
33886 for {
33887 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33888 break
33889 }
33890 call := v_0
33891 if call.Op != ssaop.OpStaticCall || len(call.Args) != 4 {
33892 break
33893 }
33894 sym := ssa.AuxToCall(call.Aux)
33895 mem := call.Args[3]
33896 dst := call.Args[0]
33897 src := call.Args[1]
33898 call_2 := call.Args[2]
33899 if call_2.Op != ssaop.OpConst64 {
33900 break
33901 }
33902 sz := ssa.AuxIntToInt64(call_2.AuxInt)
33903 if !(sz >= 0 && call.Uses == 1 && ssa.IsSameCall(sym, "runtime.memmove") && ssa.IsInlinableMemmove(dst, src, int64(sz), config) && ssa.Clobber(call)) {
33904 break
33905 }
33906 v.Reset(ssaop.OpMove)
33907 v.AuxInt = ssa.Int64ToAuxInt(int64(sz))
33908 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
33909 v.AddArg3(dst, src, mem)
33910 return true
33911 }
33912
33913
33914
33915 for {
33916 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33917 break
33918 }
33919 call := v_0
33920 if call.Op != ssaop.OpStaticCall || len(call.Args) != 4 {
33921 break
33922 }
33923 sym := ssa.AuxToCall(call.Aux)
33924 mem := call.Args[3]
33925 dst := call.Args[0]
33926 src := call.Args[1]
33927 call_2 := call.Args[2]
33928 if call_2.Op != ssaop.OpConst32 {
33929 break
33930 }
33931 sz := ssa.AuxIntToInt32(call_2.AuxInt)
33932 if !(sz >= 0 && call.Uses == 1 && ssa.IsSameCall(sym, "runtime.memmove") && ssa.IsInlinableMemmove(dst, src, int64(sz), config) && ssa.Clobber(call)) {
33933 break
33934 }
33935 v.Reset(ssaop.OpMove)
33936 v.AuxInt = ssa.Int64ToAuxInt(int64(sz))
33937 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
33938 v.AddArg3(dst, src, mem)
33939 return true
33940 }
33941
33942
33943
33944 for {
33945 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33946 break
33947 }
33948 call := v_0
33949 if call.Op != ssaop.OpStaticLECall || len(call.Args) != 4 {
33950 break
33951 }
33952 sym := ssa.AuxToCall(call.Aux)
33953 mem := call.Args[3]
33954 dst := call.Args[0]
33955 src := call.Args[1]
33956 call_2 := call.Args[2]
33957 if call_2.Op != ssaop.OpConst64 {
33958 break
33959 }
33960 sz := ssa.AuxIntToInt64(call_2.AuxInt)
33961 if !(sz >= 0 && call.Uses == 1 && ssa.IsSameCall(sym, "runtime.memmove") && ssa.IsInlinableMemmove(dst, src, int64(sz), config) && ssa.Clobber(call)) {
33962 break
33963 }
33964 v.Reset(ssaop.OpMove)
33965 v.AuxInt = ssa.Int64ToAuxInt(int64(sz))
33966 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
33967 v.AddArg3(dst, src, mem)
33968 return true
33969 }
33970
33971
33972
33973 for {
33974 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
33975 break
33976 }
33977 call := v_0
33978 if call.Op != ssaop.OpStaticLECall || len(call.Args) != 4 {
33979 break
33980 }
33981 sym := ssa.AuxToCall(call.Aux)
33982 mem := call.Args[3]
33983 dst := call.Args[0]
33984 src := call.Args[1]
33985 call_2 := call.Args[2]
33986 if call_2.Op != ssaop.OpConst32 {
33987 break
33988 }
33989 sz := ssa.AuxIntToInt32(call_2.AuxInt)
33990 if !(sz >= 0 && call.Uses == 1 && ssa.IsSameCall(sym, "runtime.memmove") && ssa.IsInlinableMemmove(dst, src, int64(sz), config) && ssa.Clobber(call)) {
33991 break
33992 }
33993 v.Reset(ssaop.OpMove)
33994 v.AuxInt = ssa.Int64ToAuxInt(int64(sz))
33995 v.Aux = ssa.TypeToAux(types.Types[types.TUINT8])
33996 v.AddArg3(dst, src, mem)
33997 return true
33998 }
33999
34000
34001
34002 for {
34003 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
34004 break
34005 }
34006 call := v_0
34007 if call.Op != ssaop.OpStaticLECall || len(call.Args) != 2 {
34008 break
34009 }
34010 sym := ssa.AuxToCall(call.Aux)
34011 x := call.Args[1]
34012 if !(needRaceCleanup(sym, call) && ssa.Clobber(call)) {
34013 break
34014 }
34015 v.CopyOf(x)
34016 return true
34017 }
34018
34019
34020
34021 for {
34022 if ssa.AuxIntToInt64(v.AuxInt) != 0 {
34023 break
34024 }
34025 call := v_0
34026 if call.Op != ssaop.OpStaticLECall || len(call.Args) != 1 {
34027 break
34028 }
34029 sym := ssa.AuxToCall(call.Aux)
34030 x := call.Args[0]
34031 if !(needRaceCleanup(sym, call) && ssa.Clobber(call)) {
34032 break
34033 }
34034 v.CopyOf(x)
34035 return true
34036 }
34037
34038
34039
34040 for {
34041 if ssa.AuxIntToInt64(v.AuxInt) != 1 || v_0.Op != ssaop.OpStaticCall || len(v_0.Args) != 6 {
34042 break
34043 }
34044 sym := ssa.AuxToCall(v_0.Aux)
34045 _ = v_0.Args[1]
34046 newLen := v_0.Args[1]
34047 if newLen.Op != ssaop.OpConst64 || !(v.Type.IsInteger() && (ssa.IsSameCall(sym, "runtime.growslice") || ssa.IsSameCall(sym, "runtime.growsliceNoAlias"))) {
34048 break
34049 }
34050 v.CopyOf(newLen)
34051 return true
34052 }
34053
34054
34055
34056 for {
34057 if ssa.AuxIntToInt64(v.AuxInt) != 1 || v_0.Op != ssaop.OpStaticCall || len(v_0.Args) != 6 {
34058 break
34059 }
34060 sym := ssa.AuxToCall(v_0.Aux)
34061 _ = v_0.Args[1]
34062 newLen := v_0.Args[1]
34063 if newLen.Op != ssaop.OpConst32 || !(v.Type.IsInteger() && (ssa.IsSameCall(sym, "runtime.growslice") || ssa.IsSameCall(sym, "runtime.growsliceNoAlias"))) {
34064 break
34065 }
34066 v.CopyOf(newLen)
34067 return true
34068 }
34069
34070
34071
34072 for {
34073 if ssa.AuxIntToInt64(v.AuxInt) != 0 || v_0.Op != ssaop.OpStaticLECall || len(v_0.Args) != 3 {
34074 break
34075 }
34076 f := ssa.AuxToCall(v_0.Aux)
34077 _ = v_0.Args[2]
34078 x := v_0.Args[0]
34079 y := v_0.Args[1]
34080 v_0_2 := v_0.Args[2]
34081 if v_0_2.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(v_0_2.AuxInt) != 1 {
34082 break
34083 }
34084 c := v_0_2.Args[0]
34085 if c.Op != ssaop.OpStaticLECall || len(c.Args) != 3 {
34086 break
34087 }
34088 g := ssa.AuxToCall(c.Aux)
34089 if x != c.Args[0] || y != c.Args[1] || !(ssa.IsSameCall(f, "runtime.cmpstring") && ssa.IsSameCall(g, "runtime.cmpstring")) {
34090 break
34091 }
34092 b = c.Block
34093 v0 := b.NewValue0(v.Pos, ssaop.OpSelectN, typ.Int)
34094 v.CopyOf(v0)
34095 v0.AuxInt = ssa.Int64ToAuxInt(0)
34096 v0.AddArg(c)
34097 return true
34098 }
34099
34100
34101
34102 for {
34103 if ssa.AuxIntToInt64(v.AuxInt) != 1 {
34104 break
34105 }
34106 c := v_0
34107 if c.Op != ssaop.OpStaticLECall || len(c.Args) != 3 {
34108 break
34109 }
34110 f := ssa.AuxToCall(c.Aux)
34111 mem := c.Args[2]
34112 if !(c.Uses == 1 && ssa.IsSameCall(f, "runtime.cmpstring") && ssa.Clobber(c)) {
34113 break
34114 }
34115 v.CopyOf(mem)
34116 return true
34117 }
34118 return false
34119 }
34120 func rewriteValue_OpSignExt16to32(v *ssa.Value) bool {
34121 v_0 := v.Args[0]
34122
34123
34124 for {
34125 if v_0.Op != ssaop.OpConst16 {
34126 break
34127 }
34128 c := ssa.AuxIntToInt16(v_0.AuxInt)
34129 v.Reset(ssaop.OpConst32)
34130 v.AuxInt = ssa.Int32ToAuxInt(int32(c))
34131 return true
34132 }
34133
34134
34135
34136 for {
34137 if v_0.Op != ssaop.OpTrunc32to16 {
34138 break
34139 }
34140 x := v_0.Args[0]
34141 if x.Op != ssaop.OpRsh32x64 {
34142 break
34143 }
34144 _ = x.Args[1]
34145 x_1 := x.Args[1]
34146 if x_1.Op != ssaop.OpConst64 {
34147 break
34148 }
34149 s := ssa.AuxIntToInt64(x_1.AuxInt)
34150 if !(s >= 16) {
34151 break
34152 }
34153 v.CopyOf(x)
34154 return true
34155 }
34156 return false
34157 }
34158 func rewriteValue_OpSignExt16to64(v *ssa.Value) bool {
34159 v_0 := v.Args[0]
34160
34161
34162 for {
34163 if v_0.Op != ssaop.OpConst16 {
34164 break
34165 }
34166 c := ssa.AuxIntToInt16(v_0.AuxInt)
34167 v.Reset(ssaop.OpConst64)
34168 v.AuxInt = ssa.Int64ToAuxInt(int64(c))
34169 return true
34170 }
34171
34172
34173
34174 for {
34175 if v_0.Op != ssaop.OpTrunc64to16 {
34176 break
34177 }
34178 x := v_0.Args[0]
34179 if x.Op != ssaop.OpRsh64x64 {
34180 break
34181 }
34182 _ = x.Args[1]
34183 x_1 := x.Args[1]
34184 if x_1.Op != ssaop.OpConst64 {
34185 break
34186 }
34187 s := ssa.AuxIntToInt64(x_1.AuxInt)
34188 if !(s >= 48) {
34189 break
34190 }
34191 v.CopyOf(x)
34192 return true
34193 }
34194 return false
34195 }
34196 func rewriteValue_OpSignExt32to64(v *ssa.Value) bool {
34197 v_0 := v.Args[0]
34198
34199
34200 for {
34201 if v_0.Op != ssaop.OpConst32 {
34202 break
34203 }
34204 c := ssa.AuxIntToInt32(v_0.AuxInt)
34205 v.Reset(ssaop.OpConst64)
34206 v.AuxInt = ssa.Int64ToAuxInt(int64(c))
34207 return true
34208 }
34209
34210
34211
34212 for {
34213 if v_0.Op != ssaop.OpTrunc64to32 {
34214 break
34215 }
34216 x := v_0.Args[0]
34217 if x.Op != ssaop.OpRsh64x64 {
34218 break
34219 }
34220 _ = x.Args[1]
34221 x_1 := x.Args[1]
34222 if x_1.Op != ssaop.OpConst64 {
34223 break
34224 }
34225 s := ssa.AuxIntToInt64(x_1.AuxInt)
34226 if !(s >= 32) {
34227 break
34228 }
34229 v.CopyOf(x)
34230 return true
34231 }
34232 return false
34233 }
34234 func rewriteValue_OpSignExt8to16(v *ssa.Value) bool {
34235 v_0 := v.Args[0]
34236
34237
34238 for {
34239 if v_0.Op != ssaop.OpConst8 {
34240 break
34241 }
34242 c := ssa.AuxIntToInt8(v_0.AuxInt)
34243 v.Reset(ssaop.OpConst16)
34244 v.AuxInt = ssa.Int16ToAuxInt(int16(c))
34245 return true
34246 }
34247
34248
34249
34250 for {
34251 if v_0.Op != ssaop.OpTrunc16to8 {
34252 break
34253 }
34254 x := v_0.Args[0]
34255 if x.Op != ssaop.OpRsh16x64 {
34256 break
34257 }
34258 _ = x.Args[1]
34259 x_1 := x.Args[1]
34260 if x_1.Op != ssaop.OpConst64 {
34261 break
34262 }
34263 s := ssa.AuxIntToInt64(x_1.AuxInt)
34264 if !(s >= 8) {
34265 break
34266 }
34267 v.CopyOf(x)
34268 return true
34269 }
34270
34271
34272 for {
34273 cvt := v_0
34274 if cvt.Op != ssaop.OpCvtBoolToUint8 {
34275 break
34276 }
34277 v.Reset(ssaop.OpZeroExt8to16)
34278 v.AddArg(cvt)
34279 return true
34280 }
34281 return false
34282 }
34283 func rewriteValue_OpSignExt8to32(v *ssa.Value) bool {
34284 v_0 := v.Args[0]
34285
34286
34287 for {
34288 if v_0.Op != ssaop.OpConst8 {
34289 break
34290 }
34291 c := ssa.AuxIntToInt8(v_0.AuxInt)
34292 v.Reset(ssaop.OpConst32)
34293 v.AuxInt = ssa.Int32ToAuxInt(int32(c))
34294 return true
34295 }
34296
34297
34298
34299 for {
34300 if v_0.Op != ssaop.OpTrunc32to8 {
34301 break
34302 }
34303 x := v_0.Args[0]
34304 if x.Op != ssaop.OpRsh32x64 {
34305 break
34306 }
34307 _ = x.Args[1]
34308 x_1 := x.Args[1]
34309 if x_1.Op != ssaop.OpConst64 {
34310 break
34311 }
34312 s := ssa.AuxIntToInt64(x_1.AuxInt)
34313 if !(s >= 24) {
34314 break
34315 }
34316 v.CopyOf(x)
34317 return true
34318 }
34319
34320
34321 for {
34322 cvt := v_0
34323 if cvt.Op != ssaop.OpCvtBoolToUint8 {
34324 break
34325 }
34326 v.Reset(ssaop.OpZeroExt8to32)
34327 v.AddArg(cvt)
34328 return true
34329 }
34330 return false
34331 }
34332 func rewriteValue_OpSignExt8to64(v *ssa.Value) bool {
34333 v_0 := v.Args[0]
34334
34335
34336 for {
34337 if v_0.Op != ssaop.OpConst8 {
34338 break
34339 }
34340 c := ssa.AuxIntToInt8(v_0.AuxInt)
34341 v.Reset(ssaop.OpConst64)
34342 v.AuxInt = ssa.Int64ToAuxInt(int64(c))
34343 return true
34344 }
34345
34346
34347
34348 for {
34349 if v_0.Op != ssaop.OpTrunc64to8 {
34350 break
34351 }
34352 x := v_0.Args[0]
34353 if x.Op != ssaop.OpRsh64x64 {
34354 break
34355 }
34356 _ = x.Args[1]
34357 x_1 := x.Args[1]
34358 if x_1.Op != ssaop.OpConst64 {
34359 break
34360 }
34361 s := ssa.AuxIntToInt64(x_1.AuxInt)
34362 if !(s >= 56) {
34363 break
34364 }
34365 v.CopyOf(x)
34366 return true
34367 }
34368
34369
34370 for {
34371 cvt := v_0
34372 if cvt.Op != ssaop.OpCvtBoolToUint8 {
34373 break
34374 }
34375 v.Reset(ssaop.OpZeroExt8to64)
34376 v.AddArg(cvt)
34377 return true
34378 }
34379 return false
34380 }
34381 func rewriteValue_OpSliceCap(v *ssa.Value) bool {
34382 v_0 := v.Args[0]
34383
34384
34385 for {
34386 if v_0.Op != ssaop.OpSliceMake {
34387 break
34388 }
34389 _ = v_0.Args[2]
34390 v_0_2 := v_0.Args[2]
34391 if v_0_2.Op != ssaop.OpConst64 {
34392 break
34393 }
34394 t := v_0_2.Type
34395 c := ssa.AuxIntToInt64(v_0_2.AuxInt)
34396 v.Reset(ssaop.OpConst64)
34397 v.Type = t
34398 v.AuxInt = ssa.Int64ToAuxInt(c)
34399 return true
34400 }
34401
34402
34403 for {
34404 if v_0.Op != ssaop.OpSliceMake {
34405 break
34406 }
34407 _ = v_0.Args[2]
34408 v_0_2 := v_0.Args[2]
34409 if v_0_2.Op != ssaop.OpConst32 {
34410 break
34411 }
34412 t := v_0_2.Type
34413 c := ssa.AuxIntToInt32(v_0_2.AuxInt)
34414 v.Reset(ssaop.OpConst32)
34415 v.Type = t
34416 v.AuxInt = ssa.Int32ToAuxInt(c)
34417 return true
34418 }
34419
34420
34421 for {
34422 if v_0.Op != ssaop.OpSliceMake {
34423 break
34424 }
34425 _ = v_0.Args[2]
34426 v_0_2 := v_0.Args[2]
34427 if v_0_2.Op != ssaop.OpSliceCap {
34428 break
34429 }
34430 x := v_0_2.Args[0]
34431 v.Reset(ssaop.OpSliceCap)
34432 v.AddArg(x)
34433 return true
34434 }
34435
34436
34437 for {
34438 if v_0.Op != ssaop.OpSliceMake {
34439 break
34440 }
34441 _ = v_0.Args[2]
34442 v_0_2 := v_0.Args[2]
34443 if v_0_2.Op != ssaop.OpSliceLen {
34444 break
34445 }
34446 x := v_0_2.Args[0]
34447 v.Reset(ssaop.OpSliceLen)
34448 v.AddArg(x)
34449 return true
34450 }
34451
34452
34453 for {
34454 if v_0.Op != ssaop.OpPhi || len(v_0.Args) != 2 {
34455 break
34456 }
34457 _ = v_0.Args[1]
34458 v_0_0 := v_0.Args[0]
34459 if v_0_0.Op != ssaop.OpSliceMake {
34460 break
34461 }
34462 x := v_0_0.Args[2]
34463 v_0_1 := v_0.Args[1]
34464 if v_0_1.Op != ssaop.OpSliceMake {
34465 break
34466 }
34467 _ = v_0_1.Args[2]
34468 if x != v_0_1.Args[2] {
34469 break
34470 }
34471 v.CopyOf(x)
34472 return true
34473 }
34474 return false
34475 }
34476 func rewriteValue_OpSliceLen(v *ssa.Value) bool {
34477 v_0 := v.Args[0]
34478
34479
34480 for {
34481 if v_0.Op != ssaop.OpSliceMake {
34482 break
34483 }
34484 _ = v_0.Args[1]
34485 v_0_1 := v_0.Args[1]
34486 if v_0_1.Op != ssaop.OpConst64 {
34487 break
34488 }
34489 t := v_0_1.Type
34490 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
34491 v.Reset(ssaop.OpConst64)
34492 v.Type = t
34493 v.AuxInt = ssa.Int64ToAuxInt(c)
34494 return true
34495 }
34496
34497
34498 for {
34499 if v_0.Op != ssaop.OpSliceMake {
34500 break
34501 }
34502 _ = v_0.Args[1]
34503 v_0_1 := v_0.Args[1]
34504 if v_0_1.Op != ssaop.OpConst32 {
34505 break
34506 }
34507 t := v_0_1.Type
34508 c := ssa.AuxIntToInt32(v_0_1.AuxInt)
34509 v.Reset(ssaop.OpConst32)
34510 v.Type = t
34511 v.AuxInt = ssa.Int32ToAuxInt(c)
34512 return true
34513 }
34514
34515
34516 for {
34517 if v_0.Op != ssaop.OpSliceMake {
34518 break
34519 }
34520 _ = v_0.Args[1]
34521 v_0_1 := v_0.Args[1]
34522 if v_0_1.Op != ssaop.OpSliceLen {
34523 break
34524 }
34525 x := v_0_1.Args[0]
34526 v.Reset(ssaop.OpSliceLen)
34527 v.AddArg(x)
34528 return true
34529 }
34530
34531
34532 for {
34533 if v_0.Op != ssaop.OpPhi || len(v_0.Args) != 2 {
34534 break
34535 }
34536 _ = v_0.Args[1]
34537 v_0_0 := v_0.Args[0]
34538 if v_0_0.Op != ssaop.OpSliceMake {
34539 break
34540 }
34541 x := v_0_0.Args[1]
34542 v_0_1 := v_0.Args[1]
34543 if v_0_1.Op != ssaop.OpSliceMake {
34544 break
34545 }
34546 _ = v_0_1.Args[1]
34547 if x != v_0_1.Args[1] {
34548 break
34549 }
34550 v.CopyOf(x)
34551 return true
34552 }
34553
34554
34555
34556 for {
34557 if v_0.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
34558 break
34559 }
34560 v_0_0 := v_0.Args[0]
34561 if v_0_0.Op != ssaop.OpStaticLECall || len(v_0_0.Args) != 6 {
34562 break
34563 }
34564 sym := ssa.AuxToCall(v_0_0.Aux)
34565 _ = v_0_0.Args[1]
34566 newLen := v_0_0.Args[1]
34567 if newLen.Op != ssaop.OpConst64 || !(ssa.IsSameCall(sym, "runtime.growslice") || ssa.IsSameCall(sym, "runtime.growsliceNoAlias")) {
34568 break
34569 }
34570 v.CopyOf(newLen)
34571 return true
34572 }
34573
34574
34575
34576 for {
34577 if v_0.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
34578 break
34579 }
34580 v_0_0 := v_0.Args[0]
34581 if v_0_0.Op != ssaop.OpStaticLECall || len(v_0_0.Args) != 6 {
34582 break
34583 }
34584 sym := ssa.AuxToCall(v_0_0.Aux)
34585 _ = v_0_0.Args[1]
34586 newLen := v_0_0.Args[1]
34587 if newLen.Op != ssaop.OpConst32 || !(ssa.IsSameCall(sym, "runtime.growslice") || ssa.IsSameCall(sym, "runtime.growsliceNoAlias")) {
34588 break
34589 }
34590 v.CopyOf(newLen)
34591 return true
34592 }
34593 return false
34594 }
34595 func rewriteValue_OpSliceMake(v *ssa.Value) bool {
34596 v_2 := v.Args[2]
34597 v_1 := v.Args[1]
34598 v_0 := v.Args[0]
34599 b := v.Block
34600
34601
34602
34603 for {
34604 if v_0.Op != ssaop.OpAddPtr {
34605 break
34606 }
34607 t := v_0.Type
34608 _ = v_0.Args[1]
34609 x := v_0.Args[0]
34610 v_0_1 := v_0.Args[1]
34611 if v_0_1.Op != ssaop.OpAnd64 {
34612 break
34613 }
34614 _ = v_0_1.Args[1]
34615 v_0_1_0 := v_0_1.Args[0]
34616 v_0_1_1 := v_0_1.Args[1]
34617 for _i0 := 0; _i0 <= 1; _i0, v_0_1_0, v_0_1_1 = _i0+1, v_0_1_1, v_0_1_0 {
34618 y := v_0_1_0
34619 if v_0_1_1.Op != ssaop.OpSlicemask {
34620 continue
34621 }
34622 w := v_1
34623 if w.Op != ssaop.OpConst64 {
34624 continue
34625 }
34626 c := ssa.AuxIntToInt64(w.AuxInt)
34627 z := v_2
34628 if !(c > 0) {
34629 continue
34630 }
34631 v.Reset(ssaop.OpSliceMake)
34632 v0 := b.NewValue0(v.Pos, ssaop.OpAddPtr, t)
34633 v0.AddArg2(x, y)
34634 v.AddArg3(v0, w, z)
34635 return true
34636 }
34637 break
34638 }
34639
34640
34641
34642 for {
34643 if v_0.Op != ssaop.OpAddPtr {
34644 break
34645 }
34646 t := v_0.Type
34647 _ = v_0.Args[1]
34648 x := v_0.Args[0]
34649 v_0_1 := v_0.Args[1]
34650 if v_0_1.Op != ssaop.OpAnd32 {
34651 break
34652 }
34653 _ = v_0_1.Args[1]
34654 v_0_1_0 := v_0_1.Args[0]
34655 v_0_1_1 := v_0_1.Args[1]
34656 for _i0 := 0; _i0 <= 1; _i0, v_0_1_0, v_0_1_1 = _i0+1, v_0_1_1, v_0_1_0 {
34657 y := v_0_1_0
34658 if v_0_1_1.Op != ssaop.OpSlicemask {
34659 continue
34660 }
34661 w := v_1
34662 if w.Op != ssaop.OpConst32 {
34663 continue
34664 }
34665 c := ssa.AuxIntToInt32(w.AuxInt)
34666 z := v_2
34667 if !(c > 0) {
34668 continue
34669 }
34670 v.Reset(ssaop.OpSliceMake)
34671 v0 := b.NewValue0(v.Pos, ssaop.OpAddPtr, t)
34672 v0.AddArg2(x, y)
34673 v.AddArg3(v0, w, z)
34674 return true
34675 }
34676 break
34677 }
34678 return false
34679 }
34680 func rewriteValue_OpSlicePtr(v *ssa.Value) bool {
34681 v_0 := v.Args[0]
34682
34683
34684 for {
34685 if v_0.Op != ssaop.OpSliceMake {
34686 break
34687 }
34688 v_0_0 := v_0.Args[0]
34689 if v_0_0.Op != ssaop.OpSlicePtr {
34690 break
34691 }
34692 x := v_0_0.Args[0]
34693 v.Reset(ssaop.OpSlicePtr)
34694 v.AddArg(x)
34695 return true
34696 }
34697 return false
34698 }
34699 func rewriteValue_OpSlicemask(v *ssa.Value) bool {
34700 v_0 := v.Args[0]
34701
34702
34703
34704 for {
34705 if v_0.Op != ssaop.OpConst32 {
34706 break
34707 }
34708 x := ssa.AuxIntToInt32(v_0.AuxInt)
34709 if !(x > 0) {
34710 break
34711 }
34712 v.Reset(ssaop.OpConst32)
34713 v.AuxInt = ssa.Int32ToAuxInt(-1)
34714 return true
34715 }
34716
34717
34718 for {
34719 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
34720 break
34721 }
34722 v.Reset(ssaop.OpConst32)
34723 v.AuxInt = ssa.Int32ToAuxInt(0)
34724 return true
34725 }
34726
34727
34728
34729 for {
34730 if v_0.Op != ssaop.OpConst64 {
34731 break
34732 }
34733 x := ssa.AuxIntToInt64(v_0.AuxInt)
34734 if !(x > 0) {
34735 break
34736 }
34737 v.Reset(ssaop.OpConst64)
34738 v.AuxInt = ssa.Int64ToAuxInt(-1)
34739 return true
34740 }
34741
34742
34743 for {
34744 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
34745 break
34746 }
34747 v.Reset(ssaop.OpConst64)
34748 v.AuxInt = ssa.Int64ToAuxInt(0)
34749 return true
34750 }
34751 return false
34752 }
34753 func rewriteValue_OpSqrt(v *ssa.Value) bool {
34754 v_0 := v.Args[0]
34755
34756
34757
34758 for {
34759 if v_0.Op != ssaop.OpConst64F {
34760 break
34761 }
34762 c := ssa.AuxIntToFloat64(v_0.AuxInt)
34763 if !(!math.IsNaN(math.Sqrt(c))) {
34764 break
34765 }
34766 v.Reset(ssaop.OpConst64F)
34767 v.AuxInt = ssa.Float64ToAuxInt(math.Sqrt(c))
34768 return true
34769 }
34770 return false
34771 }
34772 func rewriteValue_OpStaticCall(v *ssa.Value) bool {
34773 b := v.Block
34774 typ := &b.Func.Config.Types
34775
34776
34777
34778 for {
34779 if len(v.Args) != 4 {
34780 break
34781 }
34782 callAux := ssa.AuxToCall(v.Aux)
34783 mem := v.Args[3]
34784 p := v.Args[0]
34785 q := v.Args[1]
34786 if !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.IsSamePtr(p, q)) {
34787 break
34788 }
34789 v.Reset(ssaop.OpMakeResult)
34790 v0 := b.NewValue0(v.Pos, ssaop.OpConstBool, typ.Bool)
34791 v0.AuxInt = ssa.BoolToAuxInt(true)
34792 v.AddArg2(v0, mem)
34793 return true
34794 }
34795 return false
34796 }
34797 func rewriteValue_OpStaticLECall(v *ssa.Value) bool {
34798 b := v.Block
34799 config := b.Func.Config
34800 typ := &b.Func.Config.Types
34801
34802
34803
34804 for {
34805 if len(v.Args) != 4 {
34806 break
34807 }
34808 callAux := ssa.AuxToCall(v.Aux)
34809 mem := v.Args[3]
34810 sptr := v.Args[0]
34811 v_1 := v.Args[1]
34812 if v_1.Op != ssaop.OpAddr {
34813 break
34814 }
34815 scon := ssa.AuxToSym(v_1.Aux)
34816 v_1_0 := v_1.Args[0]
34817 if v_1_0.Op != ssaop.OpSB {
34818 break
34819 }
34820 v_2 := v.Args[2]
34821 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 1 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon)) {
34822 break
34823 }
34824 v.Reset(ssaop.OpMakeResult)
34825 v0 := b.NewValue0(v.Pos, ssaop.OpEq8, typ.Bool)
34826 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
34827 v1.AddArg2(sptr, mem)
34828 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, typ.Int8)
34829 v2.AuxInt = ssa.Int8ToAuxInt(int8(ssa.Read8(scon, 0)))
34830 v0.AddArg2(v1, v2)
34831 v.AddArg2(v0, mem)
34832 return true
34833 }
34834
34835
34836
34837 for {
34838 if len(v.Args) != 4 {
34839 break
34840 }
34841 callAux := ssa.AuxToCall(v.Aux)
34842 mem := v.Args[3]
34843 v_0 := v.Args[0]
34844 if v_0.Op != ssaop.OpAddr {
34845 break
34846 }
34847 scon := ssa.AuxToSym(v_0.Aux)
34848 v_0_0 := v_0.Args[0]
34849 if v_0_0.Op != ssaop.OpSB {
34850 break
34851 }
34852 sptr := v.Args[1]
34853 v_2 := v.Args[2]
34854 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 1 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon)) {
34855 break
34856 }
34857 v.Reset(ssaop.OpMakeResult)
34858 v0 := b.NewValue0(v.Pos, ssaop.OpEq8, typ.Bool)
34859 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
34860 v1.AddArg2(sptr, mem)
34861 v2 := b.NewValue0(v.Pos, ssaop.OpConst8, typ.Int8)
34862 v2.AuxInt = ssa.Int8ToAuxInt(int8(ssa.Read8(scon, 0)))
34863 v0.AddArg2(v1, v2)
34864 v.AddArg2(v0, mem)
34865 return true
34866 }
34867
34868
34869
34870 for {
34871 if len(v.Args) != 4 {
34872 break
34873 }
34874 callAux := ssa.AuxToCall(v.Aux)
34875 mem := v.Args[3]
34876 sptr := v.Args[0]
34877 v_1 := v.Args[1]
34878 if v_1.Op != ssaop.OpAddr {
34879 break
34880 }
34881 scon := ssa.AuxToSym(v_1.Aux)
34882 v_1_0 := v_1.Args[0]
34883 if v_1_0.Op != ssaop.OpSB {
34884 break
34885 }
34886 v_2 := v.Args[2]
34887 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 2 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
34888 break
34889 }
34890 v.Reset(ssaop.OpMakeResult)
34891 v0 := b.NewValue0(v.Pos, ssaop.OpEq16, typ.Bool)
34892 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
34893 v1.AddArg2(sptr, mem)
34894 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, typ.Int16)
34895 v2.AuxInt = ssa.Int16ToAuxInt(int16(ssa.Read16(scon, 0, config.Ctxt.Arch.ByteOrder)))
34896 v0.AddArg2(v1, v2)
34897 v.AddArg2(v0, mem)
34898 return true
34899 }
34900
34901
34902
34903 for {
34904 if len(v.Args) != 4 {
34905 break
34906 }
34907 callAux := ssa.AuxToCall(v.Aux)
34908 mem := v.Args[3]
34909 v_0 := v.Args[0]
34910 if v_0.Op != ssaop.OpAddr {
34911 break
34912 }
34913 scon := ssa.AuxToSym(v_0.Aux)
34914 v_0_0 := v_0.Args[0]
34915 if v_0_0.Op != ssaop.OpSB {
34916 break
34917 }
34918 sptr := v.Args[1]
34919 v_2 := v.Args[2]
34920 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 2 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
34921 break
34922 }
34923 v.Reset(ssaop.OpMakeResult)
34924 v0 := b.NewValue0(v.Pos, ssaop.OpEq16, typ.Bool)
34925 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
34926 v1.AddArg2(sptr, mem)
34927 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, typ.Int16)
34928 v2.AuxInt = ssa.Int16ToAuxInt(int16(ssa.Read16(scon, 0, config.Ctxt.Arch.ByteOrder)))
34929 v0.AddArg2(v1, v2)
34930 v.AddArg2(v0, mem)
34931 return true
34932 }
34933
34934
34935
34936 for {
34937 if len(v.Args) != 4 {
34938 break
34939 }
34940 callAux := ssa.AuxToCall(v.Aux)
34941 mem := v.Args[3]
34942 sptr := v.Args[0]
34943 v_1 := v.Args[1]
34944 if v_1.Op != ssaop.OpAddr {
34945 break
34946 }
34947 scon := ssa.AuxToSym(v_1.Aux)
34948 v_1_0 := v_1.Args[0]
34949 if v_1_0.Op != ssaop.OpSB {
34950 break
34951 }
34952 v_2 := v.Args[2]
34953 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 4 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
34954 break
34955 }
34956 v.Reset(ssaop.OpMakeResult)
34957 v0 := b.NewValue0(v.Pos, ssaop.OpEq32, typ.Bool)
34958 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
34959 v1.AddArg2(sptr, mem)
34960 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
34961 v2.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)))
34962 v0.AddArg2(v1, v2)
34963 v.AddArg2(v0, mem)
34964 return true
34965 }
34966
34967
34968
34969 for {
34970 if len(v.Args) != 4 {
34971 break
34972 }
34973 callAux := ssa.AuxToCall(v.Aux)
34974 mem := v.Args[3]
34975 v_0 := v.Args[0]
34976 if v_0.Op != ssaop.OpAddr {
34977 break
34978 }
34979 scon := ssa.AuxToSym(v_0.Aux)
34980 v_0_0 := v_0.Args[0]
34981 if v_0_0.Op != ssaop.OpSB {
34982 break
34983 }
34984 sptr := v.Args[1]
34985 v_2 := v.Args[2]
34986 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 4 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
34987 break
34988 }
34989 v.Reset(ssaop.OpMakeResult)
34990 v0 := b.NewValue0(v.Pos, ssaop.OpEq32, typ.Bool)
34991 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
34992 v1.AddArg2(sptr, mem)
34993 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
34994 v2.AuxInt = ssa.Int32ToAuxInt(int32(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)))
34995 v0.AddArg2(v1, v2)
34996 v.AddArg2(v0, mem)
34997 return true
34998 }
34999
35000
35001
35002 for {
35003 if len(v.Args) != 4 {
35004 break
35005 }
35006 callAux := ssa.AuxToCall(v.Aux)
35007 mem := v.Args[3]
35008 sptr := v.Args[0]
35009 v_1 := v.Args[1]
35010 if v_1.Op != ssaop.OpAddr {
35011 break
35012 }
35013 scon := ssa.AuxToSym(v_1.Aux)
35014 v_1_0 := v_1.Args[0]
35015 if v_1_0.Op != ssaop.OpSB {
35016 break
35017 }
35018 v_2 := v.Args[2]
35019 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 8 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
35020 break
35021 }
35022 v.Reset(ssaop.OpMakeResult)
35023 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35024 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int64)
35025 v1.AddArg2(sptr, mem)
35026 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35027 v2.AuxInt = ssa.Int64ToAuxInt(int64(ssa.Read64(scon, 0, config.Ctxt.Arch.ByteOrder)))
35028 v0.AddArg2(v1, v2)
35029 v.AddArg2(v0, mem)
35030 return true
35031 }
35032
35033
35034
35035 for {
35036 if len(v.Args) != 4 {
35037 break
35038 }
35039 callAux := ssa.AuxToCall(v.Aux)
35040 mem := v.Args[3]
35041 v_0 := v.Args[0]
35042 if v_0.Op != ssaop.OpAddr {
35043 break
35044 }
35045 scon := ssa.AuxToSym(v_0.Aux)
35046 v_0_0 := v_0.Args[0]
35047 if v_0_0.Op != ssaop.OpSB {
35048 break
35049 }
35050 sptr := v.Args[1]
35051 v_2 := v.Args[2]
35052 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 8 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
35053 break
35054 }
35055 v.Reset(ssaop.OpMakeResult)
35056 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35057 v1 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int64)
35058 v1.AddArg2(sptr, mem)
35059 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35060 v2.AuxInt = ssa.Int64ToAuxInt(int64(ssa.Read64(scon, 0, config.Ctxt.Arch.ByteOrder)))
35061 v0.AddArg2(v1, v2)
35062 v.AddArg2(v0, mem)
35063 return true
35064 }
35065
35066
35067
35068 for {
35069 if len(v.Args) != 4 {
35070 break
35071 }
35072 callAux := ssa.AuxToCall(v.Aux)
35073 mem := v.Args[3]
35074 sptr := v.Args[0]
35075 v_1 := v.Args[1]
35076 if v_1.Op != ssaop.OpAddr {
35077 break
35078 }
35079 scon := ssa.AuxToSym(v_1.Aux)
35080 v_1_0 := v_1.Args[0]
35081 if v_1_0.Op != ssaop.OpSB {
35082 break
35083 }
35084 v_2 := v.Args[2]
35085 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 3 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
35086 break
35087 }
35088 v.Reset(ssaop.OpMakeResult)
35089 v0 := b.NewValue0(v.Pos, ssaop.OpEq32, typ.Bool)
35090 v1 := b.NewValue0(v.Pos, ssaop.OpOr32, typ.Int32)
35091 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.Int32)
35092 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
35093 v3.AddArg2(sptr, mem)
35094 v2.AddArg(v3)
35095 v4 := b.NewValue0(v.Pos, ssaop.OpLsh32x32, typ.Int32)
35096 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.Int32)
35097 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
35098 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35099 v7.AuxInt = ssa.Int64ToAuxInt(2)
35100 v7.AddArg(sptr)
35101 v6.AddArg2(v7, mem)
35102 v5.AddArg(v6)
35103 v8 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35104 v8.AuxInt = ssa.Int32ToAuxInt(16)
35105 v4.AddArg2(v5, v8)
35106 v1.AddArg2(v2, v4)
35107 v9 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35108 v9.AuxInt = ssa.Int32ToAuxInt(int32(uint32(ssa.Read16(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint32(ssa.Read8(scon, 2)) << 16)))
35109 v0.AddArg2(v1, v9)
35110 v.AddArg2(v0, mem)
35111 return true
35112 }
35113
35114
35115
35116 for {
35117 if len(v.Args) != 4 {
35118 break
35119 }
35120 callAux := ssa.AuxToCall(v.Aux)
35121 mem := v.Args[3]
35122 v_0 := v.Args[0]
35123 if v_0.Op != ssaop.OpAddr {
35124 break
35125 }
35126 scon := ssa.AuxToSym(v_0.Aux)
35127 v_0_0 := v_0.Args[0]
35128 if v_0_0.Op != ssaop.OpSB {
35129 break
35130 }
35131 sptr := v.Args[1]
35132 v_2 := v.Args[2]
35133 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 3 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config)) {
35134 break
35135 }
35136 v.Reset(ssaop.OpMakeResult)
35137 v0 := b.NewValue0(v.Pos, ssaop.OpEq32, typ.Bool)
35138 v1 := b.NewValue0(v.Pos, ssaop.OpOr32, typ.Int32)
35139 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to32, typ.Int32)
35140 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
35141 v3.AddArg2(sptr, mem)
35142 v2.AddArg(v3)
35143 v4 := b.NewValue0(v.Pos, ssaop.OpLsh32x32, typ.Int32)
35144 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.Int32)
35145 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
35146 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35147 v7.AuxInt = ssa.Int64ToAuxInt(2)
35148 v7.AddArg(sptr)
35149 v6.AddArg2(v7, mem)
35150 v5.AddArg(v6)
35151 v8 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35152 v8.AuxInt = ssa.Int32ToAuxInt(16)
35153 v4.AddArg2(v5, v8)
35154 v1.AddArg2(v2, v4)
35155 v9 := b.NewValue0(v.Pos, ssaop.OpConst32, typ.Int32)
35156 v9.AuxInt = ssa.Int32ToAuxInt(int32(uint32(ssa.Read16(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint32(ssa.Read8(scon, 2)) << 16)))
35157 v0.AddArg2(v1, v9)
35158 v.AddArg2(v0, mem)
35159 return true
35160 }
35161
35162
35163
35164 for {
35165 if len(v.Args) != 4 {
35166 break
35167 }
35168 callAux := ssa.AuxToCall(v.Aux)
35169 mem := v.Args[3]
35170 sptr := v.Args[0]
35171 v_1 := v.Args[1]
35172 if v_1.Op != ssaop.OpAddr {
35173 break
35174 }
35175 scon := ssa.AuxToSym(v_1.Aux)
35176 v_1_0 := v_1.Args[0]
35177 if v_1_0.Op != ssaop.OpSB {
35178 break
35179 }
35180 v_2 := v.Args[2]
35181 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 5 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
35182 break
35183 }
35184 v.Reset(ssaop.OpMakeResult)
35185 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35186 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
35187 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35188 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35189 v3.AddArg2(sptr, mem)
35190 v2.AddArg(v3)
35191 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
35192 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, typ.Int64)
35193 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
35194 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35195 v7.AuxInt = ssa.Int64ToAuxInt(4)
35196 v7.AddArg(sptr)
35197 v6.AddArg2(v7, mem)
35198 v5.AddArg(v6)
35199 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35200 v8.AuxInt = ssa.Int64ToAuxInt(32)
35201 v4.AddArg2(v5, v8)
35202 v1.AddArg2(v2, v4)
35203 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35204 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read8(scon, 4)) << 32)))
35205 v0.AddArg2(v1, v9)
35206 v.AddArg2(v0, mem)
35207 return true
35208 }
35209
35210
35211
35212 for {
35213 if len(v.Args) != 4 {
35214 break
35215 }
35216 callAux := ssa.AuxToCall(v.Aux)
35217 mem := v.Args[3]
35218 v_0 := v.Args[0]
35219 if v_0.Op != ssaop.OpAddr {
35220 break
35221 }
35222 scon := ssa.AuxToSym(v_0.Aux)
35223 v_0_0 := v_0.Args[0]
35224 if v_0_0.Op != ssaop.OpSB {
35225 break
35226 }
35227 sptr := v.Args[1]
35228 v_2 := v.Args[2]
35229 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 5 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
35230 break
35231 }
35232 v.Reset(ssaop.OpMakeResult)
35233 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35234 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
35235 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35236 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35237 v3.AddArg2(sptr, mem)
35238 v2.AddArg(v3)
35239 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
35240 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, typ.Int64)
35241 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int8)
35242 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35243 v7.AuxInt = ssa.Int64ToAuxInt(4)
35244 v7.AddArg(sptr)
35245 v6.AddArg2(v7, mem)
35246 v5.AddArg(v6)
35247 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35248 v8.AuxInt = ssa.Int64ToAuxInt(32)
35249 v4.AddArg2(v5, v8)
35250 v1.AddArg2(v2, v4)
35251 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35252 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read8(scon, 4)) << 32)))
35253 v0.AddArg2(v1, v9)
35254 v.AddArg2(v0, mem)
35255 return true
35256 }
35257
35258
35259
35260 for {
35261 if len(v.Args) != 4 {
35262 break
35263 }
35264 callAux := ssa.AuxToCall(v.Aux)
35265 mem := v.Args[3]
35266 sptr := v.Args[0]
35267 v_1 := v.Args[1]
35268 if v_1.Op != ssaop.OpAddr {
35269 break
35270 }
35271 scon := ssa.AuxToSym(v_1.Aux)
35272 v_1_0 := v_1.Args[0]
35273 if v_1_0.Op != ssaop.OpSB {
35274 break
35275 }
35276 v_2 := v.Args[2]
35277 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 6 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
35278 break
35279 }
35280 v.Reset(ssaop.OpMakeResult)
35281 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35282 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
35283 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35284 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35285 v3.AddArg2(sptr, mem)
35286 v2.AddArg(v3)
35287 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
35288 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to64, typ.Int64)
35289 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
35290 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35291 v7.AuxInt = ssa.Int64ToAuxInt(4)
35292 v7.AddArg(sptr)
35293 v6.AddArg2(v7, mem)
35294 v5.AddArg(v6)
35295 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35296 v8.AuxInt = ssa.Int64ToAuxInt(32)
35297 v4.AddArg2(v5, v8)
35298 v1.AddArg2(v2, v4)
35299 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35300 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read16(scon, 4, config.Ctxt.Arch.ByteOrder)) << 32)))
35301 v0.AddArg2(v1, v9)
35302 v.AddArg2(v0, mem)
35303 return true
35304 }
35305
35306
35307
35308 for {
35309 if len(v.Args) != 4 {
35310 break
35311 }
35312 callAux := ssa.AuxToCall(v.Aux)
35313 mem := v.Args[3]
35314 v_0 := v.Args[0]
35315 if v_0.Op != ssaop.OpAddr {
35316 break
35317 }
35318 scon := ssa.AuxToSym(v_0.Aux)
35319 v_0_0 := v_0.Args[0]
35320 if v_0_0.Op != ssaop.OpSB {
35321 break
35322 }
35323 sptr := v.Args[1]
35324 v_2 := v.Args[2]
35325 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 6 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
35326 break
35327 }
35328 v.Reset(ssaop.OpMakeResult)
35329 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35330 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
35331 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35332 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35333 v3.AddArg2(sptr, mem)
35334 v2.AddArg(v3)
35335 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
35336 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt16to64, typ.Int64)
35337 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int16)
35338 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35339 v7.AuxInt = ssa.Int64ToAuxInt(4)
35340 v7.AddArg(sptr)
35341 v6.AddArg2(v7, mem)
35342 v5.AddArg(v6)
35343 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35344 v8.AuxInt = ssa.Int64ToAuxInt(32)
35345 v4.AddArg2(v5, v8)
35346 v1.AddArg2(v2, v4)
35347 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35348 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read16(scon, 4, config.Ctxt.Arch.ByteOrder)) << 32)))
35349 v0.AddArg2(v1, v9)
35350 v.AddArg2(v0, mem)
35351 return true
35352 }
35353
35354
35355
35356 for {
35357 if len(v.Args) != 4 {
35358 break
35359 }
35360 callAux := ssa.AuxToCall(v.Aux)
35361 mem := v.Args[3]
35362 sptr := v.Args[0]
35363 v_1 := v.Args[1]
35364 if v_1.Op != ssaop.OpAddr {
35365 break
35366 }
35367 scon := ssa.AuxToSym(v_1.Aux)
35368 v_1_0 := v_1.Args[0]
35369 if v_1_0.Op != ssaop.OpSB {
35370 break
35371 }
35372 v_2 := v.Args[2]
35373 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 7 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
35374 break
35375 }
35376 v.Reset(ssaop.OpMakeResult)
35377 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35378 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
35379 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35380 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35381 v3.AddArg2(sptr, mem)
35382 v2.AddArg(v3)
35383 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
35384 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35385 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35386 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35387 v7.AuxInt = ssa.Int64ToAuxInt(3)
35388 v7.AddArg(sptr)
35389 v6.AddArg2(v7, mem)
35390 v5.AddArg(v6)
35391 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35392 v8.AuxInt = ssa.Int64ToAuxInt(32)
35393 v4.AddArg2(v5, v8)
35394 v1.AddArg2(v2, v4)
35395 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35396 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read32(scon, 3, config.Ctxt.Arch.ByteOrder)) << 32)))
35397 v0.AddArg2(v1, v9)
35398 v.AddArg2(v0, mem)
35399 return true
35400 }
35401
35402
35403
35404 for {
35405 if len(v.Args) != 4 {
35406 break
35407 }
35408 callAux := ssa.AuxToCall(v.Aux)
35409 mem := v.Args[3]
35410 v_0 := v.Args[0]
35411 if v_0.Op != ssaop.OpAddr {
35412 break
35413 }
35414 scon := ssa.AuxToSym(v_0.Aux)
35415 v_0_0 := v_0.Args[0]
35416 if v_0_0.Op != ssaop.OpSB {
35417 break
35418 }
35419 sptr := v.Args[1]
35420 v_2 := v.Args[2]
35421 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 7 || !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.SymIsRO(scon) && canLoadUnaligned(config) && config.PtrSize == 8) {
35422 break
35423 }
35424 v.Reset(ssaop.OpMakeResult)
35425 v0 := b.NewValue0(v.Pos, ssaop.OpEq64, typ.Bool)
35426 v1 := b.NewValue0(v.Pos, ssaop.OpOr64, typ.Int64)
35427 v2 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35428 v3 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35429 v3.AddArg2(sptr, mem)
35430 v2.AddArg(v3)
35431 v4 := b.NewValue0(v.Pos, ssaop.OpLsh64x64, typ.Int64)
35432 v5 := b.NewValue0(v.Pos, ssaop.OpZeroExt32to64, typ.Int64)
35433 v6 := b.NewValue0(v.Pos, ssaop.OpLoad, typ.Int32)
35434 v7 := b.NewValue0(v.Pos, ssaop.OpOffPtr, typ.BytePtr)
35435 v7.AuxInt = ssa.Int64ToAuxInt(3)
35436 v7.AddArg(sptr)
35437 v6.AddArg2(v7, mem)
35438 v5.AddArg(v6)
35439 v8 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35440 v8.AuxInt = ssa.Int64ToAuxInt(32)
35441 v4.AddArg2(v5, v8)
35442 v1.AddArg2(v2, v4)
35443 v9 := b.NewValue0(v.Pos, ssaop.OpConst64, typ.Int64)
35444 v9.AuxInt = ssa.Int64ToAuxInt(int64(uint64(ssa.Read32(scon, 0, config.Ctxt.Arch.ByteOrder)) | (uint64(ssa.Read32(scon, 3, config.Ctxt.Arch.ByteOrder)) << 32)))
35445 v0.AddArg2(v1, v9)
35446 v.AddArg2(v0, mem)
35447 return true
35448 }
35449
35450
35451
35452 for {
35453 if len(v.Args) != 4 {
35454 break
35455 }
35456 callAux := ssa.AuxToCall(v.Aux)
35457 mem := v.Args[3]
35458 v_2 := v.Args[2]
35459 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 0 || !(ssa.IsSameCall(callAux, "runtime.memequal")) {
35460 break
35461 }
35462 v.Reset(ssaop.OpMakeResult)
35463 v0 := b.NewValue0(v.Pos, ssaop.OpConstBool, typ.Bool)
35464 v0.AuxInt = ssa.BoolToAuxInt(true)
35465 v.AddArg2(v0, mem)
35466 return true
35467 }
35468
35469
35470
35471 for {
35472 if len(v.Args) != 4 {
35473 break
35474 }
35475 callAux := ssa.AuxToCall(v.Aux)
35476 mem := v.Args[3]
35477 p := v.Args[0]
35478 q := v.Args[1]
35479 if !(ssa.IsSameCall(callAux, "runtime.memequal") && ssa.IsSamePtr(p, q)) {
35480 break
35481 }
35482 v.Reset(ssaop.OpMakeResult)
35483 v0 := b.NewValue0(v.Pos, ssaop.OpConstBool, typ.Bool)
35484 v0.AuxInt = ssa.BoolToAuxInt(true)
35485 v.AddArg2(v0, mem)
35486 return true
35487 }
35488
35489
35490
35491 for {
35492 if len(v.Args) != 4 {
35493 break
35494 }
35495 callAux := ssa.AuxToCall(v.Aux)
35496 mem := v.Args[3]
35497 v_1 := v.Args[1]
35498 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 0 {
35499 break
35500 }
35501 v_2 := v.Args[2]
35502 if v_2.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_2.AuxInt) != 0 || !(ssa.IsSameCall(callAux, "runtime.makeslice")) {
35503 break
35504 }
35505 v.Reset(ssaop.OpMakeResult)
35506 v0 := b.NewValue0(v.Pos, ssaop.OpAddr, v.Type.FieldType(0))
35507 v0.Aux = ssa.SymToAux(ir.Syms.Zerobase)
35508 v1 := b.NewValue0(v.Pos, ssaop.OpSB, typ.Uintptr)
35509 v0.AddArg(v1)
35510 v.AddArg2(v0, mem)
35511 return true
35512 }
35513
35514
35515
35516 for {
35517 if len(v.Args) != 4 {
35518 break
35519 }
35520 callAux := ssa.AuxToCall(v.Aux)
35521 mem := v.Args[3]
35522 v_1 := v.Args[1]
35523 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != 0 {
35524 break
35525 }
35526 v_2 := v.Args[2]
35527 if v_2.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_2.AuxInt) != 0 || !(ssa.IsSameCall(callAux, "runtime.makeslice")) {
35528 break
35529 }
35530 v.Reset(ssaop.OpMakeResult)
35531 v0 := b.NewValue0(v.Pos, ssaop.OpAddr, v.Type.FieldType(0))
35532 v0.Aux = ssa.SymToAux(ir.Syms.Zerobase)
35533 v1 := b.NewValue0(v.Pos, ssaop.OpSB, typ.Uintptr)
35534 v0.AddArg(v1)
35535 v.AddArg2(v0, mem)
35536 return true
35537 }
35538
35539
35540
35541 for {
35542 if len(v.Args) != 4 {
35543 break
35544 }
35545 f := ssa.AuxToCall(v.Aux)
35546 mem := v.Args[3]
35547 typ_ := v.Args[0]
35548 x := v.Args[1]
35549 y := v.Args[2]
35550 if !(ssa.IsSameCall(f, "runtime.efaceeq") && isDirectAndComparableType(typ_) && ssa.Clobber(v)) {
35551 break
35552 }
35553 v.Reset(ssaop.OpMakeResult)
35554 v0 := b.NewValue0(v.Pos, ssaop.OpEqPtr, typ.Bool)
35555 v0.AddArg2(x, y)
35556 v.AddArg2(v0, mem)
35557 return true
35558 }
35559
35560
35561
35562 for {
35563 if len(v.Args) != 4 {
35564 break
35565 }
35566 f := ssa.AuxToCall(v.Aux)
35567 mem := v.Args[3]
35568 itab := v.Args[0]
35569 x := v.Args[1]
35570 y := v.Args[2]
35571 if !(ssa.IsSameCall(f, "runtime.ifaceeq") && isDirectAndComparableIface(itab) && ssa.Clobber(v)) {
35572 break
35573 }
35574 v.Reset(ssaop.OpMakeResult)
35575 v0 := b.NewValue0(v.Pos, ssaop.OpEqPtr, typ.Bool)
35576 v0.AddArg2(x, y)
35577 v.AddArg2(v0, mem)
35578 return true
35579 }
35580
35581
35582
35583 for {
35584 if len(v.Args) != 4 {
35585 break
35586 }
35587 argsize := ssa.AuxIntToInt32(v.AuxInt)
35588 f := ssa.AuxToCall(v.Aux)
35589 _ = v.Args[3]
35590 typ_ := v.Args[0]
35591 map_ := v.Args[1]
35592 key := v.Args[2]
35593 if key.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(key.AuxInt) != 0 {
35594 break
35595 }
35596 sbts := key.Args[0]
35597 if sbts.Op != ssaop.OpStaticLECall || len(sbts.Args) != 4 {
35598 break
35599 }
35600 g := ssa.AuxToCall(sbts.Aux)
35601 mem := sbts.Args[3]
35602 ptr := sbts.Args[1]
35603 len := sbts.Args[2]
35604 m := v.Args[3]
35605 if m.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(m.AuxInt) != 1 || sbts != m.Args[0] || !((ssa.IsSameCall(f, "runtime.mapaccess1_faststr") || ssa.IsSameCall(f, "runtime.mapaccess2_faststr") || ssa.IsSameCall(f, "runtime.mapdelete_faststr")) && ssa.IsSameCall(g, "runtime.slicebytetostring") && key.Uses == 1 && sbts.Uses == 2 && resetCopy(m, mem) && ssa.Clobber(sbts) && ssa.Clobber(key)) {
35606 break
35607 }
35608 v.Reset(ssaop.OpStaticLECall)
35609 v.AuxInt = ssa.Int32ToAuxInt(argsize)
35610 v.Aux = ssa.CallToAux(f)
35611 v0 := b.NewValue0(v.Pos, ssaop.OpStringMake, typ.String)
35612 v0.AddArg2(ptr, len)
35613 v.AddArg4(typ_, map_, v0, mem)
35614 return true
35615 }
35616
35617
35618
35619 for {
35620 if len(v.Args) != 3 {
35621 break
35622 }
35623 argsize := ssa.AuxIntToInt32(v.AuxInt)
35624 f := ssa.AuxToCall(v.Aux)
35625 _ = v.Args[2]
35626 dict_ := v.Args[0]
35627 key := v.Args[1]
35628 if key.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(key.AuxInt) != 0 {
35629 break
35630 }
35631 sbts := key.Args[0]
35632 if sbts.Op != ssaop.OpStaticLECall || len(sbts.Args) != 4 {
35633 break
35634 }
35635 g := ssa.AuxToCall(sbts.Aux)
35636 mem := sbts.Args[3]
35637 ptr := sbts.Args[1]
35638 len := sbts.Args[2]
35639 m := v.Args[2]
35640 if m.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(m.AuxInt) != 1 || sbts != m.Args[0] || !(ssa.IsSameCall(f, "unique.Make[go.shape.string]") && ssa.IsSameCall(g, "runtime.slicebytetostring") && key.Uses == 1 && sbts.Uses == 2 && resetCopy(m, mem) && ssa.Clobber(sbts) && ssa.Clobber(key)) {
35641 break
35642 }
35643 v.Reset(ssaop.OpStaticLECall)
35644 v.AuxInt = ssa.Int32ToAuxInt(argsize)
35645 v.Aux = ssa.CallToAux(f)
35646 v0 := b.NewValue0(v.Pos, ssaop.OpStringMake, typ.String)
35647 v0.AddArg2(ptr, len)
35648 v.AddArg3(dict_, v0, mem)
35649 return true
35650 }
35651 return false
35652 }
35653 func rewriteValue_OpStore(v *ssa.Value) bool {
35654 v_2 := v.Args[2]
35655 v_1 := v.Args[1]
35656 v_0 := v.Args[0]
35657 b := v.Block
35658
35659
35660
35661 for {
35662 t1 := ssa.AuxToType(v.Aux)
35663 p1 := v_0
35664 if v_1.Op != ssaop.OpLoad {
35665 break
35666 }
35667 t2 := v_1.Type
35668 mem := v_1.Args[1]
35669 p2 := v_1.Args[0]
35670 if mem != v_2 || !(ssa.IsSamePtr(p1, p2) && t2.Size() == t1.Size()) {
35671 break
35672 }
35673 v.CopyOf(mem)
35674 return true
35675 }
35676
35677
35678
35679 for {
35680 t1 := ssa.AuxToType(v.Aux)
35681 p1 := v_0
35682 if v_1.Op != ssaop.OpLoad {
35683 break
35684 }
35685 t2 := v_1.Type
35686 oldmem := v_1.Args[1]
35687 p2 := v_1.Args[0]
35688 mem := v_2
35689 if mem.Op != ssaop.OpStore {
35690 break
35691 }
35692 t3 := ssa.AuxToType(mem.Aux)
35693 _ = mem.Args[2]
35694 p3 := mem.Args[0]
35695 if oldmem != mem.Args[2] || !(ssa.IsSamePtr(p1, p2) && t2.Size() == t1.Size() && ssa.Disjoint(p1, t1, p3, t3)) {
35696 break
35697 }
35698 v.CopyOf(mem)
35699 return true
35700 }
35701
35702
35703
35704 for {
35705 t1 := ssa.AuxToType(v.Aux)
35706 p1 := v_0
35707 if v_1.Op != ssaop.OpLoad {
35708 break
35709 }
35710 t2 := v_1.Type
35711 oldmem := v_1.Args[1]
35712 p2 := v_1.Args[0]
35713 mem := v_2
35714 if mem.Op != ssaop.OpStore {
35715 break
35716 }
35717 t3 := ssa.AuxToType(mem.Aux)
35718 _ = mem.Args[2]
35719 p3 := mem.Args[0]
35720 mem_2 := mem.Args[2]
35721 if mem_2.Op != ssaop.OpStore {
35722 break
35723 }
35724 t4 := ssa.AuxToType(mem_2.Aux)
35725 _ = mem_2.Args[2]
35726 p4 := mem_2.Args[0]
35727 if oldmem != mem_2.Args[2] || !(ssa.IsSamePtr(p1, p2) && t2.Size() == t1.Size() && ssa.Disjoint(p1, t1, p3, t3) && ssa.Disjoint(p1, t1, p4, t4)) {
35728 break
35729 }
35730 v.CopyOf(mem)
35731 return true
35732 }
35733
35734
35735
35736 for {
35737 t1 := ssa.AuxToType(v.Aux)
35738 p1 := v_0
35739 if v_1.Op != ssaop.OpLoad {
35740 break
35741 }
35742 t2 := v_1.Type
35743 oldmem := v_1.Args[1]
35744 p2 := v_1.Args[0]
35745 mem := v_2
35746 if mem.Op != ssaop.OpStore {
35747 break
35748 }
35749 t3 := ssa.AuxToType(mem.Aux)
35750 _ = mem.Args[2]
35751 p3 := mem.Args[0]
35752 mem_2 := mem.Args[2]
35753 if mem_2.Op != ssaop.OpStore {
35754 break
35755 }
35756 t4 := ssa.AuxToType(mem_2.Aux)
35757 _ = mem_2.Args[2]
35758 p4 := mem_2.Args[0]
35759 mem_2_2 := mem_2.Args[2]
35760 if mem_2_2.Op != ssaop.OpStore {
35761 break
35762 }
35763 t5 := ssa.AuxToType(mem_2_2.Aux)
35764 _ = mem_2_2.Args[2]
35765 p5 := mem_2_2.Args[0]
35766 if oldmem != mem_2_2.Args[2] || !(ssa.IsSamePtr(p1, p2) && t2.Size() == t1.Size() && ssa.Disjoint(p1, t1, p3, t3) && ssa.Disjoint(p1, t1, p4, t4) && ssa.Disjoint(p1, t1, p5, t5)) {
35767 break
35768 }
35769 v.CopyOf(mem)
35770 return true
35771 }
35772
35773
35774
35775 for {
35776 t := ssa.AuxToType(v.Aux)
35777 if v_0.Op != ssaop.OpOffPtr {
35778 break
35779 }
35780 o := ssa.AuxIntToInt64(v_0.AuxInt)
35781 p1 := v_0.Args[0]
35782 x := v_1
35783 mem := v_2
35784 if mem.Op != ssaop.OpZero {
35785 break
35786 }
35787 n := ssa.AuxIntToInt64(mem.AuxInt)
35788 p2 := mem.Args[0]
35789 if !(ssa.IsConstZero(x) && o >= 0 && t.Size()+o <= n && ssa.IsSamePtr(p1, p2)) {
35790 break
35791 }
35792 v.CopyOf(mem)
35793 return true
35794 }
35795
35796
35797
35798 for {
35799 t1 := ssa.AuxToType(v.Aux)
35800 op1 := v_0
35801 if op1.Op != ssaop.OpOffPtr {
35802 break
35803 }
35804 o1 := ssa.AuxIntToInt64(op1.AuxInt)
35805 p1 := op1.Args[0]
35806 x := v_1
35807 mem := v_2
35808 if mem.Op != ssaop.OpStore {
35809 break
35810 }
35811 t2 := ssa.AuxToType(mem.Aux)
35812 _ = mem.Args[2]
35813 p2 := mem.Args[0]
35814 mem_2 := mem.Args[2]
35815 if mem_2.Op != ssaop.OpZero {
35816 break
35817 }
35818 n := ssa.AuxIntToInt64(mem_2.AuxInt)
35819 p3 := mem_2.Args[0]
35820 if !(ssa.IsConstZero(x) && o1 >= 0 && t1.Size()+o1 <= n && ssa.IsSamePtr(p1, p3) && ssa.Disjoint(op1, t1, p2, t2)) {
35821 break
35822 }
35823 v.CopyOf(mem)
35824 return true
35825 }
35826
35827
35828
35829 for {
35830 t1 := ssa.AuxToType(v.Aux)
35831 op1 := v_0
35832 if op1.Op != ssaop.OpOffPtr {
35833 break
35834 }
35835 o1 := ssa.AuxIntToInt64(op1.AuxInt)
35836 p1 := op1.Args[0]
35837 x := v_1
35838 mem := v_2
35839 if mem.Op != ssaop.OpStore {
35840 break
35841 }
35842 t2 := ssa.AuxToType(mem.Aux)
35843 _ = mem.Args[2]
35844 p2 := mem.Args[0]
35845 mem_2 := mem.Args[2]
35846 if mem_2.Op != ssaop.OpStore {
35847 break
35848 }
35849 t3 := ssa.AuxToType(mem_2.Aux)
35850 _ = mem_2.Args[2]
35851 p3 := mem_2.Args[0]
35852 mem_2_2 := mem_2.Args[2]
35853 if mem_2_2.Op != ssaop.OpZero {
35854 break
35855 }
35856 n := ssa.AuxIntToInt64(mem_2_2.AuxInt)
35857 p4 := mem_2_2.Args[0]
35858 if !(ssa.IsConstZero(x) && o1 >= 0 && t1.Size()+o1 <= n && ssa.IsSamePtr(p1, p4) && ssa.Disjoint(op1, t1, p2, t2) && ssa.Disjoint(op1, t1, p3, t3)) {
35859 break
35860 }
35861 v.CopyOf(mem)
35862 return true
35863 }
35864
35865
35866
35867 for {
35868 t1 := ssa.AuxToType(v.Aux)
35869 op1 := v_0
35870 if op1.Op != ssaop.OpOffPtr {
35871 break
35872 }
35873 o1 := ssa.AuxIntToInt64(op1.AuxInt)
35874 p1 := op1.Args[0]
35875 x := v_1
35876 mem := v_2
35877 if mem.Op != ssaop.OpStore {
35878 break
35879 }
35880 t2 := ssa.AuxToType(mem.Aux)
35881 _ = mem.Args[2]
35882 p2 := mem.Args[0]
35883 mem_2 := mem.Args[2]
35884 if mem_2.Op != ssaop.OpStore {
35885 break
35886 }
35887 t3 := ssa.AuxToType(mem_2.Aux)
35888 _ = mem_2.Args[2]
35889 p3 := mem_2.Args[0]
35890 mem_2_2 := mem_2.Args[2]
35891 if mem_2_2.Op != ssaop.OpStore {
35892 break
35893 }
35894 t4 := ssa.AuxToType(mem_2_2.Aux)
35895 _ = mem_2_2.Args[2]
35896 p4 := mem_2_2.Args[0]
35897 mem_2_2_2 := mem_2_2.Args[2]
35898 if mem_2_2_2.Op != ssaop.OpZero {
35899 break
35900 }
35901 n := ssa.AuxIntToInt64(mem_2_2_2.AuxInt)
35902 p5 := mem_2_2_2.Args[0]
35903 if !(ssa.IsConstZero(x) && o1 >= 0 && t1.Size()+o1 <= n && ssa.IsSamePtr(p1, p5) && ssa.Disjoint(op1, t1, p2, t2) && ssa.Disjoint(op1, t1, p3, t3) && ssa.Disjoint(op1, t1, p4, t4)) {
35904 break
35905 }
35906 v.CopyOf(mem)
35907 return true
35908 }
35909
35910
35911 for {
35912 if v_1.Op != ssaop.OpStructMake {
35913 break
35914 }
35915 v.CopyOf(ssa.RewriteStructStore(v))
35916 return true
35917 }
35918
35919
35920
35921 for {
35922 t := ssa.AuxToType(v.Aux)
35923 dst := v_0
35924 if v_1.Op != ssaop.OpLoad {
35925 break
35926 }
35927 mem := v_1.Args[1]
35928 src := v_1.Args[0]
35929 if mem != v_2 || !(!ssa.CanSSA(t)) {
35930 break
35931 }
35932 v.Reset(ssaop.OpMove)
35933 v.AuxInt = ssa.Int64ToAuxInt(t.Size())
35934 v.Aux = ssa.TypeToAux(t)
35935 v.AddArg3(dst, src, mem)
35936 return true
35937 }
35938
35939
35940
35941 for {
35942 t := ssa.AuxToType(v.Aux)
35943 dst := v_0
35944 if v_1.Op != ssaop.OpLoad {
35945 break
35946 }
35947 mem := v_1.Args[1]
35948 src := v_1.Args[0]
35949 if v_2.Op != ssaop.OpVarDef {
35950 break
35951 }
35952 x := ssa.AuxToSym(v_2.Aux)
35953 if mem != v_2.Args[0] || !(!ssa.CanSSA(t)) {
35954 break
35955 }
35956 v.Reset(ssaop.OpMove)
35957 v.AuxInt = ssa.Int64ToAuxInt(t.Size())
35958 v.Aux = ssa.TypeToAux(t)
35959 v0 := b.NewValue0(v.Pos, ssaop.OpVarDef, types.TypeMem)
35960 v0.Aux = ssa.SymToAux(x)
35961 v0.AddArg(mem)
35962 v.AddArg3(dst, src, v0)
35963 return true
35964 }
35965
35966
35967 for {
35968 dst := v_0
35969 if v_1.Op != ssaop.OpArrayMake1 {
35970 break
35971 }
35972 e := v_1.Args[0]
35973 mem := v_2
35974 v.Reset(ssaop.OpStore)
35975 v.Aux = ssa.TypeToAux(e.Type)
35976 v.AddArg3(dst, e, mem)
35977 return true
35978 }
35979
35980
35981 for {
35982 if v_1.Op != ssaop.OpEmpty {
35983 break
35984 }
35985 mem := v_2
35986 v.CopyOf(mem)
35987 return true
35988 }
35989
35990
35991
35992 for {
35993 if v_0.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
35994 break
35995 }
35996 call := v_0.Args[0]
35997 if call.Op != ssaop.OpStaticLECall {
35998 break
35999 }
36000 x := v_1
36001 mem := v_2
36002 if mem.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(mem.AuxInt) != 1 || call != mem.Args[0] || !(ssa.IsConstZero(x) && isMalloc(call.Aux)) {
36003 break
36004 }
36005 v.CopyOf(mem)
36006 return true
36007 }
36008
36009
36010
36011 for {
36012 if v_0.Op != ssaop.OpOffPtr {
36013 break
36014 }
36015 v_0_0 := v_0.Args[0]
36016 if v_0_0.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(v_0_0.AuxInt) != 0 {
36017 break
36018 }
36019 call := v_0_0.Args[0]
36020 if call.Op != ssaop.OpStaticLECall {
36021 break
36022 }
36023 x := v_1
36024 mem := v_2
36025 if mem.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(mem.AuxInt) != 1 || call != mem.Args[0] || !(ssa.IsConstZero(x) && isMalloc(call.Aux)) {
36026 break
36027 }
36028 v.CopyOf(mem)
36029 return true
36030 }
36031
36032
36033
36034 for {
36035 t1 := ssa.AuxToType(v.Aux)
36036 op1 := v_0
36037 if op1.Op != ssaop.OpOffPtr {
36038 break
36039 }
36040 o1 := ssa.AuxIntToInt64(op1.AuxInt)
36041 p1 := op1.Args[0]
36042 d1 := v_1
36043 m2 := v_2
36044 if m2.Op != ssaop.OpStore {
36045 break
36046 }
36047 t2 := ssa.AuxToType(m2.Aux)
36048 _ = m2.Args[2]
36049 op2 := m2.Args[0]
36050 if op2.Op != ssaop.OpOffPtr || ssa.AuxIntToInt64(op2.AuxInt) != 0 {
36051 break
36052 }
36053 p2 := op2.Args[0]
36054 d2 := m2.Args[1]
36055 m3 := m2.Args[2]
36056 if m3.Op != ssaop.OpMove {
36057 break
36058 }
36059 n := ssa.AuxIntToInt64(m3.AuxInt)
36060 mem := m3.Args[2]
36061 p3 := m3.Args[0]
36062 if !(m2.Uses == 1 && m3.Uses == 1 && o1 == t2.Size() && n == t2.Size()+t1.Size() && ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.Clobber(m2, m3)) {
36063 break
36064 }
36065 v.Reset(ssaop.OpStore)
36066 v.Aux = ssa.TypeToAux(t1)
36067 v0 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36068 v0.Aux = ssa.TypeToAux(t2)
36069 v0.AddArg3(op2, d2, mem)
36070 v.AddArg3(op1, d1, v0)
36071 return true
36072 }
36073
36074
36075
36076 for {
36077 t1 := ssa.AuxToType(v.Aux)
36078 op1 := v_0
36079 if op1.Op != ssaop.OpOffPtr {
36080 break
36081 }
36082 o1 := ssa.AuxIntToInt64(op1.AuxInt)
36083 p1 := op1.Args[0]
36084 d1 := v_1
36085 m2 := v_2
36086 if m2.Op != ssaop.OpStore {
36087 break
36088 }
36089 t2 := ssa.AuxToType(m2.Aux)
36090 _ = m2.Args[2]
36091 op2 := m2.Args[0]
36092 if op2.Op != ssaop.OpOffPtr {
36093 break
36094 }
36095 o2 := ssa.AuxIntToInt64(op2.AuxInt)
36096 p2 := op2.Args[0]
36097 d2 := m2.Args[1]
36098 m3 := m2.Args[2]
36099 if m3.Op != ssaop.OpStore {
36100 break
36101 }
36102 t3 := ssa.AuxToType(m3.Aux)
36103 _ = m3.Args[2]
36104 op3 := m3.Args[0]
36105 if op3.Op != ssaop.OpOffPtr || ssa.AuxIntToInt64(op3.AuxInt) != 0 {
36106 break
36107 }
36108 p3 := op3.Args[0]
36109 d3 := m3.Args[1]
36110 m4 := m3.Args[2]
36111 if m4.Op != ssaop.OpMove {
36112 break
36113 }
36114 n := ssa.AuxIntToInt64(m4.AuxInt)
36115 mem := m4.Args[2]
36116 p4 := m4.Args[0]
36117 if !(m2.Uses == 1 && m3.Uses == 1 && m4.Uses == 1 && o2 == t3.Size() && o1-o2 == t2.Size() && n == t3.Size()+t2.Size()+t1.Size() && ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.IsSamePtr(p3, p4) && ssa.Clobber(m2, m3, m4)) {
36118 break
36119 }
36120 v.Reset(ssaop.OpStore)
36121 v.Aux = ssa.TypeToAux(t1)
36122 v0 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36123 v0.Aux = ssa.TypeToAux(t2)
36124 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36125 v1.Aux = ssa.TypeToAux(t3)
36126 v1.AddArg3(op3, d3, mem)
36127 v0.AddArg3(op2, d2, v1)
36128 v.AddArg3(op1, d1, v0)
36129 return true
36130 }
36131
36132
36133
36134 for {
36135 t1 := ssa.AuxToType(v.Aux)
36136 op1 := v_0
36137 if op1.Op != ssaop.OpOffPtr {
36138 break
36139 }
36140 o1 := ssa.AuxIntToInt64(op1.AuxInt)
36141 p1 := op1.Args[0]
36142 d1 := v_1
36143 m2 := v_2
36144 if m2.Op != ssaop.OpStore {
36145 break
36146 }
36147 t2 := ssa.AuxToType(m2.Aux)
36148 _ = m2.Args[2]
36149 op2 := m2.Args[0]
36150 if op2.Op != ssaop.OpOffPtr {
36151 break
36152 }
36153 o2 := ssa.AuxIntToInt64(op2.AuxInt)
36154 p2 := op2.Args[0]
36155 d2 := m2.Args[1]
36156 m3 := m2.Args[2]
36157 if m3.Op != ssaop.OpStore {
36158 break
36159 }
36160 t3 := ssa.AuxToType(m3.Aux)
36161 _ = m3.Args[2]
36162 op3 := m3.Args[0]
36163 if op3.Op != ssaop.OpOffPtr {
36164 break
36165 }
36166 o3 := ssa.AuxIntToInt64(op3.AuxInt)
36167 p3 := op3.Args[0]
36168 d3 := m3.Args[1]
36169 m4 := m3.Args[2]
36170 if m4.Op != ssaop.OpStore {
36171 break
36172 }
36173 t4 := ssa.AuxToType(m4.Aux)
36174 _ = m4.Args[2]
36175 op4 := m4.Args[0]
36176 if op4.Op != ssaop.OpOffPtr || ssa.AuxIntToInt64(op4.AuxInt) != 0 {
36177 break
36178 }
36179 p4 := op4.Args[0]
36180 d4 := m4.Args[1]
36181 m5 := m4.Args[2]
36182 if m5.Op != ssaop.OpMove {
36183 break
36184 }
36185 n := ssa.AuxIntToInt64(m5.AuxInt)
36186 mem := m5.Args[2]
36187 p5 := m5.Args[0]
36188 if !(m2.Uses == 1 && m3.Uses == 1 && m4.Uses == 1 && m5.Uses == 1 && o3 == t4.Size() && o2-o3 == t3.Size() && o1-o2 == t2.Size() && n == t4.Size()+t3.Size()+t2.Size()+t1.Size() && ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.IsSamePtr(p3, p4) && ssa.IsSamePtr(p4, p5) && ssa.Clobber(m2, m3, m4, m5)) {
36189 break
36190 }
36191 v.Reset(ssaop.OpStore)
36192 v.Aux = ssa.TypeToAux(t1)
36193 v0 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36194 v0.Aux = ssa.TypeToAux(t2)
36195 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36196 v1.Aux = ssa.TypeToAux(t3)
36197 v2 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36198 v2.Aux = ssa.TypeToAux(t4)
36199 v2.AddArg3(op4, d4, mem)
36200 v1.AddArg3(op3, d3, v2)
36201 v0.AddArg3(op2, d2, v1)
36202 v.AddArg3(op1, d1, v0)
36203 return true
36204 }
36205
36206
36207
36208 for {
36209 t1 := ssa.AuxToType(v.Aux)
36210 op1 := v_0
36211 if op1.Op != ssaop.OpOffPtr {
36212 break
36213 }
36214 o1 := ssa.AuxIntToInt64(op1.AuxInt)
36215 p1 := op1.Args[0]
36216 d1 := v_1
36217 m2 := v_2
36218 if m2.Op != ssaop.OpStore {
36219 break
36220 }
36221 t2 := ssa.AuxToType(m2.Aux)
36222 _ = m2.Args[2]
36223 op2 := m2.Args[0]
36224 if op2.Op != ssaop.OpOffPtr || ssa.AuxIntToInt64(op2.AuxInt) != 0 {
36225 break
36226 }
36227 p2 := op2.Args[0]
36228 d2 := m2.Args[1]
36229 m3 := m2.Args[2]
36230 if m3.Op != ssaop.OpZero {
36231 break
36232 }
36233 n := ssa.AuxIntToInt64(m3.AuxInt)
36234 mem := m3.Args[1]
36235 p3 := m3.Args[0]
36236 if !(m2.Uses == 1 && m3.Uses == 1 && o1 == t2.Size() && n == t2.Size()+t1.Size() && ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.Clobber(m2, m3)) {
36237 break
36238 }
36239 v.Reset(ssaop.OpStore)
36240 v.Aux = ssa.TypeToAux(t1)
36241 v0 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36242 v0.Aux = ssa.TypeToAux(t2)
36243 v0.AddArg3(op2, d2, mem)
36244 v.AddArg3(op1, d1, v0)
36245 return true
36246 }
36247
36248
36249
36250 for {
36251 t1 := ssa.AuxToType(v.Aux)
36252 op1 := v_0
36253 if op1.Op != ssaop.OpOffPtr {
36254 break
36255 }
36256 o1 := ssa.AuxIntToInt64(op1.AuxInt)
36257 p1 := op1.Args[0]
36258 d1 := v_1
36259 m2 := v_2
36260 if m2.Op != ssaop.OpStore {
36261 break
36262 }
36263 t2 := ssa.AuxToType(m2.Aux)
36264 _ = m2.Args[2]
36265 op2 := m2.Args[0]
36266 if op2.Op != ssaop.OpOffPtr {
36267 break
36268 }
36269 o2 := ssa.AuxIntToInt64(op2.AuxInt)
36270 p2 := op2.Args[0]
36271 d2 := m2.Args[1]
36272 m3 := m2.Args[2]
36273 if m3.Op != ssaop.OpStore {
36274 break
36275 }
36276 t3 := ssa.AuxToType(m3.Aux)
36277 _ = m3.Args[2]
36278 op3 := m3.Args[0]
36279 if op3.Op != ssaop.OpOffPtr || ssa.AuxIntToInt64(op3.AuxInt) != 0 {
36280 break
36281 }
36282 p3 := op3.Args[0]
36283 d3 := m3.Args[1]
36284 m4 := m3.Args[2]
36285 if m4.Op != ssaop.OpZero {
36286 break
36287 }
36288 n := ssa.AuxIntToInt64(m4.AuxInt)
36289 mem := m4.Args[1]
36290 p4 := m4.Args[0]
36291 if !(m2.Uses == 1 && m3.Uses == 1 && m4.Uses == 1 && o2 == t3.Size() && o1-o2 == t2.Size() && n == t3.Size()+t2.Size()+t1.Size() && ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.IsSamePtr(p3, p4) && ssa.Clobber(m2, m3, m4)) {
36292 break
36293 }
36294 v.Reset(ssaop.OpStore)
36295 v.Aux = ssa.TypeToAux(t1)
36296 v0 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36297 v0.Aux = ssa.TypeToAux(t2)
36298 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36299 v1.Aux = ssa.TypeToAux(t3)
36300 v1.AddArg3(op3, d3, mem)
36301 v0.AddArg3(op2, d2, v1)
36302 v.AddArg3(op1, d1, v0)
36303 return true
36304 }
36305
36306
36307
36308 for {
36309 t1 := ssa.AuxToType(v.Aux)
36310 op1 := v_0
36311 if op1.Op != ssaop.OpOffPtr {
36312 break
36313 }
36314 o1 := ssa.AuxIntToInt64(op1.AuxInt)
36315 p1 := op1.Args[0]
36316 d1 := v_1
36317 m2 := v_2
36318 if m2.Op != ssaop.OpStore {
36319 break
36320 }
36321 t2 := ssa.AuxToType(m2.Aux)
36322 _ = m2.Args[2]
36323 op2 := m2.Args[0]
36324 if op2.Op != ssaop.OpOffPtr {
36325 break
36326 }
36327 o2 := ssa.AuxIntToInt64(op2.AuxInt)
36328 p2 := op2.Args[0]
36329 d2 := m2.Args[1]
36330 m3 := m2.Args[2]
36331 if m3.Op != ssaop.OpStore {
36332 break
36333 }
36334 t3 := ssa.AuxToType(m3.Aux)
36335 _ = m3.Args[2]
36336 op3 := m3.Args[0]
36337 if op3.Op != ssaop.OpOffPtr {
36338 break
36339 }
36340 o3 := ssa.AuxIntToInt64(op3.AuxInt)
36341 p3 := op3.Args[0]
36342 d3 := m3.Args[1]
36343 m4 := m3.Args[2]
36344 if m4.Op != ssaop.OpStore {
36345 break
36346 }
36347 t4 := ssa.AuxToType(m4.Aux)
36348 _ = m4.Args[2]
36349 op4 := m4.Args[0]
36350 if op4.Op != ssaop.OpOffPtr || ssa.AuxIntToInt64(op4.AuxInt) != 0 {
36351 break
36352 }
36353 p4 := op4.Args[0]
36354 d4 := m4.Args[1]
36355 m5 := m4.Args[2]
36356 if m5.Op != ssaop.OpZero {
36357 break
36358 }
36359 n := ssa.AuxIntToInt64(m5.AuxInt)
36360 mem := m5.Args[1]
36361 p5 := m5.Args[0]
36362 if !(m2.Uses == 1 && m3.Uses == 1 && m4.Uses == 1 && m5.Uses == 1 && o3 == t4.Size() && o2-o3 == t3.Size() && o1-o2 == t2.Size() && n == t4.Size()+t3.Size()+t2.Size()+t1.Size() && ssa.IsSamePtr(p1, p2) && ssa.IsSamePtr(p2, p3) && ssa.IsSamePtr(p3, p4) && ssa.IsSamePtr(p4, p5) && ssa.Clobber(m2, m3, m4, m5)) {
36363 break
36364 }
36365 v.Reset(ssaop.OpStore)
36366 v.Aux = ssa.TypeToAux(t1)
36367 v0 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36368 v0.Aux = ssa.TypeToAux(t2)
36369 v1 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36370 v1.Aux = ssa.TypeToAux(t3)
36371 v2 := b.NewValue0(v.Pos, ssaop.OpStore, types.TypeMem)
36372 v2.Aux = ssa.TypeToAux(t4)
36373 v2.AddArg3(op4, d4, mem)
36374 v1.AddArg3(op3, d3, v2)
36375 v0.AddArg3(op2, d2, v1)
36376 v.AddArg3(op1, d1, v0)
36377 return true
36378 }
36379 return false
36380 }
36381 func rewriteValue_OpStringLen(v *ssa.Value) bool {
36382 v_0 := v.Args[0]
36383
36384
36385 for {
36386 if v_0.Op != ssaop.OpStringMake {
36387 break
36388 }
36389 _ = v_0.Args[1]
36390 v_0_1 := v_0.Args[1]
36391 if v_0_1.Op != ssaop.OpConst64 {
36392 break
36393 }
36394 t := v_0_1.Type
36395 c := ssa.AuxIntToInt64(v_0_1.AuxInt)
36396 v.Reset(ssaop.OpConst64)
36397 v.Type = t
36398 v.AuxInt = ssa.Int64ToAuxInt(c)
36399 return true
36400 }
36401 return false
36402 }
36403 func rewriteValue_OpStringPtr(v *ssa.Value) bool {
36404 v_0 := v.Args[0]
36405
36406
36407 for {
36408 if v_0.Op != ssaop.OpStringMake {
36409 break
36410 }
36411 v_0_0 := v_0.Args[0]
36412 if v_0_0.Op != ssaop.OpAddr {
36413 break
36414 }
36415 t := v_0_0.Type
36416 s := ssa.AuxToSym(v_0_0.Aux)
36417 base := v_0_0.Args[0]
36418 v.Reset(ssaop.OpAddr)
36419 v.Type = t
36420 v.Aux = ssa.SymToAux(s)
36421 v.AddArg(base)
36422 return true
36423 }
36424 return false
36425 }
36426 func rewriteValue_OpStructSelect(v *ssa.Value) bool {
36427 v_0 := v.Args[0]
36428 b := v.Block
36429
36430
36431 for {
36432 i := ssa.AuxIntToInt64(v.AuxInt)
36433 x := v_0
36434 if x.Op != ssaop.OpStructMake {
36435 break
36436 }
36437 v.CopyOf(x.Args[i])
36438 return true
36439 }
36440
36441
36442
36443 for {
36444 i := ssa.AuxIntToInt64(v.AuxInt)
36445 x := v_0
36446 if x.Op != ssaop.OpLoad {
36447 break
36448 }
36449 t := x.Type
36450 mem := x.Args[1]
36451 ptr := x.Args[0]
36452 if !(!ssa.CanSSA(t)) {
36453 break
36454 }
36455 b = x.Block
36456 v0 := b.NewValue0(v.Pos, ssaop.OpLoad, v.Type)
36457 v.CopyOf(v0)
36458 v1 := b.NewValue0(v.Pos, ssaop.OpOffPtr, v.Type.PtrTo())
36459 v1.AuxInt = ssa.Int64ToAuxInt(t.FieldOff(int(i)))
36460 v1.AddArg(ptr)
36461 v0.AddArg2(v1, mem)
36462 return true
36463 }
36464
36465
36466
36467 for {
36468 if v_0.Op != ssaop.OpIData {
36469 break
36470 }
36471 x := v_0.Args[0]
36472 if !(v.Type.Size() > 0) {
36473 break
36474 }
36475 v.Reset(ssaop.OpIData)
36476 v.AddArg(x)
36477 return true
36478 }
36479
36480
36481
36482 for {
36483 if v_0.Op != ssaop.OpIData {
36484 break
36485 }
36486 if !(v.Type.Size() == 0) {
36487 break
36488 }
36489 v.Reset(ssaop.OpEmpty)
36490 return true
36491 }
36492 return false
36493 }
36494 func rewriteValue_OpSub16(v *ssa.Value) bool {
36495 v_1 := v.Args[1]
36496 v_0 := v.Args[0]
36497 b := v.Block
36498
36499
36500 for {
36501 if v_0.Op != ssaop.OpConst16 {
36502 break
36503 }
36504 c := ssa.AuxIntToInt16(v_0.AuxInt)
36505 if v_1.Op != ssaop.OpConst16 {
36506 break
36507 }
36508 d := ssa.AuxIntToInt16(v_1.AuxInt)
36509 v.Reset(ssaop.OpConst16)
36510 v.AuxInt = ssa.Int16ToAuxInt(c - d)
36511 return true
36512 }
36513
36514
36515
36516 for {
36517 x := v_0
36518 if v_1.Op != ssaop.OpConst16 {
36519 break
36520 }
36521 t := v_1.Type
36522 c := ssa.AuxIntToInt16(v_1.AuxInt)
36523 if !(x.Op != ssaop.OpConst16) {
36524 break
36525 }
36526 v.Reset(ssaop.OpAdd16)
36527 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
36528 v0.AuxInt = ssa.Int16ToAuxInt(-c)
36529 v.AddArg2(v0, x)
36530 return true
36531 }
36532
36533
36534 for {
36535 t := v.Type
36536 if v_0.Op != ssaop.OpMul16 {
36537 break
36538 }
36539 _ = v_0.Args[1]
36540 v_0_0 := v_0.Args[0]
36541 v_0_1 := v_0.Args[1]
36542 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
36543 x := v_0_0
36544 y := v_0_1
36545 if v_1.Op != ssaop.OpMul16 {
36546 continue
36547 }
36548 _ = v_1.Args[1]
36549 v_1_0 := v_1.Args[0]
36550 v_1_1 := v_1.Args[1]
36551 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
36552 if x != v_1_0 {
36553 continue
36554 }
36555 z := v_1_1
36556 v.Reset(ssaop.OpMul16)
36557 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, t)
36558 v0.AddArg2(y, z)
36559 v.AddArg2(x, v0)
36560 return true
36561 }
36562 }
36563 break
36564 }
36565
36566
36567 for {
36568 x := v_0
36569 if x != v_1 {
36570 break
36571 }
36572 v.Reset(ssaop.OpConst16)
36573 v.AuxInt = ssa.Int16ToAuxInt(0)
36574 return true
36575 }
36576
36577
36578 for {
36579 if v_0.Op != ssaop.OpNeg16 {
36580 break
36581 }
36582 x := v_0.Args[0]
36583 if v_1.Op != ssaop.OpCom16 || x != v_1.Args[0] {
36584 break
36585 }
36586 v.Reset(ssaop.OpConst16)
36587 v.AuxInt = ssa.Int16ToAuxInt(1)
36588 return true
36589 }
36590
36591
36592 for {
36593 if v_0.Op != ssaop.OpCom16 {
36594 break
36595 }
36596 x := v_0.Args[0]
36597 if v_1.Op != ssaop.OpNeg16 || x != v_1.Args[0] {
36598 break
36599 }
36600 v.Reset(ssaop.OpConst16)
36601 v.AuxInt = ssa.Int16ToAuxInt(-1)
36602 return true
36603 }
36604
36605
36606 for {
36607 if v_0.Op != ssaop.OpAdd16 {
36608 break
36609 }
36610 _ = v_0.Args[1]
36611 v_0_0 := v_0.Args[0]
36612 v_0_1 := v_0.Args[1]
36613 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
36614 t := v_0_0
36615 x := v_0_1
36616 if v_1.Op != ssaop.OpAdd16 {
36617 continue
36618 }
36619 _ = v_1.Args[1]
36620 v_1_0 := v_1.Args[0]
36621 v_1_1 := v_1.Args[1]
36622 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
36623 if t != v_1_0 {
36624 continue
36625 }
36626 y := v_1_1
36627 v.Reset(ssaop.OpSub16)
36628 v.AddArg2(x, y)
36629 return true
36630 }
36631 }
36632 break
36633 }
36634
36635
36636 for {
36637 x := v_0
36638 if v_1.Op != ssaop.OpAnd16 {
36639 break
36640 }
36641 t := v_1.Type
36642 _ = v_1.Args[1]
36643 v_1_0 := v_1.Args[0]
36644 v_1_1 := v_1.Args[1]
36645 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
36646 if x != v_1_0 {
36647 continue
36648 }
36649 y := v_1_1
36650 v.Reset(ssaop.OpAnd16)
36651 v0 := b.NewValue0(v.Pos, ssaop.OpCom16, t)
36652 v0.AddArg(y)
36653 v.AddArg2(x, v0)
36654 return true
36655 }
36656 break
36657 }
36658
36659
36660 for {
36661 if v_0.Op != ssaop.OpAdd16 {
36662 break
36663 }
36664 _ = v_0.Args[1]
36665 v_0_0 := v_0.Args[0]
36666 v_0_1 := v_0.Args[1]
36667 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
36668 x := v_0_0
36669 y := v_0_1
36670 if x != v_1 {
36671 continue
36672 }
36673 v.CopyOf(y)
36674 return true
36675 }
36676 break
36677 }
36678
36679
36680 for {
36681 if v_0.Op != ssaop.OpAdd16 {
36682 break
36683 }
36684 _ = v_0.Args[1]
36685 v_0_0 := v_0.Args[0]
36686 v_0_1 := v_0.Args[1]
36687 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
36688 x := v_0_0
36689 y := v_0_1
36690 if y != v_1 {
36691 continue
36692 }
36693 v.CopyOf(x)
36694 return true
36695 }
36696 break
36697 }
36698
36699
36700 for {
36701 if v_0.Op != ssaop.OpSub16 {
36702 break
36703 }
36704 y := v_0.Args[1]
36705 x := v_0.Args[0]
36706 if x != v_1 {
36707 break
36708 }
36709 v.Reset(ssaop.OpNeg16)
36710 v.AddArg(y)
36711 return true
36712 }
36713
36714
36715 for {
36716 x := v_0
36717 if v_1.Op != ssaop.OpAdd16 {
36718 break
36719 }
36720 _ = v_1.Args[1]
36721 v_1_0 := v_1.Args[0]
36722 v_1_1 := v_1.Args[1]
36723 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
36724 if x != v_1_0 {
36725 continue
36726 }
36727 y := v_1_1
36728 v.Reset(ssaop.OpNeg16)
36729 v.AddArg(y)
36730 return true
36731 }
36732 break
36733 }
36734
36735
36736
36737 for {
36738 x := v_0
36739 if v_1.Op != ssaop.OpSub16 {
36740 break
36741 }
36742 z := v_1.Args[1]
36743 i := v_1.Args[0]
36744 if i.Op != ssaop.OpConst16 {
36745 break
36746 }
36747 t := i.Type
36748 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
36749 break
36750 }
36751 v.Reset(ssaop.OpSub16)
36752 v0 := b.NewValue0(v.Pos, ssaop.OpAdd16, t)
36753 v0.AddArg2(x, z)
36754 v.AddArg2(v0, i)
36755 return true
36756 }
36757
36758
36759
36760 for {
36761 x := v_0
36762 if v_1.Op != ssaop.OpAdd16 {
36763 break
36764 }
36765 _ = v_1.Args[1]
36766 v_1_0 := v_1.Args[0]
36767 v_1_1 := v_1.Args[1]
36768 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
36769 z := v_1_0
36770 i := v_1_1
36771 if i.Op != ssaop.OpConst16 {
36772 continue
36773 }
36774 t := i.Type
36775 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
36776 continue
36777 }
36778 v.Reset(ssaop.OpSub16)
36779 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, t)
36780 v0.AddArg2(x, z)
36781 v.AddArg2(v0, i)
36782 return true
36783 }
36784 break
36785 }
36786
36787
36788
36789 for {
36790 if v_0.Op != ssaop.OpSub16 {
36791 break
36792 }
36793 z := v_0.Args[1]
36794 i := v_0.Args[0]
36795 if i.Op != ssaop.OpConst16 {
36796 break
36797 }
36798 t := i.Type
36799 x := v_1
36800 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
36801 break
36802 }
36803 v.Reset(ssaop.OpSub16)
36804 v0 := b.NewValue0(v.Pos, ssaop.OpAdd16, t)
36805 v0.AddArg2(z, x)
36806 v.AddArg2(i, v0)
36807 return true
36808 }
36809
36810
36811
36812 for {
36813 if v_0.Op != ssaop.OpAdd16 {
36814 break
36815 }
36816 _ = v_0.Args[1]
36817 v_0_0 := v_0.Args[0]
36818 v_0_1 := v_0.Args[1]
36819 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
36820 z := v_0_0
36821 i := v_0_1
36822 if i.Op != ssaop.OpConst16 {
36823 continue
36824 }
36825 t := i.Type
36826 x := v_1
36827 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
36828 continue
36829 }
36830 v.Reset(ssaop.OpAdd16)
36831 v0 := b.NewValue0(v.Pos, ssaop.OpSub16, t)
36832 v0.AddArg2(z, x)
36833 v.AddArg2(i, v0)
36834 return true
36835 }
36836 break
36837 }
36838
36839
36840 for {
36841 if v_0.Op != ssaop.OpConst16 {
36842 break
36843 }
36844 t := v_0.Type
36845 c := ssa.AuxIntToInt16(v_0.AuxInt)
36846 if v_1.Op != ssaop.OpSub16 {
36847 break
36848 }
36849 x := v_1.Args[1]
36850 v_1_0 := v_1.Args[0]
36851 if v_1_0.Op != ssaop.OpConst16 || v_1_0.Type != t {
36852 break
36853 }
36854 d := ssa.AuxIntToInt16(v_1_0.AuxInt)
36855 v.Reset(ssaop.OpAdd16)
36856 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
36857 v0.AuxInt = ssa.Int16ToAuxInt(c - d)
36858 v.AddArg2(v0, x)
36859 return true
36860 }
36861
36862
36863 for {
36864 if v_0.Op != ssaop.OpConst16 {
36865 break
36866 }
36867 t := v_0.Type
36868 c := ssa.AuxIntToInt16(v_0.AuxInt)
36869 if v_1.Op != ssaop.OpAdd16 {
36870 break
36871 }
36872 _ = v_1.Args[1]
36873 v_1_0 := v_1.Args[0]
36874 v_1_1 := v_1.Args[1]
36875 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
36876 if v_1_0.Op != ssaop.OpConst16 || v_1_0.Type != t {
36877 continue
36878 }
36879 d := ssa.AuxIntToInt16(v_1_0.AuxInt)
36880 x := v_1_1
36881 v.Reset(ssaop.OpSub16)
36882 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
36883 v0.AuxInt = ssa.Int16ToAuxInt(c - d)
36884 v.AddArg2(v0, x)
36885 return true
36886 }
36887 break
36888 }
36889 return false
36890 }
36891 func rewriteValue_OpSub32(v *ssa.Value) bool {
36892 v_1 := v.Args[1]
36893 v_0 := v.Args[0]
36894 b := v.Block
36895
36896
36897 for {
36898 if v_0.Op != ssaop.OpConst32 {
36899 break
36900 }
36901 c := ssa.AuxIntToInt32(v_0.AuxInt)
36902 if v_1.Op != ssaop.OpConst32 {
36903 break
36904 }
36905 d := ssa.AuxIntToInt32(v_1.AuxInt)
36906 v.Reset(ssaop.OpConst32)
36907 v.AuxInt = ssa.Int32ToAuxInt(c - d)
36908 return true
36909 }
36910
36911
36912
36913 for {
36914 x := v_0
36915 if v_1.Op != ssaop.OpConst32 {
36916 break
36917 }
36918 t := v_1.Type
36919 c := ssa.AuxIntToInt32(v_1.AuxInt)
36920 if !(x.Op != ssaop.OpConst32) {
36921 break
36922 }
36923 v.Reset(ssaop.OpAdd32)
36924 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
36925 v0.AuxInt = ssa.Int32ToAuxInt(-c)
36926 v.AddArg2(v0, x)
36927 return true
36928 }
36929
36930
36931 for {
36932 t := v.Type
36933 if v_0.Op != ssaop.OpMul32 {
36934 break
36935 }
36936 _ = v_0.Args[1]
36937 v_0_0 := v_0.Args[0]
36938 v_0_1 := v_0.Args[1]
36939 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
36940 x := v_0_0
36941 y := v_0_1
36942 if v_1.Op != ssaop.OpMul32 {
36943 continue
36944 }
36945 _ = v_1.Args[1]
36946 v_1_0 := v_1.Args[0]
36947 v_1_1 := v_1.Args[1]
36948 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
36949 if x != v_1_0 {
36950 continue
36951 }
36952 z := v_1_1
36953 v.Reset(ssaop.OpMul32)
36954 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, t)
36955 v0.AddArg2(y, z)
36956 v.AddArg2(x, v0)
36957 return true
36958 }
36959 }
36960 break
36961 }
36962
36963
36964 for {
36965 x := v_0
36966 if x != v_1 {
36967 break
36968 }
36969 v.Reset(ssaop.OpConst32)
36970 v.AuxInt = ssa.Int32ToAuxInt(0)
36971 return true
36972 }
36973
36974
36975 for {
36976 if v_0.Op != ssaop.OpNeg32 {
36977 break
36978 }
36979 x := v_0.Args[0]
36980 if v_1.Op != ssaop.OpCom32 || x != v_1.Args[0] {
36981 break
36982 }
36983 v.Reset(ssaop.OpConst32)
36984 v.AuxInt = ssa.Int32ToAuxInt(1)
36985 return true
36986 }
36987
36988
36989 for {
36990 if v_0.Op != ssaop.OpCom32 {
36991 break
36992 }
36993 x := v_0.Args[0]
36994 if v_1.Op != ssaop.OpNeg32 || x != v_1.Args[0] {
36995 break
36996 }
36997 v.Reset(ssaop.OpConst32)
36998 v.AuxInt = ssa.Int32ToAuxInt(-1)
36999 return true
37000 }
37001
37002
37003 for {
37004 if v_0.Op != ssaop.OpAdd32 {
37005 break
37006 }
37007 _ = v_0.Args[1]
37008 v_0_0 := v_0.Args[0]
37009 v_0_1 := v_0.Args[1]
37010 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37011 t := v_0_0
37012 x := v_0_1
37013 if v_1.Op != ssaop.OpAdd32 {
37014 continue
37015 }
37016 _ = v_1.Args[1]
37017 v_1_0 := v_1.Args[0]
37018 v_1_1 := v_1.Args[1]
37019 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
37020 if t != v_1_0 {
37021 continue
37022 }
37023 y := v_1_1
37024 v.Reset(ssaop.OpSub32)
37025 v.AddArg2(x, y)
37026 return true
37027 }
37028 }
37029 break
37030 }
37031
37032
37033 for {
37034 x := v_0
37035 if v_1.Op != ssaop.OpAnd32 {
37036 break
37037 }
37038 t := v_1.Type
37039 _ = v_1.Args[1]
37040 v_1_0 := v_1.Args[0]
37041 v_1_1 := v_1.Args[1]
37042 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37043 if x != v_1_0 {
37044 continue
37045 }
37046 y := v_1_1
37047 v.Reset(ssaop.OpAnd32)
37048 v0 := b.NewValue0(v.Pos, ssaop.OpCom32, t)
37049 v0.AddArg(y)
37050 v.AddArg2(x, v0)
37051 return true
37052 }
37053 break
37054 }
37055
37056
37057 for {
37058 if v_0.Op != ssaop.OpAdd32 {
37059 break
37060 }
37061 _ = v_0.Args[1]
37062 v_0_0 := v_0.Args[0]
37063 v_0_1 := v_0.Args[1]
37064 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37065 x := v_0_0
37066 y := v_0_1
37067 if x != v_1 {
37068 continue
37069 }
37070 v.CopyOf(y)
37071 return true
37072 }
37073 break
37074 }
37075
37076
37077 for {
37078 if v_0.Op != ssaop.OpAdd32 {
37079 break
37080 }
37081 _ = v_0.Args[1]
37082 v_0_0 := v_0.Args[0]
37083 v_0_1 := v_0.Args[1]
37084 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37085 x := v_0_0
37086 y := v_0_1
37087 if y != v_1 {
37088 continue
37089 }
37090 v.CopyOf(x)
37091 return true
37092 }
37093 break
37094 }
37095
37096
37097 for {
37098 if v_0.Op != ssaop.OpSub32 {
37099 break
37100 }
37101 y := v_0.Args[1]
37102 x := v_0.Args[0]
37103 if x != v_1 {
37104 break
37105 }
37106 v.Reset(ssaop.OpNeg32)
37107 v.AddArg(y)
37108 return true
37109 }
37110
37111
37112 for {
37113 x := v_0
37114 if v_1.Op != ssaop.OpAdd32 {
37115 break
37116 }
37117 _ = v_1.Args[1]
37118 v_1_0 := v_1.Args[0]
37119 v_1_1 := v_1.Args[1]
37120 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37121 if x != v_1_0 {
37122 continue
37123 }
37124 y := v_1_1
37125 v.Reset(ssaop.OpNeg32)
37126 v.AddArg(y)
37127 return true
37128 }
37129 break
37130 }
37131
37132
37133
37134 for {
37135 x := v_0
37136 if v_1.Op != ssaop.OpSub32 {
37137 break
37138 }
37139 z := v_1.Args[1]
37140 i := v_1.Args[0]
37141 if i.Op != ssaop.OpConst32 {
37142 break
37143 }
37144 t := i.Type
37145 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
37146 break
37147 }
37148 v.Reset(ssaop.OpSub32)
37149 v0 := b.NewValue0(v.Pos, ssaop.OpAdd32, t)
37150 v0.AddArg2(x, z)
37151 v.AddArg2(v0, i)
37152 return true
37153 }
37154
37155
37156
37157 for {
37158 x := v_0
37159 if v_1.Op != ssaop.OpAdd32 {
37160 break
37161 }
37162 _ = v_1.Args[1]
37163 v_1_0 := v_1.Args[0]
37164 v_1_1 := v_1.Args[1]
37165 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37166 z := v_1_0
37167 i := v_1_1
37168 if i.Op != ssaop.OpConst32 {
37169 continue
37170 }
37171 t := i.Type
37172 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
37173 continue
37174 }
37175 v.Reset(ssaop.OpSub32)
37176 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, t)
37177 v0.AddArg2(x, z)
37178 v.AddArg2(v0, i)
37179 return true
37180 }
37181 break
37182 }
37183
37184
37185
37186 for {
37187 if v_0.Op != ssaop.OpSub32 {
37188 break
37189 }
37190 z := v_0.Args[1]
37191 i := v_0.Args[0]
37192 if i.Op != ssaop.OpConst32 {
37193 break
37194 }
37195 t := i.Type
37196 x := v_1
37197 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
37198 break
37199 }
37200 v.Reset(ssaop.OpSub32)
37201 v0 := b.NewValue0(v.Pos, ssaop.OpAdd32, t)
37202 v0.AddArg2(z, x)
37203 v.AddArg2(i, v0)
37204 return true
37205 }
37206
37207
37208
37209 for {
37210 if v_0.Op != ssaop.OpAdd32 {
37211 break
37212 }
37213 _ = v_0.Args[1]
37214 v_0_0 := v_0.Args[0]
37215 v_0_1 := v_0.Args[1]
37216 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37217 z := v_0_0
37218 i := v_0_1
37219 if i.Op != ssaop.OpConst32 {
37220 continue
37221 }
37222 t := i.Type
37223 x := v_1
37224 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
37225 continue
37226 }
37227 v.Reset(ssaop.OpAdd32)
37228 v0 := b.NewValue0(v.Pos, ssaop.OpSub32, t)
37229 v0.AddArg2(z, x)
37230 v.AddArg2(i, v0)
37231 return true
37232 }
37233 break
37234 }
37235
37236
37237 for {
37238 if v_0.Op != ssaop.OpConst32 {
37239 break
37240 }
37241 t := v_0.Type
37242 c := ssa.AuxIntToInt32(v_0.AuxInt)
37243 if v_1.Op != ssaop.OpSub32 {
37244 break
37245 }
37246 x := v_1.Args[1]
37247 v_1_0 := v_1.Args[0]
37248 if v_1_0.Op != ssaop.OpConst32 || v_1_0.Type != t {
37249 break
37250 }
37251 d := ssa.AuxIntToInt32(v_1_0.AuxInt)
37252 v.Reset(ssaop.OpAdd32)
37253 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
37254 v0.AuxInt = ssa.Int32ToAuxInt(c - d)
37255 v.AddArg2(v0, x)
37256 return true
37257 }
37258
37259
37260 for {
37261 if v_0.Op != ssaop.OpConst32 {
37262 break
37263 }
37264 t := v_0.Type
37265 c := ssa.AuxIntToInt32(v_0.AuxInt)
37266 if v_1.Op != ssaop.OpAdd32 {
37267 break
37268 }
37269 _ = v_1.Args[1]
37270 v_1_0 := v_1.Args[0]
37271 v_1_1 := v_1.Args[1]
37272 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37273 if v_1_0.Op != ssaop.OpConst32 || v_1_0.Type != t {
37274 continue
37275 }
37276 d := ssa.AuxIntToInt32(v_1_0.AuxInt)
37277 x := v_1_1
37278 v.Reset(ssaop.OpSub32)
37279 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
37280 v0.AuxInt = ssa.Int32ToAuxInt(c - d)
37281 v.AddArg2(v0, x)
37282 return true
37283 }
37284 break
37285 }
37286 return false
37287 }
37288 func rewriteValue_OpSub32F(v *ssa.Value) bool {
37289 v_1 := v.Args[1]
37290 v_0 := v.Args[0]
37291
37292
37293
37294 for {
37295 if v_0.Op != ssaop.OpConst32F {
37296 break
37297 }
37298 c := ssa.AuxIntToFloat32(v_0.AuxInt)
37299 if v_1.Op != ssaop.OpConst32F {
37300 break
37301 }
37302 d := ssa.AuxIntToFloat32(v_1.AuxInt)
37303 if !(c-d == c-d) {
37304 break
37305 }
37306 v.Reset(ssaop.OpConst32F)
37307 v.AuxInt = ssa.Float32ToAuxInt(c - d)
37308 return true
37309 }
37310 return false
37311 }
37312 func rewriteValue_OpSub64(v *ssa.Value) bool {
37313 v_1 := v.Args[1]
37314 v_0 := v.Args[0]
37315 b := v.Block
37316
37317
37318 for {
37319 if v_0.Op != ssaop.OpConst64 {
37320 break
37321 }
37322 c := ssa.AuxIntToInt64(v_0.AuxInt)
37323 if v_1.Op != ssaop.OpConst64 {
37324 break
37325 }
37326 d := ssa.AuxIntToInt64(v_1.AuxInt)
37327 v.Reset(ssaop.OpConst64)
37328 v.AuxInt = ssa.Int64ToAuxInt(c - d)
37329 return true
37330 }
37331
37332
37333
37334 for {
37335 x := v_0
37336 if v_1.Op != ssaop.OpConst64 {
37337 break
37338 }
37339 t := v_1.Type
37340 c := ssa.AuxIntToInt64(v_1.AuxInt)
37341 if !(x.Op != ssaop.OpConst64) {
37342 break
37343 }
37344 v.Reset(ssaop.OpAdd64)
37345 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
37346 v0.AuxInt = ssa.Int64ToAuxInt(-c)
37347 v.AddArg2(v0, x)
37348 return true
37349 }
37350
37351
37352 for {
37353 t := v.Type
37354 if v_0.Op != ssaop.OpMul64 {
37355 break
37356 }
37357 _ = v_0.Args[1]
37358 v_0_0 := v_0.Args[0]
37359 v_0_1 := v_0.Args[1]
37360 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37361 x := v_0_0
37362 y := v_0_1
37363 if v_1.Op != ssaop.OpMul64 {
37364 continue
37365 }
37366 _ = v_1.Args[1]
37367 v_1_0 := v_1.Args[0]
37368 v_1_1 := v_1.Args[1]
37369 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
37370 if x != v_1_0 {
37371 continue
37372 }
37373 z := v_1_1
37374 v.Reset(ssaop.OpMul64)
37375 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, t)
37376 v0.AddArg2(y, z)
37377 v.AddArg2(x, v0)
37378 return true
37379 }
37380 }
37381 break
37382 }
37383
37384
37385 for {
37386 x := v_0
37387 if x != v_1 {
37388 break
37389 }
37390 v.Reset(ssaop.OpConst64)
37391 v.AuxInt = ssa.Int64ToAuxInt(0)
37392 return true
37393 }
37394
37395
37396 for {
37397 if v_0.Op != ssaop.OpNeg64 {
37398 break
37399 }
37400 x := v_0.Args[0]
37401 if v_1.Op != ssaop.OpCom64 || x != v_1.Args[0] {
37402 break
37403 }
37404 v.Reset(ssaop.OpConst64)
37405 v.AuxInt = ssa.Int64ToAuxInt(1)
37406 return true
37407 }
37408
37409
37410 for {
37411 if v_0.Op != ssaop.OpCom64 {
37412 break
37413 }
37414 x := v_0.Args[0]
37415 if v_1.Op != ssaop.OpNeg64 || x != v_1.Args[0] {
37416 break
37417 }
37418 v.Reset(ssaop.OpConst64)
37419 v.AuxInt = ssa.Int64ToAuxInt(-1)
37420 return true
37421 }
37422
37423
37424 for {
37425 if v_0.Op != ssaop.OpAdd64 {
37426 break
37427 }
37428 _ = v_0.Args[1]
37429 v_0_0 := v_0.Args[0]
37430 v_0_1 := v_0.Args[1]
37431 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37432 t := v_0_0
37433 x := v_0_1
37434 if v_1.Op != ssaop.OpAdd64 {
37435 continue
37436 }
37437 _ = v_1.Args[1]
37438 v_1_0 := v_1.Args[0]
37439 v_1_1 := v_1.Args[1]
37440 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
37441 if t != v_1_0 {
37442 continue
37443 }
37444 y := v_1_1
37445 v.Reset(ssaop.OpSub64)
37446 v.AddArg2(x, y)
37447 return true
37448 }
37449 }
37450 break
37451 }
37452
37453
37454 for {
37455 x := v_0
37456 if v_1.Op != ssaop.OpAnd64 {
37457 break
37458 }
37459 t := v_1.Type
37460 _ = v_1.Args[1]
37461 v_1_0 := v_1.Args[0]
37462 v_1_1 := v_1.Args[1]
37463 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37464 if x != v_1_0 {
37465 continue
37466 }
37467 y := v_1_1
37468 v.Reset(ssaop.OpAnd64)
37469 v0 := b.NewValue0(v.Pos, ssaop.OpCom64, t)
37470 v0.AddArg(y)
37471 v.AddArg2(x, v0)
37472 return true
37473 }
37474 break
37475 }
37476
37477
37478 for {
37479 if v_0.Op != ssaop.OpAdd64 {
37480 break
37481 }
37482 _ = v_0.Args[1]
37483 v_0_0 := v_0.Args[0]
37484 v_0_1 := v_0.Args[1]
37485 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37486 x := v_0_0
37487 y := v_0_1
37488 if x != v_1 {
37489 continue
37490 }
37491 v.CopyOf(y)
37492 return true
37493 }
37494 break
37495 }
37496
37497
37498 for {
37499 if v_0.Op != ssaop.OpAdd64 {
37500 break
37501 }
37502 _ = v_0.Args[1]
37503 v_0_0 := v_0.Args[0]
37504 v_0_1 := v_0.Args[1]
37505 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37506 x := v_0_0
37507 y := v_0_1
37508 if y != v_1 {
37509 continue
37510 }
37511 v.CopyOf(x)
37512 return true
37513 }
37514 break
37515 }
37516
37517
37518 for {
37519 if v_0.Op != ssaop.OpSub64 {
37520 break
37521 }
37522 y := v_0.Args[1]
37523 x := v_0.Args[0]
37524 if x != v_1 {
37525 break
37526 }
37527 v.Reset(ssaop.OpNeg64)
37528 v.AddArg(y)
37529 return true
37530 }
37531
37532
37533 for {
37534 x := v_0
37535 if v_1.Op != ssaop.OpAdd64 {
37536 break
37537 }
37538 _ = v_1.Args[1]
37539 v_1_0 := v_1.Args[0]
37540 v_1_1 := v_1.Args[1]
37541 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37542 if x != v_1_0 {
37543 continue
37544 }
37545 y := v_1_1
37546 v.Reset(ssaop.OpNeg64)
37547 v.AddArg(y)
37548 return true
37549 }
37550 break
37551 }
37552
37553
37554
37555 for {
37556 x := v_0
37557 if v_1.Op != ssaop.OpSub64 {
37558 break
37559 }
37560 z := v_1.Args[1]
37561 i := v_1.Args[0]
37562 if i.Op != ssaop.OpConst64 {
37563 break
37564 }
37565 t := i.Type
37566 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
37567 break
37568 }
37569 v.Reset(ssaop.OpSub64)
37570 v0 := b.NewValue0(v.Pos, ssaop.OpAdd64, t)
37571 v0.AddArg2(x, z)
37572 v.AddArg2(v0, i)
37573 return true
37574 }
37575
37576
37577
37578 for {
37579 x := v_0
37580 if v_1.Op != ssaop.OpAdd64 {
37581 break
37582 }
37583 _ = v_1.Args[1]
37584 v_1_0 := v_1.Args[0]
37585 v_1_1 := v_1.Args[1]
37586 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37587 z := v_1_0
37588 i := v_1_1
37589 if i.Op != ssaop.OpConst64 {
37590 continue
37591 }
37592 t := i.Type
37593 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
37594 continue
37595 }
37596 v.Reset(ssaop.OpSub64)
37597 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, t)
37598 v0.AddArg2(x, z)
37599 v.AddArg2(v0, i)
37600 return true
37601 }
37602 break
37603 }
37604
37605
37606
37607 for {
37608 if v_0.Op != ssaop.OpSub64 {
37609 break
37610 }
37611 z := v_0.Args[1]
37612 i := v_0.Args[0]
37613 if i.Op != ssaop.OpConst64 {
37614 break
37615 }
37616 t := i.Type
37617 x := v_1
37618 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
37619 break
37620 }
37621 v.Reset(ssaop.OpSub64)
37622 v0 := b.NewValue0(v.Pos, ssaop.OpAdd64, t)
37623 v0.AddArg2(z, x)
37624 v.AddArg2(i, v0)
37625 return true
37626 }
37627
37628
37629
37630 for {
37631 if v_0.Op != ssaop.OpAdd64 {
37632 break
37633 }
37634 _ = v_0.Args[1]
37635 v_0_0 := v_0.Args[0]
37636 v_0_1 := v_0.Args[1]
37637 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37638 z := v_0_0
37639 i := v_0_1
37640 if i.Op != ssaop.OpConst64 {
37641 continue
37642 }
37643 t := i.Type
37644 x := v_1
37645 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
37646 continue
37647 }
37648 v.Reset(ssaop.OpAdd64)
37649 v0 := b.NewValue0(v.Pos, ssaop.OpSub64, t)
37650 v0.AddArg2(z, x)
37651 v.AddArg2(i, v0)
37652 return true
37653 }
37654 break
37655 }
37656
37657
37658 for {
37659 if v_0.Op != ssaop.OpConst64 {
37660 break
37661 }
37662 t := v_0.Type
37663 c := ssa.AuxIntToInt64(v_0.AuxInt)
37664 if v_1.Op != ssaop.OpSub64 {
37665 break
37666 }
37667 x := v_1.Args[1]
37668 v_1_0 := v_1.Args[0]
37669 if v_1_0.Op != ssaop.OpConst64 || v_1_0.Type != t {
37670 break
37671 }
37672 d := ssa.AuxIntToInt64(v_1_0.AuxInt)
37673 v.Reset(ssaop.OpAdd64)
37674 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
37675 v0.AuxInt = ssa.Int64ToAuxInt(c - d)
37676 v.AddArg2(v0, x)
37677 return true
37678 }
37679
37680
37681 for {
37682 if v_0.Op != ssaop.OpConst64 {
37683 break
37684 }
37685 t := v_0.Type
37686 c := ssa.AuxIntToInt64(v_0.AuxInt)
37687 if v_1.Op != ssaop.OpAdd64 {
37688 break
37689 }
37690 _ = v_1.Args[1]
37691 v_1_0 := v_1.Args[0]
37692 v_1_1 := v_1.Args[1]
37693 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37694 if v_1_0.Op != ssaop.OpConst64 || v_1_0.Type != t {
37695 continue
37696 }
37697 d := ssa.AuxIntToInt64(v_1_0.AuxInt)
37698 x := v_1_1
37699 v.Reset(ssaop.OpSub64)
37700 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
37701 v0.AuxInt = ssa.Int64ToAuxInt(c - d)
37702 v.AddArg2(v0, x)
37703 return true
37704 }
37705 break
37706 }
37707 return false
37708 }
37709 func rewriteValue_OpSub64F(v *ssa.Value) bool {
37710 v_1 := v.Args[1]
37711 v_0 := v.Args[0]
37712
37713
37714
37715 for {
37716 if v_0.Op != ssaop.OpConst64F {
37717 break
37718 }
37719 c := ssa.AuxIntToFloat64(v_0.AuxInt)
37720 if v_1.Op != ssaop.OpConst64F {
37721 break
37722 }
37723 d := ssa.AuxIntToFloat64(v_1.AuxInt)
37724 if !(c-d == c-d) {
37725 break
37726 }
37727 v.Reset(ssaop.OpConst64F)
37728 v.AuxInt = ssa.Float64ToAuxInt(c - d)
37729 return true
37730 }
37731 return false
37732 }
37733 func rewriteValue_OpSub64borrow(v *ssa.Value) bool {
37734 v_2 := v.Args[2]
37735 v_1 := v.Args[1]
37736 v_0 := v.Args[0]
37737 b := v.Block
37738
37739
37740
37741 for {
37742 if v_0.Op != ssaop.OpConst64 {
37743 break
37744 }
37745 t := v_0.Type
37746 x := ssa.AuxIntToInt64(v_0.AuxInt)
37747 if v_1.Op != ssaop.OpConst64 {
37748 break
37749 }
37750 y := ssa.AuxIntToInt64(v_1.AuxInt)
37751 if v_2.Op != ssaop.OpConst64 {
37752 break
37753 }
37754 borrowVal := ssa.AuxIntToInt64(v_2.AuxInt)
37755 if !(borrowVal >= 0 && borrowVal <= 1) {
37756 break
37757 }
37758 v.Reset(ssaop.OpMakeTuple)
37759 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
37760 v0.AuxInt = ssa.Int64ToAuxInt(bitsSub64(x, y, borrowVal).diff)
37761 v1 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
37762 v1.AuxInt = ssa.Int64ToAuxInt(bitsSub64(x, y, borrowVal).borrow)
37763 v.AddArg2(v0, v1)
37764 return true
37765 }
37766 return false
37767 }
37768 func rewriteValue_OpSub8(v *ssa.Value) bool {
37769 v_1 := v.Args[1]
37770 v_0 := v.Args[0]
37771 b := v.Block
37772
37773
37774 for {
37775 if v_0.Op != ssaop.OpConst8 {
37776 break
37777 }
37778 c := ssa.AuxIntToInt8(v_0.AuxInt)
37779 if v_1.Op != ssaop.OpConst8 {
37780 break
37781 }
37782 d := ssa.AuxIntToInt8(v_1.AuxInt)
37783 v.Reset(ssaop.OpConst8)
37784 v.AuxInt = ssa.Int8ToAuxInt(c - d)
37785 return true
37786 }
37787
37788
37789
37790 for {
37791 x := v_0
37792 if v_1.Op != ssaop.OpConst8 {
37793 break
37794 }
37795 t := v_1.Type
37796 c := ssa.AuxIntToInt8(v_1.AuxInt)
37797 if !(x.Op != ssaop.OpConst8) {
37798 break
37799 }
37800 v.Reset(ssaop.OpAdd8)
37801 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
37802 v0.AuxInt = ssa.Int8ToAuxInt(-c)
37803 v.AddArg2(v0, x)
37804 return true
37805 }
37806
37807
37808 for {
37809 t := v.Type
37810 if v_0.Op != ssaop.OpMul8 {
37811 break
37812 }
37813 _ = v_0.Args[1]
37814 v_0_0 := v_0.Args[0]
37815 v_0_1 := v_0.Args[1]
37816 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37817 x := v_0_0
37818 y := v_0_1
37819 if v_1.Op != ssaop.OpMul8 {
37820 continue
37821 }
37822 _ = v_1.Args[1]
37823 v_1_0 := v_1.Args[0]
37824 v_1_1 := v_1.Args[1]
37825 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
37826 if x != v_1_0 {
37827 continue
37828 }
37829 z := v_1_1
37830 v.Reset(ssaop.OpMul8)
37831 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, t)
37832 v0.AddArg2(y, z)
37833 v.AddArg2(x, v0)
37834 return true
37835 }
37836 }
37837 break
37838 }
37839
37840
37841 for {
37842 x := v_0
37843 if x != v_1 {
37844 break
37845 }
37846 v.Reset(ssaop.OpConst8)
37847 v.AuxInt = ssa.Int8ToAuxInt(0)
37848 return true
37849 }
37850
37851
37852 for {
37853 if v_0.Op != ssaop.OpNeg8 {
37854 break
37855 }
37856 x := v_0.Args[0]
37857 if v_1.Op != ssaop.OpCom8 || x != v_1.Args[0] {
37858 break
37859 }
37860 v.Reset(ssaop.OpConst8)
37861 v.AuxInt = ssa.Int8ToAuxInt(1)
37862 return true
37863 }
37864
37865
37866 for {
37867 if v_0.Op != ssaop.OpCom8 {
37868 break
37869 }
37870 x := v_0.Args[0]
37871 if v_1.Op != ssaop.OpNeg8 || x != v_1.Args[0] {
37872 break
37873 }
37874 v.Reset(ssaop.OpConst8)
37875 v.AuxInt = ssa.Int8ToAuxInt(-1)
37876 return true
37877 }
37878
37879
37880 for {
37881 if v_0.Op != ssaop.OpAdd8 {
37882 break
37883 }
37884 _ = v_0.Args[1]
37885 v_0_0 := v_0.Args[0]
37886 v_0_1 := v_0.Args[1]
37887 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37888 t := v_0_0
37889 x := v_0_1
37890 if v_1.Op != ssaop.OpAdd8 {
37891 continue
37892 }
37893 _ = v_1.Args[1]
37894 v_1_0 := v_1.Args[0]
37895 v_1_1 := v_1.Args[1]
37896 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
37897 if t != v_1_0 {
37898 continue
37899 }
37900 y := v_1_1
37901 v.Reset(ssaop.OpSub8)
37902 v.AddArg2(x, y)
37903 return true
37904 }
37905 }
37906 break
37907 }
37908
37909
37910 for {
37911 x := v_0
37912 if v_1.Op != ssaop.OpAnd8 {
37913 break
37914 }
37915 t := v_1.Type
37916 _ = v_1.Args[1]
37917 v_1_0 := v_1.Args[0]
37918 v_1_1 := v_1.Args[1]
37919 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37920 if x != v_1_0 {
37921 continue
37922 }
37923 y := v_1_1
37924 v.Reset(ssaop.OpAnd8)
37925 v0 := b.NewValue0(v.Pos, ssaop.OpCom8, t)
37926 v0.AddArg(y)
37927 v.AddArg2(x, v0)
37928 return true
37929 }
37930 break
37931 }
37932
37933
37934 for {
37935 if v_0.Op != ssaop.OpAdd8 {
37936 break
37937 }
37938 _ = v_0.Args[1]
37939 v_0_0 := v_0.Args[0]
37940 v_0_1 := v_0.Args[1]
37941 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37942 x := v_0_0
37943 y := v_0_1
37944 if x != v_1 {
37945 continue
37946 }
37947 v.CopyOf(y)
37948 return true
37949 }
37950 break
37951 }
37952
37953
37954 for {
37955 if v_0.Op != ssaop.OpAdd8 {
37956 break
37957 }
37958 _ = v_0.Args[1]
37959 v_0_0 := v_0.Args[0]
37960 v_0_1 := v_0.Args[1]
37961 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
37962 x := v_0_0
37963 y := v_0_1
37964 if y != v_1 {
37965 continue
37966 }
37967 v.CopyOf(x)
37968 return true
37969 }
37970 break
37971 }
37972
37973
37974 for {
37975 if v_0.Op != ssaop.OpSub8 {
37976 break
37977 }
37978 y := v_0.Args[1]
37979 x := v_0.Args[0]
37980 if x != v_1 {
37981 break
37982 }
37983 v.Reset(ssaop.OpNeg8)
37984 v.AddArg(y)
37985 return true
37986 }
37987
37988
37989 for {
37990 x := v_0
37991 if v_1.Op != ssaop.OpAdd8 {
37992 break
37993 }
37994 _ = v_1.Args[1]
37995 v_1_0 := v_1.Args[0]
37996 v_1_1 := v_1.Args[1]
37997 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
37998 if x != v_1_0 {
37999 continue
38000 }
38001 y := v_1_1
38002 v.Reset(ssaop.OpNeg8)
38003 v.AddArg(y)
38004 return true
38005 }
38006 break
38007 }
38008
38009
38010
38011 for {
38012 x := v_0
38013 if v_1.Op != ssaop.OpSub8 {
38014 break
38015 }
38016 z := v_1.Args[1]
38017 i := v_1.Args[0]
38018 if i.Op != ssaop.OpConst8 {
38019 break
38020 }
38021 t := i.Type
38022 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
38023 break
38024 }
38025 v.Reset(ssaop.OpSub8)
38026 v0 := b.NewValue0(v.Pos, ssaop.OpAdd8, t)
38027 v0.AddArg2(x, z)
38028 v.AddArg2(v0, i)
38029 return true
38030 }
38031
38032
38033
38034 for {
38035 x := v_0
38036 if v_1.Op != ssaop.OpAdd8 {
38037 break
38038 }
38039 _ = v_1.Args[1]
38040 v_1_0 := v_1.Args[0]
38041 v_1_1 := v_1.Args[1]
38042 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
38043 z := v_1_0
38044 i := v_1_1
38045 if i.Op != ssaop.OpConst8 {
38046 continue
38047 }
38048 t := i.Type
38049 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
38050 continue
38051 }
38052 v.Reset(ssaop.OpSub8)
38053 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, t)
38054 v0.AddArg2(x, z)
38055 v.AddArg2(v0, i)
38056 return true
38057 }
38058 break
38059 }
38060
38061
38062
38063 for {
38064 if v_0.Op != ssaop.OpSub8 {
38065 break
38066 }
38067 z := v_0.Args[1]
38068 i := v_0.Args[0]
38069 if i.Op != ssaop.OpConst8 {
38070 break
38071 }
38072 t := i.Type
38073 x := v_1
38074 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
38075 break
38076 }
38077 v.Reset(ssaop.OpSub8)
38078 v0 := b.NewValue0(v.Pos, ssaop.OpAdd8, t)
38079 v0.AddArg2(z, x)
38080 v.AddArg2(i, v0)
38081 return true
38082 }
38083
38084
38085
38086 for {
38087 if v_0.Op != ssaop.OpAdd8 {
38088 break
38089 }
38090 _ = v_0.Args[1]
38091 v_0_0 := v_0.Args[0]
38092 v_0_1 := v_0.Args[1]
38093 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38094 z := v_0_0
38095 i := v_0_1
38096 if i.Op != ssaop.OpConst8 {
38097 continue
38098 }
38099 t := i.Type
38100 x := v_1
38101 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
38102 continue
38103 }
38104 v.Reset(ssaop.OpAdd8)
38105 v0 := b.NewValue0(v.Pos, ssaop.OpSub8, t)
38106 v0.AddArg2(z, x)
38107 v.AddArg2(i, v0)
38108 return true
38109 }
38110 break
38111 }
38112
38113
38114 for {
38115 if v_0.Op != ssaop.OpConst8 {
38116 break
38117 }
38118 t := v_0.Type
38119 c := ssa.AuxIntToInt8(v_0.AuxInt)
38120 if v_1.Op != ssaop.OpSub8 {
38121 break
38122 }
38123 x := v_1.Args[1]
38124 v_1_0 := v_1.Args[0]
38125 if v_1_0.Op != ssaop.OpConst8 || v_1_0.Type != t {
38126 break
38127 }
38128 d := ssa.AuxIntToInt8(v_1_0.AuxInt)
38129 v.Reset(ssaop.OpAdd8)
38130 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
38131 v0.AuxInt = ssa.Int8ToAuxInt(c - d)
38132 v.AddArg2(v0, x)
38133 return true
38134 }
38135
38136
38137 for {
38138 if v_0.Op != ssaop.OpConst8 {
38139 break
38140 }
38141 t := v_0.Type
38142 c := ssa.AuxIntToInt8(v_0.AuxInt)
38143 if v_1.Op != ssaop.OpAdd8 {
38144 break
38145 }
38146 _ = v_1.Args[1]
38147 v_1_0 := v_1.Args[0]
38148 v_1_1 := v_1.Args[1]
38149 for _i0 := 0; _i0 <= 1; _i0, v_1_0, v_1_1 = _i0+1, v_1_1, v_1_0 {
38150 if v_1_0.Op != ssaop.OpConst8 || v_1_0.Type != t {
38151 continue
38152 }
38153 d := ssa.AuxIntToInt8(v_1_0.AuxInt)
38154 x := v_1_1
38155 v.Reset(ssaop.OpSub8)
38156 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
38157 v0.AuxInt = ssa.Int8ToAuxInt(c - d)
38158 v.AddArg2(v0, x)
38159 return true
38160 }
38161 break
38162 }
38163 return false
38164 }
38165 func rewriteValue_OpTrunc(v *ssa.Value) bool {
38166 v_0 := v.Args[0]
38167
38168
38169 for {
38170 if v_0.Op != ssaop.OpConst64F {
38171 break
38172 }
38173 c := ssa.AuxIntToFloat64(v_0.AuxInt)
38174 v.Reset(ssaop.OpConst64F)
38175 v.AuxInt = ssa.Float64ToAuxInt(math.Trunc(c))
38176 return true
38177 }
38178 return false
38179 }
38180 func rewriteValue_OpTrunc16to8(v *ssa.Value) bool {
38181 v_0 := v.Args[0]
38182
38183
38184 for {
38185 if v_0.Op != ssaop.OpConst16 {
38186 break
38187 }
38188 c := ssa.AuxIntToInt16(v_0.AuxInt)
38189 v.Reset(ssaop.OpConst8)
38190 v.AuxInt = ssa.Int8ToAuxInt(int8(c))
38191 return true
38192 }
38193
38194
38195 for {
38196 if v_0.Op != ssaop.OpZeroExt8to16 {
38197 break
38198 }
38199 x := v_0.Args[0]
38200 v.CopyOf(x)
38201 return true
38202 }
38203
38204
38205 for {
38206 if v_0.Op != ssaop.OpSignExt8to16 {
38207 break
38208 }
38209 x := v_0.Args[0]
38210 v.CopyOf(x)
38211 return true
38212 }
38213
38214
38215
38216 for {
38217 if v_0.Op != ssaop.OpAnd16 {
38218 break
38219 }
38220 _ = v_0.Args[1]
38221 v_0_0 := v_0.Args[0]
38222 v_0_1 := v_0.Args[1]
38223 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38224 if v_0_0.Op != ssaop.OpConst16 {
38225 continue
38226 }
38227 y := ssa.AuxIntToInt16(v_0_0.AuxInt)
38228 x := v_0_1
38229 if !(y&0xFF == 0xFF) {
38230 continue
38231 }
38232 v.Reset(ssaop.OpTrunc16to8)
38233 v.AddArg(x)
38234 return true
38235 }
38236 break
38237 }
38238 return false
38239 }
38240 func rewriteValue_OpTrunc32to16(v *ssa.Value) bool {
38241 v_0 := v.Args[0]
38242
38243
38244 for {
38245 if v_0.Op != ssaop.OpConst32 {
38246 break
38247 }
38248 c := ssa.AuxIntToInt32(v_0.AuxInt)
38249 v.Reset(ssaop.OpConst16)
38250 v.AuxInt = ssa.Int16ToAuxInt(int16(c))
38251 return true
38252 }
38253
38254
38255 for {
38256 if v_0.Op != ssaop.OpZeroExt8to32 {
38257 break
38258 }
38259 x := v_0.Args[0]
38260 v.Reset(ssaop.OpZeroExt8to16)
38261 v.AddArg(x)
38262 return true
38263 }
38264
38265
38266 for {
38267 if v_0.Op != ssaop.OpZeroExt16to32 {
38268 break
38269 }
38270 x := v_0.Args[0]
38271 v.CopyOf(x)
38272 return true
38273 }
38274
38275
38276 for {
38277 if v_0.Op != ssaop.OpSignExt8to32 {
38278 break
38279 }
38280 x := v_0.Args[0]
38281 v.Reset(ssaop.OpSignExt8to16)
38282 v.AddArg(x)
38283 return true
38284 }
38285
38286
38287 for {
38288 if v_0.Op != ssaop.OpSignExt16to32 {
38289 break
38290 }
38291 x := v_0.Args[0]
38292 v.CopyOf(x)
38293 return true
38294 }
38295
38296
38297
38298 for {
38299 if v_0.Op != ssaop.OpAnd32 {
38300 break
38301 }
38302 _ = v_0.Args[1]
38303 v_0_0 := v_0.Args[0]
38304 v_0_1 := v_0.Args[1]
38305 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38306 if v_0_0.Op != ssaop.OpConst32 {
38307 continue
38308 }
38309 y := ssa.AuxIntToInt32(v_0_0.AuxInt)
38310 x := v_0_1
38311 if !(y&0xFFFF == 0xFFFF) {
38312 continue
38313 }
38314 v.Reset(ssaop.OpTrunc32to16)
38315 v.AddArg(x)
38316 return true
38317 }
38318 break
38319 }
38320 return false
38321 }
38322 func rewriteValue_OpTrunc32to8(v *ssa.Value) bool {
38323 v_0 := v.Args[0]
38324
38325
38326 for {
38327 if v_0.Op != ssaop.OpConst32 {
38328 break
38329 }
38330 c := ssa.AuxIntToInt32(v_0.AuxInt)
38331 v.Reset(ssaop.OpConst8)
38332 v.AuxInt = ssa.Int8ToAuxInt(int8(c))
38333 return true
38334 }
38335
38336
38337 for {
38338 if v_0.Op != ssaop.OpZeroExt8to32 {
38339 break
38340 }
38341 x := v_0.Args[0]
38342 v.CopyOf(x)
38343 return true
38344 }
38345
38346
38347 for {
38348 if v_0.Op != ssaop.OpSignExt8to32 {
38349 break
38350 }
38351 x := v_0.Args[0]
38352 v.CopyOf(x)
38353 return true
38354 }
38355
38356
38357
38358 for {
38359 if v_0.Op != ssaop.OpAnd32 {
38360 break
38361 }
38362 _ = v_0.Args[1]
38363 v_0_0 := v_0.Args[0]
38364 v_0_1 := v_0.Args[1]
38365 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38366 if v_0_0.Op != ssaop.OpConst32 {
38367 continue
38368 }
38369 y := ssa.AuxIntToInt32(v_0_0.AuxInt)
38370 x := v_0_1
38371 if !(y&0xFF == 0xFF) {
38372 continue
38373 }
38374 v.Reset(ssaop.OpTrunc32to8)
38375 v.AddArg(x)
38376 return true
38377 }
38378 break
38379 }
38380 return false
38381 }
38382 func rewriteValue_OpTrunc64to16(v *ssa.Value) bool {
38383 v_0 := v.Args[0]
38384
38385
38386 for {
38387 if v_0.Op != ssaop.OpConst64 {
38388 break
38389 }
38390 c := ssa.AuxIntToInt64(v_0.AuxInt)
38391 v.Reset(ssaop.OpConst16)
38392 v.AuxInt = ssa.Int16ToAuxInt(int16(c))
38393 return true
38394 }
38395
38396
38397 for {
38398 if v_0.Op != ssaop.OpZeroExt8to64 {
38399 break
38400 }
38401 x := v_0.Args[0]
38402 v.Reset(ssaop.OpZeroExt8to16)
38403 v.AddArg(x)
38404 return true
38405 }
38406
38407
38408 for {
38409 if v_0.Op != ssaop.OpZeroExt16to64 {
38410 break
38411 }
38412 x := v_0.Args[0]
38413 v.CopyOf(x)
38414 return true
38415 }
38416
38417
38418 for {
38419 if v_0.Op != ssaop.OpSignExt8to64 {
38420 break
38421 }
38422 x := v_0.Args[0]
38423 v.Reset(ssaop.OpSignExt8to16)
38424 v.AddArg(x)
38425 return true
38426 }
38427
38428
38429 for {
38430 if v_0.Op != ssaop.OpSignExt16to64 {
38431 break
38432 }
38433 x := v_0.Args[0]
38434 v.CopyOf(x)
38435 return true
38436 }
38437
38438
38439
38440 for {
38441 if v_0.Op != ssaop.OpAnd64 {
38442 break
38443 }
38444 _ = v_0.Args[1]
38445 v_0_0 := v_0.Args[0]
38446 v_0_1 := v_0.Args[1]
38447 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38448 if v_0_0.Op != ssaop.OpConst64 {
38449 continue
38450 }
38451 y := ssa.AuxIntToInt64(v_0_0.AuxInt)
38452 x := v_0_1
38453 if !(y&0xFFFF == 0xFFFF) {
38454 continue
38455 }
38456 v.Reset(ssaop.OpTrunc64to16)
38457 v.AddArg(x)
38458 return true
38459 }
38460 break
38461 }
38462 return false
38463 }
38464 func rewriteValue_OpTrunc64to32(v *ssa.Value) bool {
38465 v_0 := v.Args[0]
38466
38467
38468 for {
38469 if v_0.Op != ssaop.OpConst64 {
38470 break
38471 }
38472 c := ssa.AuxIntToInt64(v_0.AuxInt)
38473 v.Reset(ssaop.OpConst32)
38474 v.AuxInt = ssa.Int32ToAuxInt(int32(c))
38475 return true
38476 }
38477
38478
38479 for {
38480 if v_0.Op != ssaop.OpZeroExt8to64 {
38481 break
38482 }
38483 x := v_0.Args[0]
38484 v.Reset(ssaop.OpZeroExt8to32)
38485 v.AddArg(x)
38486 return true
38487 }
38488
38489
38490 for {
38491 if v_0.Op != ssaop.OpZeroExt16to64 {
38492 break
38493 }
38494 x := v_0.Args[0]
38495 v.Reset(ssaop.OpZeroExt16to32)
38496 v.AddArg(x)
38497 return true
38498 }
38499
38500
38501 for {
38502 if v_0.Op != ssaop.OpZeroExt32to64 {
38503 break
38504 }
38505 x := v_0.Args[0]
38506 v.CopyOf(x)
38507 return true
38508 }
38509
38510
38511 for {
38512 if v_0.Op != ssaop.OpSignExt8to64 {
38513 break
38514 }
38515 x := v_0.Args[0]
38516 v.Reset(ssaop.OpSignExt8to32)
38517 v.AddArg(x)
38518 return true
38519 }
38520
38521
38522 for {
38523 if v_0.Op != ssaop.OpSignExt16to64 {
38524 break
38525 }
38526 x := v_0.Args[0]
38527 v.Reset(ssaop.OpSignExt16to32)
38528 v.AddArg(x)
38529 return true
38530 }
38531
38532
38533 for {
38534 if v_0.Op != ssaop.OpSignExt32to64 {
38535 break
38536 }
38537 x := v_0.Args[0]
38538 v.CopyOf(x)
38539 return true
38540 }
38541
38542
38543
38544 for {
38545 if v_0.Op != ssaop.OpAnd64 {
38546 break
38547 }
38548 _ = v_0.Args[1]
38549 v_0_0 := v_0.Args[0]
38550 v_0_1 := v_0.Args[1]
38551 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38552 if v_0_0.Op != ssaop.OpConst64 {
38553 continue
38554 }
38555 y := ssa.AuxIntToInt64(v_0_0.AuxInt)
38556 x := v_0_1
38557 if !(y&0xFFFFFFFF == 0xFFFFFFFF) {
38558 continue
38559 }
38560 v.Reset(ssaop.OpTrunc64to32)
38561 v.AddArg(x)
38562 return true
38563 }
38564 break
38565 }
38566 return false
38567 }
38568 func rewriteValue_OpTrunc64to8(v *ssa.Value) bool {
38569 v_0 := v.Args[0]
38570
38571
38572 for {
38573 if v_0.Op != ssaop.OpConst64 {
38574 break
38575 }
38576 c := ssa.AuxIntToInt64(v_0.AuxInt)
38577 v.Reset(ssaop.OpConst8)
38578 v.AuxInt = ssa.Int8ToAuxInt(int8(c))
38579 return true
38580 }
38581
38582
38583 for {
38584 if v_0.Op != ssaop.OpZeroExt8to64 {
38585 break
38586 }
38587 x := v_0.Args[0]
38588 v.CopyOf(x)
38589 return true
38590 }
38591
38592
38593 for {
38594 if v_0.Op != ssaop.OpSignExt8to64 {
38595 break
38596 }
38597 x := v_0.Args[0]
38598 v.CopyOf(x)
38599 return true
38600 }
38601
38602
38603
38604 for {
38605 if v_0.Op != ssaop.OpAnd64 {
38606 break
38607 }
38608 _ = v_0.Args[1]
38609 v_0_0 := v_0.Args[0]
38610 v_0_1 := v_0.Args[1]
38611 for _i0 := 0; _i0 <= 1; _i0, v_0_0, v_0_1 = _i0+1, v_0_1, v_0_0 {
38612 if v_0_0.Op != ssaop.OpConst64 {
38613 continue
38614 }
38615 y := ssa.AuxIntToInt64(v_0_0.AuxInt)
38616 x := v_0_1
38617 if !(y&0xFF == 0xFF) {
38618 continue
38619 }
38620 v.Reset(ssaop.OpTrunc64to8)
38621 v.AddArg(x)
38622 return true
38623 }
38624 break
38625 }
38626 return false
38627 }
38628 func rewriteValue_OpXor16(v *ssa.Value) bool {
38629 v_1 := v.Args[1]
38630 v_0 := v.Args[0]
38631 b := v.Block
38632 config := b.Func.Config
38633 typ := &b.Func.Config.Types
38634
38635
38636 for {
38637 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
38638 if v_0.Op != ssaop.OpConst16 {
38639 continue
38640 }
38641 c := ssa.AuxIntToInt16(v_0.AuxInt)
38642 if v_1.Op != ssaop.OpConst16 {
38643 continue
38644 }
38645 d := ssa.AuxIntToInt16(v_1.AuxInt)
38646 v.Reset(ssaop.OpConst16)
38647 v.AuxInt = ssa.Int16ToAuxInt(c ^ d)
38648 return true
38649 }
38650 break
38651 }
38652
38653
38654 for {
38655 x := v_0
38656 if x != v_1 {
38657 break
38658 }
38659 v.Reset(ssaop.OpConst16)
38660 v.AuxInt = ssa.Int16ToAuxInt(0)
38661 return true
38662 }
38663
38664
38665 for {
38666 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
38667 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != 0 {
38668 continue
38669 }
38670 x := v_1
38671 v.CopyOf(x)
38672 return true
38673 }
38674 break
38675 }
38676
38677
38678 for {
38679 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
38680 if v_0.Op != ssaop.OpCom16 {
38681 continue
38682 }
38683 x := v_0.Args[0]
38684 if x != v_1 {
38685 continue
38686 }
38687 v.Reset(ssaop.OpConst16)
38688 v.AuxInt = ssa.Int16ToAuxInt(-1)
38689 return true
38690 }
38691 break
38692 }
38693
38694
38695 for {
38696 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
38697 if v_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_0.AuxInt) != -1 {
38698 continue
38699 }
38700 x := v_1
38701 v.Reset(ssaop.OpCom16)
38702 v.AddArg(x)
38703 return true
38704 }
38705 break
38706 }
38707
38708
38709 for {
38710 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
38711 x := v_0
38712 if v_1.Op != ssaop.OpXor16 {
38713 continue
38714 }
38715 _ = v_1.Args[1]
38716 v_1_0 := v_1.Args[0]
38717 v_1_1 := v_1.Args[1]
38718 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
38719 if x != v_1_0 {
38720 continue
38721 }
38722 y := v_1_1
38723 v.CopyOf(y)
38724 return true
38725 }
38726 }
38727 break
38728 }
38729
38730
38731
38732 for {
38733 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
38734 if v_0.Op != ssaop.OpXor16 {
38735 continue
38736 }
38737 _ = v_0.Args[1]
38738 v_0_0 := v_0.Args[0]
38739 v_0_1 := v_0.Args[1]
38740 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
38741 i := v_0_0
38742 if i.Op != ssaop.OpConst16 {
38743 continue
38744 }
38745 t := i.Type
38746 z := v_0_1
38747 x := v_1
38748 if !(z.Op != ssaop.OpConst16 && x.Op != ssaop.OpConst16) {
38749 continue
38750 }
38751 v.Reset(ssaop.OpXor16)
38752 v0 := b.NewValue0(v.Pos, ssaop.OpXor16, t)
38753 v0.AddArg2(z, x)
38754 v.AddArg2(i, v0)
38755 return true
38756 }
38757 }
38758 break
38759 }
38760
38761
38762 for {
38763 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
38764 if v_0.Op != ssaop.OpConst16 {
38765 continue
38766 }
38767 t := v_0.Type
38768 c := ssa.AuxIntToInt16(v_0.AuxInt)
38769 if v_1.Op != ssaop.OpXor16 {
38770 continue
38771 }
38772 _ = v_1.Args[1]
38773 v_1_0 := v_1.Args[0]
38774 v_1_1 := v_1.Args[1]
38775 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
38776 if v_1_0.Op != ssaop.OpConst16 || v_1_0.Type != t {
38777 continue
38778 }
38779 d := ssa.AuxIntToInt16(v_1_0.AuxInt)
38780 x := v_1_1
38781 v.Reset(ssaop.OpXor16)
38782 v0 := b.NewValue0(v.Pos, ssaop.OpConst16, t)
38783 v0.AuxInt = ssa.Int16ToAuxInt(c ^ d)
38784 v.AddArg2(v0, x)
38785 return true
38786 }
38787 }
38788 break
38789 }
38790
38791
38792
38793 for {
38794 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
38795 if v_0.Op != ssaop.OpLsh16x64 {
38796 continue
38797 }
38798 _ = v_0.Args[1]
38799 x := v_0.Args[0]
38800 z := v_0.Args[1]
38801 if z.Op != ssaop.OpConst64 {
38802 continue
38803 }
38804 c := ssa.AuxIntToInt64(z.AuxInt)
38805 if v_1.Op != ssaop.OpRsh16Ux64 {
38806 continue
38807 }
38808 _ = v_1.Args[1]
38809 if x != v_1.Args[0] {
38810 continue
38811 }
38812 v_1_1 := v_1.Args[1]
38813 if v_1_1.Op != ssaop.OpConst64 {
38814 continue
38815 }
38816 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
38817 if !(c < 16 && d == 16-c && canRotate(config, 16)) {
38818 continue
38819 }
38820 v.Reset(ssaop.OpRotateLeft16)
38821 v.AddArg2(x, z)
38822 return true
38823 }
38824 break
38825 }
38826
38827
38828
38829 for {
38830 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
38831 left := v_0
38832 if left.Op != ssaop.OpLsh16x64 {
38833 continue
38834 }
38835 y := left.Args[1]
38836 x := left.Args[0]
38837 right := v_1
38838 if right.Op != ssaop.OpRsh16Ux64 {
38839 continue
38840 }
38841 _ = right.Args[1]
38842 if x != right.Args[0] {
38843 continue
38844 }
38845 right_1 := right.Args[1]
38846 if right_1.Op != ssaop.OpSub64 {
38847 continue
38848 }
38849 _ = right_1.Args[1]
38850 right_1_0 := right_1.Args[0]
38851 if right_1_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(right_1_0.AuxInt) != 16 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
38852 continue
38853 }
38854 v.Reset(ssaop.OpRotateLeft16)
38855 v.AddArg2(x, y)
38856 return true
38857 }
38858 break
38859 }
38860
38861
38862
38863 for {
38864 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
38865 left := v_0
38866 if left.Op != ssaop.OpLsh16x32 {
38867 continue
38868 }
38869 y := left.Args[1]
38870 x := left.Args[0]
38871 right := v_1
38872 if right.Op != ssaop.OpRsh16Ux32 {
38873 continue
38874 }
38875 _ = right.Args[1]
38876 if x != right.Args[0] {
38877 continue
38878 }
38879 right_1 := right.Args[1]
38880 if right_1.Op != ssaop.OpSub32 {
38881 continue
38882 }
38883 _ = right_1.Args[1]
38884 right_1_0 := right_1.Args[0]
38885 if right_1_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(right_1_0.AuxInt) != 16 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
38886 continue
38887 }
38888 v.Reset(ssaop.OpRotateLeft16)
38889 v.AddArg2(x, y)
38890 return true
38891 }
38892 break
38893 }
38894
38895
38896
38897 for {
38898 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
38899 left := v_0
38900 if left.Op != ssaop.OpLsh16x16 {
38901 continue
38902 }
38903 y := left.Args[1]
38904 x := left.Args[0]
38905 right := v_1
38906 if right.Op != ssaop.OpRsh16Ux16 {
38907 continue
38908 }
38909 _ = right.Args[1]
38910 if x != right.Args[0] {
38911 continue
38912 }
38913 right_1 := right.Args[1]
38914 if right_1.Op != ssaop.OpSub16 {
38915 continue
38916 }
38917 _ = right_1.Args[1]
38918 right_1_0 := right_1.Args[0]
38919 if right_1_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(right_1_0.AuxInt) != 16 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
38920 continue
38921 }
38922 v.Reset(ssaop.OpRotateLeft16)
38923 v.AddArg2(x, y)
38924 return true
38925 }
38926 break
38927 }
38928
38929
38930
38931 for {
38932 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
38933 left := v_0
38934 if left.Op != ssaop.OpLsh16x8 {
38935 continue
38936 }
38937 y := left.Args[1]
38938 x := left.Args[0]
38939 right := v_1
38940 if right.Op != ssaop.OpRsh16Ux8 {
38941 continue
38942 }
38943 _ = right.Args[1]
38944 if x != right.Args[0] {
38945 continue
38946 }
38947 right_1 := right.Args[1]
38948 if right_1.Op != ssaop.OpSub8 {
38949 continue
38950 }
38951 _ = right_1.Args[1]
38952 right_1_0 := right_1.Args[0]
38953 if right_1_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(right_1_0.AuxInt) != 16 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
38954 continue
38955 }
38956 v.Reset(ssaop.OpRotateLeft16)
38957 v.AddArg2(x, y)
38958 return true
38959 }
38960 break
38961 }
38962
38963
38964
38965 for {
38966 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
38967 right := v_0
38968 if right.Op != ssaop.OpRsh16Ux64 {
38969 continue
38970 }
38971 y := right.Args[1]
38972 x := right.Args[0]
38973 left := v_1
38974 if left.Op != ssaop.OpLsh16x64 {
38975 continue
38976 }
38977 _ = left.Args[1]
38978 if x != left.Args[0] {
38979 continue
38980 }
38981 z := left.Args[1]
38982 if z.Op != ssaop.OpSub64 {
38983 continue
38984 }
38985 _ = z.Args[1]
38986 z_0 := z.Args[0]
38987 if z_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(z_0.AuxInt) != 16 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
38988 continue
38989 }
38990 v.Reset(ssaop.OpRotateLeft16)
38991 v.AddArg2(x, z)
38992 return true
38993 }
38994 break
38995 }
38996
38997
38998
38999 for {
39000 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39001 right := v_0
39002 if right.Op != ssaop.OpRsh16Ux32 {
39003 continue
39004 }
39005 y := right.Args[1]
39006 x := right.Args[0]
39007 left := v_1
39008 if left.Op != ssaop.OpLsh16x32 {
39009 continue
39010 }
39011 _ = left.Args[1]
39012 if x != left.Args[0] {
39013 continue
39014 }
39015 z := left.Args[1]
39016 if z.Op != ssaop.OpSub32 {
39017 continue
39018 }
39019 _ = z.Args[1]
39020 z_0 := z.Args[0]
39021 if z_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(z_0.AuxInt) != 16 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
39022 continue
39023 }
39024 v.Reset(ssaop.OpRotateLeft16)
39025 v.AddArg2(x, z)
39026 return true
39027 }
39028 break
39029 }
39030
39031
39032
39033 for {
39034 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39035 right := v_0
39036 if right.Op != ssaop.OpRsh16Ux16 {
39037 continue
39038 }
39039 y := right.Args[1]
39040 x := right.Args[0]
39041 left := v_1
39042 if left.Op != ssaop.OpLsh16x16 {
39043 continue
39044 }
39045 _ = left.Args[1]
39046 if x != left.Args[0] {
39047 continue
39048 }
39049 z := left.Args[1]
39050 if z.Op != ssaop.OpSub16 {
39051 continue
39052 }
39053 _ = z.Args[1]
39054 z_0 := z.Args[0]
39055 if z_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(z_0.AuxInt) != 16 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
39056 continue
39057 }
39058 v.Reset(ssaop.OpRotateLeft16)
39059 v.AddArg2(x, z)
39060 return true
39061 }
39062 break
39063 }
39064
39065
39066
39067 for {
39068 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39069 right := v_0
39070 if right.Op != ssaop.OpRsh16Ux8 {
39071 continue
39072 }
39073 y := right.Args[1]
39074 x := right.Args[0]
39075 left := v_1
39076 if left.Op != ssaop.OpLsh16x8 {
39077 continue
39078 }
39079 _ = left.Args[1]
39080 if x != left.Args[0] {
39081 continue
39082 }
39083 z := left.Args[1]
39084 if z.Op != ssaop.OpSub8 {
39085 continue
39086 }
39087 _ = z.Args[1]
39088 z_0 := z.Args[0]
39089 if z_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(z_0.AuxInt) != 16 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 16)) {
39090 continue
39091 }
39092 v.Reset(ssaop.OpRotateLeft16)
39093 v.AddArg2(x, z)
39094 return true
39095 }
39096 break
39097 }
39098
39099
39100
39101 for {
39102 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39103 if v_0.Op != ssaop.OpZeroExt8to16 {
39104 continue
39105 }
39106 v_0_0 := v_0.Args[0]
39107 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
39108 continue
39109 }
39110 cvtT := v_0_0.Type
39111 bool := v_0_0.Args[0]
39112 if v_1.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(v_1.AuxInt) != 1 || !(invertibleBool(bool.Op)) {
39113 continue
39114 }
39115 v.Reset(ssaop.OpZeroExt8to16)
39116 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, cvtT)
39117 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
39118 v1.AddArg(bool)
39119 v0.AddArg(v1)
39120 v.AddArg(v0)
39121 return true
39122 }
39123 break
39124 }
39125
39126
39127
39128 for {
39129 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39130 if v_0.Op != ssaop.OpZeroExt8to16 {
39131 continue
39132 }
39133 v_0_0 := v_0.Args[0]
39134 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
39135 continue
39136 }
39137 cvtT := v_0_0.Type
39138 v_0_0_0 := v_0_0.Args[0]
39139 if v_0_0_0.Op != ssaop.OpNot {
39140 continue
39141 }
39142 bool := v_0_0_0.Args[0]
39143 if v_1.Op != ssaop.OpConst16 {
39144 continue
39145 }
39146 constT := v_1.Type
39147 c := ssa.AuxIntToInt16(v_1.AuxInt)
39148 if !(c != 1) {
39149 continue
39150 }
39151 v.Reset(ssaop.OpXor16)
39152 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to16, typ.UInt16)
39153 v1 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, cvtT)
39154 v1.AddArg(bool)
39155 v0.AddArg(v1)
39156 v2 := b.NewValue0(v.Pos, ssaop.OpConst16, constT)
39157 v2.AuxInt = ssa.Int16ToAuxInt(c ^ 1)
39158 v.AddArg2(v0, v2)
39159 return true
39160 }
39161 break
39162 }
39163 return false
39164 }
39165 func rewriteValue_OpXor32(v *ssa.Value) bool {
39166 v_1 := v.Args[1]
39167 v_0 := v.Args[0]
39168 b := v.Block
39169 config := b.Func.Config
39170 typ := &b.Func.Config.Types
39171
39172
39173 for {
39174 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39175 if v_0.Op != ssaop.OpConst32 {
39176 continue
39177 }
39178 c := ssa.AuxIntToInt32(v_0.AuxInt)
39179 if v_1.Op != ssaop.OpConst32 {
39180 continue
39181 }
39182 d := ssa.AuxIntToInt32(v_1.AuxInt)
39183 v.Reset(ssaop.OpConst32)
39184 v.AuxInt = ssa.Int32ToAuxInt(c ^ d)
39185 return true
39186 }
39187 break
39188 }
39189
39190
39191 for {
39192 x := v_0
39193 if x != v_1 {
39194 break
39195 }
39196 v.Reset(ssaop.OpConst32)
39197 v.AuxInt = ssa.Int32ToAuxInt(0)
39198 return true
39199 }
39200
39201
39202 for {
39203 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39204 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != 0 {
39205 continue
39206 }
39207 x := v_1
39208 v.CopyOf(x)
39209 return true
39210 }
39211 break
39212 }
39213
39214
39215 for {
39216 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39217 if v_0.Op != ssaop.OpCom32 {
39218 continue
39219 }
39220 x := v_0.Args[0]
39221 if x != v_1 {
39222 continue
39223 }
39224 v.Reset(ssaop.OpConst32)
39225 v.AuxInt = ssa.Int32ToAuxInt(-1)
39226 return true
39227 }
39228 break
39229 }
39230
39231
39232 for {
39233 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39234 if v_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_0.AuxInt) != -1 {
39235 continue
39236 }
39237 x := v_1
39238 v.Reset(ssaop.OpCom32)
39239 v.AddArg(x)
39240 return true
39241 }
39242 break
39243 }
39244
39245
39246 for {
39247 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39248 x := v_0
39249 if v_1.Op != ssaop.OpXor32 {
39250 continue
39251 }
39252 _ = v_1.Args[1]
39253 v_1_0 := v_1.Args[0]
39254 v_1_1 := v_1.Args[1]
39255 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
39256 if x != v_1_0 {
39257 continue
39258 }
39259 y := v_1_1
39260 v.CopyOf(y)
39261 return true
39262 }
39263 }
39264 break
39265 }
39266
39267
39268
39269 for {
39270 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39271 if v_0.Op != ssaop.OpXor32 {
39272 continue
39273 }
39274 _ = v_0.Args[1]
39275 v_0_0 := v_0.Args[0]
39276 v_0_1 := v_0.Args[1]
39277 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
39278 i := v_0_0
39279 if i.Op != ssaop.OpConst32 {
39280 continue
39281 }
39282 t := i.Type
39283 z := v_0_1
39284 x := v_1
39285 if !(z.Op != ssaop.OpConst32 && x.Op != ssaop.OpConst32) {
39286 continue
39287 }
39288 v.Reset(ssaop.OpXor32)
39289 v0 := b.NewValue0(v.Pos, ssaop.OpXor32, t)
39290 v0.AddArg2(z, x)
39291 v.AddArg2(i, v0)
39292 return true
39293 }
39294 }
39295 break
39296 }
39297
39298
39299 for {
39300 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39301 if v_0.Op != ssaop.OpConst32 {
39302 continue
39303 }
39304 t := v_0.Type
39305 c := ssa.AuxIntToInt32(v_0.AuxInt)
39306 if v_1.Op != ssaop.OpXor32 {
39307 continue
39308 }
39309 _ = v_1.Args[1]
39310 v_1_0 := v_1.Args[0]
39311 v_1_1 := v_1.Args[1]
39312 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
39313 if v_1_0.Op != ssaop.OpConst32 || v_1_0.Type != t {
39314 continue
39315 }
39316 d := ssa.AuxIntToInt32(v_1_0.AuxInt)
39317 x := v_1_1
39318 v.Reset(ssaop.OpXor32)
39319 v0 := b.NewValue0(v.Pos, ssaop.OpConst32, t)
39320 v0.AuxInt = ssa.Int32ToAuxInt(c ^ d)
39321 v.AddArg2(v0, x)
39322 return true
39323 }
39324 }
39325 break
39326 }
39327
39328
39329
39330 for {
39331 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39332 if v_0.Op != ssaop.OpLsh32x64 {
39333 continue
39334 }
39335 _ = v_0.Args[1]
39336 x := v_0.Args[0]
39337 z := v_0.Args[1]
39338 if z.Op != ssaop.OpConst64 {
39339 continue
39340 }
39341 c := ssa.AuxIntToInt64(z.AuxInt)
39342 if v_1.Op != ssaop.OpRsh32Ux64 {
39343 continue
39344 }
39345 _ = v_1.Args[1]
39346 if x != v_1.Args[0] {
39347 continue
39348 }
39349 v_1_1 := v_1.Args[1]
39350 if v_1_1.Op != ssaop.OpConst64 {
39351 continue
39352 }
39353 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
39354 if !(c < 32 && d == 32-c && canRotate(config, 32)) {
39355 continue
39356 }
39357 v.Reset(ssaop.OpRotateLeft32)
39358 v.AddArg2(x, z)
39359 return true
39360 }
39361 break
39362 }
39363
39364
39365
39366 for {
39367 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39368 left := v_0
39369 if left.Op != ssaop.OpLsh32x64 {
39370 continue
39371 }
39372 y := left.Args[1]
39373 x := left.Args[0]
39374 right := v_1
39375 if right.Op != ssaop.OpRsh32Ux64 {
39376 continue
39377 }
39378 _ = right.Args[1]
39379 if x != right.Args[0] {
39380 continue
39381 }
39382 right_1 := right.Args[1]
39383 if right_1.Op != ssaop.OpSub64 {
39384 continue
39385 }
39386 _ = right_1.Args[1]
39387 right_1_0 := right_1.Args[0]
39388 if right_1_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(right_1_0.AuxInt) != 32 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
39389 continue
39390 }
39391 v.Reset(ssaop.OpRotateLeft32)
39392 v.AddArg2(x, y)
39393 return true
39394 }
39395 break
39396 }
39397
39398
39399
39400 for {
39401 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39402 left := v_0
39403 if left.Op != ssaop.OpLsh32x32 {
39404 continue
39405 }
39406 y := left.Args[1]
39407 x := left.Args[0]
39408 right := v_1
39409 if right.Op != ssaop.OpRsh32Ux32 {
39410 continue
39411 }
39412 _ = right.Args[1]
39413 if x != right.Args[0] {
39414 continue
39415 }
39416 right_1 := right.Args[1]
39417 if right_1.Op != ssaop.OpSub32 {
39418 continue
39419 }
39420 _ = right_1.Args[1]
39421 right_1_0 := right_1.Args[0]
39422 if right_1_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(right_1_0.AuxInt) != 32 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
39423 continue
39424 }
39425 v.Reset(ssaop.OpRotateLeft32)
39426 v.AddArg2(x, y)
39427 return true
39428 }
39429 break
39430 }
39431
39432
39433
39434 for {
39435 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39436 left := v_0
39437 if left.Op != ssaop.OpLsh32x16 {
39438 continue
39439 }
39440 y := left.Args[1]
39441 x := left.Args[0]
39442 right := v_1
39443 if right.Op != ssaop.OpRsh32Ux16 {
39444 continue
39445 }
39446 _ = right.Args[1]
39447 if x != right.Args[0] {
39448 continue
39449 }
39450 right_1 := right.Args[1]
39451 if right_1.Op != ssaop.OpSub16 {
39452 continue
39453 }
39454 _ = right_1.Args[1]
39455 right_1_0 := right_1.Args[0]
39456 if right_1_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(right_1_0.AuxInt) != 32 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
39457 continue
39458 }
39459 v.Reset(ssaop.OpRotateLeft32)
39460 v.AddArg2(x, y)
39461 return true
39462 }
39463 break
39464 }
39465
39466
39467
39468 for {
39469 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39470 left := v_0
39471 if left.Op != ssaop.OpLsh32x8 {
39472 continue
39473 }
39474 y := left.Args[1]
39475 x := left.Args[0]
39476 right := v_1
39477 if right.Op != ssaop.OpRsh32Ux8 {
39478 continue
39479 }
39480 _ = right.Args[1]
39481 if x != right.Args[0] {
39482 continue
39483 }
39484 right_1 := right.Args[1]
39485 if right_1.Op != ssaop.OpSub8 {
39486 continue
39487 }
39488 _ = right_1.Args[1]
39489 right_1_0 := right_1.Args[0]
39490 if right_1_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(right_1_0.AuxInt) != 32 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
39491 continue
39492 }
39493 v.Reset(ssaop.OpRotateLeft32)
39494 v.AddArg2(x, y)
39495 return true
39496 }
39497 break
39498 }
39499
39500
39501
39502 for {
39503 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39504 right := v_0
39505 if right.Op != ssaop.OpRsh32Ux64 {
39506 continue
39507 }
39508 y := right.Args[1]
39509 x := right.Args[0]
39510 left := v_1
39511 if left.Op != ssaop.OpLsh32x64 {
39512 continue
39513 }
39514 _ = left.Args[1]
39515 if x != left.Args[0] {
39516 continue
39517 }
39518 z := left.Args[1]
39519 if z.Op != ssaop.OpSub64 {
39520 continue
39521 }
39522 _ = z.Args[1]
39523 z_0 := z.Args[0]
39524 if z_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(z_0.AuxInt) != 32 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
39525 continue
39526 }
39527 v.Reset(ssaop.OpRotateLeft32)
39528 v.AddArg2(x, z)
39529 return true
39530 }
39531 break
39532 }
39533
39534
39535
39536 for {
39537 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39538 right := v_0
39539 if right.Op != ssaop.OpRsh32Ux32 {
39540 continue
39541 }
39542 y := right.Args[1]
39543 x := right.Args[0]
39544 left := v_1
39545 if left.Op != ssaop.OpLsh32x32 {
39546 continue
39547 }
39548 _ = left.Args[1]
39549 if x != left.Args[0] {
39550 continue
39551 }
39552 z := left.Args[1]
39553 if z.Op != ssaop.OpSub32 {
39554 continue
39555 }
39556 _ = z.Args[1]
39557 z_0 := z.Args[0]
39558 if z_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(z_0.AuxInt) != 32 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
39559 continue
39560 }
39561 v.Reset(ssaop.OpRotateLeft32)
39562 v.AddArg2(x, z)
39563 return true
39564 }
39565 break
39566 }
39567
39568
39569
39570 for {
39571 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39572 right := v_0
39573 if right.Op != ssaop.OpRsh32Ux16 {
39574 continue
39575 }
39576 y := right.Args[1]
39577 x := right.Args[0]
39578 left := v_1
39579 if left.Op != ssaop.OpLsh32x16 {
39580 continue
39581 }
39582 _ = left.Args[1]
39583 if x != left.Args[0] {
39584 continue
39585 }
39586 z := left.Args[1]
39587 if z.Op != ssaop.OpSub16 {
39588 continue
39589 }
39590 _ = z.Args[1]
39591 z_0 := z.Args[0]
39592 if z_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(z_0.AuxInt) != 32 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
39593 continue
39594 }
39595 v.Reset(ssaop.OpRotateLeft32)
39596 v.AddArg2(x, z)
39597 return true
39598 }
39599 break
39600 }
39601
39602
39603
39604 for {
39605 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39606 right := v_0
39607 if right.Op != ssaop.OpRsh32Ux8 {
39608 continue
39609 }
39610 y := right.Args[1]
39611 x := right.Args[0]
39612 left := v_1
39613 if left.Op != ssaop.OpLsh32x8 {
39614 continue
39615 }
39616 _ = left.Args[1]
39617 if x != left.Args[0] {
39618 continue
39619 }
39620 z := left.Args[1]
39621 if z.Op != ssaop.OpSub8 {
39622 continue
39623 }
39624 _ = z.Args[1]
39625 z_0 := z.Args[0]
39626 if z_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(z_0.AuxInt) != 32 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 32)) {
39627 continue
39628 }
39629 v.Reset(ssaop.OpRotateLeft32)
39630 v.AddArg2(x, z)
39631 return true
39632 }
39633 break
39634 }
39635
39636
39637
39638 for {
39639 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39640 if v_0.Op != ssaop.OpZeroExt8to32 {
39641 continue
39642 }
39643 v_0_0 := v_0.Args[0]
39644 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
39645 continue
39646 }
39647 cvtT := v_0_0.Type
39648 bool := v_0_0.Args[0]
39649 if v_1.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(v_1.AuxInt) != 1 || !(invertibleBool(bool.Op)) {
39650 continue
39651 }
39652 v.Reset(ssaop.OpZeroExt8to32)
39653 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, cvtT)
39654 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
39655 v1.AddArg(bool)
39656 v0.AddArg(v1)
39657 v.AddArg(v0)
39658 return true
39659 }
39660 break
39661 }
39662
39663
39664
39665 for {
39666 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39667 if v_0.Op != ssaop.OpZeroExt8to32 {
39668 continue
39669 }
39670 v_0_0 := v_0.Args[0]
39671 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
39672 continue
39673 }
39674 cvtT := v_0_0.Type
39675 v_0_0_0 := v_0_0.Args[0]
39676 if v_0_0_0.Op != ssaop.OpNot {
39677 continue
39678 }
39679 bool := v_0_0_0.Args[0]
39680 if v_1.Op != ssaop.OpConst32 {
39681 continue
39682 }
39683 constT := v_1.Type
39684 c := ssa.AuxIntToInt32(v_1.AuxInt)
39685 if !(c != 1) {
39686 continue
39687 }
39688 v.Reset(ssaop.OpXor32)
39689 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to32, typ.UInt32)
39690 v1 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, cvtT)
39691 v1.AddArg(bool)
39692 v0.AddArg(v1)
39693 v2 := b.NewValue0(v.Pos, ssaop.OpConst32, constT)
39694 v2.AuxInt = ssa.Int32ToAuxInt(c ^ 1)
39695 v.AddArg2(v0, v2)
39696 return true
39697 }
39698 break
39699 }
39700 return false
39701 }
39702 func rewriteValue_OpXor64(v *ssa.Value) bool {
39703 v_1 := v.Args[1]
39704 v_0 := v.Args[0]
39705 b := v.Block
39706 config := b.Func.Config
39707 typ := &b.Func.Config.Types
39708
39709
39710 for {
39711 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39712 if v_0.Op != ssaop.OpConst64 {
39713 continue
39714 }
39715 c := ssa.AuxIntToInt64(v_0.AuxInt)
39716 if v_1.Op != ssaop.OpConst64 {
39717 continue
39718 }
39719 d := ssa.AuxIntToInt64(v_1.AuxInt)
39720 v.Reset(ssaop.OpConst64)
39721 v.AuxInt = ssa.Int64ToAuxInt(c ^ d)
39722 return true
39723 }
39724 break
39725 }
39726
39727
39728 for {
39729 x := v_0
39730 if x != v_1 {
39731 break
39732 }
39733 v.Reset(ssaop.OpConst64)
39734 v.AuxInt = ssa.Int64ToAuxInt(0)
39735 return true
39736 }
39737
39738
39739 for {
39740 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39741 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
39742 continue
39743 }
39744 x := v_1
39745 v.CopyOf(x)
39746 return true
39747 }
39748 break
39749 }
39750
39751
39752 for {
39753 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39754 if v_0.Op != ssaop.OpCom64 {
39755 continue
39756 }
39757 x := v_0.Args[0]
39758 if x != v_1 {
39759 continue
39760 }
39761 v.Reset(ssaop.OpConst64)
39762 v.AuxInt = ssa.Int64ToAuxInt(-1)
39763 return true
39764 }
39765 break
39766 }
39767
39768
39769 for {
39770 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39771 if v_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_0.AuxInt) != -1 {
39772 continue
39773 }
39774 x := v_1
39775 v.Reset(ssaop.OpCom64)
39776 v.AddArg(x)
39777 return true
39778 }
39779 break
39780 }
39781
39782
39783 for {
39784 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39785 x := v_0
39786 if v_1.Op != ssaop.OpXor64 {
39787 continue
39788 }
39789 _ = v_1.Args[1]
39790 v_1_0 := v_1.Args[0]
39791 v_1_1 := v_1.Args[1]
39792 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
39793 if x != v_1_0 {
39794 continue
39795 }
39796 y := v_1_1
39797 v.CopyOf(y)
39798 return true
39799 }
39800 }
39801 break
39802 }
39803
39804
39805
39806 for {
39807 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39808 if v_0.Op != ssaop.OpXor64 {
39809 continue
39810 }
39811 _ = v_0.Args[1]
39812 v_0_0 := v_0.Args[0]
39813 v_0_1 := v_0.Args[1]
39814 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
39815 i := v_0_0
39816 if i.Op != ssaop.OpConst64 {
39817 continue
39818 }
39819 t := i.Type
39820 z := v_0_1
39821 x := v_1
39822 if !(z.Op != ssaop.OpConst64 && x.Op != ssaop.OpConst64) {
39823 continue
39824 }
39825 v.Reset(ssaop.OpXor64)
39826 v0 := b.NewValue0(v.Pos, ssaop.OpXor64, t)
39827 v0.AddArg2(z, x)
39828 v.AddArg2(i, v0)
39829 return true
39830 }
39831 }
39832 break
39833 }
39834
39835
39836 for {
39837 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39838 if v_0.Op != ssaop.OpConst64 {
39839 continue
39840 }
39841 t := v_0.Type
39842 c := ssa.AuxIntToInt64(v_0.AuxInt)
39843 if v_1.Op != ssaop.OpXor64 {
39844 continue
39845 }
39846 _ = v_1.Args[1]
39847 v_1_0 := v_1.Args[0]
39848 v_1_1 := v_1.Args[1]
39849 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
39850 if v_1_0.Op != ssaop.OpConst64 || v_1_0.Type != t {
39851 continue
39852 }
39853 d := ssa.AuxIntToInt64(v_1_0.AuxInt)
39854 x := v_1_1
39855 v.Reset(ssaop.OpXor64)
39856 v0 := b.NewValue0(v.Pos, ssaop.OpConst64, t)
39857 v0.AuxInt = ssa.Int64ToAuxInt(c ^ d)
39858 v.AddArg2(v0, x)
39859 return true
39860 }
39861 }
39862 break
39863 }
39864
39865
39866
39867 for {
39868 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39869 if v_0.Op != ssaop.OpLsh64x64 {
39870 continue
39871 }
39872 _ = v_0.Args[1]
39873 x := v_0.Args[0]
39874 z := v_0.Args[1]
39875 if z.Op != ssaop.OpConst64 {
39876 continue
39877 }
39878 c := ssa.AuxIntToInt64(z.AuxInt)
39879 if v_1.Op != ssaop.OpRsh64Ux64 {
39880 continue
39881 }
39882 _ = v_1.Args[1]
39883 if x != v_1.Args[0] {
39884 continue
39885 }
39886 v_1_1 := v_1.Args[1]
39887 if v_1_1.Op != ssaop.OpConst64 {
39888 continue
39889 }
39890 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
39891 if !(c < 64 && d == 64-c && canRotate(config, 64)) {
39892 continue
39893 }
39894 v.Reset(ssaop.OpRotateLeft64)
39895 v.AddArg2(x, z)
39896 return true
39897 }
39898 break
39899 }
39900
39901
39902
39903 for {
39904 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39905 left := v_0
39906 if left.Op != ssaop.OpLsh64x64 {
39907 continue
39908 }
39909 y := left.Args[1]
39910 x := left.Args[0]
39911 right := v_1
39912 if right.Op != ssaop.OpRsh64Ux64 {
39913 continue
39914 }
39915 _ = right.Args[1]
39916 if x != right.Args[0] {
39917 continue
39918 }
39919 right_1 := right.Args[1]
39920 if right_1.Op != ssaop.OpSub64 {
39921 continue
39922 }
39923 _ = right_1.Args[1]
39924 right_1_0 := right_1.Args[0]
39925 if right_1_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(right_1_0.AuxInt) != 64 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
39926 continue
39927 }
39928 v.Reset(ssaop.OpRotateLeft64)
39929 v.AddArg2(x, y)
39930 return true
39931 }
39932 break
39933 }
39934
39935
39936
39937 for {
39938 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39939 left := v_0
39940 if left.Op != ssaop.OpLsh64x32 {
39941 continue
39942 }
39943 y := left.Args[1]
39944 x := left.Args[0]
39945 right := v_1
39946 if right.Op != ssaop.OpRsh64Ux32 {
39947 continue
39948 }
39949 _ = right.Args[1]
39950 if x != right.Args[0] {
39951 continue
39952 }
39953 right_1 := right.Args[1]
39954 if right_1.Op != ssaop.OpSub32 {
39955 continue
39956 }
39957 _ = right_1.Args[1]
39958 right_1_0 := right_1.Args[0]
39959 if right_1_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(right_1_0.AuxInt) != 64 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
39960 continue
39961 }
39962 v.Reset(ssaop.OpRotateLeft64)
39963 v.AddArg2(x, y)
39964 return true
39965 }
39966 break
39967 }
39968
39969
39970
39971 for {
39972 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
39973 left := v_0
39974 if left.Op != ssaop.OpLsh64x16 {
39975 continue
39976 }
39977 y := left.Args[1]
39978 x := left.Args[0]
39979 right := v_1
39980 if right.Op != ssaop.OpRsh64Ux16 {
39981 continue
39982 }
39983 _ = right.Args[1]
39984 if x != right.Args[0] {
39985 continue
39986 }
39987 right_1 := right.Args[1]
39988 if right_1.Op != ssaop.OpSub16 {
39989 continue
39990 }
39991 _ = right_1.Args[1]
39992 right_1_0 := right_1.Args[0]
39993 if right_1_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(right_1_0.AuxInt) != 64 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
39994 continue
39995 }
39996 v.Reset(ssaop.OpRotateLeft64)
39997 v.AddArg2(x, y)
39998 return true
39999 }
40000 break
40001 }
40002
40003
40004
40005 for {
40006 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40007 left := v_0
40008 if left.Op != ssaop.OpLsh64x8 {
40009 continue
40010 }
40011 y := left.Args[1]
40012 x := left.Args[0]
40013 right := v_1
40014 if right.Op != ssaop.OpRsh64Ux8 {
40015 continue
40016 }
40017 _ = right.Args[1]
40018 if x != right.Args[0] {
40019 continue
40020 }
40021 right_1 := right.Args[1]
40022 if right_1.Op != ssaop.OpSub8 {
40023 continue
40024 }
40025 _ = right_1.Args[1]
40026 right_1_0 := right_1.Args[0]
40027 if right_1_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(right_1_0.AuxInt) != 64 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
40028 continue
40029 }
40030 v.Reset(ssaop.OpRotateLeft64)
40031 v.AddArg2(x, y)
40032 return true
40033 }
40034 break
40035 }
40036
40037
40038
40039 for {
40040 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40041 right := v_0
40042 if right.Op != ssaop.OpRsh64Ux64 {
40043 continue
40044 }
40045 y := right.Args[1]
40046 x := right.Args[0]
40047 left := v_1
40048 if left.Op != ssaop.OpLsh64x64 {
40049 continue
40050 }
40051 _ = left.Args[1]
40052 if x != left.Args[0] {
40053 continue
40054 }
40055 z := left.Args[1]
40056 if z.Op != ssaop.OpSub64 {
40057 continue
40058 }
40059 _ = z.Args[1]
40060 z_0 := z.Args[0]
40061 if z_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(z_0.AuxInt) != 64 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
40062 continue
40063 }
40064 v.Reset(ssaop.OpRotateLeft64)
40065 v.AddArg2(x, z)
40066 return true
40067 }
40068 break
40069 }
40070
40071
40072
40073 for {
40074 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40075 right := v_0
40076 if right.Op != ssaop.OpRsh64Ux32 {
40077 continue
40078 }
40079 y := right.Args[1]
40080 x := right.Args[0]
40081 left := v_1
40082 if left.Op != ssaop.OpLsh64x32 {
40083 continue
40084 }
40085 _ = left.Args[1]
40086 if x != left.Args[0] {
40087 continue
40088 }
40089 z := left.Args[1]
40090 if z.Op != ssaop.OpSub32 {
40091 continue
40092 }
40093 _ = z.Args[1]
40094 z_0 := z.Args[0]
40095 if z_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(z_0.AuxInt) != 64 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
40096 continue
40097 }
40098 v.Reset(ssaop.OpRotateLeft64)
40099 v.AddArg2(x, z)
40100 return true
40101 }
40102 break
40103 }
40104
40105
40106
40107 for {
40108 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40109 right := v_0
40110 if right.Op != ssaop.OpRsh64Ux16 {
40111 continue
40112 }
40113 y := right.Args[1]
40114 x := right.Args[0]
40115 left := v_1
40116 if left.Op != ssaop.OpLsh64x16 {
40117 continue
40118 }
40119 _ = left.Args[1]
40120 if x != left.Args[0] {
40121 continue
40122 }
40123 z := left.Args[1]
40124 if z.Op != ssaop.OpSub16 {
40125 continue
40126 }
40127 _ = z.Args[1]
40128 z_0 := z.Args[0]
40129 if z_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(z_0.AuxInt) != 64 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
40130 continue
40131 }
40132 v.Reset(ssaop.OpRotateLeft64)
40133 v.AddArg2(x, z)
40134 return true
40135 }
40136 break
40137 }
40138
40139
40140
40141 for {
40142 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40143 right := v_0
40144 if right.Op != ssaop.OpRsh64Ux8 {
40145 continue
40146 }
40147 y := right.Args[1]
40148 x := right.Args[0]
40149 left := v_1
40150 if left.Op != ssaop.OpLsh64x8 {
40151 continue
40152 }
40153 _ = left.Args[1]
40154 if x != left.Args[0] {
40155 continue
40156 }
40157 z := left.Args[1]
40158 if z.Op != ssaop.OpSub8 {
40159 continue
40160 }
40161 _ = z.Args[1]
40162 z_0 := z.Args[0]
40163 if z_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(z_0.AuxInt) != 64 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 64)) {
40164 continue
40165 }
40166 v.Reset(ssaop.OpRotateLeft64)
40167 v.AddArg2(x, z)
40168 return true
40169 }
40170 break
40171 }
40172
40173
40174
40175 for {
40176 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40177 if v_0.Op != ssaop.OpZeroExt8to64 {
40178 continue
40179 }
40180 v_0_0 := v_0.Args[0]
40181 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
40182 continue
40183 }
40184 cvtT := v_0_0.Type
40185 bool := v_0_0.Args[0]
40186 if v_1.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(v_1.AuxInt) != 1 || !(invertibleBool(bool.Op)) {
40187 continue
40188 }
40189 v.Reset(ssaop.OpZeroExt8to64)
40190 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, cvtT)
40191 v1 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
40192 v1.AddArg(bool)
40193 v0.AddArg(v1)
40194 v.AddArg(v0)
40195 return true
40196 }
40197 break
40198 }
40199
40200
40201
40202 for {
40203 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40204 if v_0.Op != ssaop.OpZeroExt8to64 {
40205 continue
40206 }
40207 v_0_0 := v_0.Args[0]
40208 if v_0_0.Op != ssaop.OpCvtBoolToUint8 {
40209 continue
40210 }
40211 cvtT := v_0_0.Type
40212 v_0_0_0 := v_0_0.Args[0]
40213 if v_0_0_0.Op != ssaop.OpNot {
40214 continue
40215 }
40216 bool := v_0_0_0.Args[0]
40217 if v_1.Op != ssaop.OpConst64 {
40218 continue
40219 }
40220 constT := v_1.Type
40221 c := ssa.AuxIntToInt64(v_1.AuxInt)
40222 if !(c != 1) {
40223 continue
40224 }
40225 v.Reset(ssaop.OpXor64)
40226 v0 := b.NewValue0(v.Pos, ssaop.OpZeroExt8to64, typ.UInt64)
40227 v1 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, cvtT)
40228 v1.AddArg(bool)
40229 v0.AddArg(v1)
40230 v2 := b.NewValue0(v.Pos, ssaop.OpConst64, constT)
40231 v2.AuxInt = ssa.Int64ToAuxInt(c ^ 1)
40232 v.AddArg2(v0, v2)
40233 return true
40234 }
40235 break
40236 }
40237 return false
40238 }
40239 func rewriteValue_OpXor8(v *ssa.Value) bool {
40240 v_1 := v.Args[1]
40241 v_0 := v.Args[0]
40242 b := v.Block
40243 config := b.Func.Config
40244
40245
40246 for {
40247 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40248 if v_0.Op != ssaop.OpConst8 {
40249 continue
40250 }
40251 c := ssa.AuxIntToInt8(v_0.AuxInt)
40252 if v_1.Op != ssaop.OpConst8 {
40253 continue
40254 }
40255 d := ssa.AuxIntToInt8(v_1.AuxInt)
40256 v.Reset(ssaop.OpConst8)
40257 v.AuxInt = ssa.Int8ToAuxInt(c ^ d)
40258 return true
40259 }
40260 break
40261 }
40262
40263
40264 for {
40265 x := v_0
40266 if x != v_1 {
40267 break
40268 }
40269 v.Reset(ssaop.OpConst8)
40270 v.AuxInt = ssa.Int8ToAuxInt(0)
40271 return true
40272 }
40273
40274
40275 for {
40276 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40277 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != 0 {
40278 continue
40279 }
40280 x := v_1
40281 v.CopyOf(x)
40282 return true
40283 }
40284 break
40285 }
40286
40287
40288 for {
40289 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40290 if v_0.Op != ssaop.OpCom8 {
40291 continue
40292 }
40293 x := v_0.Args[0]
40294 if x != v_1 {
40295 continue
40296 }
40297 v.Reset(ssaop.OpConst8)
40298 v.AuxInt = ssa.Int8ToAuxInt(-1)
40299 return true
40300 }
40301 break
40302 }
40303
40304
40305 for {
40306 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40307 if v_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_0.AuxInt) != -1 {
40308 continue
40309 }
40310 x := v_1
40311 v.Reset(ssaop.OpCom8)
40312 v.AddArg(x)
40313 return true
40314 }
40315 break
40316 }
40317
40318
40319 for {
40320 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40321 x := v_0
40322 if v_1.Op != ssaop.OpXor8 {
40323 continue
40324 }
40325 _ = v_1.Args[1]
40326 v_1_0 := v_1.Args[0]
40327 v_1_1 := v_1.Args[1]
40328 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
40329 if x != v_1_0 {
40330 continue
40331 }
40332 y := v_1_1
40333 v.CopyOf(y)
40334 return true
40335 }
40336 }
40337 break
40338 }
40339
40340
40341
40342 for {
40343 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40344 if v_0.Op != ssaop.OpXor8 {
40345 continue
40346 }
40347 _ = v_0.Args[1]
40348 v_0_0 := v_0.Args[0]
40349 v_0_1 := v_0.Args[1]
40350 for _i1 := 0; _i1 <= 1; _i1, v_0_0, v_0_1 = _i1+1, v_0_1, v_0_0 {
40351 i := v_0_0
40352 if i.Op != ssaop.OpConst8 {
40353 continue
40354 }
40355 t := i.Type
40356 z := v_0_1
40357 x := v_1
40358 if !(z.Op != ssaop.OpConst8 && x.Op != ssaop.OpConst8) {
40359 continue
40360 }
40361 v.Reset(ssaop.OpXor8)
40362 v0 := b.NewValue0(v.Pos, ssaop.OpXor8, t)
40363 v0.AddArg2(z, x)
40364 v.AddArg2(i, v0)
40365 return true
40366 }
40367 }
40368 break
40369 }
40370
40371
40372 for {
40373 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40374 if v_0.Op != ssaop.OpConst8 {
40375 continue
40376 }
40377 t := v_0.Type
40378 c := ssa.AuxIntToInt8(v_0.AuxInt)
40379 if v_1.Op != ssaop.OpXor8 {
40380 continue
40381 }
40382 _ = v_1.Args[1]
40383 v_1_0 := v_1.Args[0]
40384 v_1_1 := v_1.Args[1]
40385 for _i1 := 0; _i1 <= 1; _i1, v_1_0, v_1_1 = _i1+1, v_1_1, v_1_0 {
40386 if v_1_0.Op != ssaop.OpConst8 || v_1_0.Type != t {
40387 continue
40388 }
40389 d := ssa.AuxIntToInt8(v_1_0.AuxInt)
40390 x := v_1_1
40391 v.Reset(ssaop.OpXor8)
40392 v0 := b.NewValue0(v.Pos, ssaop.OpConst8, t)
40393 v0.AuxInt = ssa.Int8ToAuxInt(c ^ d)
40394 v.AddArg2(v0, x)
40395 return true
40396 }
40397 }
40398 break
40399 }
40400
40401
40402
40403 for {
40404 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40405 if v_0.Op != ssaop.OpLsh8x64 {
40406 continue
40407 }
40408 _ = v_0.Args[1]
40409 x := v_0.Args[0]
40410 z := v_0.Args[1]
40411 if z.Op != ssaop.OpConst64 {
40412 continue
40413 }
40414 c := ssa.AuxIntToInt64(z.AuxInt)
40415 if v_1.Op != ssaop.OpRsh8Ux64 {
40416 continue
40417 }
40418 _ = v_1.Args[1]
40419 if x != v_1.Args[0] {
40420 continue
40421 }
40422 v_1_1 := v_1.Args[1]
40423 if v_1_1.Op != ssaop.OpConst64 {
40424 continue
40425 }
40426 d := ssa.AuxIntToInt64(v_1_1.AuxInt)
40427 if !(c < 8 && d == 8-c && canRotate(config, 8)) {
40428 continue
40429 }
40430 v.Reset(ssaop.OpRotateLeft8)
40431 v.AddArg2(x, z)
40432 return true
40433 }
40434 break
40435 }
40436
40437
40438
40439 for {
40440 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40441 left := v_0
40442 if left.Op != ssaop.OpLsh8x64 {
40443 continue
40444 }
40445 y := left.Args[1]
40446 x := left.Args[0]
40447 right := v_1
40448 if right.Op != ssaop.OpRsh8Ux64 {
40449 continue
40450 }
40451 _ = right.Args[1]
40452 if x != right.Args[0] {
40453 continue
40454 }
40455 right_1 := right.Args[1]
40456 if right_1.Op != ssaop.OpSub64 {
40457 continue
40458 }
40459 _ = right_1.Args[1]
40460 right_1_0 := right_1.Args[0]
40461 if right_1_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(right_1_0.AuxInt) != 8 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
40462 continue
40463 }
40464 v.Reset(ssaop.OpRotateLeft8)
40465 v.AddArg2(x, y)
40466 return true
40467 }
40468 break
40469 }
40470
40471
40472
40473 for {
40474 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40475 left := v_0
40476 if left.Op != ssaop.OpLsh8x32 {
40477 continue
40478 }
40479 y := left.Args[1]
40480 x := left.Args[0]
40481 right := v_1
40482 if right.Op != ssaop.OpRsh8Ux32 {
40483 continue
40484 }
40485 _ = right.Args[1]
40486 if x != right.Args[0] {
40487 continue
40488 }
40489 right_1 := right.Args[1]
40490 if right_1.Op != ssaop.OpSub32 {
40491 continue
40492 }
40493 _ = right_1.Args[1]
40494 right_1_0 := right_1.Args[0]
40495 if right_1_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(right_1_0.AuxInt) != 8 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
40496 continue
40497 }
40498 v.Reset(ssaop.OpRotateLeft8)
40499 v.AddArg2(x, y)
40500 return true
40501 }
40502 break
40503 }
40504
40505
40506
40507 for {
40508 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40509 left := v_0
40510 if left.Op != ssaop.OpLsh8x16 {
40511 continue
40512 }
40513 y := left.Args[1]
40514 x := left.Args[0]
40515 right := v_1
40516 if right.Op != ssaop.OpRsh8Ux16 {
40517 continue
40518 }
40519 _ = right.Args[1]
40520 if x != right.Args[0] {
40521 continue
40522 }
40523 right_1 := right.Args[1]
40524 if right_1.Op != ssaop.OpSub16 {
40525 continue
40526 }
40527 _ = right_1.Args[1]
40528 right_1_0 := right_1.Args[0]
40529 if right_1_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(right_1_0.AuxInt) != 8 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
40530 continue
40531 }
40532 v.Reset(ssaop.OpRotateLeft8)
40533 v.AddArg2(x, y)
40534 return true
40535 }
40536 break
40537 }
40538
40539
40540
40541 for {
40542 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40543 left := v_0
40544 if left.Op != ssaop.OpLsh8x8 {
40545 continue
40546 }
40547 y := left.Args[1]
40548 x := left.Args[0]
40549 right := v_1
40550 if right.Op != ssaop.OpRsh8Ux8 {
40551 continue
40552 }
40553 _ = right.Args[1]
40554 if x != right.Args[0] {
40555 continue
40556 }
40557 right_1 := right.Args[1]
40558 if right_1.Op != ssaop.OpSub8 {
40559 continue
40560 }
40561 _ = right_1.Args[1]
40562 right_1_0 := right_1.Args[0]
40563 if right_1_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(right_1_0.AuxInt) != 8 || y != right_1.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
40564 continue
40565 }
40566 v.Reset(ssaop.OpRotateLeft8)
40567 v.AddArg2(x, y)
40568 return true
40569 }
40570 break
40571 }
40572
40573
40574
40575 for {
40576 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40577 right := v_0
40578 if right.Op != ssaop.OpRsh8Ux64 {
40579 continue
40580 }
40581 y := right.Args[1]
40582 x := right.Args[0]
40583 left := v_1
40584 if left.Op != ssaop.OpLsh8x64 {
40585 continue
40586 }
40587 _ = left.Args[1]
40588 if x != left.Args[0] {
40589 continue
40590 }
40591 z := left.Args[1]
40592 if z.Op != ssaop.OpSub64 {
40593 continue
40594 }
40595 _ = z.Args[1]
40596 z_0 := z.Args[0]
40597 if z_0.Op != ssaop.OpConst64 || ssa.AuxIntToInt64(z_0.AuxInt) != 8 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
40598 continue
40599 }
40600 v.Reset(ssaop.OpRotateLeft8)
40601 v.AddArg2(x, z)
40602 return true
40603 }
40604 break
40605 }
40606
40607
40608
40609 for {
40610 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40611 right := v_0
40612 if right.Op != ssaop.OpRsh8Ux32 {
40613 continue
40614 }
40615 y := right.Args[1]
40616 x := right.Args[0]
40617 left := v_1
40618 if left.Op != ssaop.OpLsh8x32 {
40619 continue
40620 }
40621 _ = left.Args[1]
40622 if x != left.Args[0] {
40623 continue
40624 }
40625 z := left.Args[1]
40626 if z.Op != ssaop.OpSub32 {
40627 continue
40628 }
40629 _ = z.Args[1]
40630 z_0 := z.Args[0]
40631 if z_0.Op != ssaop.OpConst32 || ssa.AuxIntToInt32(z_0.AuxInt) != 8 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
40632 continue
40633 }
40634 v.Reset(ssaop.OpRotateLeft8)
40635 v.AddArg2(x, z)
40636 return true
40637 }
40638 break
40639 }
40640
40641
40642
40643 for {
40644 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40645 right := v_0
40646 if right.Op != ssaop.OpRsh8Ux16 {
40647 continue
40648 }
40649 y := right.Args[1]
40650 x := right.Args[0]
40651 left := v_1
40652 if left.Op != ssaop.OpLsh8x16 {
40653 continue
40654 }
40655 _ = left.Args[1]
40656 if x != left.Args[0] {
40657 continue
40658 }
40659 z := left.Args[1]
40660 if z.Op != ssaop.OpSub16 {
40661 continue
40662 }
40663 _ = z.Args[1]
40664 z_0 := z.Args[0]
40665 if z_0.Op != ssaop.OpConst16 || ssa.AuxIntToInt16(z_0.AuxInt) != 8 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
40666 continue
40667 }
40668 v.Reset(ssaop.OpRotateLeft8)
40669 v.AddArg2(x, z)
40670 return true
40671 }
40672 break
40673 }
40674
40675
40676
40677 for {
40678 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40679 right := v_0
40680 if right.Op != ssaop.OpRsh8Ux8 {
40681 continue
40682 }
40683 y := right.Args[1]
40684 x := right.Args[0]
40685 left := v_1
40686 if left.Op != ssaop.OpLsh8x8 {
40687 continue
40688 }
40689 _ = left.Args[1]
40690 if x != left.Args[0] {
40691 continue
40692 }
40693 z := left.Args[1]
40694 if z.Op != ssaop.OpSub8 {
40695 continue
40696 }
40697 _ = z.Args[1]
40698 z_0 := z.Args[0]
40699 if z_0.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(z_0.AuxInt) != 8 || y != z.Args[1] || !((ssa.ShiftIsBounded(left) || ssa.ShiftIsBounded(right)) && canRotate(config, 8)) {
40700 continue
40701 }
40702 v.Reset(ssaop.OpRotateLeft8)
40703 v.AddArg2(x, z)
40704 return true
40705 }
40706 break
40707 }
40708
40709
40710
40711 for {
40712 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40713 if v_0.Op != ssaop.OpCvtBoolToUint8 {
40714 continue
40715 }
40716 bool := v_0.Args[0]
40717 if v_1.Op != ssaop.OpConst8 || ssa.AuxIntToInt8(v_1.AuxInt) != 1 || !(invertibleBool(bool.Op)) {
40718 continue
40719 }
40720 v.Reset(ssaop.OpCvtBoolToUint8)
40721 v0 := b.NewValue0(v.Pos, ssaop.OpNot, bool.Type)
40722 v0.AddArg(bool)
40723 v.AddArg(v0)
40724 return true
40725 }
40726 break
40727 }
40728
40729
40730
40731 for {
40732 for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 {
40733 if v_0.Op != ssaop.OpCvtBoolToUint8 {
40734 continue
40735 }
40736 cvtT := v_0.Type
40737 v_0_0 := v_0.Args[0]
40738 if v_0_0.Op != ssaop.OpNot {
40739 continue
40740 }
40741 bool := v_0_0.Args[0]
40742 if v_1.Op != ssaop.OpConst8 {
40743 continue
40744 }
40745 constT := v_1.Type
40746 c := ssa.AuxIntToInt8(v_1.AuxInt)
40747 if !(c != 1) {
40748 continue
40749 }
40750 v.Reset(ssaop.OpXor8)
40751 v0 := b.NewValue0(v.Pos, ssaop.OpCvtBoolToUint8, cvtT)
40752 v0.AddArg(bool)
40753 v1 := b.NewValue0(v.Pos, ssaop.OpConst8, constT)
40754 v1.AuxInt = ssa.Int8ToAuxInt(c ^ 1)
40755 v.AddArg2(v0, v1)
40756 return true
40757 }
40758 break
40759 }
40760 return false
40761 }
40762 func rewriteValue_OpZero(v *ssa.Value) bool {
40763 v_1 := v.Args[1]
40764 v_0 := v.Args[0]
40765 b := v.Block
40766
40767
40768
40769 for {
40770 if v_0.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(v_0.AuxInt) != 0 {
40771 break
40772 }
40773 call := v_0.Args[0]
40774 if call.Op != ssaop.OpStaticLECall {
40775 break
40776 }
40777 mem := v_1
40778 if mem.Op != ssaop.OpSelectN || ssa.AuxIntToInt64(mem.AuxInt) != 1 || call != mem.Args[0] || !(isMalloc(call.Aux)) {
40779 break
40780 }
40781 v.CopyOf(mem)
40782 return true
40783 }
40784
40785
40786
40787 for {
40788 n := ssa.AuxIntToInt64(v.AuxInt)
40789 t1 := ssa.AuxToType(v.Aux)
40790 p1 := v_0
40791 store := v_1
40792 if store.Op != ssaop.OpStore {
40793 break
40794 }
40795 t2 := ssa.AuxToType(store.Aux)
40796 mem := store.Args[2]
40797 store_0 := store.Args[0]
40798 if store_0.Op != ssaop.OpOffPtr {
40799 break
40800 }
40801 o2 := ssa.AuxIntToInt64(store_0.AuxInt)
40802 p2 := store_0.Args[0]
40803 if !(ssa.IsSamePtr(p1, p2) && store.Uses == 1 && n >= o2+t2.Size() && ssa.Clobber(store)) {
40804 break
40805 }
40806 v.Reset(ssaop.OpZero)
40807 v.AuxInt = ssa.Int64ToAuxInt(n)
40808 v.Aux = ssa.TypeToAux(t1)
40809 v.AddArg2(p1, mem)
40810 return true
40811 }
40812
40813
40814
40815 for {
40816 n := ssa.AuxIntToInt64(v.AuxInt)
40817 t := ssa.AuxToType(v.Aux)
40818 dst1 := v_0
40819 move := v_1
40820 if move.Op != ssaop.OpMove || ssa.AuxIntToInt64(move.AuxInt) != n || ssa.AuxToType(move.Aux) != t {
40821 break
40822 }
40823 mem := move.Args[2]
40824 dst2 := move.Args[0]
40825 if !(move.Uses == 1 && ssa.IsSamePtr(dst1, dst2) && ssa.Clobber(move)) {
40826 break
40827 }
40828 v.Reset(ssaop.OpZero)
40829 v.AuxInt = ssa.Int64ToAuxInt(n)
40830 v.Aux = ssa.TypeToAux(t)
40831 v.AddArg2(dst1, mem)
40832 return true
40833 }
40834
40835
40836
40837 for {
40838 n := ssa.AuxIntToInt64(v.AuxInt)
40839 t := ssa.AuxToType(v.Aux)
40840 dst1 := v_0
40841 vardef := v_1
40842 if vardef.Op != ssaop.OpVarDef {
40843 break
40844 }
40845 x := ssa.AuxToSym(vardef.Aux)
40846 move := vardef.Args[0]
40847 if move.Op != ssaop.OpMove || ssa.AuxIntToInt64(move.AuxInt) != n || ssa.AuxToType(move.Aux) != t {
40848 break
40849 }
40850 mem := move.Args[2]
40851 dst2 := move.Args[0]
40852 if !(move.Uses == 1 && vardef.Uses == 1 && ssa.IsSamePtr(dst1, dst2) && ssa.Clobber(move, vardef)) {
40853 break
40854 }
40855 v.Reset(ssaop.OpZero)
40856 v.AuxInt = ssa.Int64ToAuxInt(n)
40857 v.Aux = ssa.TypeToAux(t)
40858 v0 := b.NewValue0(v.Pos, ssaop.OpVarDef, types.TypeMem)
40859 v0.Aux = ssa.SymToAux(x)
40860 v0.AddArg(mem)
40861 v.AddArg2(dst1, v0)
40862 return true
40863 }
40864
40865
40866
40867 for {
40868 s := ssa.AuxIntToInt64(v.AuxInt)
40869 t := ssa.AuxToType(v.Aux)
40870 dst1 := v_0
40871 zero := v_1
40872 if zero.Op != ssaop.OpZero || ssa.AuxIntToInt64(zero.AuxInt) != s || ssa.AuxToType(zero.Aux) != t {
40873 break
40874 }
40875 dst2 := zero.Args[0]
40876 if !(ssa.IsSamePtr(dst1, dst2)) {
40877 break
40878 }
40879 v.CopyOf(zero)
40880 return true
40881 }
40882
40883
40884
40885 for {
40886 s := ssa.AuxIntToInt64(v.AuxInt)
40887 t := ssa.AuxToType(v.Aux)
40888 dst1 := v_0
40889 vardef := v_1
40890 if vardef.Op != ssaop.OpVarDef {
40891 break
40892 }
40893 vardef_0 := vardef.Args[0]
40894 if vardef_0.Op != ssaop.OpZero || ssa.AuxIntToInt64(vardef_0.AuxInt) != s || ssa.AuxToType(vardef_0.Aux) != t {
40895 break
40896 }
40897 dst2 := vardef_0.Args[0]
40898 if !(ssa.IsSamePtr(dst1, dst2)) {
40899 break
40900 }
40901 v.CopyOf(vardef)
40902 return true
40903 }
40904 return false
40905 }
40906 func rewriteValue_OpZeroExt16to32(v *ssa.Value) bool {
40907 v_0 := v.Args[0]
40908
40909
40910 for {
40911 if v_0.Op != ssaop.OpConst16 {
40912 break
40913 }
40914 c := ssa.AuxIntToInt16(v_0.AuxInt)
40915 v.Reset(ssaop.OpConst32)
40916 v.AuxInt = ssa.Int32ToAuxInt(int32(uint16(c)))
40917 return true
40918 }
40919
40920
40921
40922 for {
40923 if v_0.Op != ssaop.OpTrunc32to16 {
40924 break
40925 }
40926 x := v_0.Args[0]
40927 if x.Op != ssaop.OpRsh32Ux64 {
40928 break
40929 }
40930 _ = x.Args[1]
40931 x_1 := x.Args[1]
40932 if x_1.Op != ssaop.OpConst64 {
40933 break
40934 }
40935 s := ssa.AuxIntToInt64(x_1.AuxInt)
40936 if !(s >= 16) {
40937 break
40938 }
40939 v.CopyOf(x)
40940 return true
40941 }
40942 return false
40943 }
40944 func rewriteValue_OpZeroExt16to64(v *ssa.Value) bool {
40945 v_0 := v.Args[0]
40946
40947
40948 for {
40949 if v_0.Op != ssaop.OpConst16 {
40950 break
40951 }
40952 c := ssa.AuxIntToInt16(v_0.AuxInt)
40953 v.Reset(ssaop.OpConst64)
40954 v.AuxInt = ssa.Int64ToAuxInt(int64(uint16(c)))
40955 return true
40956 }
40957
40958
40959
40960 for {
40961 if v_0.Op != ssaop.OpTrunc64to16 {
40962 break
40963 }
40964 x := v_0.Args[0]
40965 if x.Op != ssaop.OpRsh64Ux64 {
40966 break
40967 }
40968 _ = x.Args[1]
40969 x_1 := x.Args[1]
40970 if x_1.Op != ssaop.OpConst64 {
40971 break
40972 }
40973 s := ssa.AuxIntToInt64(x_1.AuxInt)
40974 if !(s >= 48) {
40975 break
40976 }
40977 v.CopyOf(x)
40978 return true
40979 }
40980 return false
40981 }
40982 func rewriteValue_OpZeroExt32to64(v *ssa.Value) bool {
40983 v_0 := v.Args[0]
40984
40985
40986 for {
40987 if v_0.Op != ssaop.OpConst32 {
40988 break
40989 }
40990 c := ssa.AuxIntToInt32(v_0.AuxInt)
40991 v.Reset(ssaop.OpConst64)
40992 v.AuxInt = ssa.Int64ToAuxInt(int64(uint32(c)))
40993 return true
40994 }
40995
40996
40997
40998 for {
40999 if v_0.Op != ssaop.OpTrunc64to32 {
41000 break
41001 }
41002 x := v_0.Args[0]
41003 if x.Op != ssaop.OpRsh64Ux64 {
41004 break
41005 }
41006 _ = x.Args[1]
41007 x_1 := x.Args[1]
41008 if x_1.Op != ssaop.OpConst64 {
41009 break
41010 }
41011 s := ssa.AuxIntToInt64(x_1.AuxInt)
41012 if !(s >= 32) {
41013 break
41014 }
41015 v.CopyOf(x)
41016 return true
41017 }
41018 return false
41019 }
41020 func rewriteValue_OpZeroExt8to16(v *ssa.Value) bool {
41021 v_0 := v.Args[0]
41022
41023
41024 for {
41025 if v_0.Op != ssaop.OpConst8 {
41026 break
41027 }
41028 c := ssa.AuxIntToInt8(v_0.AuxInt)
41029 v.Reset(ssaop.OpConst16)
41030 v.AuxInt = ssa.Int16ToAuxInt(int16(uint8(c)))
41031 return true
41032 }
41033
41034
41035
41036 for {
41037 if v_0.Op != ssaop.OpTrunc16to8 {
41038 break
41039 }
41040 x := v_0.Args[0]
41041 if x.Op != ssaop.OpRsh16Ux64 {
41042 break
41043 }
41044 _ = x.Args[1]
41045 x_1 := x.Args[1]
41046 if x_1.Op != ssaop.OpConst64 {
41047 break
41048 }
41049 s := ssa.AuxIntToInt64(x_1.AuxInt)
41050 if !(s >= 8) {
41051 break
41052 }
41053 v.CopyOf(x)
41054 return true
41055 }
41056 return false
41057 }
41058 func rewriteValue_OpZeroExt8to32(v *ssa.Value) bool {
41059 v_0 := v.Args[0]
41060
41061
41062 for {
41063 if v_0.Op != ssaop.OpConst8 {
41064 break
41065 }
41066 c := ssa.AuxIntToInt8(v_0.AuxInt)
41067 v.Reset(ssaop.OpConst32)
41068 v.AuxInt = ssa.Int32ToAuxInt(int32(uint8(c)))
41069 return true
41070 }
41071
41072
41073
41074 for {
41075 if v_0.Op != ssaop.OpTrunc32to8 {
41076 break
41077 }
41078 x := v_0.Args[0]
41079 if x.Op != ssaop.OpRsh32Ux64 {
41080 break
41081 }
41082 _ = x.Args[1]
41083 x_1 := x.Args[1]
41084 if x_1.Op != ssaop.OpConst64 {
41085 break
41086 }
41087 s := ssa.AuxIntToInt64(x_1.AuxInt)
41088 if !(s >= 24) {
41089 break
41090 }
41091 v.CopyOf(x)
41092 return true
41093 }
41094 return false
41095 }
41096 func rewriteValue_OpZeroExt8to64(v *ssa.Value) bool {
41097 v_0 := v.Args[0]
41098
41099
41100 for {
41101 if v_0.Op != ssaop.OpConst8 {
41102 break
41103 }
41104 c := ssa.AuxIntToInt8(v_0.AuxInt)
41105 v.Reset(ssaop.OpConst64)
41106 v.AuxInt = ssa.Int64ToAuxInt(int64(uint8(c)))
41107 return true
41108 }
41109
41110
41111
41112 for {
41113 if v_0.Op != ssaop.OpTrunc64to8 {
41114 break
41115 }
41116 x := v_0.Args[0]
41117 if x.Op != ssaop.OpRsh64Ux64 {
41118 break
41119 }
41120 _ = x.Args[1]
41121 x_1 := x.Args[1]
41122 if x_1.Op != ssaop.OpConst64 {
41123 break
41124 }
41125 s := ssa.AuxIntToInt64(x_1.AuxInt)
41126 if !(s >= 56) {
41127 break
41128 }
41129 v.CopyOf(x)
41130 return true
41131 }
41132 return false
41133 }
41134 func RewriteBlock(b *ssa.Block) bool {
41135 switch b.Kind {
41136 case block.BlockIf:
41137
41138
41139 for b.Controls[0].Op == ssaop.OpNot {
41140 v_0 := b.Controls[0]
41141 cond := v_0.Args[0]
41142 b.ResetWithControl(block.BlockIf, cond)
41143 b.SwapSuccessors()
41144 return true
41145 }
41146
41147
41148
41149 for b.Controls[0].Op == ssaop.OpConstBool {
41150 v_0 := b.Controls[0]
41151 c := ssa.AuxIntToBool(v_0.AuxInt)
41152 if !(c) {
41153 break
41154 }
41155 b.Reset(block.BlockFirst)
41156 return true
41157 }
41158
41159
41160
41161 for b.Controls[0].Op == ssaop.OpConstBool {
41162 v_0 := b.Controls[0]
41163 c := ssa.AuxIntToBool(v_0.AuxInt)
41164 if !(!c) {
41165 break
41166 }
41167 b.Reset(block.BlockFirst)
41168 b.SwapSuccessors()
41169 return true
41170 }
41171 }
41172 return false
41173 }
41174
View as plain text